hash_dealer 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.1
1
+ 1.3.2
data/hash_dealer.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{hash_dealer}
8
- s.version = "1.3.1"
8
+ s.version = "1.3.2"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dan Langevin"]
@@ -5,6 +5,40 @@ class Object
5
5
  end
6
6
  end
7
7
 
8
+ class TimeDateMatcher
9
+ attr_reader :instance
10
+ def initialize(instance)
11
+ @instance = instance
12
+ end
13
+ def ==(other)
14
+ self.instance.class == other.class
15
+ end
16
+ alias_method :eql?, :==
17
+ end
18
+
19
+ # including a module didn't work here - not sure why though
20
+ [Time, DateTime, Date].each do |klass|
21
+ klass.class_eval <<-EOE, __FILE__, __LINE__ + 1
22
+ def matcher(opts = {})
23
+ TimeDateMatcher.new(self)
24
+ end
25
+
26
+ alias_method :old_eql?, :eql?
27
+ alias_method :old_equals_equals, :==
28
+
29
+ def ==(other)
30
+ return other == self if other.is_a?(TimeDateMatcher)
31
+ return old_equals_equals(other)
32
+ end
33
+
34
+ def eql?(other)
35
+ return other.eql?(self) if other.is_a?(TimeDateMatcher)
36
+ return old_eql?(other)
37
+ end
38
+
39
+ EOE
40
+ end
41
+
8
42
  class Numeric
9
43
  def matcher(opts={})
10
44
  PathString.new(":#{self}")
@@ -51,33 +51,68 @@ describe HashDealer do
51
51
  HashDealer.roll(:variable, {"abc" => "123"})[:abc].should eql("123")
52
52
  end
53
53
 
54
- it "should extend itself to matchers - preventing us from having to re-define them" do
55
- HashDealer.define(:variable) do
56
- abc("test")
57
- val({
58
- :k => "v"
59
- })
60
- end
61
- String.new(HashDealer.roll(:variable).matcher[:abc]).should eql ":test"
62
- String.new(HashDealer.roll(:variable).matcher[:val][:k]).should eql ":v"
63
- end
54
+ context "Matchers" do
64
55
 
65
- it "should not alter fields passed into the matcher method in the except array" do
66
- HashDealer.define(:variable) do
67
- a("test_a")
68
- b("test_b")
56
+ it "should extend itself to matchers - preventing us from having to re-define them" do
57
+ HashDealer.define(:variable) do
58
+ abc("test")
59
+ val({
60
+ :k => "v"
61
+ })
62
+ end
63
+ String.new(HashDealer.roll(:variable).matcher[:abc]).should eql ":test"
64
+ String.new(HashDealer.roll(:variable).matcher[:val][:k]).should eql ":v"
69
65
  end
70
- HashDealer.roll(:variable).matcher(:except => [:b])[:a].should eql(":test_a")
71
- HashDealer.roll(:variable).matcher(:except => [:b])[:b].should eql("test_b")
72
- end
73
66
 
74
- it "should only alter fields passed into the matcher method in the the only array" do
75
- HashDealer.define(:variable) do
76
- a("test_a")
77
- b("test_b")
67
+ it "should not alter fields passed into the matcher method in the except array" do
68
+ HashDealer.define(:variable) do
69
+ a("test_a")
70
+ b("test_b")
71
+ end
72
+ HashDealer.roll(:variable).matcher(:except => [:b])[:a].should eql(":test_a")
73
+ HashDealer.roll(:variable).matcher(:except => [:b])[:b].should eql("test_b")
78
74
  end
79
- HashDealer.roll(:variable).matcher(:only => [:b])[:a].should eql("test_a")
80
- HashDealer.roll(:variable).matcher(:only => [:b])[:b].should eql(":test_b")
75
+
76
+ it "should only alter fields passed into the matcher method in the the only array" do
77
+ HashDealer.define(:variable) do
78
+ a("test_a")
79
+ b("test_b")
80
+ end
81
+ HashDealer.roll(:variable).matcher(:only => [:b])[:a].should eql("test_a")
82
+ HashDealer.roll(:variable).matcher(:only => [:b])[:b].should eql(":test_b")
83
+ end
84
+
85
+ it "should create a wrapper for times and dates" do
86
+ HashDealer.define(:variable) do
87
+ time_test(Time.now)
88
+ date_test(Date.today)
89
+ end
90
+
91
+ time_test = HashDealer.roll(:variable).matcher[:time_test]
92
+ date_test = HashDealer.roll(:variable).matcher[:date_test]
93
+
94
+ time_test.should be_instance_of TimeDateMatcher
95
+ date_test.should be_instance_of TimeDateMatcher
96
+
97
+ time_test.should eql (Time.now - 1000)
98
+ time_test.should_not eql (Date.today)
99
+ date_test.should eql (Date.today)
100
+ date_test.should_not eql (Time.now)
101
+
102
+ # check the reverse too
103
+ (Time.now - 1000).should eql(time_test)
104
+ (Time.now - 1000).should == time_test
105
+ (Date.today).should_not eql(time_test)
106
+ (Date.today).should_not == time_test
107
+
108
+ # regular behavior should be unaffected
109
+ t = Time.now
110
+ t.should eql t.clone
111
+ t.should == t.clone
112
+
113
+
114
+ end
115
+
81
116
  end
82
117
 
83
118
  it "should apply except/only to nested values if they are defined by hash dealer and specified" do
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: hash_dealer
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.3.1
5
+ version: 1.3.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Dan Langevin
@@ -141,7 +141,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
141
  requirements:
142
142
  - - ">="
143
143
  - !ruby/object:Gem::Version
144
- hash: 967117454047752142
144
+ hash: 538716834169318373
145
145
  segments:
146
146
  - 0
147
147
  version: "0"