Sha256: d2485cfa9f697a0a78f67a34dd28cd42a13ec1d2214b891f38cf30959a445530

Contents?: true

Size: 1.69 KB

Versions: 2

Compression:

Stored size: 1.69 KB

Contents

module Arrest

  module Dirty
  end
  Integer.send(:include, Dirty)
  String.send(:include, Dirty)
  Float.send(:include, Dirty)
  Boolean.send(:include, Dirty)


  class Attribute
    attr_accessor :name, :actions, :json_name, :dirty

    def initialize(name, class_name, actions = nil)
      @name = name.to_sym
      @actions = actions || [:create, :retrieve, :update, :delete]
      @class_name = class_name.to_sym
      @dirty = false
      @json_name = Source.json_key_converter.key_to_json(name).to_sym
    end

    def clazz
      @clazz ||= Arrest::Source.class_loader.load(@class_name)
    end

    def clazz=(c)
      @clazz = c
    end

    def dirty_sensitive?
      @dirty_sensitive ||= clazz.ancestors.include?(Dirty)
    end

    def read_only?
      @actions == [:retrieve]
    end

    def mutable?
      @actions.include?(:create) || @actions.include?(:update)
    end

    def dirty?
      if dirty_sensitive?
        @dirty
      else
        true # treat as 'always' dirty
      end
    end

    def from_hash(parent, value)
      return if value == nil

      if self.clazz.respond_to?(:convert)
        return self.clazz.convert(value)
      end

      converter = CONVERTER[self.clazz]
      if converter == nil
        puts "No converter for: #{self.clazz.name}"
        converter = IdentConv
      end
      converter.convert value
    end


    def to_hash value
      return nil unless value != nil

      if self.clazz.respond_to?(:mk_json)
        return self.clazz.mk_json(value)
      end

      converter = CONVERTER[self.clazz]
      if converter == nil
        puts "No converter for: #{@self.clazz.name}"
        converter = IdentConv
      end
      converter.mk_json value
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
arrest-0.0.91 lib/arrest/attributes/attribute.rb
arrest-0.0.90 lib/arrest/attributes/attribute.rb