wallaby-core 0.3.0.beta1 → 0.3.0.beta2

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
  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: []