Module: Rubyfox::SFSObject::Bulk
Constant Summary collapse
- TO_SFS =
{ NilClass => proc { |o, k, _| o.putNull(k) }, String => :putUtfString, TrueClass => :putBool, FalseClass => :putBool, Fixnum => :putInt, Float => :putDouble, Hash => proc { |o, k, v| o.putSFSObject(k, to_sfs(v)) }, Java::SFSObject => :putSFSObject, [String] => :putUtfStringArray, [TrueClass] => :putBoolArray, [FalseClass] => :putBoolArray, [Fixnum] => 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, "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, "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
105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 105 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
120 121 122 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 120 def _unwrapper(value) TO_HASH[value.type_id.to_s] end |
#_wrapper(value) ⇒ Object
76 77 78 79 80 81 82 83 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 76 def _wrapper(value) case value when Array TO_SFS[[value.first.class]] else TO_SFS[value.class] end end |
#to_array(object) ⇒ Object
94 95 96 97 98 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 94 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
86 87 88 89 90 91 92 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 86 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
55 56 57 58 59 60 61 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 55 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
100 101 102 103 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 100 def unwrap_value!(object, key) value = object.get(key) _unwrap(object, key, value) end |
#wrap_value!(object, key, value) ⇒ Object
63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/rubyfox/sfsobject/bulk.rb', line 63 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 |