class Disposable::Composition
Composition
allows renaming properties and combining one or more objects in order to expose a different API. It can be configured from any Representable schema.
class AlbumTwin < Disposable::Twin property :name, on: :artist end class AlbumExpose < Disposable::Composition from AlbumTwin end AlbumExpose.new(artist: OpenStruct.new(name: "AFI")).name #=> "AFI"
Public Class Methods
new(models)
click to toggle source
# File lib/disposable/composition.rb, line 16 def initialize(models) models.each do |name, model| instance_variable_set(:"@#{name}", model) end @_models = models end
Private Class Methods
accessors!(public_name, private_name, definition)
click to toggle source
# File lib/disposable/composition.rb, line 35 def self.accessors!(public_name, private_name, definition) model = definition[:on] define_method("#{public_name}") { self[model].send("#{private_name}") } define_method("#{public_name}=") { |*args| self[model].send("#{private_name}=", *args) } end
Public Instance Methods
[](name)
click to toggle source
Allows accessing the contained models.
# File lib/disposable/composition.rb, line 25 def [](name) instance_variable_get("@#{name}") end
each(&block)
click to toggle source
# File lib/disposable/composition.rb, line 29 def each(&block) # TODO: test me. @_models.values.each(&block) end