Sha256: 412eda5dec7844445b43d85b44978091952a81ff63512100ac5d91758763ebb0

Contents?: true

Size: 533 Bytes

Versions: 2

Compression:

Stored size: 533 Bytes

Contents

module HashDelegate
  class Accessor < Struct.new :klass
    def define_getter(key, hash)
      define_delegation key do
        data = self.send(hash) || {}
        data[key.to_s] || data[key.to_sym]
      end
    end

    def define_setter(key, hash)
      define_delegation "#{key}=" do |value|
        data = self.send(hash) || self.send("#{hash}=", {})
        data[key.to_s] = value
      end
    end

    private

    def define_delegation(name, &block)
      klass.class_eval { define_method name, &block }
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hash_delegate-0.0.5 lib/hash_delegate/accessor.rb
hash_delegate-0.0.4 lib/hash_delegate/accessor.rb