rails-add_ons 2.1.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -0
  3. data/app/assets/javascripts/rails/add_ons/application/acts-as-list.js.coffee +21 -0
  4. data/app/assets/javascripts/rails/add_ons/application.js +0 -2
  5. data/app/components/component/collection_table.rb +26 -2
  6. data/app/components/component/resource_table.rb +7 -1
  7. data/app/concerns/component/collection_table/acts_as_list_concern.rb +16 -0
  8. data/app/concerns/component/collection_table/acts_as_published_concern.rb +10 -0
  9. data/app/concerns/component/collection_table/batch_actions_concern.rb +12 -0
  10. data/app/concerns/component/collection_table/boolean_concern.rb +10 -0
  11. data/app/concerns/component/resource_table/boolean_concern.rb +10 -0
  12. data/app/concerns/resources_controller/acts_as_list_concern.rb +32 -0
  13. data/app/concerns/resources_controller/acts_as_published_concern.rb +73 -0
  14. data/app/concerns/resources_controller/awesome_nested_set_concern.rb +31 -0
  15. data/app/concerns/resources_controller/batch_actions_concern.rb +16 -0
  16. data/app/concerns/resources_controller/friendly_id_concern.rb +15 -0
  17. data/app/concerns/resources_controller/kaminari.rb +13 -11
  18. data/app/concerns/resources_controller/location_history.rb +31 -26
  19. data/app/concerns/resources_controller/pagination.rb +13 -11
  20. data/app/concerns/resources_controller/resource_inflections.rb +13 -11
  21. data/app/concerns/resources_controller/resources.rb +9 -7
  22. data/app/concerns/resources_controller/rest_actions.rb +77 -73
  23. data/app/concerns/resources_controller/rest_resource_urls.rb +25 -23
  24. data/app/concerns/resources_controller/sorting.rb +22 -14
  25. data/app/concerns/resources_controller/will_paginate.rb +14 -12
  26. data/app/concerns/service_controller/rest_actions.rb +15 -0
  27. data/app/helpers/rails/add_ons/table_helper.rb +10 -0
  28. data/app/views/component/_collection_table.haml +13 -12
  29. data/app/views/component/table/body_cells/_acts_as_list.haml +11 -0
  30. data/app/views/component/table/body_cells/_acts_as_published.haml +9 -0
  31. data/app/views/component/table/body_cells/_association.haml +5 -1
  32. data/app/views/component/table/body_cells/_batch_actions.haml +1 -0
  33. data/app/views/component/table/body_cells/_boolean.haml +4 -0
  34. data/app/views/component/table/header_cells/_batch_actions.haml +42 -0
  35. data/config/locales/de.yml +30 -1
  36. data/config/locales/en.yml +4 -1
  37. data/lib/generators/rails/add_ons/install_generator.rb +15 -0
  38. data/lib/generators/rails/add_ons/resources_controller_spec_generator.rb +53 -0
  39. data/lib/generators/rails/add_ons/templates/initializer.rb +7 -0
  40. data/lib/generators/rails/add_ons/templates/spec.rb +53 -0
  41. data/lib/rails/add_ons/configuration.rb +11 -0
  42. data/lib/rails/add_ons/shoulda/matchers/implement_create_action_matcher.rb +36 -4
  43. data/lib/rails/add_ons/shoulda/matchers/implement_update_action_matcher.rb +60 -17
  44. data/lib/rails/add_ons/version.rb +1 -1
  45. data/lib/rails/add_ons.rb +3 -2
  46. metadata +23 -2
@@ -15,6 +15,33 @@ module Rails
15
15
  # }
16
16
  # end
17
17
  #
18
+ # The newly created resource is found by calling @resource_class.last.
19
+ # If you need to change this you can call #finding_created_resource_with.
20
+ #
21
+ # Example:
22
+ #
23
+ # RSpec.describe '/posts', type: :feature do
24
+ # it {
25
+ # expect(subject).to implement_create_action(self)
26
+ # .for(resource_class)
27
+ # .within_form('#new_user') {
28
+ # # fill the needed form inputs via capybara here
29
+ # #
30
+ # # Example:
31
+ # #
32
+ # # select 'de', from: 'slider[locale]'
33
+ # # fill_in 'slider[name]', with: 'My first slider'
34
+ # # check 'slider[auto_start]'
35
+ # # fill_in 'slider[interval]', with: '3'
36
+ # fill_in 'user[email]', with: 'jane.doe@local.domain'
37
+ # fill_in 'user[password]', with: 'password'
38
+ # fill_in 'user[password_confirmation]', with: 'password'
39
+ # }
40
+ # .finding_created_resource_with{ Ecm::UserArea::User.order(created_at: :desc).first }
41
+ # .increasing{ Ecm::UserArea::User.count }.by(1)
42
+ # }
43
+ # end
44
+ #
18
45
  def implement_create_action(spec)
19
46
  ImplementCreateActionMatcher.new(spec)
20
47
  end
@@ -54,6 +81,11 @@ module Rails
54
81
  self
55
82
  end
56
83
 
84
+ def finding_created_resource_with(&block)
85
+ @created_resource_finder_block = block
86
+ self
87
+ end
88
+
57
89
  def matches?(base_path)
58
90
  @base_path = base_path
59
91
  @new_path = "#{@base_path}/new"
@@ -67,11 +99,11 @@ module Rails
67
99
  end
68
100
  @after_count = @block.call(@resource_class)
69
101
 
70
- has_correct_status_code && has_correct_current_path && has_increased_resource_count
102
+ has_correct_status_code && has_increased_resource_count && has_correct_current_path
71
103
  end
72
104
 
73
105
  def created_resource
74
- @created_resource ||= @resource_class.first
106
+ @created_resource ||= @created_resource_finder_block.present? ? @created_resource_finder_block.call : @resource_class.last
75
107
  end
76
108
 
77
109
  def expected_path
@@ -88,10 +120,10 @@ module Rails
88
120
  end
89
121
 
90
122
  def has_increased_resource_count
91
- if (@before_count + @after_count) == @expected_increase
123
+ if (@after_count - @before_count) == @expected_increase
92
124
  true
93
125
  else
94
- @error = "Did not increase by expected [#{@expected_increase}] but by [#{@before_count + @after_count}]"
126
+ @error = "Did not increase by expected [#{@expected_increase}] but by [#{@after_count - @before_count}]"
95
127
  false
96
128
  end
97
129
  end
@@ -2,7 +2,7 @@ module Rails
2
2
  module AddOns
3
3
  module Shoulda
4
4
  module Matchers
5
- # Example:
5
+ # Example checking for changed resource attributes:
6
6
  #
7
7
  # RSpec.describe '/posts', type: :feature do
8
8
  # let(:post) { create(:post) }
@@ -13,12 +13,29 @@ module Rails
13
13
  # fill_in 'post[title]', with: 'New title'
14
14
  # fill_in 'post[body]', with: 'New body'
15
15
  # }
16
- # .updating{ |resource| resource.attributes }
16
+ # .updating
17
17
  # .from(post.attributes)
18
18
  # .to({ 'title' => 'New title', 'body' => 'New body' })
19
19
  # }
20
20
  # end
21
21
  #
22
+ # Example checking for changed state:
23
+ #
24
+ # RSpec.describe '/posts', type: :feature do
25
+ # let(:post) { create(:post) }
26
+ # it {
27
+ # expect(subject).to implement_update_action(self)
28
+ # .for(post)
29
+ # .within_form('.edit_post') {
30
+ # fill_in 'post[title]', with: 'New title'
31
+ # fill_in 'post[body]', with: 'New body'
32
+ # }
33
+ # .updating{ |resource| resource.updated_by }
34
+ # .from(nil)
35
+ # .to(User.current)
36
+ # }
37
+ # end
38
+ #
22
39
  def implement_update_action(spec)
23
40
  ImplementUpdateActionMatcher.new(spec)
24
41
  end
@@ -36,13 +53,13 @@ module Rails
36
53
  self
37
54
  end
38
55
 
39
- def from(attributes)
40
- @expected_before_attributes = attributes
56
+ def from(value)
57
+ @from = value
41
58
  self
42
59
  end
43
60
 
44
- def to(attributes)
45
- @expected_after_attributes = attributes
61
+ def to(value)
62
+ @to = value
46
63
  self
47
64
  end
48
65
 
@@ -54,7 +71,7 @@ module Rails
54
71
  end
55
72
 
56
73
  def updating(&block)
57
- @block = block
74
+ @updating_block = block if block_given?
58
75
  self
59
76
  end
60
77
 
@@ -102,22 +119,48 @@ module Rails
102
119
  end
103
120
 
104
121
  def has_correct_attributes_before
105
- sliced_resource_attributes = @resource.attributes.with_indifferent_access.slice(*@expected_before_attributes.keys)
106
- if @expected_before_attributes == sliced_resource_attributes
107
- true
122
+ expected = @from
123
+ if @updating_block.present?
124
+ given = @updating_block.call(@resource)
125
+
126
+ if given == expected
127
+ return true
128
+ else
129
+ @error = "Before update state [#{given.inspect}] did not match expected [#{expected.inspect}]"
130
+ return false
131
+ end
108
132
  else
109
- @error = "Attributes before update [#{sliced_resource_attributes}] did not match expected attributes [#{@expected_before_attributes}]"
110
- false
133
+ given = @resource.attributes.with_indifferent_access.slice(*@expected_before_attributes.keys)
134
+
135
+ if given == expected
136
+ true
137
+ else
138
+ @error = "Attributes before update [#{given}] did not match expected attributes [#{@expected_before_attributes}]"
139
+ false
140
+ end
111
141
  end
112
142
  end
113
143
 
114
144
  def has_correct_attributes_after
115
- sliced_resource_attributes = @resource.attributes.with_indifferent_access.slice(*@expected_after_attributes.keys)
116
- if @expected_after_attributes == sliced_resource_attributes
117
- true
145
+ expected = @to
146
+ if @updating_block.present?
147
+ given = @updating_block.call(@resource)
148
+
149
+ if given == expected
150
+ return true
151
+ else
152
+ @error = "After update state [#{given.inspect}] did not match expected [#{expected.inspect}]"
153
+ return false
154
+ end
118
155
  else
119
- @error = "Attributes after update [#{sliced_resource_attributes}] did not match expected attributes [#{@expected_after_attributes}]"
120
- false
156
+ given = @resource.attributes.with_indifferent_access.slice(*@to.keys)
157
+
158
+ if given == expected
159
+ true
160
+ else
161
+ @error = "Attributes after update [#{given}] did not match expected attributes [#{@expected_before_attributes}]"
162
+ false
163
+ end
121
164
  end
122
165
  end
123
166
 
@@ -1,5 +1,5 @@
1
1
  module Rails
2
2
  module AddOns
3
- VERSION = '2.1.1'.freeze
3
+ VERSION = '2.2.0'.freeze
4
4
  end
5
5
  end
data/lib/rails/add_ons.rb CHANGED
@@ -1,7 +1,8 @@
1
- require "rails/add_ons/engine"
1
+ require 'rails/add_ons/configuration'
2
+ require 'rails/add_ons/engine'
2
3
 
3
4
  module Rails
4
5
  module AddOns
5
- # Your code goes here...
6
+ extend Configuration
6
7
  end
7
8
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-add_ons
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roberto Vasquez Angel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-26 00:00:00.000000000 Z
11
+ date: 2018-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -176,6 +176,7 @@ files:
176
176
  - Rakefile
177
177
  - app/assets/config/rails_add_ons_manifest.js
178
178
  - app/assets/javascripts/rails/add_ons/application.js
179
+ - app/assets/javascripts/rails/add_ons/application/acts-as-list.js.coffee
179
180
  - app/assets/javascripts/rails/add_ons/application/widgets.js.coffee
180
181
  - app/assets/javascripts/rails_add_ons.js
181
182
  - app/assets/stylesheets/rails/add_ons/application.scss
@@ -190,8 +191,18 @@ files:
190
191
  - app/components/component/collection_table.rb
191
192
  - app/components/component/resource_table.rb
192
193
  - app/concerns/api_controller_concerns/exception_handling.rb
194
+ - app/concerns/component/collection_table/acts_as_list_concern.rb
195
+ - app/concerns/component/collection_table/acts_as_published_concern.rb
193
196
  - app/concerns/component/collection_table/awesome_nested_set_concern.rb
197
+ - app/concerns/component/collection_table/batch_actions_concern.rb
198
+ - app/concerns/component/collection_table/boolean_concern.rb
199
+ - app/concerns/component/resource_table/boolean_concern.rb
194
200
  - app/concerns/controller/query_conditions.rb
201
+ - app/concerns/resources_controller/acts_as_list_concern.rb
202
+ - app/concerns/resources_controller/acts_as_published_concern.rb
203
+ - app/concerns/resources_controller/awesome_nested_set_concern.rb
204
+ - app/concerns/resources_controller/batch_actions_concern.rb
205
+ - app/concerns/resources_controller/friendly_id_concern.rb
195
206
  - app/concerns/resources_controller/kaminari.rb
196
207
  - app/concerns/resources_controller/location_history.rb
197
208
  - app/concerns/resources_controller/pagination.rb
@@ -221,10 +232,15 @@ files:
221
232
  - app/services/rails/add_ons/service/result/base.rb
222
233
  - app/views/component/_collection_table.haml
223
234
  - app/views/component/_resource_table.haml
235
+ - app/views/component/table/body_cells/_acts_as_list.haml
236
+ - app/views/component/table/body_cells/_acts_as_published.haml
224
237
  - app/views/component/table/body_cells/_association.haml
225
238
  - app/views/component/table/body_cells/_awesome_nested_set.haml
239
+ - app/views/component/table/body_cells/_batch_actions.haml
240
+ - app/views/component/table/body_cells/_boolean.haml
226
241
  - app/views/component/table/body_cells/_default.haml
227
242
  - app/views/component/table/body_cells/_timestamp.haml
243
+ - app/views/component/table/header_cells/_batch_actions.haml
228
244
  - app/views/frontend/_after_body.haml
229
245
  - app/views/frontend/_after_head.haml
230
246
  - app/views/frontend/_before_body.haml
@@ -262,8 +278,13 @@ files:
262
278
  - config/locales/en.yml
263
279
  - config/routes.rb
264
280
  - lib/active_model/model.rb
281
+ - lib/generators/rails/add_ons/install_generator.rb
282
+ - lib/generators/rails/add_ons/resources_controller_spec_generator.rb
283
+ - lib/generators/rails/add_ons/templates/initializer.rb
284
+ - lib/generators/rails/add_ons/templates/spec.rb
265
285
  - lib/rails-add_ons.rb
266
286
  - lib/rails/add_ons.rb
287
+ - lib/rails/add_ons/configuration.rb
267
288
  - lib/rails/add_ons/engine.rb
268
289
  - lib/rails/add_ons/shoulda/matchers.rb
269
290
  - lib/rails/add_ons/shoulda/matchers/implement_create_action_matcher.rb