Class: PayPal::SDK::Core::API::DataTypes::Base
- Inherits:
-
Object
- Object
- PayPal::SDK::Core::API::DataTypes::Base
- Includes:
- SimpleTypes, Logging
- Defined in:
- lib/paypal-sdk/core/api/data_types/base.rb
Overview
Direct Known Subclasses
Constant Summary collapse
- HashOptions =
{ :attribute => true, :namespace => true, :symbol => false }
- ContentKey =
:value
Class Method Summary collapse
-
.add_attribute(name, options = {}) ⇒ Object
Add attribute === Arguments *
name
– attribute name *options
– options. -
.add_member(member_name, klass, options = {}) ⇒ Object
Add Field to class variable hash and generate methods === Example add_member(:errorMessage, String) # Generate Code # attr_reader :errorMessage # alias_method :error_message, :errorMessage # alias_method :error_message=, :errorMessage=.
-
.array_of(key, klass, options = {}) ⇒ Object
define method for given member and the class name === Example array_of(:errorMessage, ErrorMessage) # It Generate below code # def errorMessage=(array) # @errorMessage = array.map{|options| ErrorMessage.new(options) } # end # add_member :errorMessage, ErrorMessage.
-
.define_alias_methods(member_name, options) ⇒ Object
Define alias methods for getter and setter.
-
.members ⇒ Object
Fields list for the DataTye.
-
.object_of(key, klass, options = {}) ⇒ Object
define method for given member and the class name === Example object_of(:errorMessage, ErrorMessage) # Generate Code # def errorMessage=(options) # @errorMessage = ErrorMessage.new(options) # end # add_member :errorMessage, ErrorMessage.
-
.snakecase(string) ⇒ Object
Generate snakecase string.
Instance Method Summary collapse
-
#convert_array(array, klass) ⇒ Object
Create array of objects.
-
#convert_object(object, klass) ⇒ Object
Create object based on given data.
-
#hash_key(key, options = {}) ⇒ Object
Generate Hash key for given member name based on configuration === Example hash_key(:amount) # @return :“ebl:amount” hash_key(:type) # @return :“@type”.
-
#initialize(options = {}, &block) ⇒ Base
constructor
Initialize options.
-
#member_names ⇒ Object
Get configured member names.
-
#members ⇒ Object
Alias instance method for the class method.
-
#merge!(options, &block) ⇒ Object
Merge values.
-
#set(key, value) ⇒ Object
Set value for given member === Arguments *
key
– member name *value
– value for member. -
#skip_value?(value) ⇒ Boolean
Skip nil, empty array and empty hash.
-
#to_hash(options = {}) ⇒ Object
Create Hash based configured members.
-
#value_to_hash(value, options = {}) ⇒ Object
Covert the object to hash based on class.
Methods included from Logging
#log_event, #logger, logger, logger=
Constructor Details
#initialize(options = {}, &block) ⇒ Base
Initialize options.
113 114 115 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 113 def initialize( = {}, &block) merge!(, &block) end |
Class Method Details
.add_attribute(name, options = {}) ⇒ Object
Add attribute
Arguments
-
name
– attribute name -
options
– options
30 31 32 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 30 def add_attribute(name, = {}) add_member(name, SimpleTypes::String, .merge( :attribute => true )) end |
.add_member(member_name, klass, options = {}) ⇒ Object
Add Field to class variable hash and generate methods
Example
add_member(:errorMessage, String) # Generate Code
# attr_reader :errorMessage
# alias_method :error_message, :errorMessage
# alias_method :error_message=, :errorMessage=
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 50 def add_member(member_name, klass, = {}) member_name = member_name.to_sym return if members[member_name] members[member_name] = .merge( :type => klass ) member_variable_name = "@#{member_name}" define_method "#{member_name}=" do |value| object = [:array] ? convert_array(value, klass) : convert_object(value, klass) instance_variable_set(member_variable_name, object) end default_value = ( [:array] ? [] : ( klass < Base ? Util::OrderedHash.new : nil ) ) define_method member_name do |&block| value = instance_variable_get(member_variable_name) || ( default_value && send("#{member_name}=", default_value) ) value.instance_eval(&block) if block value end define_alias_methods(member_name, ) end |
.array_of(key, klass, options = {}) ⇒ Object
define method for given member and the class name
Example
array_of(:errorMessage, ErrorMessage) # It Generate below code
# def errorMessage=(array)
# @errorMessage = array.map{|options| ErrorMessage.new(options) }
# end
# add_member :errorMessage, ErrorMessage
98 99 100 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 98 def array_of(key, klass, = {}) add_member(key, klass, .merge(:array => true)) end |
.define_alias_methods(member_name, options) ⇒ Object
Define alias methods for getter and setter
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 69 def define_alias_methods(member_name, ) snakecase_name = snakecase(member_name) alias_method snakecase_name, member_name alias_method "#{snakecase_name}=", "#{member_name}=" alias_method "#{[:namespace]}:#{member_name}=", "#{member_name}=" if [:namespace] if [:attribute] alias_method "@#{member_name}=", "#{member_name}=" alias_method "@#{[:namespace]}:#{member_name}=", "#{member_name}=" if [:namespace] end end |
.members ⇒ Object
Fields list for the DataTye
35 36 37 38 39 40 41 42 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 35 def members @members ||= begin superclass.load_members if defined? superclass.load_members parent_members = superclass.instance_variable_get("@members") parent_members ? parent_members.dup : Util::OrderedHash.new end end |
.object_of(key, klass, options = {}) ⇒ Object
define method for given member and the class name
Example
object_of(:errorMessage, ErrorMessage) # Generate Code
# def errorMessage=(options)
# @errorMessage = ErrorMessage.new(options)
# end
# add_member :errorMessage, ErrorMessage
87 88 89 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 87 def object_of(key, klass, = {}) add_member(key, klass, ) end |
.snakecase(string) ⇒ Object
Generate snakecase string.
Example
snakecase(“errorMessage”) # error_message
106 107 108 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 106 def snakecase(string) string.to_s.gsub(/([a-z])([A-Z])/, '\1_\2').gsub(/([A-Z])([A-Z][a-z])/, '\1_\2').downcase end |
Instance Method Details
#convert_array(array, klass) ⇒ Object
Create array of objects.
Example
covert_array([{ :amount => “55”, :code => “USD”}], CurrencyType) covert_array({ “0” => { :amount => “55”, :code => “USD”} }, CurrencyType) covert_array({ :amount => “55”, :code => “USD”}, CurrencyType) # @return # [ <CurrencyType#object @amount=“55” @code=“USD” > ]
152 153 154 155 156 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 152 def convert_array(array, klass) default_value = ( klass < Base ? Util::OrderedHash.new : nil ) data_type_array = ArrayWithBlock.new{|object| convert_object(object || default_value, klass) } data_type_array.merge!(array) end |
#convert_object(object, klass) ⇒ Object
Create object based on given data.
Example
covert_object({ :amount => “55”, :code => “USD”}, CurrencyType ) # @return # <CurrencyType#object @amount=“55” @code=“USD” >
163 164 165 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 163 def convert_object(object, klass) object.is_a?(klass) ? object : ( ( object.nil? or object == "" ) ? nil : klass.new(object) ) end |
#hash_key(key, options = {}) ⇒ Object
Generate Hash key for given member name based on configuration
Example
hash_key(:amount) # @return :“ebl:amount” hash_key(:type) # @return :“@type”
197 198 199 200 201 202 203 204 205 206 207 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 197 def hash_key(key, = {}) unless key == ContentKey member_option = members[key] key = member_option[:name] if member_option.include? :name if !member_option[:attribute] and member_option[:namespace] and [:namespace] key = "#{member_option[:namespace]}:#{key}" end key = "@#{key}" if member_option[:attribute] and [:attribute] end [:symbol] ? key.to_sym : key.to_s end |
#member_names ⇒ Object
Get configured member names
173 174 175 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 173 def member_names members.keys end |
#members ⇒ Object
Alias instance method for the class method.
168 169 170 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 168 def members self.class.members end |
#merge!(options, &block) ⇒ Object
Merge values
118 119 120 121 122 123 124 125 126 127 128 129 130 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 118 def merge!(, &block) if .is_a? Hash .each do |key, value| set(key, value) end elsif members[ContentKey] set(ContentKey, ) else raise ArgumentError, "invalid data(#{.inspect}) for #{self.class.name} class" end self.instance_eval(&block) if block self end |
#set(key, value) ⇒ Object
Set value for given member
Arguments
-
key
– member name -
value
– value for member
136 137 138 139 140 141 142 143 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 136 def set(key, value) send("#{key}=", value) rescue NoMethodError => error # Uncomment to see missing fields # logger.debug error.message rescue TypeError, ArgumentError => error raise TypeError, "#{error.}(#{value.inspect}) for #{self.class.name}.#{key} member" end |
#skip_value?(value) ⇒ Boolean
Skip nil, empty array and empty hash.
189 190 191 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 189 def skip_value?(value) value.nil? || ( ( value.is_a?(Array) || value.is_a?(Hash) ) && value.empty? ) end |
#to_hash(options = {}) ⇒ Object
Create Hash based configured members
178 179 180 181 182 183 184 185 186 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 178 def to_hash( = {}) = HashOptions.merge() hash = Util::OrderedHash.new member_names.each do |member| value = value_to_hash(instance_variable_get("@#{member}"), ) hash[hash_key(member, )] = value unless skip_value?(value) end hash end |
#value_to_hash(value, options = {}) ⇒ Object
Covert the object to hash based on class.
210 211 212 213 214 215 216 217 218 219 220 221 |
# File 'lib/paypal-sdk/core/api/data_types/base.rb', line 210 def value_to_hash(value, = {}) case value when Array value = value.map{|object| value_to_hash(object, ) } value.delete_if{|v| skip_value?(v) } value when Base value.to_hash() else value end end |