wallaby-core 0.3.0.beta1 → 0.3.0.beta2

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: ac0d0b6d6922e91c8efb73f107bd9565911f7484b56f4cf3790d156e2de64ff9
4
- data.tar.gz: 1217566eccf96b6d26d4bc52e0a44674d8bf3681f0b5d8a3ca8def1f57377743
3
+ metadata.gz: 86ff434d6a25fa665cb828cc1a1839166f386a71dff24afacb7a114402a81f50
4
+ data.tar.gz: 1a923d492ef62f597608a9c49f8a1341fe59687e8c4668749f3ad25d7a1b1c71
5
5
  SHA512:
6
- metadata.gz: 652027a296d62af1e939591fa866e2fc6fa1a37fc2717e192cf893a02a7ca51ccd862985624fb5d1bedbbc48cfd5e53a9accf491e16b30ea7b09aa2ba2ac1588
7
- data.tar.gz: 3457d4933495eb845198f869cd74c32c6deba85c500bb5d0e07bd8159004fda5bbbc0972f008facf5d04c44136f86b2e5ae09c2daec44934c22ba385316515fc
6
+ metadata.gz: 73183959d1177a5d707baae5c698e57f6e5ca47fe4b248e1014402dbe95c9015418d3d6d46194161c38543745c685a99bfacb73c197a1972e85beec758d8598c
7
+ data.tar.gz: ffdeeb4e9df6b63f281912c21acb758e0a7bb9d8863d38a5e081b5c81cbfed5bf4942910ebf8d03fcef2c90cb8cd66f3bf0d9763302f59ae084003ea4f82dfb3
@@ -403,7 +403,7 @@ module Wallaby
403
403
  # Clear all configurations
404
404
  def clear
405
405
  ClassMethods.instance_methods.grep(/=/).each do |name|
406
- instance_variable_set "@#{name[0...-1]}", nil
406
+ instance_variable_set :"@#{name[0...-1]}", nil
407
407
  end
408
408
  end
409
409
  end
@@ -23,11 +23,7 @@ module Wallaby
23
23
  # @return [ResourceDecorator] current resource decorator for this request
24
24
  def current_decorator
25
25
  @current_decorator ||=
26
- DecoratorFinder.new(
27
- script_name: script_name,
28
- model_class: current_model_class,
29
- current_controller_class: wallaby_controller
30
- ).execute.tap do |decorator|
26
+ decorator_of(current_model_class).tap do |decorator|
31
27
  Logger.debug %(Current decorator: #{decorator}), sourcing: false
32
28
  end
33
29
  end
@@ -39,6 +35,15 @@ module Wallaby
39
35
  current_model_decorator.try(:"#{action_name}_fields")
40
36
  end
41
37
 
38
+ # Get the decorator of a klass
39
+ def decorator_of(klass)
40
+ DecoratorFinder.new(
41
+ script_name: script_name,
42
+ model_class: klass,
43
+ current_controller_class: wallaby_controller
44
+ ).execute
45
+ end
46
+
42
47
  # Wrap resource(s) with decorator(s).
43
48
  # @param resource [Object, Enumerable]
44
49
  # @return [ResourceDecorator, Enumerable<Wallaby::ResourceDecorator>] decorator(s)
@@ -99,6 +99,13 @@ module Wallaby
99
99
  @h ||= superclass.try(:h) || ResourcesController.helpers
100
100
  end
101
101
 
102
+ # @!attribute [w] readonly
103
+ attr_writer :readonly
104
+
105
+ def readonly?
106
+ @readonly
107
+ end
108
+
102
109
  # Delegate missing method to {.model_decorator}
103
110
  def method_missing(method_id, *args, &block)
104
111
  return if ModelDecorator::MISSING_METHODS_RELATED_TO_FIELDS.match?(method_id.to_s) && model_decorator.blank?
@@ -179,6 +186,12 @@ module Wallaby
179
186
  resource.try(:model_name) || ActiveModel::Name.new(model_class)
180
187
  end
181
188
 
189
+ # @see https://github.com/rails/rails/compare/v7.0.2.4..7-0-stable#diff-44b94eca66c7497711821a8e6bcdfde4684bb7b8efa15e64da6532449f03ef0bR441
190
+ # @note This overwritten method is a response to the above change
191
+ def to_model
192
+ self
193
+ end
194
+
182
195
  # @note this method is for the Rails form helper methods to recognize non-ActiveModel models
183
196
  # @return [nil] if no primary key
184
197
  # @return [Array<String>] primary key
@@ -187,6 +200,12 @@ module Wallaby
187
200
  key ? [key] : nil
188
201
  end
189
202
 
203
+ # @return [true, false] if resource responds to method `.readonly?`
204
+ # @return [false] otherwise
205
+ def readonly?
206
+ resource.try(:readonly?) || self.class.try(:readonly?)
207
+ end
208
+
190
209
  # Delegate missing method to {#resource}
191
210
  def method_missing(method_id, *args, &block)
192
211
  if resource.respond_to?(method_id)
@@ -20,7 +20,7 @@ module Wallaby
20
20
  content_tag :ul, class: 'errors' do
21
21
  errors.each do |message|
22
22
  concat content_tag :li, content_tag(
23
- :small, raw(message)
23
+ :small, raw(message) # rubocop:disable Rails/OutputSafety
24
24
  )
25
25
  end
26
26
  end
@@ -15,7 +15,7 @@ module Wallaby
15
15
  # @return [String] anchor link to index page for a given model class
16
16
  # @return [nil] if user's not authorized
17
17
  def index_link(model_class, options: {}, url_params: {}, html_options: {}, &block)
18
- return if unauthorized? :index, model_class
18
+ return if unauthorized?(:index, model_class)
19
19
 
20
20
  html_options, block = LinkOptionsNormalizer.normalize(
21
21
  html_options, block,
@@ -38,7 +38,7 @@ module Wallaby
38
38
  # @return [String, nil] anchor element
39
39
  # @return [nil] if user's not authorized
40
40
  def new_link(model_class, options: {}, url_params: {}, html_options: {}, &block)
41
- return if unauthorized? :new, model_class
41
+ return if unauthorized?(:new, model_class) || decorator_of(model_class).readonly?
42
42
 
43
43
  html_options, block = LinkOptionsNormalizer.normalize(
44
44
  html_options, block,
@@ -73,9 +73,9 @@ module Wallaby
73
73
  )
74
74
 
75
75
  default = (options[:readonly] && block.call) || nil
76
- return default if unauthorized? :show, extract(resource)
76
+ return default if unauthorized?(:show, extract(resource))
77
77
 
78
- url = options[:url] || show_path(resource, url_params: url_params)
78
+ url = options[:url] || show_path(resource.itself, url_params: url_params)
79
79
  link_to url, html_options, &block
80
80
  end
81
81
 
@@ -100,9 +100,9 @@ module Wallaby
100
100
  )
101
101
 
102
102
  default = (options[:readonly] && block.call) || nil
103
- return default if unauthorized? :edit, extract(resource)
103
+ return default if unauthorized?(:edit, extract(resource)) || resource.try(:readonly?)
104
104
 
105
- url = options[:url] || edit_path(resource, url_params: url_params)
105
+ url = options[:url] || edit_path(resource.itself, url_params: url_params)
106
106
  link_to url, html_options, &block
107
107
  end
108
108
 
@@ -119,7 +119,7 @@ module Wallaby
119
119
  # @return [String, nil] anchor element
120
120
  # @return [nil] if user's not authorized
121
121
  def delete_link(resource, options: {}, url_params: {}, html_options: {}, &block)
122
- return if unauthorized? :destroy, extract(resource)
122
+ return if unauthorized?(:destroy, extract(resource)) || resource.try(:readonly?)
123
123
 
124
124
  html_options, block = LinkOptionsNormalizer.normalize(
125
125
  html_options, block, class: 'resource__destroy', block: -> { wt 'links.delete' }
@@ -128,7 +128,7 @@ module Wallaby
128
128
  html_options[:method] ||= :delete
129
129
  (html_options[:data] ||= {})[:confirm] ||= wt 'links.confirm.delete'
130
130
 
131
- url = options[:url] || show_path(resource, url_params: url_params)
131
+ url = options[:url] || show_path(resource.itself, url_params: url_params)
132
132
  link_to url, html_options, &block
133
133
  end
134
134
 
@@ -17,7 +17,9 @@ module Wallaby
17
17
 
18
18
  # @return [String] file name with export timestamp
19
19
  def file_name_to_export
20
- timestamp = Time.zone.now.to_s(:number)
20
+ timestamp = Time.zone.now.try do |t|
21
+ t.respond_to?(:to_fs) ? t.to_fs(:number) : t.to_s(:number)
22
+ end
21
23
  filename =
22
24
  (request.params[:resources] || controller.controller_path)
23
25
  .gsub(/#{SLASH}|#{COLONS}/o, HYPHEN)
@@ -16,7 +16,7 @@ module Wallaby
16
16
  next if class_names.blank?
17
17
 
18
18
  class_names.each_with_object(hash) do |mode_name, map|
19
- mode_name.model_finder.new.all.each do |model_class|
19
+ mode_name.model_finder.new.all.each do |model_class| # rubocop:disable Rails/FindEach
20
20
  map[model_class] = mode_name
21
21
  end
22
22
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Wallaby
4
4
  module Core
5
- VERSION = '0.3.0.beta1' # :nodoc:
5
+ VERSION = '0.3.0.beta2' # :nodoc:
6
6
  end
7
7
  end
@@ -5,7 +5,7 @@ module Wallaby
5
5
  class Engine < ::Rails::Engine
6
6
  initializer 'wallaby.development.reload' do |_|
7
7
  # NOTE: Rails reload! will hit here
8
- # @see http://rmosolgo.github.io/blog/2017/04/12/watching-files-during-rails-development/
8
+ # @see https://rmosolgo.github.io/ruby/rails/2017/04/12/watching-files-during-rails-development.html
9
9
  config.to_prepare do
10
10
  Map.clear if Rails.env.development? || Rails.configuration.eager_load
11
11
  end
@@ -15,7 +15,7 @@ module Wallaby
15
15
  # Require models under {Configuration#model_paths}
16
16
  # @see #model_file_paths
17
17
  def require_models
18
- new.model_file_paths.each { |path| require_dependency(path) }
18
+ new.model_file_paths.each { |path| require_dependency(path) } # rubocop:disable Rails/RequireDependency, Lint/RedundantCopDisableDirective
19
19
  end
20
20
  end
21
21
 
@@ -30,7 +30,9 @@ module Wallaby
30
30
  # @!attribute [r] eager_load_paths
31
31
  # @return [Array<String, Pathname>]
32
32
  def eager_load_paths # :nodoc:
33
- @eager_load_paths ||= Rails.configuration.eager_load_paths
33
+ @eager_load_paths ||=
34
+ Rails.configuration.paths['app'].expanded
35
+ .concat(Rails.configuration.eager_load_paths)
34
36
  end
35
37
 
36
38
  # @!attribute [w] model_paths
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wallaby-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0.beta1
4
+ version: 0.3.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tian Chen
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-22 00:00:00.000000000 Z
11
+ date: 2024-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -16,40 +16,34 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.2.0
20
- - - "<"
21
- - !ruby/object:Gem::Version
22
- version: 7.1.0
19
+ version: 6.0.0
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
24
  - - ">="
28
25
  - !ruby/object:Gem::Version
29
- version: 4.2.0
30
- - - "<"
31
- - !ruby/object:Gem::Version
32
- version: 7.1.0
26
+ version: 6.0.0
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: railties
35
29
  requirement: !ruby/object:Gem::Requirement
36
30
  requirements:
37
31
  - - ">="
38
32
  - !ruby/object:Gem::Version
39
- version: 4.2.0
33
+ version: 6.0.0
40
34
  - - "<"
41
35
  - !ruby/object:Gem::Version
42
- version: 7.1.0
36
+ version: 8.0.0
43
37
  type: :runtime
44
38
  prerelease: false
45
39
  version_requirements: !ruby/object:Gem::Requirement
46
40
  requirements:
47
41
  - - ">="
48
42
  - !ruby/object:Gem::Version
49
- version: 4.2.0
43
+ version: 6.0.0
50
44
  - - "<"
51
45
  - !ruby/object:Gem::Version
52
- version: 7.1.0
46
+ version: 8.0.0
53
47
  - !ruby/object:Gem::Dependency
54
48
  name: parslet
55
49
  requirement: !ruby/object:Gem::Requirement
@@ -331,7 +325,7 @@ metadata:
331
325
  source_code_uri: https://github.com/wallaby-rails/wallaby-core
332
326
  changelog_uri: https://github.com/wallaby-rails/wallaby-core/blob/master/CHANGELOG.md
333
327
  rubygems_mfa_required: 'true'
334
- post_install_message:
328
+ post_install_message:
335
329
  rdoc_options: []
336
330
  require_paths:
337
331
  - lib
@@ -342,12 +336,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
342
336
  version: '0'
343
337
  required_rubygems_version: !ruby/object:Gem::Requirement
344
338
  requirements:
345
- - - ">"
339
+ - - ">="
346
340
  - !ruby/object:Gem::Version
347
- version: 1.3.1
341
+ version: '0'
348
342
  requirements: []
349
- rubygems_version: 3.3.25
350
- signing_key:
343
+ rubygems_version: 3.5.5
344
+ signing_key:
351
345
  specification_version: 4
352
346
  summary: The core of Wallaby
353
347
  test_files: []