Sha256: 84befd38bd11b948e2d2bec7bcf537a179c717c99bc3e80df2738dedcf58f8d9

Contents?: true

Size: 1.18 KB

Versions: 25

Compression:

Stored size: 1.18 KB

Contents

module Disposable
  # Expose allows renaming properties in order to expose a different API.
  # It can be configured from any Representable schema.
  #
  #   class AlbumTwin < Disposable::Twin
  #     property :name, from: :title
  #   end
  #
  #   class AlbumExpose < Disposable::Expose
  #     from AlbumTwin
  #   end
  #
  #   AlbumExpose.new(OpenStruct.new(title: "AFI")).name #=> "AFI"
  class Expose
    class << self
      def from(schema)
        schema.each do |definition|
          process_definition!(definition)
        end
        self
      end

    private
      def process_definition!(definition)
        public_name  = definition[:name]
        private_name = definition[:private_name] || public_name

        accessors!(public_name, private_name, definition)
      end

      def accessors!(public_name, private_name, definition)
        define_method("#{public_name}")  { @model.send("#{private_name}") }
        define_method("#{public_name}=") { |*args| @model.send("#{private_name}=", *args) }
      end
    end


    def initialize(model)
      @model = model
    end

    module Save
      def save
        @model.save # FIXME: block?
      end
    end
    include Save
  end
end

Version data entries

25 entries across 25 versions & 1 rubygems

Version Path
disposable-0.6.3 lib/disposable/expose.rb
disposable-0.6.2 lib/disposable/expose.rb
disposable-0.6.1 lib/disposable/expose.rb
disposable-0.6.0 lib/disposable/expose.rb
disposable-0.5.0 lib/disposable/expose.rb
disposable-0.4.7 lib/disposable/expose.rb
disposable-0.4.6 lib/disposable/expose.rb
disposable-0.4.5 lib/disposable/expose.rb
disposable-0.4.4 lib/disposable/expose.rb
disposable-0.4.3 lib/disposable/expose.rb
disposable-0.4.2 lib/disposable/expose.rb
disposable-0.4.1 lib/disposable/expose.rb
disposable-0.4.0 lib/disposable/expose.rb
disposable-0.3.2 lib/disposable/expose.rb
disposable-0.3.1 lib/disposable/expose.rb
disposable-0.3.0 lib/disposable/expose.rb
disposable-0.2.6 lib/disposable/expose.rb
disposable-0.2.5 lib/disposable/expose.rb
disposable-0.2.4 lib/disposable/expose.rb
disposable-0.2.3 lib/disposable/expose.rb