Class: PBShipping::ApiObject

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/pbshipping/api_object.rb

Direct Known Subclasses

ApiResource

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(values = nil) ⇒ ApiObject

Returns a new instance of ApiObject.



23
24
25
26
27
28
# File 'lib/pbshipping/api_object.rb', line 23

def initialize(values=nil)
  @values = {}
  if values != nil
    self.update(values)
  end
end

Class Method Details

.convert_to_api_object(values) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'lib/pbshipping/api_object.rb', line 30

def self.convert_to_api_object(values)
  case values
  when Array
    values.map { |v| self.convert_to_api_object(v) }
  when Hash
    self.new(values)
  else
    values
  end
end

Instance Method Details

#[](k) ⇒ Object



55
56
57
# File 'lib/pbshipping/api_object.rb', line 55

def [](k)
  @values[k.to_sym]
end

#[]=(k, v) ⇒ Object



59
60
61
# File 'lib/pbshipping/api_object.rb', line 59

def []=(k, v)
  update({k => v})
end

#add_accessors(keys) ⇒ Object



114
115
116
117
118
119
120
121
122
# File 'lib/pbshipping/api_object.rb', line 114

def add_accessors(keys)
  keys.each do |k|
    orig_k = k
    while respond_to?(k) do
      k = "_#{k}".to_sym
    end
    create_accessor(k, orig_k)
  end
end

#as_json(*a) ⇒ Object



79
80
81
# File 'lib/pbshipping/api_object.rb', line 79

def as_json(*a)
  @values.as_json(*a)
end

#create_accessor(k_name, k_index) ⇒ Object



105
106
107
108
109
110
111
112
# File 'lib/pbshipping/api_object.rb', line 105

def create_accessor(k_name, k_index)
  metaclass.instance_eval do
    define_method(k_name) { @values[k_index] }
    define_method(:"#{k_name}=") do |v|
      @values[k_index] = v unless k_index == ''
    end
  end
end

#each(&blk) ⇒ Object



87
88
89
# File 'lib/pbshipping/api_object.rb', line 87

def each(&blk)
  @values.each(&blk)
end

#inspectObject



101
102
103
# File 'lib/pbshipping/api_object.rb', line 101

def inspect()
  "#<#{self.class}:0x#{self.object_id.to_s(16)}}> json: " + self.to_s
end

#key?(k) ⇒ Boolean

Returns:

  • (Boolean)


91
92
93
# File 'lib/pbshipping/api_object.rb', line 91

def key?(k)
  @values.key?(k)
end

#keysObject



63
64
65
# File 'lib/pbshipping/api_object.rb', line 63

def keys
  @values.keys
end

#metaclassObject



124
125
126
127
128
# File 'lib/pbshipping/api_object.rb', line 124

def metaclass
  class << self
    self
  end
end

#respond_to?(symbol) ⇒ Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/pbshipping/api_object.rb', line 96

def respond_to?(symbol)
  @values.has_key?(symbol) || super
end

#to_hashObject



83
84
85
# File 'lib/pbshipping/api_object.rb', line 83

def to_hash
  @values
end

#to_json(*a) ⇒ Object



75
76
77
# File 'lib/pbshipping/api_object.rb', line 75

def to_json(*a)
  JSON.dump(@values)
end

#to_s(*args) ⇒ Object



71
72
73
# File 'lib/pbshipping/api_object.rb', line 71

def to_s(*args)
  JSON.pretty_generate @values
end

#update(values) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/pbshipping/api_object.rb', line 41

def update(values)
  values.each do |k, v|
    if v.is_a?(Array) || v.is_a?(Hash)
      new_v = self.class.convert_to_api_object(v)
    else
      new_v = v
    end
    @values[k.to_sym] = new_v
  end
  instance_eval do
    add_accessors(@values.keys)
  end
end

#valuesObject



67
68
69
# File 'lib/pbshipping/api_object.rb', line 67

def values
  @values.values
end