Sha256: 0f5164514e653d1e10b3b801263f932b44b0d99ee896a0ca0d2f7e5495acb3ed

Contents?: true

Size: 1.22 KB

Versions: 8

Compression:

Stored size: 1.22 KB

Contents

module ActiveGraph
  # This mixin allows storage and update of undeclared properties in the included class
  module UndeclaredProperties
    extend ActiveSupport::Concern

    included do
      attr_accessor :undeclared_properties
    end

    def validate_attributes!(_)
    end

    def read_attribute(name)
      respond_to?(name) ? super(name) : read_undeclared_property(name.to_sym)
    end
    alias [] read_attribute

    def read_undeclared_property(name)
      _persisted_obj ? _persisted_obj.props[name] : (undeclared_properties && undeclared_properties[name])
    end

    def write_attribute(name, value)
      if respond_to? "#{name}="
        super(name, value)
      else
        add_undeclared_property(name, value)
      end
    end
    alias []= write_attribute

    def skip_update?
      super && undeclared_properties.blank?
    end

    def props_for_create
      super.merge(undeclared_properties!)
    end

    def props_for_update
      super.merge(undeclared_properties!)
    end

    def undeclared_properties!
      undeclared_properties || {}
    ensure
      self.undeclared_properties = nil
    end

    def add_undeclared_property(name, value)
      (self.undeclared_properties ||= {})[name] = value
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
activegraph-10.0.0.pre.beta.8 lib/active_graph/undeclared_properties.rb
activegraph-10.0.0.pre.beta.7 lib/active_graph/undeclared_properties.rb
activegraph-10.0.0.pre.beta.6 lib/active_graph/undeclared_properties.rb
activegraph-10.0.0.pre.beta.5 lib/active_graph/undeclared_properties.rb
activegraph-10.0.0.pre.beta.4 lib/active_graph/undeclared_properties.rb
activegraph-10.0.0.pre.beta.3 lib/active_graph/undeclared_properties.rb
activegraph-10.0.0.pre.beta.2 lib/active_graph/undeclared_properties.rb
activegraph-10.0.0.pre.beta.1 lib/active_graph/undeclared_properties.rb