Code Monkey home page Code Monkey logo

Comments (7)

nesaulov avatar nesaulov commented on June 29, 2024

@AlessandroMinali what do you think?

from surrealist.

AlessandroMinali avatar AlessandroMinali commented on June 29, 2024

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.

nesaulov avatar nesaulov commented on June 29, 2024

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.

AlessandroMinali avatar AlessandroMinali commented on June 29, 2024

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.

nulldef avatar nulldef commented on June 29, 2024

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.

nesaulov avatar nesaulov commented on June 29, 2024

@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.

nesaulov avatar nesaulov commented on June 29, 2024

Alright, closing this.

from surrealist.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.