Module: Rubyfox::SFSObject::Bulk
Constant Summary collapse
- TO_SFS =
{ NilClass => proc { |o, k, _| o.putNull(k) }, String => :putUtfString, TrueClass => :putBool, FalseClass => :putBool, Integer => :putInt, Float => :putDouble, Hash => proc { |o, k, v| o.putSFSObject(k, to_sfs(v)) }, Java::SFSObject => :putSFSObject, [String] => :putUtfStringArray, [TrueClass] => :putBoolArray, [FalseClass] => :putBoolArray, [Integer] => proc do |o, k, v| collection = Java::ArrayList.new v.each { |e| collection.add(e.to_java(:int)) } o.putIntArray(k, collection) end, [Float] => :putDoubleArray, [Hash] => proc do |o, k, v| ary = Java::SFSArray.new v.each { |e| ary.addSFSObject(to_sfs(e)) } o.putSFSArray(k, ary) end, [Java::SFSObject] => proc do |o, k, v| ary = Java::SFSArray.new v.each { |e| ary.addSFSObject(e) } o.putSFSArray(k, ary) end, }
- TO_HASH =
{ "NULL" => proc { |k, v| nil }, "UTF_STRING" => :getUtfString, "BOOL" => :getBool, "INT" => :getInt, "DOUBLE" => :getDouble, "FLOAT" => :getFloat, "UTF_STRING_ARRAY" => :getUtfStringArray, "BOOL_ARRAY" => :getBoolArray, #"INT_ARRAY" => :getIntArray, "INT_ARRAY" => proc { |k, v| v.object.to_a }, "LONG_ARRAY" => :getLongArray, "DOUBLE_ARRAY" => :getDoubleArray, "FLOAT_ARRAY" => :getFloatArray, "SFS_OBJECT" => proc { |k, v| to_hash(v.object) }, "SFS_ARRAY" => proc { |k, v| to_array(v.object) }, }
Instance Method Summary collapse
- #_unwrap(object, key, value) ⇒ Object
- #_unwrapper(value) ⇒ Object
- #_wrapper(value) ⇒ Object
- #to_array(object) ⇒ Object
-
#to_hash(object) ⇒ Object
object -> hash.
-
#to_sfs(hash = {}) ⇒ Object
hash -> object.
- #unwrap_value!(object, key) ⇒ Object
- #wrap_value!(object, key, value) ⇒ Object
Instance Method Details
#_unwrap(object, key, value) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 114 def _unwrap(object, key, value) raise ArgumentError, "nil value for #{key.inspect}" unless value if wrapper_method = _unwrapper(value) case wrapper_method when Symbol object.send(wrapper_method, key) else wrapper_method.call(key, value) end else raise ArgumentError, "unwrapper for #{key}=#{value.object.inspect} (#{value.type_id}) not found" end end |
#_unwrapper(value) ⇒ Object
129 130 131 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 129 def _unwrapper(value) TO_HASH[value.type_id.to_s] end |
#_wrapper(value) ⇒ Object
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 78 def _wrapper(value) case value when Array case value = value.first when Integer # This is necessary to support ruby < 2.4. TO_SFS[[Integer]] else TO_SFS[[value.class]] end when Integer # See above. TO_SFS[Integer] else TO_SFS[value.class] end end |
#to_array(object) ⇒ Object
103 104 105 106 107 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 103 def to_array(object) object.iterator.each_with_index.map do |value, index| _unwrap(object, index, value) end end |
#to_hash(object) ⇒ Object
object -> hash
95 96 97 98 99 100 101 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 95 def to_hash(object) hash = {} object.keys.each do |key| hash[key.to_sym] = unwrap_value!(object, key) end hash end |
#to_sfs(hash = {}) ⇒ Object
hash -> object
57 58 59 60 61 62 63 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 57 def to_sfs(hash = {}) object = Java::SFSObject.new hash.each do |key, value| wrap_value!(object, key, value) end object end |
#unwrap_value!(object, key) ⇒ Object
109 110 111 112 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 109 def unwrap_value!(object, key) value = object.get(key) _unwrap(object, key, value) end |
#wrap_value!(object, key, value) ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 65 def wrap_value!(object, key, value) if wrapper_method = _wrapper(value) case wrapper_method when Symbol object.send(wrapper_method, key, value) else wrapper_method.call(object, key, value) end else raise ArgumentError, "wrapper for #{key}=#{value} (#{value.class}) not found" end end |