hash_delegate 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0f355b13e7ef46d4bd49edca0273b54c569ad4ff
4
- data.tar.gz: bf1bb4304e4bcb4c82940a85f9de9cb9dc06c47a
3
+ metadata.gz: e6dbd7fa8fecb61711e973ff971dcfbf32ac942e
4
+ data.tar.gz: a5189fa5b26216b0d861c754c42301da0329d958
5
5
  SHA512:
6
- metadata.gz: 4900a02f30447db44b4fdd1613ca01baa62a3f4be323c72adc5790c38e99c4704e19cc18e3da76a8e460558c1097a7026b2d21d09904d4d7f6f8c6eb7a42aab7
7
- data.tar.gz: e1bf237f20322adedb2ae6e867175c3e38ed7bc55be49b20dc9259d1d39ad532bafcfd106b5a34427998f39ae45fddaa3c4bcf4413eb9674ec305cd7718b3204
6
+ metadata.gz: 51474f798b647a0a8563c52f79c8c3d5372b553eae6f2438ae9cce4efa45cdc8a01a2ec4aa1956ff6a1e667e6570d15a316144746bb6a25d4e78e2d11b9495b3
7
+ data.tar.gz: dbf8cd410520eb3965576af1707b3a258a682f8964e6077d8bf47cd3a587e1c93309f4d540d622e903a1014b918d91e76146edab6379192281ef1c0cd3b6292e
@@ -1,22 +1,16 @@
1
1
  $:.push File.expand_path('../', __FILE__)
2
2
  require "hash_delegate/version"
3
+ require "hash_delegate/accessor"
3
4
  require "active_support/all"
4
5
 
5
6
  module HashDelegate
6
7
  def hash_delegate(*args)
7
8
  options = args.extract_options!
8
- self.class_eval do
9
- args.each do |key|
10
- define_method key do
11
- data = self.send(options[:to]) || {}
12
- data[key.to_s] || data[key.to_sym]
13
- end
9
+ accessor = Accessor.new self
14
10
 
15
- define_method "#{key}=" do |value|
16
- data = self.send(options[:to]) || self.send("#{options[:to]}=", {})
17
- data[key.to_s] = value
18
- end
19
- end
11
+ args.each do |key|
12
+ accessor.define_getter key, options[:to]
13
+ accessor.define_setter key, options[:to]
20
14
  end
21
15
  end
22
16
  end
@@ -0,0 +1,23 @@
1
+ module HashDelegate
2
+ class Accessor < Struct.new :klass
3
+ def define_getter(key, hash)
4
+ define_delegation key do
5
+ data = self.send(hash) || {}
6
+ data[key.to_s] || data[key.to_sym]
7
+ end
8
+ end
9
+
10
+ def define_setter(key, hash)
11
+ define_delegation "#{key}=" do |value|
12
+ data = self.send(hash) || self.send("#{hash}=", {})
13
+ data[key.to_s] = value
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def define_delegation(name, &block)
20
+ klass.class_eval { define_method name, &block }
21
+ end
22
+ end
23
+ end
@@ -1,3 +1,3 @@
1
1
  module HashDelegate
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.4"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_delegate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcelo Eden
@@ -68,6 +68,7 @@ files:
68
68
  - Rakefile
69
69
  - hash_delegate.gemspec
70
70
  - lib/hash_delegate.rb
71
+ - lib/hash_delegate/accessor.rb
71
72
  - lib/hash_delegate/version.rb
72
73
  - test/lib/hash_delegate_test.rb
73
74
  - test/test_helper.rb