Comments (7)
@AlessandroMinali what do you think?
from surrealist.
Yea the idea behind this separation of concerns makes sense to me. I'd like less repetition and further complete separation. I'm not sure how much complexity it would add to have it just so the model would just be:
class Human
include HumanSerializer
attr_reader :name
def initialize(name)
@name = name
end
end
and still have the same api you mentioned.
EDIT: I can see the benefit of having an explicit call of what is being used to serialize though, less magic I suppose.
from surrealist.
I think that
class Human
include HumanSerializer
is kind of counterintuitive and contradicts the separation of concerns principle. As for me, when I see include
I think of multiple inheritance in sense of adding methods to the object. Here, on the other hand we just need to delegate serialization logic to a separate object.
As for APIs, I suggest having both ways (explicit & implicit) available. I personally prefer explicit way over implicit, but I think for many people ease of use is preferable over explicitness ¯_(ツ)_/¯
from surrealist.
Makes sense to me what you're saying. We should definitely have an explicit way to allow one off calls to other serializers and to potentially override what is defined in the object for that single explicit call.
from surrealist.
Hi guys!
I think we can use multiple serializers for one model. I suggest that:
class HumanSerializer < Surrealist::Serializer
json_schema do
{ name: String, name_length: Integer }
end
def name_length
name.length
end
end
class SmallHumanSerializer < Surrealist::Serializer
json_schema do
{ name: String }
end
end
class Human
include Surrealist
attr_reader :name
surrealize_with HumanSerializer # default
surrealize_with SmallHumanSerializer, tag: :small
def initialize(name)
@name = name
end
end
# default behaviour
Human.new('John').surrealize(camelize: true)
# => '{"name": "John", "nameLength": 4}'
# using tags
Human.new('John').surrealize(camelize: true, tag: :small)
# => '{"name": "John"}'
from surrealist.
@nulldef It looks interesting, I think we should negotiate on tag
parameter and API in general. Could you please create a new issue for this feature request, as this one should be closed due to #61 ?
from surrealist.
Alright, closing this.
from surrealist.
Related Issues (20)
- Some methods are not being correctly delegated HOT 1
- Unable to override method in 1.2 HOT 3
- Question: how to create list of entities HOT 5
- Can't redefine object method with inheritance HOT 1
- How I can set a root key? HOT 2
- Inherited Surrealist::Serializer does not accept array as object HOT 5
- Nil values for Boolean type HOT 4
- Methods from included module which conflict with methods from the model don't work. HOT 1
- Pluggable type systems HOT 4
- How to qualify parameters in nested structures?
- Change API for multiple serializers HOT 6
- Build schema for collections from Surrealist::Serializer
- Default options HOT 4
- ActiveModel validations? HOT 2
- Sequel models do not work with custom serializers HOT 1
- conditional tags for json_schema HOT 3
- Inheritance doesn't work in custom serializers HOT 1
- Conflict when root and and object property share the same name HOT 1
- Serialize from hash HOT 5
- Easy access to defined schema and schema sample HOT 12
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from surrealist.