Sha256: 3530381d76b99f93ba2d699c439d65fa1e85852c034a0d3628ec41944e37f236

Contents?: true

Size: 763 Bytes

Versions: 2

Compression:

Stored size: 763 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
    super
  end

  def +(field)
    @added << field
    super
  end

  private

  def method_missing(m, *args, &block)
    reload_specification! unless super.present?
    if (value = super).is_a? self.class
      __setobj__ value
      self
    else
      value
    end
  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

2 entries across 2 versions & 1 rubygems

Version Path
restly-0.0.1.alpha.19 lib/restly/base/resource/specification/fields.rb
restly-0.0.1.alpha.18 lib/restly/base/resource/specification/fields.rb