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