Sha256: 12dff071da1f5e52f1b8a27741cfc9a59050bdef291f59d70d76580f47c766a7

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

class StringHash < Hash
  include RubyLess
  
  def self.from_string(str)
    from_hash(JSON.parse(str))
  end
  
  def self.from_hash(hash)
    obj = new
    hash.each do |k,v|
      obj[k.to_s] = v.to_s
    end
    obj
  end
  
  def self.[](value)
    from_hash(value)
  end
  
  # Deserialization used by Property
  def self.json_create(serialized)
    if data = serialized['data']
      StringHash[data]
    else
      nil
    end
  end
  
  def []=(k, v)
    if v.blank?
      delete(k.to_s)
    else
      super(k.to_s, v.to_s)
    end
  end
  
  def merge!(value)
    value.each do |k,v|
      self[k] = v
    end
    self
  end
  
  def merge(value)
    obj = dup
    value.each do |k,v|
      obj[k] = v
    end
    obj
  end
  
  # Serialization used by Property
  def to_json(*args)
    { 'json_class' => 'StringHash', 'data' => Hash[self] }.to_json
  end
  
  # This is used in case we show a form with the StringHash so that the value
  # is not serialized to junk. This is the other side of "from_string".
  def to_s
    Hash[self].to_json
  end

  safe_context [:[], String] => String
  safe_method :keys => [String]
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
zena-1.2.3 app/models/string_hash.rb
zena-1.2.2 app/models/string_hash.rb