Module: SData::PayloadMap

Included in:
VirtualBase
Defined in:
lib/s_data/payload_map/payload_map.rb,
lib/s_data/payload_map/payload_map_hash.rb

Defined Under Namespace

Modules: InstanceMethods Classes: PayloadMapHash

Instance Method Summary collapse

Instance Method Details

#define_payload_map(map) ⇒ Object



5
6
7
8
9
10
11
12
# File 'lib/s_data/payload_map/payload_map.rb', line 5

def define_payload_map(map)
  include InstanceMethods
  cattr_accessor :payload_map
  self.payload_map = PayloadMapHash.new(map)
  self.payload_map.each do |name, opts|
    has_sdata_attr(name, opts)
  end
end

#has_sdata_association(*args) ⇒ Object



47
48
49
50
51
52
53
54
55
56
# File 'lib/s_data/payload_map/payload_map.rb', line 47

def has_sdata_association(*args)
  options = args.last.is_a?(Hash) ? args.pop : {:precedence => 50, :type => :association}
  options[:type] ||= :association
  raise SData::Exceptions::VirtualBase::InvalidSDataAssociation.new(
      "#{args.join(", ")}: must supply a proc or method") unless [:proc, :method].any?{|k|options.has_key?(k)}
  raise SData::Exceptions::VirtualBase::InvalidSDataAssociation.new(
      "#{args.join(", ")}: invalid association type '#{options[:type]}") unless [:association, :child].include?(options[:type])
  args.push options
  has_sdata_attr(*args)
end

#has_sdata_attr(*args) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/s_data/payload_map/payload_map.rb', line 14

def has_sdata_attr(*args)
  options = args.last.is_a?(Hash) ? args.pop : {:static_value => nil, :precedence => 50}
  args.each do | name |
    options[:method_name] ||= name
    options[:method_name_with_deleted] = options[:method_name]
    
    method_name = options[:method_name]
    payload_map[name] ||= options
    
    case field_type(options)
    when :static_value
      define_static_value_reader method_name, options[:static_value]

    when :baze_field
      define_baze_field_reference method_name, options[:baze_field]

    when :method

    when :proc
      define_proc_caller method_name, options[:proc]

      if options.has_key?(:proc_with_deleted)
        method_name_with_deleted = options[:method_name_with_deleted] = "#{method_name.to_s}_with_deleted"
        define_proc_with_deleted_caller method_name_with_deleted, options[:proc_with_deleted]
      end

    else
      raise SData::Exceptions::VirtualBase::InvalidSDataAttribute.new(
          "#{args.join(", ")}: must supply a static_value, baze_field, method or proc")
    end
  end
end