hash_accessor 1.0.4 → 1.0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -58,7 +58,7 @@ Here is an example:
58
58
 
59
59
  == Contributing & Reporting Issues
60
60
 
61
- While I can't promise the most speedy response, I do plan to continue to maintain this gem. Please feel free to report any issues, provide feedback, or make suggestions on the {Issue Tracker}[http://github.com/forrest/hash_accessor/issues]
61
+ While I can't promise the most speedy response, I do plan to continue to maintain this gem. Please feel free to report any issues, provide feedback, or make suggestions on the {Issue Tracker}[http://github.com/GetJobber/hash_accessor/issues]
62
62
 
63
63
 
64
64
  ---
@@ -3,13 +3,12 @@ require File.expand_path("../lib/hash_accessor", __FILE__)
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "hash_accessor"
5
5
  s.version = HashAccessor::VERSION
6
- s.author = ["Forrest"]
7
- s.email = ["development@forrestzeisler.com"]
6
+ s.author = ["Jobber", "Forrest Zeisler"]
7
+ s.email = ["forrest@getjobber.com"]
8
8
  s.date = Time.now.utc.strftime("%Y-%m-%d")
9
9
 
10
-
11
10
  s.description = 'This gem provides accessor methods to hash keys.'
12
- s.summary = "This gem provides extended functionality to serialized hashed in rails. It allows you to define accessor methods for variable that rest "+
11
+ s.summary = "This gem provides extended functionality to serialized hashed in rails similary to rails' active_attr. It allows you to define accessor methods for variable that rest "+
13
12
  "inside a serialized hash. This is very useful if you have a large list of often changing DB variables on a model which don't get queried against."
14
13
 
15
14
  s.required_rubygems_version = ">= 1.3.6"
@@ -4,7 +4,7 @@ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname
4
4
  require 'hash_accessor/railtie' if defined?(Rails)
5
5
 
6
6
  module HashAccessor
7
- VERSION = "1.0.4"
7
+ VERSION = "1.0.5"
8
8
 
9
9
  autoload :ClassMethods, 'hash_accessor/class_methods'
10
10
 
@@ -16,27 +16,26 @@ module HashAccessor
16
16
  # :reject_blanks - removes all blank elements after the collect method
17
17
  def hash_accessor(hash_name, method_name, options = {})
18
18
  begin
19
- method_modifier = hash_accessor_method_modifier(method_name, options)
20
- default = hash_accessor_default(options)
19
+ method_name = method_name.to_sym
21
20
 
22
21
  # Define getter
23
22
  define_method(method_name) do
24
23
  send("#{hash_name}=", {}) if send(hash_name).blank?
25
- if self.send(hash_name)[method_name].nil?
26
- self.send(hash_name)[method_name] = default
24
+ if send(hash_name)[method_name].nil?
25
+ send(hash_name)[method_name] = hash_accessor_default(options)
27
26
  end
28
- self.send(hash_name)[method_name]
27
+ send(hash_name)[method_name]
29
28
  end
30
29
 
31
30
  # Define setter
32
- define_method("#{method_name}=") do |*args|
33
- new_val = args[0]
34
- self.send("#{hash_name}=", {}) if send(hash_name).blank?
31
+ define_method("#{method_name}=") do |new_val|
32
+ send("#{hash_name}=", {}) if send(hash_name).blank?
33
+ method_modifier = hash_accessor_method_modifier(method_name, options)
35
34
  new_val = method_modifier.call(new_val)
36
- if self.send(hash_name)[method_name] != new_val
35
+ if send(hash_name)[method_name] != new_val
37
36
  instance_variable_set("@#{method_name}_changed", true)
38
37
  end
39
- self.send(hash_name)[method_name] = new_val
38
+ send(hash_name)[method_name] = new_val
40
39
  end
41
40
 
42
41
  # Define changed?
@@ -55,47 +54,47 @@ module HashAccessor
55
54
  puts "\n\nError adding hash_accessor:\n#{e.message}\n#{e.backtrace}\n\n"
56
55
  end
57
56
  end
57
+ end
58
58
 
59
- private
59
+ private
60
60
 
61
- def hash_accessor_method_modifier(method_name, options)
62
- case options[:type]
63
- when :integer
64
- lambda {|new_val| new_val.try(:to_i) }
65
- when :float
66
- lambda {|new_val| new_val.try(:to_f) }
67
- when :decimal
68
- lambda {|new_val| new_val.try(:to_d) }
69
- when :boolean, :bool
70
- lambda {|new_val| (new_val.is_a?(TrueClass) or (new_val.is_a?(String) and (new_val=~/true|1/i).present?) or (new_val.is_a?(Fixnum) and new_val==1)) }
71
- when :array
72
- lambda {|new_val|
73
- new_val = Array.wrap(new_val)
61
+ def hash_accessor_method_modifier(method_name, options)
62
+ case options[:type]
63
+ when :integer
64
+ lambda {|new_val| new_val.try(:to_i) }
65
+ when :float
66
+ lambda {|new_val| new_val.try(:to_f) }
67
+ when :decimal
68
+ lambda {|new_val| new_val.try(:to_d) }
69
+ when :boolean, :bool
70
+ lambda {|new_val| (new_val.is_a?(TrueClass) or (new_val.is_a?(String) and (new_val=~/true|1/i).present?) or (new_val.is_a?(Fixnum) and new_val==1)) }
71
+ when :array
72
+ lambda {|new_val|
73
+ new_val = Array.wrap(new_val)
74
74
 
75
- if options[:collects]
76
- new_val = new_val.collect(&options[:collects])
77
- end
75
+ if options[:collects]
76
+ new_val = new_val.collect(&options[:collects])
77
+ end
78
78
 
79
- if options[:reject_blanks]
80
- new_val.reject!(&:blank?)
81
- end
79
+ if options[:reject_blanks]
80
+ new_val.reject!(&:blank?)
81
+ end
82
82
 
83
- new_val
84
- }
85
- else lambda {|new_val| new_val}
86
- end
83
+ new_val
84
+ }
85
+ else lambda {|new_val| new_val}
87
86
  end
87
+ end
88
88
 
89
- def hash_accessor_default(options)
90
- if options[:default].is_a?(String)
91
- default = options[:default]
92
- elsif options[:default].nil? and options[:type]==:array
93
- default = []
94
- elsif options[:default].nil?
95
- default = nil
96
- else
97
- default = options[:default]
98
- end
89
+ def hash_accessor_default(options)
90
+ if options[:default].is_a?(String)
91
+ default = options[:default]
92
+ elsif options[:default].nil? and options[:type]==:array
93
+ default = []
94
+ elsif options[:default].nil?
95
+ default = nil
96
+ else
97
+ default = options[:default]
99
98
  end
100
99
  end
101
100
 
@@ -33,6 +33,19 @@ class HashAccessorTest < Test::Unit::TestCase
33
33
  assert_equal "some test", @tester.unspecified_variable
34
34
  end
35
35
 
36
+ def test_no_sharing_of_variables
37
+ t1 = TestClassWithHash.new
38
+ t2 = TestClassWithHash.new
39
+
40
+ t1.unspecified_variable = "some test"
41
+ t1.test_array_2 << :blah
42
+
43
+ assert_equal "some test", t1.unspecified_variable
44
+ assert_equal [:blah], t1.test_array_2
45
+ assert_equal nil, t2.unspecified_variable
46
+ assert_equal [], t2.test_array_2
47
+ end
48
+
36
49
  def test_accessors_being_casted_correctly
37
50
  @tester.test_integer = "3"
38
51
  @tester.test_decimal = "3"
metadata CHANGED
@@ -1,11 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_accessor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - Forrest
8
+ - Jobber
9
+ - Forrest Zeisler
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
@@ -29,7 +30,7 @@ dependencies:
29
30
  version: 3.2.0
30
31
  description: This gem provides accessor methods to hash keys.
31
32
  email:
32
- - development@forrestzeisler.com
33
+ - forrest@getjobber.com
33
34
  executables: []
34
35
  extensions: []
35
36
  extra_rdoc_files:
@@ -68,10 +69,10 @@ rubyforge_project:
68
69
  rubygems_version: 1.8.22
69
70
  signing_key:
70
71
  specification_version: 3
71
- summary: This gem provides extended functionality to serialized hashed in rails. It
72
- allows you to define accessor methods for variable that rest inside a serialized
73
- hash. This is very useful if you have a large list of often changing DB variables
74
- on a model which don't get queried against.
72
+ summary: This gem provides extended functionality to serialized hashed in rails similary
73
+ to rails' active_attr. It allows you to define accessor methods for variable that
74
+ rest inside a serialized hash. This is very useful if you have a large list of often
75
+ changing DB variables on a model which don't get queried against.
75
76
  test_files:
76
77
  - test/hash_accessor_test.rb
77
78
  has_rdoc: true