hash_accessor 1.0.4 → 1.0.5

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.
@@ -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