batch_actions 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e68fc1158fbe9d59d7e11c037f3cc580d855e314
4
- data.tar.gz: 203625073e57c12ae947b3016283e0eb044339af
3
+ metadata.gz: 55c9b7fa8c2b242f9b5390326e0452610e3077f4
4
+ data.tar.gz: a70cdebc35ad2a3d59d43681521fae8a542d7eba
5
5
  SHA512:
6
- metadata.gz: b397f3158bfc0e7e9f0d5a4072922804c2c197f51eeaa52604b4589a73324497dafc6c5a5f0d4d0aeb476ecd6e3aef6cb8d100f91bbbde4e0274108cd8f207f6
7
- data.tar.gz: e1db247358fb5e19eccb1322217de7f0a73ee49b79645555fc3f978ec577e5a606a8bea5a3ff1c1b3a0eb089fbb306ddd7d9ed48f7d60eb66444d8abe5659e7d
6
+ metadata.gz: 74ae8d1efa6459edafbaedc32869e3c921d8b249184778b4cb487e8eddf433b4e50ed5556df2a14e353189998a050ce33cd89854f26571f705ec7feb8f760c4c
7
+ data.tar.gz: b7da68362cb4e6d5f6c7902693238bba991c04bdc0f3efa9e297ec4b7ff38c74d4f821ddec74e08e550822c16667ea6aef0f6815deb04334855a68267f192ad6
data/Gemfile CHANGED
@@ -6,4 +6,4 @@ gemspec
6
6
  gem 'rspec'
7
7
  gem 'rake'
8
8
  gem 'simplecov'
9
-
9
+ gem 'actionpack', '>= 3'
@@ -17,12 +17,16 @@ module BatchActions
17
17
  allowed
18
18
  end
19
19
 
20
- def batch_action
21
- action = params[:name]
20
+ def dispatch_batch
21
+ name = params[:batch_action]
22
22
 
23
- raise "action is not allowed" unless batch_actions.include? action.to_sym
23
+ allowed = batch_actions.detect { |action| action.to_s == name.to_s }
24
+ unless allowed
25
+ raise ActionController::RoutingError.new('batch action is not allowed')
26
+ end
24
27
 
25
- send(:"batch_#{action}")
28
+ self.status, headers, self.response_body = self.class.action(:"batch_#{name}").call(env)
29
+ self.headers.merge! headers
26
30
  end
27
31
 
28
32
  def self.included(base)
@@ -18,42 +18,42 @@ module BatchActions
18
18
  if block_given?
19
19
  apply = block
20
20
  else
21
- apply = ->(objects) do
22
- objects.each do |object|
23
- object.send(keyword)
24
- end
25
- end
21
+ raise ArgumentError, "block must be specified"
26
22
  end
27
23
 
28
24
  if opts.include? :scope
29
25
  scope = opts[:scope]
30
26
  else
31
- scope = ->(model) do
32
- model.where(:id => params[:ids])
27
+ scope = ->(ids) do
28
+ model.where(:id => ids)
33
29
  end
34
30
  end
35
31
 
36
32
  if opts.include? :if
37
33
  condition = opts[:if]
38
34
  else
39
- condition = ->() do
40
- if self.respond_to? :can?
41
- can? keyword, model
42
- else
43
- true
44
- end
45
- end
35
+ condition = ->() { true }
46
36
  end
47
37
 
48
38
  @batch_actions[keyword] = condition
49
39
 
40
+ raise ArgumentError, "unexpected number of arguments for scope" if scope.arity < 1 || scope.arity > 2
41
+
50
42
  define_method(:"batch_#{keyword}") do
51
43
  result = instance_exec(&condition)
52
44
 
53
- raise "action is not allowed" unless result
45
+ raise ActionController::RoutingError.new('batch action is not allowed') unless result
46
+
47
+ case scope.arity
48
+ when 1
49
+ objects = instance_exec(params[:ids], &scope)
50
+
51
+ when 2
52
+ objects = instance_exec(params[:ids], model.where(:id => params[:ids]), &scope)
53
+
54
+ end
54
55
 
55
- objects = instance_exec(model, &scope)
56
- apply.call(objects)
56
+ instance_exec(objects, &apply)
57
57
  end
58
58
  end
59
59
  end
@@ -1,3 +1,3 @@
1
1
  module BatchActions
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -6,7 +6,9 @@ describe BatchActions do
6
6
  :ids => [ 1, 2 ]
7
7
  ) do
8
8
  batch_model TestModel
9
- batch_action :test1
9
+ batch_action :test1 do |list|
10
+ list.each &:test1
11
+ end
10
12
  end
11
13
 
12
14
  times = 0
@@ -22,6 +24,18 @@ describe BatchActions do
22
24
  it "requires a model to be specified" do
23
25
  expect do
24
26
  mock_controller do
27
+ batch_action :test1 do |list|
28
+ list.each &:test1
29
+ end
30
+ end
31
+ end.to raise_error(ArgumentError)
32
+ end
33
+
34
+ it "requires a block to be specified" do
35
+ expect do
36
+ mock_controller do
37
+ batch_model TestModel
38
+
25
39
  batch_action :test1
26
40
  end
27
41
  end.to raise_error(ArgumentError)
@@ -33,8 +47,12 @@ describe BatchActions do
33
47
  ) do
34
48
  batch_model TestModel
35
49
 
36
- batch_action :test1
37
- batch_action :test2, :model => TestModel2
50
+ batch_action :test1 do |list|
51
+ list.each &:test1
52
+ end
53
+ batch_action :test2, :model => TestModel2 do |list|
54
+ list.each &:test2
55
+ end
38
56
  end
39
57
 
40
58
  TestModel.should_receive(:where).with({ :id => [ 1 ]}).and_call_original
@@ -51,42 +69,38 @@ describe BatchActions do
51
69
  scope_called = false
52
70
 
53
71
  instance = TestModel.new
54
- instance.should_receive(:test1).and_return(nil)
72
+ instance.should_receive(:test1).exactly(2).times.and_return(nil)
55
73
 
56
74
  ctrl = mock_controller(
57
75
  :ids => [ 1 ]
58
76
  ) do
59
77
  batch_model TestModel
60
78
 
61
- batch_action :test1, :scope => ->(model) do
79
+ batch_action(:test1, :scope => ->(ids) do
62
80
  scope_called = true
63
81
 
64
82
  [ instance ]
83
+ end) do |list|
84
+ list.each &:test1
65
85
  end
66
- end
67
-
68
- ctrl.batch_test1
69
-
70
- scope_called.should be_true
71
- end
72
86
 
73
- it "allows to override default apply" do
74
- block_called = nil
75
-
76
- ctrl = mock_controller(
77
- :ids => [ 1 ]
78
- ) do
79
- batch_model TestModel
87
+ batch_action(:test2, :scope => ->(ids, scope) do
88
+ scope_called = true
80
89
 
81
- batch_action(:test1) do |objects|
82
- block_called = objects
90
+ [ instance ]
91
+ end) do |list|
92
+ list.each &:test1
83
93
  end
84
94
  end
85
95
 
86
96
  ctrl.batch_test1
97
+ scope_called.should be_true
98
+
99
+ scope_called = false
100
+ ctrl.batch_test2
101
+ scope_called.should be_true
102
+
87
103
 
88
- block_called.should_not be_nil
89
- block_called.length.should == 1
90
104
  end
91
105
 
92
106
  it "supports :if" do
@@ -95,7 +109,9 @@ describe BatchActions do
95
109
  ) do
96
110
  batch_model TestModel
97
111
 
98
- batch_action :test, :if => ->() { false }
112
+ batch_action(:test, :if => ->() { false }) do |list|
113
+ list.each &:test
114
+ end
99
115
  end
100
116
 
101
117
  expect { ctrl.batch_test1 }.to raise_error
@@ -106,9 +122,15 @@ describe BatchActions do
106
122
  ctrl = mock_controller do
107
123
  batch_model TestModel
108
124
 
109
- batch_action :test1
110
- batch_action :test2
111
- batch_action :test3, :if => ->() { false }
125
+ batch_action :test1 do |list|
126
+ list.each &:test1
127
+ end
128
+ batch_action :test2 do |list|
129
+ list.each &:test2
130
+ end
131
+ batch_action(:test3, :if => ->() { false }) do |list|
132
+ list.each &:test3
133
+ end
112
134
  end
113
135
 
114
136
  ctrl.batch_actions.should == [ :test1, :test2 ]
@@ -117,39 +139,41 @@ describe BatchActions do
117
139
  it "supports InheritedResources" do
118
140
  expect do
119
141
  mock_controller(:parent => InheritedResources::Base) do
120
- batch_action :test1
142
+ batch_action(:test1) do |list|
143
+ list.each &:test1
144
+ end
121
145
  end
122
146
  end.to_not raise_error
123
147
  end
124
148
 
125
- it "supports CanCan" do
126
- ctrl = mock_controller do
127
- batch_model TestModel
128
-
129
- batch_action :test1
130
- batch_action :test2
131
-
132
- def can?(keyword, model)
133
- keyword == :test1
134
- end
135
- end
136
-
137
- ctrl.batch_actions.should == [ :test1 ]
138
- end
139
-
140
- it "implements batch_action" do
149
+ it "implements dispatch_batch" do
141
150
  [ "test1", "test2" ].each do |action|
142
151
  ctrl = mock_controller(
143
152
  :ids => [ 1 ],
144
- :name => action
153
+ :batch_action => action
145
154
  ) do
146
155
  batch_model TestModel
147
- batch_action :test1
148
- batch_action :test2
156
+ batch_action :test1 do |list|
157
+ list.each &:test1
158
+ end
159
+ batch_action :test2 do |list|
160
+ list.each &:test2
161
+ end
149
162
  end
150
163
 
151
164
  TestModel.any_instance.should_receive(action.to_sym).and_return(nil)
152
- ctrl.batch_action
165
+ ctrl.dispatch_batch
153
166
  end
154
167
  end
168
+
169
+ it "throws on disallowed action in dispatch_batch" do
170
+ ctrl = mock_controller(
171
+ :batch_action => :test
172
+ ) do
173
+ end
174
+
175
+ expect do
176
+ ctrl.dispatch_batch
177
+ end.to raise_error(ActionController::RoutingError)
178
+ end
155
179
  end
@@ -2,6 +2,7 @@ require 'simplecov'
2
2
  SimpleCov.start
3
3
 
4
4
  require 'batch_actions'
5
+ require 'action_controller'
5
6
 
6
7
  class TestModel
7
8
  def self.where(query)
@@ -24,7 +25,7 @@ module InheritedResources
24
25
  end
25
26
 
26
27
  def mock_controller(params = {}, &block)
27
- parent = params.delete(:parent) || Object
28
+ parent = params.delete(:parent) || ActionController::Metal
28
29
 
29
30
  mock_class = Class.new(parent) do
30
31
  include BatchActions
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: batch_actions
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sergey Gridasov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-14 00:00:00.000000000 Z
11
+ date: 2013-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -78,7 +78,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
78
78
  version: '0'
79
79
  requirements: []
80
80
  rubyforge_project:
81
- rubygems_version: 2.0.0
81
+ rubygems_version: 2.0.3
82
82
  signing_key:
83
83
  specification_version: 4
84
84
  summary: Batch action support for Rails.