Sha256: 6e7c20277b8baa83c568c2d6e0da680fe0b140a6516be3f9cc90760cef68ed48

Contents?: true

Size: 936 Bytes

Versions: 3

Compression:

Stored size: 936 Bytes

Contents

class Restly::Base::Resource::Specification::Fields < Restly::Proxies::Base

  attr_reader :spec

  def initialize(spec)
    @spec = spec
    @removed = Set.new
    @added = Set.new
    super Restly::Base::Fields::FieldSet.new(spec.model)
  end

  def - field
    @removed << field
    replace(__getobj__.send __method__, field)
  end

  def + field
    @added << field
    replace(__getobj__.send __method__, field)
  end

  private

  def method_missing(m, *args, &block)
    reload_specification! if !super.present? || m == :inspect
    if (value = super).is_a? self.class
      replace(super)
    else
      value
    end
  end

  def replace(object)
    duplicate = self.dup
    duplicate.__setobj__ object
    duplicate
  end

  def reload_specification!
    from_spec = spec[:attributes] || []
    fields = (from_spec - @removed.to_a) + @added.to_a
    __setobj__ Restly::Base::Fields::FieldSet.new(spec.model, fields)
  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
restly-0.0.1.beta.3 lib/restly/base/resource/specification/fields.rb
restly-0.0.1.beta.2 lib/restly/base/resource/specification/fields.rb
restly-0.0.1.beta.1 lib/restly/base/resource/specification/fields.rb