Sha256: 58f756d5a28a5935d760dc1e33c5816d99cbf5353fded8bf26ce4b60a98f747e
Contents?: true
Size: 1.74 KB
Versions: 5
Compression:
Stored size: 1.74 KB
Contents
module Outbox # Accessor is a simple object for wrapping access to either a hash's keys # or an object's properties. You can arbitrarily get/set either. Note that # with hashes, the keys are symbolized and a new hash is created - so if you # set properties you'll need to get the resulting hash from the #object # method. # # Example: # # hash = { :a => 1, 'b' => 2 } # hash_accessor = Outbox::Accessor.new(hash) # hash_accessor[:a] #=> 1 # hash_accessor[:b] #=> 2 # hash_accessor[:c] #=> nil # hash_accessor[:c] = 3 # hash_accessor.object[:c] #=> 3 # hash_accessor.object #=> { a: 1, b: 2, c: 3 } # # object = OpenStruct.new # object.a = 1 # object.b = 2 # object_accessor = Outbox::Accessor.new(object) # object_accessor[:a] #=> 1 # object_accessor[:b] #=> 2 # object_accessor[:c] #=> nil # object_accessor[:c] = 3 # object_accessor.object.c #=> 3 class Accessor attr_reader :object def initialize(object) if object.instance_of? Hash @object = convert_keys(object) else @object = object end end def []=(key, value) setter = "#{key}=" if @object.respond_to?(setter) @object.public_send(setter, value) elsif @object.respond_to? :[]= @object[convert_key(key)] = value end end def [](key) key = convert_key(key) if @object.respond_to?(key) @object.public_send(key) elsif @object.respond_to? :[] @object[key] end end protected def convert_keys(hash) result = {} hash.each_key do |key| result[convert_key(key)] = hash[key] end result end def convert_key(key) key.to_sym rescue key end end end
Version data entries
5 entries across 5 versions & 1 rubygems
Version | Path |
---|---|
outbox-0.2.1 | lib/outbox/accessor.rb |
outbox-0.2.0 | lib/outbox/accessor.rb |
outbox-0.1.2 | lib/outbox/accessor.rb |
outbox-0.1.1 | lib/outbox/accessor.rb |
outbox-0.1.0 | lib/outbox/accessor.rb |