hash_delegate 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
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