Sha256: 1e7076564726fed449d202b8c1b749b102f9ce74957bc63c745d8078d5c780a0

Contents?: true

Size: 1.14 KB

Versions: 1

Compression:

Stored size: 1.14 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 => {:class => [String], :method => 'keys.sort'}
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
zena-1.2.4 app/models/string_hash.rb