Module: SimpleRecord::Translations
- Included in:
- Base
- Defined in:
- lib/simple_record/translations.rb
Constant Summary collapse
- @@offset =
9223372036854775808- @@padding =
20- @@date_format =
"%Y-%m-%dT%H:%M:%S"
Class Method Summary collapse
- .decrypt(value, key = nil) ⇒ Object
- .encrypt(value, key = nil) ⇒ Object
-
.from_float(x) ⇒ Object
This conversion to a string is based on: tools.ietf.org/html/draft-wood-ldapext-float-00 Java code sample is here: code.google.com/p/typica/source/browse/trunk/java/com/xerox/amazonws/simpledb/DataUtils.java.
-
.pad_and_offset(x, att_meta = nil) ⇒ Object
Change name to something more appropriate like ruby_to_sdb.
- .pass_hash(value) ⇒ Object
- .pass_hash_check(value, value_to_compare) ⇒ Object
- .un_offset_int(x) ⇒ Object
Instance Method Summary collapse
- #convert_dates_to_sdb ⇒ Object
- #pad_and_offset_ints_to_sdb ⇒ Object
-
#ruby_to_sdb(name, value) ⇒ Object
Time to second precision.
- #ruby_to_string_val(att_meta, value) ⇒ Object
-
#sdb_to_ruby(name, value) ⇒ Object
Convert value from SimpleDB String version to real ruby value.
- #string_val_to_ruby(att_meta, value) ⇒ Object
- #to_bool(x) ⇒ Object
- #to_date(x) ⇒ Object
- #unpad(i, attributes) ⇒ Object
- #unpad_self ⇒ Object
- #wrap_if_required(arg, value, sdb_val) ⇒ Object
Class Method Details
.decrypt(value, key = nil) ⇒ Object
240 241 242 243 244 245 246 247 248 249 |
# File 'lib/simple_record/translations.rb', line 240 def self.decrypt(value, key=nil) # puts "decrypt orig value #{value} " unencoded_value = Base64.decode64(value) raise SimpleRecordError, "Encryption key must be defined on the attribute." if key.nil? key = key || get_encryption_key() # puts "decrypting #{unencoded_value} " decrypted_value = SimpleRecord::Encryptor.decrypt(:value => unencoded_value, :key => key) # "decrypted #{unencoded_value} to #{decrypted_value}" decrypted_value end |
.encrypt(value, key = nil) ⇒ Object
231 232 233 234 235 236 237 |
# File 'lib/simple_record/translations.rb', line 231 def self.encrypt(value, key=nil) key = key || get_encryption_key() raise SimpleRecordError, "Encryption key must be defined on the attribute." if key.nil? encrypted_value = SimpleRecord::Encryptor.encrypt(:value => value, :key => key) encoded_value = Base64.encode64(encrypted_value) encoded_value end |
.from_float(x) ⇒ Object
This conversion to a string is based on: tools.ietf.org/html/draft-wood-ldapext-float-00 Java code sample is here: code.google.com/p/typica/source/browse/trunk/java/com/xerox/amazonws/simpledb/DataUtils.java
163 164 165 166 167 168 |
# File 'lib/simple_record/translations.rb', line 163 def self.from_float(x) return x # if x == 0.0 # return "3 000 0.0000000000000000" # end end |
.pad_and_offset(x, att_meta = nil) ⇒ Object
Change name to something more appropriate like ruby_to_sdb
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/simple_record/translations.rb', line 129 def self.pad_and_offset(x, =nil) # Change name to something more appropriate like ruby_to_sdb # todo: add Float, etc # puts 'padding=' + x.class.name + " -- " + x.inspect if x.kind_of? Integer x += @@offset x_str = x.to_s # pad x_str = '0' + x_str while x_str.size < 20 return x_str elsif x.respond_to?(:iso8601) # puts x.class.name + ' responds to iso8601' # # There is an issue here where Time.iso8601 on an incomparable value to DateTime.iso8601. # Amazon suggests: 2008-02-10T16:52:01.000-05:00 # "yyyy-MM-dd'T'HH:mm:ss.SSSZ" # if x.is_a? DateTime x_str = x.getutc.strftime(@@date_format) elsif x.is_a? Time x_str = x.getutc.strftime(@@date_format) elsif x.is_a? Date x_str = x.strftime(@@date_format) end return x_str elsif x.is_a? Float from_float(x) else return x end end |
.pass_hash(value) ⇒ Object
271 272 273 274 275 |
# File 'lib/simple_record/translations.rb', line 271 def self.pass_hash(value) hashed = Password::create_hash(value) encoded_value = Base64.encode64(hashed) encoded_value end |
.pass_hash_check(value, value_to_compare) ⇒ Object
277 278 279 280 |
# File 'lib/simple_record/translations.rb', line 277 def self.pass_hash_check(value, value_to_compare) unencoded_value = Base64.decode64(value) return Password::check(value_to_compare, unencoded_value) end |
.un_offset_int(x) ⇒ Object
200 201 202 203 204 205 206 207 208 209 210 |
# File 'lib/simple_record/translations.rb', line 200 def self.un_offset_int(x) if x.is_a?(String) x2 = x.to_i # puts 'to_i=' + x2.to_s x2 -= @@offset # puts 'after subtracting offset='+ x2.to_s x2 else x end end |
Instance Method Details
#convert_dates_to_sdb ⇒ Object
263 264 265 266 267 268 269 |
# File 'lib/simple_record/translations.rb', line 263 def convert_dates_to_sdb() # defined_attributes_local.each_pair do |name, att_meta| # puts 'int encoding: ' + i.to_s # end end |
#pad_and_offset_ints_to_sdb ⇒ Object
252 253 254 255 256 257 258 259 260 261 |
# File 'lib/simple_record/translations.rb', line 252 def pad_and_offset_ints_to_sdb() # defined_attributes_local.each_pair do |name, att_meta| # if att_meta.type == :int && !self[name.to_s].nil? # arr = @attributes[name.to_s] # arr.collect!{ |x| self.class.pad_and_offset(x) } # @attributes[name.to_s] = arr # end # end end |
#ruby_to_sdb(name, value) ⇒ Object
Time to second precision
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/simple_record/translations.rb', line 22 def ruby_to_sdb(name, value) return nil if value.nil? name = name.to_s # puts "Converting #{name} to sdb value=#{value}" # puts "atts_local=" + defined_attributes_local.inspect = (name) if value.is_a? Array ret = value.collect { |x| ruby_to_string_val(, x) } else ret = ruby_to_string_val(, value) end unless value.blank? if . if .[:encrypted] # puts "ENCRYPTING #{name} value #{value}" ret = Translations.encrypt(ret, .[:encrypted]) # puts 'encrypted value=' + ret.to_s end if .[:hashed] # puts "hashing #{name}" ret = Translations.pass_hash(ret) # puts "hashed value=" + ret.inspect end end end return ret end |
#ruby_to_string_val(att_meta, value) ⇒ Object
9 10 11 12 13 14 15 16 17 18 |
# File 'lib/simple_record/translations.rb', line 9 def ruby_to_string_val(, value) if .type == :int ret = Translations.pad_and_offset(value, ) elsif .type == :date ret = Translations.pad_and_offset(value, ) else ret = value.to_s end ret end |
#sdb_to_ruby(name, value) ⇒ Object
Convert value from SimpleDB String version to real ruby value.
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/simple_record/translations.rb', line 57 def sdb_to_ruby(name, value) # puts 'sdb_to_ruby arg=' + name.inspect + ' - ' + name.class.name + ' - value=' + value.to_s return nil if value.nil? = (name) if . if .[:encrypted] value = Translations.decrypt(value, .[:encrypted]) end if .[:hashed] return PasswordHashed.new(value) end end if !has_id_on_end(name) && .type == :belongs_to class_name = .[:class_name] || name.to_s[0...1].capitalize + name.to_s[1...name.to_s.length] # Camelize classnames with underscores (ie my_model.rb --> MyModel) class_name = class_name.camelize # puts "attr=" + @attributes[arg_id].inspect # puts 'val=' + @attributes[arg_id][0].inspect unless @attributes[arg_id].nil? ret = nil arg_id = name.to_s + '_id' arg_id_val = send("#{arg_id}") if arg_id_val if !cache_store.nil? # arg_id_val = @attributes[arg_id][0] cache_key = self.class.cache_key(class_name, arg_id_val) # puts 'cache_key=' + cache_key ret = cache_store.read(cache_key) # puts 'belongs_to incache=' + ret.inspect end if ret.nil? to_eval = "#{class_name}.find('#{arg_id_val}')" # puts 'to eval=' + to_eval begin ret = eval(to_eval) # (defined? #{arg}_id) rescue SimpleRecord::ActiveSdb::ActiveSdbError => ex if ex..include? "Couldn't find" ret = RemoteNil.new else raise ex end end end end value = ret else if value.is_a? Array value = value.collect { |x| string_val_to_ruby(, x) } else value = string_val_to_ruby(, value) end end value end |
#string_val_to_ruby(att_meta, value) ⇒ Object
115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/simple_record/translations.rb', line 115 def string_val_to_ruby(, value) if .type == :int value = Translations.un_offset_int(value) elsif .type == :date value = to_date(value) elsif .type == :boolean value = to_bool(value) elsif .type == :float value = Float(value) end value end |
#to_bool(x) ⇒ Object
192 193 194 195 196 197 198 |
# File 'lib/simple_record/translations.rb', line 192 def to_bool(x) if x.is_a?(String) x == "true" || x == "1" else x end end |
#to_date(x) ⇒ Object
184 185 186 187 188 189 190 |
# File 'lib/simple_record/translations.rb', line 184 def to_date(x) if x.is_a?(String) DateTime.parse(x) else x end end |
#unpad(i, attributes) ⇒ Object
212 213 214 215 216 217 218 219 220 |
# File 'lib/simple_record/translations.rb', line 212 def unpad(i, attributes) if !attributes[i].nil? # puts 'before=' + self[i].inspect attributes[i].collect! { |x| un_offset_int(x) } end end |
#unpad_self ⇒ Object
222 223 224 225 226 227 228 |
# File 'lib/simple_record/translations.rb', line 222 def unpad_self defined_attributes_local.each_pair do |name, | if .type == :int unpad(name, @attributes) end end end |
#wrap_if_required(arg, value, sdb_val) ⇒ Object
171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/simple_record/translations.rb', line 171 def wrap_if_required(arg, value, sdb_val) return nil if value.nil? = defined_attributes_local[arg.to_sym] if && . if .[:hashed] # puts 'wrapping ' + arg_s return PasswordHashed.new(sdb_val) end end value end |