state-handler 0.1.1 → 0.1.2

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.
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- state-handler (0.0.1)
4
+ state-handler (0.1.1)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -24,12 +24,6 @@ module StateHandler
24
24
  @blocks[state].call
25
25
  end
26
26
 
27
- if self.class.patterns
28
- self.class.patterns.each do |s, regex|
29
- @blocks[s].call if @response.code.to_s =~ regex
30
- end
31
- end
32
-
33
27
  if self.class.groups
34
28
  self.class.groups.each do |group, states|
35
29
  @blocks[group].call if states.include?(state) && @blocks[group]
@@ -48,7 +42,11 @@ module StateHandler
48
42
  end
49
43
 
50
44
  def state
51
- self.class.mapping.keys.each.find { |state| find_mapped(state) }
45
+ patterns = self.class.patterns
46
+ mapping = self.class.mapping
47
+
48
+ mapping.keys.each.find { |state| find_mapped(state) } ||
49
+ patterns.key(patterns.values.each.find { |regex| @response.code.to_s =~ regex })
52
50
  end
53
51
 
54
52
  def find_mapped(state)
@@ -63,7 +61,9 @@ module StateHandler
63
61
  state = name.to_s.gsub(/\?/, '').to_sym
64
62
 
65
63
  if name.to_s.end_with?('?')
66
- raise StateHandler::UnexpectedState, "Got: #{state.inspect}" unless self.class.mapping[state]
64
+ unless self.class.mapping[state] || self.class.patterns[state]
65
+ raise StateHandler::UnexpectedState, "Got: #{state.inspect}"
66
+ end
67
67
  find_mapped(state)
68
68
  elsif block_given?
69
69
  @blocks[state] = block
@@ -95,10 +95,9 @@ module StateHandler
95
95
  end
96
96
 
97
97
  def match(regexp)
98
- self.patterns[regexp.values.first] = regexp.keys.first
99
- end
100
-
101
- def method_missing
98
+ state = regexp.values.first
99
+ self.patterns[state] = regexp.keys.first
100
+ add_to_group(state)
102
101
  end
103
102
 
104
103
  def code(*codes, &block)
@@ -119,6 +118,10 @@ module StateHandler
119
118
  def create(state, value)
120
119
  raise ArgumentError, "State '#{state}' already defined" if self.mapping[state]
121
120
  self.mapping[state] = value
121
+ add_to_group(state)
122
+ end
123
+
124
+ def add_to_group(state)
122
125
  if @current_group
123
126
  self.groups[@current_group] ||= []
124
127
  self.groups[@current_group] << state
@@ -1,3 +1,3 @@
1
1
  module StateHandler
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
@@ -28,10 +28,16 @@ describe StateHandler::Mixing do
28
28
  end
29
29
  end
30
30
 
31
+ def create(code, &block)
32
+ s = OpenStruct.new(:code => code)
33
+ DuplicateDeclarationResponse.new s
34
+ DummyResponse.new s, &block
35
+ end
36
+
31
37
  describe "#exclude" do
32
38
  it "should call valid block" do
33
39
  expect {
34
- DummyResponse.new(OpenStruct.new(:code => 400)) do |r|
40
+ create(400) do |r|
35
41
  r.ex :bad_params do
36
42
  raise ArgumentError
37
43
  end
@@ -41,7 +47,7 @@ describe StateHandler::Mixing do
41
47
 
42
48
  it "should not call block" do
43
49
  expect {
44
- DummyResponse.new(OpenStruct.new(:code => 401)) do |r|
50
+ create(401) do |r|
45
51
  r.ex :bad_params do
46
52
  raise ArgumentError
47
53
  end
@@ -54,7 +60,7 @@ describe StateHandler::Mixing do
54
60
  context "when handler not matched" do
55
61
  it "should do nothing" do
56
62
  expect {
57
- DummyResponse.new(OpenStruct.new(:code => 4001)) { }
63
+ create(4001) { }
58
64
  }.should_not raise_error
59
65
  end
60
66
  end
@@ -62,25 +68,19 @@ describe StateHandler::Mixing do
62
68
  context "when no handlers" do
63
69
  it "should do nothing" do
64
70
  expect {
65
- DummyResponse.new(OpenStruct.new(:code => 401)) { }
71
+ create(401) {}
66
72
  }.should_not raise_error
67
73
  end
68
74
  end
69
75
  end
70
76
 
71
- subject {
72
- DuplicateDeclarationResponse.new(response_struct)
73
- DummyResponse.new(response_struct)
74
- }
75
-
76
77
  describe "#exec" do
77
- let(:response_struct) { OpenStruct.new(:code => 401) }
78
78
  class ExecException < Exception
79
79
  end
80
80
 
81
81
  it "should call block from 'at' notation with multiply states" do
82
82
  expect {
83
- subject.exec do |r|
83
+ create(401) do |r|
84
84
  r.at :bad_params, :success, :fake do
85
85
  raise ExecException
86
86
  end
@@ -90,11 +90,31 @@ describe StateHandler::Mixing do
90
90
  end
91
91
 
92
92
  describe "#group" do
93
- let(:response_struct) { OpenStruct.new(:code => 200) }
93
+ context "when matched value with regex" do
94
+ it "should call block" do
95
+ expect {
96
+ create(500) do |r|
97
+ r.error do
98
+ raise ExecException
99
+ end
100
+ end
101
+ }.should raise_error(ExecException)
102
+ end
103
+
104
+ it "should call block from group :errors" do
105
+ expect {
106
+ create(500) do |r|
107
+ r.errors do
108
+ raise ExecException
109
+ end
110
+ end
111
+ }.should raise_error(ExecException)
112
+ end
113
+ end
94
114
 
95
115
  it "should call block from excluded group :errors" do
96
116
  expect {
97
- subject.exec do |r|
117
+ create(200) do |r|
98
118
  r.ex :errors do
99
119
  raise ExecException
100
120
  end
@@ -104,7 +124,7 @@ describe StateHandler::Mixing do
104
124
 
105
125
  it "should call block mapped to group :success" do
106
126
  expect {
107
- subject.exec do |r|
127
+ create(200) do |r|
108
128
  r.success do
109
129
  raise ExecException
110
130
  end
@@ -114,10 +134,9 @@ describe StateHandler::Mixing do
114
134
  end
115
135
 
116
136
  describe "#match" do
117
- let(:response_struct) { OpenStruct.new(:code => 500) }
118
137
  it "should call matched block" do
119
138
  expect {
120
- subject.exec do |r|
139
+ create(500) do |r|
121
140
  r.bad_params do
122
141
  raise ExecException
123
142
  end
@@ -130,10 +149,9 @@ describe StateHandler::Mixing do
130
149
  end
131
150
  end
132
151
 
133
- let(:response_struct) { OpenStruct.new(:code => 401) }
134
152
  it "should call block" do
135
153
  expect {
136
- subject.exec do |r|
154
+ create(401) do |r|
137
155
  r.bad_params do
138
156
  raise ExecException
139
157
  end
@@ -147,12 +165,12 @@ describe StateHandler::Mixing do
147
165
  end
148
166
 
149
167
  describe "#codes" do
150
- let(:response_struct) { OpenStruct.new(:code => 401) }
168
+ subject { create(401) {} }
151
169
  its(:bad_params?) { should be_true }
152
170
  end
153
171
 
154
172
  describe "#code" do
155
- let(:response_struct) { OpenStruct.new(:code => 200) }
173
+ subject { create(200) {} }
156
174
 
157
175
  its(:enabled?) { should be_true }
158
176
  its(:false?) { should be_false }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: state-handler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-05-16 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70195101020240 !ruby/object:Gem::Requirement
16
+ requirement: &70191862984340 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70195101020240
24
+ version_requirements: *70191862984340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70195101018660 !ruby/object:Gem::Requirement
27
+ requirement: &70191862983820 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70195101018660
35
+ version_requirements: *70191862983820
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: timecop
38
- requirement: &70195101006480 !ruby/object:Gem::Requirement
38
+ requirement: &70191862983400 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70195101006480
46
+ version_requirements: *70191862983400
47
47
  description: State handler per object params
48
48
  email: fatumka@gmail.com
49
49
  executables: []