Sha256: f12d97a39f9ebba3536ce7b1c4f8f3de72ec03916e635b0b808527989fb42624

Contents?: true

Size: 861 Bytes

Versions: 20

Compression:

Stored size: 861 Bytes

Contents

Struct.class_eval do
  def slice *attrs
    hsh = {}
    attrs.each{|attr| hsh[attr] = self.send(attr) }
    hsh
  end

  def to_hash
    slice(*self.class.members)
  end
  def self.from_hash(hsh)
    self.new *hsh.values_at(*self.members.map(&:to_sym))
  end


  #
  # values_at like a hash
  #
  def values_of *attrs
    slice(*attrs).values_at(*attrs)
  end
  def each_pair *args, &block
    self.to_hash.each_pair(*args, &block)
  end

  def merge *args
    self.dup.merge! *args
  end
  def merge! hashlike, &block
    raise "can't handle block arg yet" if block
    hashlike.each_pair{|k,v| self[k] = v }
    self
  end
  alias_method :update, :merge!
  def indifferent_merge  *args, &block
    self.dup.indifferent_merge! *args
  end
  def indifferent_merge! hashlike, &block
    merge! hashlike.reject{|k,v| ! self.members.include?(k.to_s) }
  end

end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
imw-0.2.17 lib/imw/utils/extensions/struct.rb
imw-0.2.16 lib/imw/utils/extensions/struct.rb
imw-0.2.15 lib/imw/utils/extensions/struct.rb
imw-0.2.14 lib/imw/utils/extensions/struct.rb
imw-0.2.13 lib/imw/utils/extensions/struct.rb
imw-0.2.12 lib/imw/utils/extensions/struct.rb
imw-0.2.11 lib/imw/utils/extensions/struct.rb
imw-0.2.10 lib/imw/utils/extensions/struct.rb
imw-0.2.9 lib/imw/utils/extensions/struct.rb
imw-0.2.8 lib/imw/utils/extensions/struct.rb
imw-0.2.7 lib/imw/utils/extensions/struct.rb
imw-0.2.6 lib/imw/utils/extensions/struct.rb
imw-0.2.5 lib/imw/utils/extensions/struct.rb
imw-0.2.4 lib/imw/utils/extensions/struct.rb
imw-0.2.3 lib/imw/utils/extensions/struct.rb
imw-0.2.2 lib/imw/utils/extensions/struct.rb
imw-0.2.1 lib/imw/utils/extensions/struct.rb
imw-0.2.0 lib/imw/utils/extensions/struct.rb
imw-0.1.1 lib/imw/utils/extensions/struct.rb
imw-0.1.0 lib/imw/utils/extensions/struct.rb