granite 0.17.7 → 1.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81481cadb9c9eb112a82edaa7d34e30444b3188a73a44aaceee2db1fd5382cae
4
- data.tar.gz: 9ecc86fde4b5bd08608cb142d11bc943c63b14a2c129fd35b528c5933a4d97fa
3
+ metadata.gz: b350a3ec5e67ddb8963e53fd5662b907281bd99ae80bf2c56d1e38bc5aab1e91
4
+ data.tar.gz: e50e8205ed1c15b743c19162a707aaeb9e22aa56956b7cfc468c9c2ddaba9211
5
5
  SHA512:
6
- metadata.gz: efc08634d83cffeb6650eb40c8e0c7c0a009eb4a1723fe511a06f2d8f370d4e1d1366f1c106b06c4a0d5a05a9c3f1fb5092e3cd6d9062f815cc844a27556fe59
7
- data.tar.gz: 50fea4a451ffce78d26dbb6a6064f2bee1ec7f8dd045bbafe7c7e49cde1ad7ddc9c35cf8a139069b43f9f6742f9e6551c353ecb0da4beac65861ab11f0f2be61
6
+ metadata.gz: e0bd294852f36a6e3995cc8bd2637093be985032d32645350f04fdad67c6897dafde07770ec53f720af43bb7b6470fe59643a3ba4784d97a829e35c8bc609fc7
7
+ data.tar.gz: 15c8c6b16d6514fd6b3699e99615e06b1f2ee523cd978bb3725891c969a991f81e72fba821d5e52064a4afe48c4875fd4aa4c77a5e499eb03f69b103a678b874
@@ -3,6 +3,7 @@ require 'action_controller'
3
3
  module Granite
4
4
  class Controller < Granite.base_controller_class # :nodoc:
5
5
  include Controller::Translations
6
+
6
7
  helper Controller::Translations
7
8
 
8
9
  singleton_class.__send__(:attr_accessor, :projector_class)
@@ -9,6 +9,7 @@ module Granite
9
9
 
10
10
  included do
11
11
  include ContextProxy
12
+
12
13
  attr_reader :ctx
13
14
  end
14
15
 
@@ -5,15 +5,15 @@ module Granite
5
5
  module Preconditions
6
6
  # Checks related business actions for precondition errors and adds them to current action.
7
7
  #
8
- # memoize def child_action
8
+ # memo_wise def child_action
9
9
  # ...
10
10
  # end
11
11
  # precondition embedded: :child_action
12
12
  #
13
- # memoize def child_action
13
+ # memo_wise def child_action
14
14
  # ...
15
15
  # end
16
- # memoize def child_actions
16
+ # memo_wise def child_actions
17
17
  # ...
18
18
  # end
19
19
  # precondition embedded: [:child_action, :child_actions]
@@ -106,7 +106,7 @@ module Granite
106
106
 
107
107
  private
108
108
 
109
- def run_preconditions!(cache_result: false)
109
+ def run_preconditions!(cache_result: false) # rubocop:disable Naming/PredicateMethod
110
110
  _preconditions.execute!(self) if @preconditions_run.nil?
111
111
  @preconditions_run = true if cache_result
112
112
  errors.empty?
@@ -6,6 +6,9 @@ module Granite
6
6
  end
7
7
 
8
8
  module TransactionManager # :nodoc:
9
+ TRANSACTIONS_STACK_KEY = :granite_transaction_manager_transactions_stack
10
+ private_constant :TRANSACTIONS_STACK_KEY
11
+
9
12
  class << self
10
13
  # Runs a block in a transaction
11
14
  # It will open a new transaction or append a block to the current one if it exists
@@ -30,8 +33,6 @@ module Granite
30
33
 
31
34
  private
32
35
 
33
- TRANSACTIONS_STACK_KEY = :granite_transaction_manager_transactions_stack
34
-
35
36
  def transactions_stack
36
37
  Thread.current[TRANSACTIONS_STACK_KEY] ||= TransactionsStack.new
37
38
  end
@@ -12,10 +12,10 @@ module Granite
12
12
  "<#{@klass}ContextProxy #{@context}>"
13
13
  end
14
14
 
15
- ruby2_keywords def method_missing(method, *args, &block)
15
+ def method_missing(method, *args, **kwargs, &block)
16
16
  if @klass.respond_to?(method)
17
17
  @klass.with_context(@context) do
18
- @klass.public_send(method, *args, &block)
18
+ @klass.public_send(method, *args, **kwargs, &block)
19
19
  end
20
20
  else
21
21
  super
@@ -1,13 +1,13 @@
1
- require 'memoist'
1
+ require 'memo_wise'
2
2
  require 'action_controller/metal/exceptions'
3
3
 
4
4
  module Granite
5
5
  class Dispatcher # :nodoc:
6
- extend Memoist
6
+ prepend MemoWise
7
7
 
8
- # Make dispatcher object pristine, clean memoist cache.
8
+ # Make dispatcher object pristine, clean memo_wise cache.
9
9
  def reset!
10
- unmemoize_all
10
+ reset_memo_wise
11
11
  end
12
12
 
13
13
  def call(*)
@@ -45,23 +45,23 @@ module Granite
45
45
  ]
46
46
  end
47
47
 
48
- memoize def action_name(request_method_symbol, granite_action, granite_projector, projector_action)
48
+ memo_wise def action_name(request_method_symbol, granite_action, granite_projector, projector_action)
49
49
  projector = projector(granite_action, granite_projector)
50
50
  return unless projector
51
51
 
52
52
  projector.action_for(request_method_symbol, projector_action.to_s)
53
53
  end
54
54
 
55
- memoize def projector(granite_action, granite_projector)
55
+ memo_wise def projector(granite_action, granite_projector)
56
56
  action = business_action(granite_action)
57
57
 
58
58
  action.public_send(granite_projector) if action.respond_to?(granite_projector)
59
59
  end
60
60
 
61
- memoize def business_action(granite_action)
61
+ memo_wise def business_action(granite_action)
62
62
  granite_action.camelize.safe_constantize ||
63
- raise(ActionController::RoutingError,
64
- "Granite action '#{granite_action}' is mounted but class '#{granite_action.camelize}' can't be found")
63
+ raise(ActionController::RoutingError,
64
+ "Granite action '#{granite_action}' is mounted but class '#{granite_action.camelize}' can't be found")
65
65
  end
66
66
  end
67
67
  end
@@ -12,9 +12,7 @@ Do you have #{projector.action_name}##{projector.projector_name} declared in rou
12
12
  module Helpers # :nodoc:
13
13
  extend ActiveSupport::Concern
14
14
 
15
- def view_context
16
- Granite.view_context
17
- end
15
+ delegate :view_context, to: :Granite
18
16
  alias h view_context
19
17
 
20
18
  def action_url(action, **options)
@@ -35,7 +33,7 @@ Do you have #{projector.action_name}##{projector.projector_name} declared in rou
35
33
 
36
34
  def required_params
37
35
  corresponding_route.required_parts
38
- .to_h { |name| [name, action.public_send(name)] }
36
+ .index_with { |name| action.public_send(name) }
39
37
  end
40
38
 
41
39
  def corresponding_route
@@ -68,7 +68,7 @@ RSpec::Matchers.define :perform_action do |klass| # rubocop:disable Metrics/Bloc
68
68
  end
69
69
 
70
70
  def actual_attributes(action)
71
- @attributes.keys.to_h { |attr| [attr, action.public_send(attr)] }
71
+ @attributes.keys.index_with { |attr| action.public_send(attr) }
72
72
  end
73
73
 
74
74
  def action_matches?(action)
@@ -4,7 +4,7 @@ module Granite
4
4
  include RSpec::Rails::ControllerExampleGroup
5
5
 
6
6
  included do
7
- before { Granite::Routing::Declarer.dispatcher.unmemoize_all }
7
+ before { Granite::Routing::Declarer.dispatcher.reset_memo_wise }
8
8
  end
9
9
 
10
10
  module ClassMethods # :nodoc:
@@ -93,7 +93,7 @@ RSpec::Matchers.define :satisfy_preconditions do # rubocop:disable Metrics/Block
93
93
  message + " but got following kind of error messages:\n #{actual_kind_of_errors.inspect}"
94
94
  end
95
95
 
96
- def compare(actual, expected)
96
+ def compare(actual, expected) # rubocop:disable Naming/PredicateMethod
97
97
  if RSpec::Matchers.is_a_matcher?(expected)
98
98
  expected.matches?(actual)
99
99
  elsif expected.is_a?(String)
@@ -1,3 +1,3 @@
1
1
  module Granite
2
- VERSION = '0.17.7'.freeze
2
+ VERSION = '1.0.0'.freeze
3
3
  end
data/lib/granite.rb CHANGED
@@ -1,6 +1,5 @@
1
1
  require 'active_support/dependencies'
2
2
  require 'action_controller'
3
- require 'ruby2_keywords'
4
3
 
5
4
  require 'granite/version'
6
5
  require 'granite/config'
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: granite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.7
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toptal Engineering
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2026-03-05 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: actionpack
@@ -16,78 +15,50 @@ dependencies:
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: '6.0'
18
+ version: '7.2'
20
19
  type: :runtime
21
20
  prerelease: false
22
21
  version_requirements: !ruby/object:Gem::Requirement
23
22
  requirements:
24
23
  - - ">="
25
24
  - !ruby/object:Gem::Version
26
- version: '6.0'
25
+ version: '7.2'
27
26
  - !ruby/object:Gem::Dependency
28
27
  name: activesupport
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - ">="
32
31
  - !ruby/object:Gem::Version
33
- version: '6.0'
32
+ version: '7.2'
34
33
  type: :runtime
35
34
  prerelease: false
36
35
  version_requirements: !ruby/object:Gem::Requirement
37
36
  requirements:
38
37
  - - ">="
39
38
  - !ruby/object:Gem::Version
40
- version: '6.0'
39
+ version: '7.2'
41
40
  - !ruby/object:Gem::Dependency
42
41
  name: granite-form
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - ">="
46
45
  - !ruby/object:Gem::Version
47
- version: 0.3.0
46
+ version: '0'
48
47
  type: :runtime
49
48
  prerelease: false
50
49
  version_requirements: !ruby/object:Gem::Requirement
51
50
  requirements:
52
51
  - - ">="
53
52
  - !ruby/object:Gem::Version
54
- version: 0.3.0
55
- - !ruby/object:Gem::Dependency
56
- name: memoist
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '0.16'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '0.16'
69
- - !ruby/object:Gem::Dependency
70
- name: ruby2_keywords
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: 0.0.5
76
- type: :runtime
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: 0.0.5
53
+ version: '0'
83
54
  - !ruby/object:Gem::Dependency
84
- name: activerecord
55
+ name: memo_wise
85
56
  requirement: !ruby/object:Gem::Requirement
86
57
  requirements:
87
58
  - - ">="
88
59
  - !ruby/object:Gem::Version
89
60
  version: '0'
90
- type: :development
61
+ type: :runtime
91
62
  prerelease: false
92
63
  version_requirements: !ruby/object:Gem::Requirement
93
64
  requirements:
@@ -95,7 +66,7 @@ dependencies:
95
66
  - !ruby/object:Gem::Version
96
67
  version: '0'
97
68
  - !ruby/object:Gem::Dependency
98
- name: appraisal
69
+ name: activerecord
99
70
  requirement: !ruby/object:Gem::Requirement
100
71
  requirements:
101
72
  - - ">="
@@ -126,30 +97,30 @@ dependencies:
126
97
  name: fuubar
127
98
  requirement: !ruby/object:Gem::Requirement
128
99
  requirements:
129
- - - "~>"
100
+ - - ">="
130
101
  - !ruby/object:Gem::Version
131
- version: '2.0'
102
+ version: '0'
132
103
  type: :development
133
104
  prerelease: false
134
105
  version_requirements: !ruby/object:Gem::Requirement
135
106
  requirements:
136
- - - "~>"
107
+ - - ">="
137
108
  - !ruby/object:Gem::Version
138
- version: '2.0'
109
+ version: '0'
139
110
  - !ruby/object:Gem::Dependency
140
111
  name: pg
141
112
  requirement: !ruby/object:Gem::Requirement
142
113
  requirements:
143
- - - "<"
114
+ - - ">="
144
115
  - !ruby/object:Gem::Version
145
- version: '2'
116
+ version: '0'
146
117
  type: :development
147
118
  prerelease: false
148
119
  version_requirements: !ruby/object:Gem::Requirement
149
120
  requirements:
150
- - - "<"
121
+ - - ">="
151
122
  - !ruby/object:Gem::Version
152
- version: '2'
123
+ version: '0'
153
124
  - !ruby/object:Gem::Dependency
154
125
  name: pry-byebug
155
126
  requirement: !ruby/object:Gem::Requirement
@@ -168,158 +139,156 @@ dependencies:
168
139
  name: rspec
169
140
  requirement: !ruby/object:Gem::Requirement
170
141
  requirements:
171
- - - "~>"
142
+ - - ">="
172
143
  - !ruby/object:Gem::Version
173
- version: '3.12'
144
+ version: '0'
174
145
  type: :development
175
146
  prerelease: false
176
147
  version_requirements: !ruby/object:Gem::Requirement
177
148
  requirements:
178
- - - "~>"
149
+ - - ">="
179
150
  - !ruby/object:Gem::Version
180
- version: '3.12'
151
+ version: '0'
181
152
  - !ruby/object:Gem::Dependency
182
153
  name: rspec-activemodel-mocks
183
154
  requirement: !ruby/object:Gem::Requirement
184
155
  requirements:
185
- - - "~>"
156
+ - - ">="
186
157
  - !ruby/object:Gem::Version
187
- version: '1.0'
158
+ version: '0'
188
159
  type: :development
189
160
  prerelease: false
190
161
  version_requirements: !ruby/object:Gem::Requirement
191
162
  requirements:
192
- - - "~>"
163
+ - - ">="
193
164
  - !ruby/object:Gem::Version
194
- version: '1.0'
165
+ version: '0'
195
166
  - !ruby/object:Gem::Dependency
196
167
  name: rspec-collection_matchers
197
168
  requirement: !ruby/object:Gem::Requirement
198
169
  requirements:
199
- - - "~>"
170
+ - - ">="
200
171
  - !ruby/object:Gem::Version
201
- version: '1.1'
172
+ version: '0'
202
173
  type: :development
203
174
  prerelease: false
204
175
  version_requirements: !ruby/object:Gem::Requirement
205
176
  requirements:
206
- - - "~>"
177
+ - - ">="
207
178
  - !ruby/object:Gem::Version
208
- version: '1.1'
179
+ version: '0'
209
180
  - !ruby/object:Gem::Dependency
210
181
  name: rspec-its
211
182
  requirement: !ruby/object:Gem::Requirement
212
183
  requirements:
213
- - - "~>"
184
+ - - ">="
214
185
  - !ruby/object:Gem::Version
215
- version: '1.2'
186
+ version: '0'
216
187
  type: :development
217
188
  prerelease: false
218
189
  version_requirements: !ruby/object:Gem::Requirement
219
190
  requirements:
220
- - - "~>"
191
+ - - ">="
221
192
  - !ruby/object:Gem::Version
222
- version: '1.2'
193
+ version: '0'
223
194
  - !ruby/object:Gem::Dependency
224
195
  name: rspec_junit_formatter
225
196
  requirement: !ruby/object:Gem::Requirement
226
197
  requirements:
227
- - - "~>"
198
+ - - ">="
228
199
  - !ruby/object:Gem::Version
229
- version: '0.2'
200
+ version: '0'
230
201
  type: :development
231
202
  prerelease: false
232
203
  version_requirements: !ruby/object:Gem::Requirement
233
204
  requirements:
234
- - - "~>"
205
+ - - ">="
235
206
  - !ruby/object:Gem::Version
236
- version: '0.2'
207
+ version: '0'
237
208
  - !ruby/object:Gem::Dependency
238
209
  name: rspec-rails
239
210
  requirement: !ruby/object:Gem::Requirement
240
211
  requirements:
241
- - - "~>"
212
+ - - ">="
242
213
  - !ruby/object:Gem::Version
243
- version: '6.0'
214
+ version: '0'
244
215
  type: :development
245
216
  prerelease: false
246
217
  version_requirements: !ruby/object:Gem::Requirement
247
218
  requirements:
248
- - - "~>"
219
+ - - ">="
249
220
  - !ruby/object:Gem::Version
250
- version: '6.0'
221
+ version: '0'
251
222
  - !ruby/object:Gem::Dependency
252
223
  name: rubocop
253
224
  requirement: !ruby/object:Gem::Requirement
254
225
  requirements:
255
- - - "~>"
226
+ - - ">="
256
227
  - !ruby/object:Gem::Version
257
- version: 1.65.1
228
+ version: '0'
258
229
  type: :development
259
230
  prerelease: false
260
231
  version_requirements: !ruby/object:Gem::Requirement
261
232
  requirements:
262
- - - "~>"
233
+ - - ">="
263
234
  - !ruby/object:Gem::Version
264
- version: 1.65.1
235
+ version: '0'
265
236
  - !ruby/object:Gem::Dependency
266
237
  name: rubocop-rails
267
238
  requirement: !ruby/object:Gem::Requirement
268
239
  requirements:
269
- - - "~>"
240
+ - - ">="
270
241
  - !ruby/object:Gem::Version
271
- version: 2.25.0
242
+ version: '0'
272
243
  type: :development
273
244
  prerelease: false
274
245
  version_requirements: !ruby/object:Gem::Requirement
275
246
  requirements:
276
- - - "~>"
247
+ - - ">="
277
248
  - !ruby/object:Gem::Version
278
- version: 2.25.0
249
+ version: '0'
279
250
  - !ruby/object:Gem::Dependency
280
251
  name: rubocop-rspec
281
252
  requirement: !ruby/object:Gem::Requirement
282
253
  requirements:
283
- - - "~>"
254
+ - - ">="
284
255
  - !ruby/object:Gem::Version
285
- version: 3.0.1
256
+ version: '0'
286
257
  type: :development
287
258
  prerelease: false
288
259
  version_requirements: !ruby/object:Gem::Requirement
289
260
  requirements:
290
- - - "~>"
261
+ - - ">="
291
262
  - !ruby/object:Gem::Version
292
- version: 3.0.1
263
+ version: '0'
293
264
  - !ruby/object:Gem::Dependency
294
265
  name: rubocop-rspec_rails
295
266
  requirement: !ruby/object:Gem::Requirement
296
267
  requirements:
297
- - - "~>"
268
+ - - ">="
298
269
  - !ruby/object:Gem::Version
299
- version: '2.30'
270
+ version: '0'
300
271
  type: :development
301
272
  prerelease: false
302
273
  version_requirements: !ruby/object:Gem::Requirement
303
274
  requirements:
304
- - - "~>"
275
+ - - ">="
305
276
  - !ruby/object:Gem::Version
306
- version: '2.30'
277
+ version: '0'
307
278
  - !ruby/object:Gem::Dependency
308
279
  name: simplecov
309
280
  requirement: !ruby/object:Gem::Requirement
310
281
  requirements:
311
- - - "~>"
282
+ - - ">="
312
283
  - !ruby/object:Gem::Version
313
- version: '0.15'
284
+ version: '0'
314
285
  type: :development
315
286
  prerelease: false
316
287
  version_requirements: !ruby/object:Gem::Requirement
317
288
  requirements:
318
- - - "~>"
289
+ - - ">="
319
290
  - !ruby/object:Gem::Version
320
- version: '0.15'
321
- description:
322
- email:
291
+ version: '0'
323
292
  executables: []
324
293
  extensions: []
325
294
  extra_rdoc_files: []
@@ -396,7 +365,6 @@ licenses:
396
365
  - MIT
397
366
  metadata:
398
367
  rubygems_mfa_required: 'true'
399
- post_install_message:
400
368
  rdoc_options: []
401
369
  require_paths:
402
370
  - lib
@@ -404,15 +372,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
404
372
  requirements:
405
373
  - - ">="
406
374
  - !ruby/object:Gem::Version
407
- version: '2.6'
375
+ version: '3.3'
408
376
  required_rubygems_version: !ruby/object:Gem::Requirement
409
377
  requirements:
410
378
  - - ">="
411
379
  - !ruby/object:Gem::Version
412
380
  version: '0'
413
381
  requirements: []
414
- rubygems_version: 3.5.22
415
- signing_key:
382
+ rubygems_version: 3.6.9
416
383
  specification_version: 4
417
384
  summary: Another business actions architecture for Rails apps
418
385
  test_files: []