class-action 0.0.1 → 1.1.0

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.
@@ -0,0 +1,76 @@
1
+ require 'spec_helper'
2
+ require 'class_action/rspec'
3
+
4
+ describe ClassAction::RSpec::RespondToFormatMatcher do
5
+
6
+ class RespondToTestClassAction1 < ClassAction::Action
7
+ end
8
+ class RespondToTestClassAction2 < ClassAction::Action
9
+ respond_to :json
10
+ respond_to :html do
11
+ @responded_to_html = true
12
+ end
13
+ end
14
+ class RespondToTestClassAction3 < ClassAction::Action
15
+ respond_to :html, on: :ok
16
+ end
17
+
18
+ let(:controller) { ActionController::Base.new }
19
+
20
+ context "without a condition" do
21
+
22
+ it "should fail if the action does not respond to the given format" do
23
+ action = RespondToTestClassAction1.new(controller)
24
+ expect { expect(action).to respond_to_format(:html) }.to \
25
+ raise_error(
26
+ RSpec::Expectations::ExpectationNotMetError,
27
+ "expected action of class RespondToTestClassAction1 to respond to format :html"
28
+ )
29
+ end
30
+
31
+ it "should pass if the action responds to the given format" do
32
+ action = RespondToTestClassAction2.new(controller)
33
+ expect { expect(action).to respond_to_format(:json) }.not_to raise_error
34
+ end
35
+
36
+ it "should execute a given block" do
37
+ action = RespondToTestClassAction2.new(controller)
38
+
39
+ called = false
40
+ expect(action).to respond_to_format(:json) do
41
+ called = true
42
+ end
43
+ expect(called).to be_true
44
+ end
45
+
46
+ it "should first execute the response block for a given format" do
47
+ action = RespondToTestClassAction2.new(controller)
48
+
49
+ response_block_called = false
50
+ expect(action).to respond_to_format(:html) do
51
+ response_block_called = controller.instance_variable_get('@responded_to_html')
52
+ end
53
+ expect(response_block_called).to be_true
54
+ end
55
+
56
+ end
57
+
58
+ context "with a condition" do
59
+
60
+ it "should fail if the action does not respond to the given format for the given condition" do
61
+ action = RespondToTestClassAction3.new(controller)
62
+ expect { expect(action).to respond_to_format(:html).on(:invalid) }.to \
63
+ raise_error(
64
+ RSpec::Expectations::ExpectationNotMetError,
65
+ "expected action of class RespondToTestClassAction3 to respond to format :html on :invalid"
66
+ )
67
+ end
68
+
69
+ it "should pass if the action responds to the given format for the given condition" do
70
+ action = RespondToTestClassAction3.new(controller)
71
+ expect { expect(action).to respond_to_format(:html).on(:ok) }.not_to raise_error
72
+ end
73
+
74
+ end
75
+
76
+ end
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+ require 'class_action/rspec'
3
+
4
+ describe ClassAction::RSpec::RespondWithMatcher do
5
+
6
+ class RespondWithTestClassAction1 < ClassAction::Action
7
+ end
8
+ class RespondWithTestClassAction2 < ClassAction::Action
9
+ respond_with :result
10
+ end
11
+ class RespondWithTestClassAction3 < ClassAction::Action
12
+ respond_with :result, on: :ok
13
+ end
14
+
15
+ let(:controller) { ActionController::Base.new }
16
+
17
+ context "without a condition" do
18
+
19
+ it "should fail if the action does not have a response method" do
20
+ action = RespondWithTestClassAction1.new(controller)
21
+ expect { expect(action).to respond_with(:object) }.to \
22
+ raise_error(
23
+ RSpec::Expectations::ExpectationNotMetError,
24
+ "expected action of class RespondWithTestClassAction1 to respond with :object, but it has no response method"
25
+ )
26
+ end
27
+
28
+ it "should fail if the action responds with a different method" do
29
+ action = RespondWithTestClassAction2.new(controller)
30
+
31
+ expect { expect(action).to respond_with(:object) }.to \
32
+ raise_error(
33
+ RSpec::Expectations::ExpectationNotMetError,
34
+ "expected action of class RespondWithTestClassAction2 to respond with :object, but it responds with :result"
35
+ )
36
+ end
37
+
38
+ it "should pass if the action responded with the specified method" do
39
+ action = RespondWithTestClassAction2.new(controller)
40
+ expect { expect(action).to respond_with(:result) }.not_to raise_error
41
+ end
42
+
43
+ it "should fail if the action does not have a generic response method" do
44
+ action = RespondWithTestClassAction3.new(controller)
45
+ expect { expect(action).to respond_with(:object) }.to \
46
+ raise_error(
47
+ RSpec::Expectations::ExpectationNotMetError,
48
+ "expected action of class RespondWithTestClassAction3 to respond with :object, but it has no response method"
49
+ )
50
+ end
51
+
52
+ end
53
+
54
+ context "with a condition" do
55
+
56
+ it "should fail if the action responds with a different method for the given condition" do
57
+ action = RespondWithTestClassAction3.new(controller)
58
+
59
+ expect { expect(action).to respond_with(:object).on(:ok) }.to \
60
+ raise_error(
61
+ RSpec::Expectations::ExpectationNotMetError,
62
+ "expected action of class RespondWithTestClassAction3 to respond with :object on :ok, but it responds with :result"
63
+ )
64
+ end
65
+
66
+ it "should fail if the action has no response method for the given condition" do
67
+ action = RespondWithTestClassAction1.new(controller)
68
+
69
+ expect { expect(action).to respond_with(:object).on(:ok) }.to \
70
+ raise_error(
71
+ RSpec::Expectations::ExpectationNotMetError,
72
+ "expected action of class RespondWithTestClassAction1 to respond with :object on :ok, but it has no response method"
73
+ )
74
+ end
75
+
76
+ it "should pass if the action responded with the specified method" do
77
+ action = RespondWithTestClassAction3.new(controller)
78
+ expect { expect(action).to respond_with(:result).on(:ok) }.not_to raise_error
79
+ end
80
+
81
+ end
82
+
83
+
84
+ end
@@ -59,6 +59,13 @@ describe ClassAction do
59
59
  controller.show
60
60
  expect(controller.view_assigns).not_to have_key('_class_action')
61
61
  end
62
+
63
+ it "should expose the current action as #_class_action" do
64
+ controller.show
65
+ allow(controller).to receive(:action_name).and_return('show')
66
+ expect(controller.send(:_class_action)).to be(action)
67
+ end
68
+
62
69
  end
63
70
 
64
71
  context "giving another action class" do
@@ -153,7 +160,7 @@ describe ClassAction do
153
160
  end
154
161
 
155
162
  it "should leave everything alone if the class action has no responders" do
156
- allow(ClassActionTestController::Show).to receive(:responders).and_return({})
163
+ allow(ClassActionTestController::Show).to receive(:_responders).and_return({})
157
164
 
158
165
  ClassActionTestController.class_eval do
159
166
  respond_to :json
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,9 @@
1
+ require 'simplecov'
2
+
3
+ SimpleCov.start do
4
+ add_filter '/spec'
5
+ end
6
+
1
7
  require 'action_controller'
2
8
  require 'class-action'
3
9
  require 'rspec/autorun'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: class-action
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joost Lubach
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-22 00:00:00.000000000 Z
11
+ date: 2013-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.14'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '2.14'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '2.14'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: actionpack
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -88,20 +102,28 @@ extensions: []
88
102
  extra_rdoc_files: []
89
103
  files:
90
104
  - .gitignore
91
- - .ruby-gemset
92
- - .ruby-version
93
- - ClassAction.sublime-project
94
- - ClassAction.sublime-workspace
105
+ - .travis.yml
106
+ - CHANGELOG.md
95
107
  - Gemfile
108
+ - Gemfile.lock
96
109
  - LICENSE.txt
97
110
  - README.md
98
111
  - Rakefile
99
112
  - class-action.gemspec
100
113
  - lib/class-action.rb
114
+ - lib/class-action/rspec.rb
101
115
  - lib/class_action.rb
102
116
  - lib/class_action/action.rb
117
+ - lib/class_action/rspec.rb
118
+ - lib/class_action/rspec/class_action_example_group.rb
119
+ - lib/class_action/rspec/have_class_action_matcher.rb
120
+ - lib/class_action/rspec/respond_to_format_matcher.rb
121
+ - lib/class_action/rspec/respond_with_matcher.rb
103
122
  - lib/class_action/version.rb
104
123
  - spec/class_action/action_spec.rb
124
+ - spec/class_action/rspec/have_class_action_matcher_spec.rb
125
+ - spec/class_action/rspec/respond_to_format_matcher_spec.rb
126
+ - spec/class_action/rspec/respond_with_matcher_spec.rb
105
127
  - spec/class_action_spec.rb
106
128
  - spec/spec_helper.rb
107
129
  homepage: ''
@@ -124,12 +146,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
146
  version: '0'
125
147
  requirements: []
126
148
  rubyforge_project:
127
- rubygems_version: 2.0.3
149
+ rubygems_version: 2.1.4
128
150
  signing_key:
129
151
  specification_version: 4
130
152
  summary: Allows you to write controller actions as classes, rather than methods.
131
153
  test_files:
132
154
  - spec/class_action/action_spec.rb
155
+ - spec/class_action/rspec/have_class_action_matcher_spec.rb
156
+ - spec/class_action/rspec/respond_to_format_matcher_spec.rb
157
+ - spec/class_action/rspec/respond_with_matcher_spec.rb
133
158
  - spec/class_action_spec.rb
134
159
  - spec/spec_helper.rb
135
160
  has_rdoc:
data/.ruby-gemset DELETED
@@ -1 +0,0 @@
1
- flux
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- ruby-2.0.0-p247
@@ -1,10 +0,0 @@
1
- {
2
- "folders":
3
- [
4
- {
5
- "path": "/Users/joost/Work/Flux/class-action",
6
- "folder_exclude_patterns": [ "log", "tmp", "doc", ".yardoc", "tools", "coverage", ".zeus*" ],
7
- "file_exclude_patterns": [ "*.sublime-workspace", "*.tmproj", "Gemfile.lock", ".*" ]
8
- }
9
- ]
10
- }