wallaby-core 0.1.2 → 0.2.3

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.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +60 -13
  3. data/app/controllers/wallaby/resources_controller.rb +15 -374
  4. data/app/security/ability.rb +1 -1
  5. data/config/locales/wallaby.en.yml +92 -128
  6. data/config/locales/wallaby_class.en.yml +2 -23
  7. data/lib/adaptors/wallaby/custom/default_provider.rb +1 -1
  8. data/lib/adaptors/wallaby/custom/model_decorator.rb +8 -7
  9. data/lib/adaptors/wallaby/custom/model_finder.rb +3 -2
  10. data/lib/adaptors/wallaby/custom/model_pagination_provider.rb +1 -1
  11. data/lib/adaptors/wallaby/custom/model_service_provider.rb +1 -40
  12. data/lib/authorizers/wallaby/cancancan_authorization_provider.rb +30 -24
  13. data/lib/authorizers/wallaby/default_authorization_provider.rb +6 -13
  14. data/lib/authorizers/wallaby/model_authorizer.rb +43 -67
  15. data/lib/authorizers/wallaby/pundit_authorization_provider.rb +21 -30
  16. data/lib/concerns/wallaby/application_concern.rb +110 -0
  17. data/lib/concerns/wallaby/authentication_concern.rb +162 -0
  18. data/lib/concerns/wallaby/authorizable.rb +8 -14
  19. data/lib/concerns/wallaby/baseable.rb +91 -10
  20. data/lib/concerns/wallaby/decoratable.rb +3 -3
  21. data/lib/concerns/wallaby/engineable.rb +1 -1
  22. data/lib/concerns/wallaby/fieldable.rb +4 -4
  23. data/lib/concerns/wallaby/paginatable.rb +3 -3
  24. data/lib/concerns/wallaby/prefixable.rb +21 -0
  25. data/lib/concerns/wallaby/resourcable.rb +4 -35
  26. data/lib/concerns/wallaby/resources_concern.rb +434 -0
  27. data/lib/concerns/wallaby/servicable.rb +4 -10
  28. data/lib/decorators/wallaby/resource_decorator.rb +53 -80
  29. data/lib/errors/wallaby/{cell_handling.rb → class_not_found.rb} +1 -1
  30. data/lib/errors/wallaby/model_not_found.rb +3 -1
  31. data/lib/errors/wallaby/resource_not_found.rb +1 -1
  32. data/lib/helpers/wallaby/application_helper.rb +6 -9
  33. data/lib/helpers/wallaby/form_helper.rb +2 -9
  34. data/lib/helpers/wallaby/index_helper.rb +2 -14
  35. data/lib/helpers/wallaby/links_helper.rb +5 -5
  36. data/lib/helpers/wallaby/resources_helper.rb +3 -7
  37. data/lib/helpers/wallaby/secure_helper.rb +3 -3
  38. data/lib/helpers/wallaby/styling_helper.rb +17 -3
  39. data/lib/interfaces/wallaby/mode.rb +5 -5
  40. data/lib/interfaces/wallaby/model_authorization_provider.rb +15 -13
  41. data/lib/interfaces/wallaby/model_decorator.rb +15 -3
  42. data/lib/paginators/wallaby/model_paginator.rb +14 -45
  43. data/lib/parsers/wallaby/parser.rb +49 -14
  44. data/lib/routes/wallaby/resources_router.rb +1 -1
  45. data/lib/servicers/wallaby/model_servicer.rb +32 -62
  46. data/lib/services/wallaby/map/mode_mapper.rb +14 -14
  47. data/lib/services/wallaby/map/model_class_collector.rb +2 -2
  48. data/lib/services/wallaby/map/model_class_mapper.rb +7 -26
  49. data/lib/services/wallaby/prefixes_builder.rb +15 -49
  50. data/lib/services/wallaby/type_renderer.rb +3 -13
  51. data/lib/utils/wallaby/locale.rb +53 -0
  52. data/lib/utils/wallaby/model_utils.rb +4 -3
  53. data/lib/utils/wallaby/module_utils.rb +1 -1
  54. data/lib/utils/wallaby/utils.rb +10 -15
  55. data/lib/wallaby/class_array.rb +75 -0
  56. data/lib/wallaby/class_hash.rb +94 -0
  57. data/lib/wallaby/classifier.rb +29 -0
  58. data/lib/wallaby/configuration/mapping.rb +33 -27
  59. data/lib/wallaby/configuration/metadata.rb +1 -1
  60. data/lib/wallaby/configuration/models.rb +5 -9
  61. data/lib/wallaby/configuration/security.rb +6 -3
  62. data/lib/wallaby/configuration/sorting.rb +1 -1
  63. data/lib/wallaby/configuration.rb +31 -2
  64. data/lib/wallaby/constants.rb +10 -8
  65. data/lib/wallaby/core/version.rb +1 -1
  66. data/lib/wallaby/core.rb +21 -16
  67. data/lib/wallaby/engine.rb +9 -20
  68. data/lib/wallaby/logger.rb +35 -0
  69. data/lib/wallaby/map.rb +20 -17
  70. data/lib/wallaby/preloader.rb +77 -0
  71. metadata +48 -22
  72. data/app/controllers/wallaby/application_controller.rb +0 -84
  73. data/app/controllers/wallaby/secure_controller.rb +0 -81
  74. data/lib/concerns/wallaby/rails_overridden_methods.rb +0 -42
  75. data/lib/concerns/wallaby/themeable.rb +0 -40
  76. data/lib/paginators/wallaby/resource_paginator.rb +0 -12
  77. data/lib/renderers/wallaby/cell.rb +0 -137
  78. data/lib/renderers/wallaby/cell_resolver.rb +0 -89
  79. data/lib/renderers/wallaby/custom_lookup_context.rb +0 -64
  80. data/lib/renderers/wallaby/custom_partial_renderer.rb +0 -33
  81. data/lib/renderers/wallaby/custom_renderer.rb +0 -16
  82. data/lib/utils/wallaby/cell_utils.rb +0 -34
  83. data/lib/utils/wallaby/preload_utils.rb +0 -44
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ # This is a constant-safe hash that stores Class key/value as String
5
+ # and returns value as Class if it was a Class.
6
+ #
7
+ # It can be used for global methods (e.g. {Wallaby::Map.mode_map}) which cache the computed result,
8
+ # so that when Rails reloads, it won't complain that old Class constants still exist in
9
+ # ObjectSpace (see https://github.com/wallaby-rails/wallaby/issues/181).
10
+ #
11
+ # ```
12
+ # A copy of SupportAdmin::ApplicationAuthorizer has been removed from the module tree but is still active!
13
+ # ```
14
+ #
15
+ # As there won't be any Class constants being stored, they will converted to String in {#internal} Hash.
16
+ class ClassHash
17
+ # @!attribute [r] internal
18
+ # @return [Hash] The hash to store Class keys/values as String.
19
+ attr_reader :internal
20
+
21
+ # @param [Hash] hash
22
+ def initialize(hash = {})
23
+ @internal =
24
+ (hash || {})
25
+ .transform_keys(&method(:to_class_name))
26
+ .transform_values(&method(:to_class_name))
27
+ end
28
+
29
+ # @!attribute [r] origin
30
+ # @return [Hash] The original hash.
31
+ def origin
32
+ # NOTE: DO NOT cache it by using instance variable!
33
+ @internal
34
+ .transform_keys(&method(:to_class))
35
+ .transform_values(&method(:to_class))
36
+ .reject { |k, v| k.nil? || v.nil? }
37
+ end
38
+
39
+ # @!method keys
40
+ # Return the keys of {#origin}.
41
+ delegate :keys, to: :origin
42
+
43
+ # @!method values
44
+ # Return the values of {#origin}.
45
+ delegate :values, to: :origin
46
+
47
+ # @!method ==(other)
48
+ # Compare #{origin} with other.
49
+ delegate :==, to: :origin
50
+
51
+ # Save the key/value to the {#internal} hash, and convert the Class key/value to String
52
+ def []=(key, value)
53
+ @internal[to_class_name(key)] = to_class_name(value)
54
+ end
55
+
56
+ # Return the value for the given key, and convert the value back to Class if it was a Class
57
+ def [](key)
58
+ to_class @internal[to_class_name(key)]
59
+ end
60
+
61
+ # @param other [Hash]
62
+ # @return [Wallaby::ClassHash] new Class hash
63
+ def merge(other)
64
+ self.class.new origin.merge(other.try(:origin) || other)
65
+ end
66
+
67
+ # @return [Wallaby::ClassHash] new Class hash
68
+ def select(&block)
69
+ self.class.new origin.select(&block)
70
+ end
71
+
72
+ # Ensure to freeze the {#internal}
73
+ # @return [Wallaby::ClassHash] self
74
+ def freeze
75
+ @internal.freeze
76
+ super
77
+ end
78
+
79
+ protected
80
+
81
+ # Convert to Class name
82
+ def to_class_name(klass)
83
+ klass.is_a?(Class) ? [klass.name, true] : [klass, false]
84
+ end
85
+
86
+ # Convert to Class
87
+ def to_class(pair)
88
+ val, is_class = pair
89
+ is_class ? val.constantize : val
90
+ rescue NameError
91
+ Logger.error "`#{val}` is not a valid Class name."
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ # Concern to handle the conversion between Class and String
5
+ module Classifier
6
+ # Convert Class to String. If not Class, unchanged.
7
+ # @param klass [Object]
8
+ # @return [String] if klass is a Class
9
+ # @return [Object] if klass is not a Class
10
+ def to_class_name(klass)
11
+ klass.try(:name) || klass || nil
12
+ end
13
+
14
+ # Convert String to Class. If not String, unchanged.
15
+ # @param name [Object]
16
+ # @return [Class] if name is a Class
17
+ # @return [Object] if name is not a String
18
+ # @return [nil] if class cannot be found
19
+ def to_class(name)
20
+ return name unless name.is_a? String
21
+
22
+ # NOTE: DO NOT try to use const_defined? and const_get EVER.
23
+ # This is Rails, use constantize
24
+ name.constantize
25
+ rescue NameError
26
+ Logger.error "`#{name}` is not a valid Class name."
27
+ end
28
+ end
29
+ end
@@ -3,10 +3,14 @@
3
3
  module Wallaby
4
4
  class Configuration
5
5
  # Configuration used in {Wallaby::Map}
6
- # @since 5.1.6
6
+ # @since wallaby-5.1.6
7
7
  class Mapping
8
+ include Classifier
9
+
8
10
  # @!attribute [w] resources_controller
9
- attr_writer :resources_controller
11
+ def resources_controller=(resources_controller)
12
+ @resources_controller = to_class_name resources_controller
13
+ end
10
14
 
11
15
  # @!attribute [r] resources_controller
12
16
  # To globally configure the resources controller.
@@ -21,17 +25,19 @@ module Wallaby
21
25
  # config.mapping.resources_controller = ::GlobalResourcesController
22
26
  # end
23
27
  # @return [Class] resources controller class
24
- # @since 5.1.6
28
+ # @since wallaby-5.1.6
25
29
  def resources_controller
26
30
  @resources_controller ||=
27
31
  defined?(::Admin::ApplicationController) \
28
32
  && ::Admin::ApplicationController < ::Wallaby::ResourcesController \
29
- && ::Admin::ApplicationController
30
- @resources_controller ||= ResourcesController
33
+ && 'Admin::ApplicationController'
34
+ to_class @resources_controller ||= 'Wallaby::ResourcesController'
31
35
  end
32
36
 
33
37
  # @!attribute [w] resource_decorator
34
- attr_writer :resource_decorator
38
+ def resource_decorator=(resource_decorator)
39
+ @resource_decorator = to_class_name resource_decorator
40
+ end
35
41
 
36
42
  # @!attribute [r] resource_decorator
37
43
  # To globally configure the resource decorator.
@@ -46,17 +52,19 @@ module Wallaby
46
52
  # config.mapping.resource_decorator = ::GlobalResourceDecorator
47
53
  # end
48
54
  # @return [Class] resource decorator class
49
- # @since 5.1.6
55
+ # @since wallaby-5.1.6
50
56
  def resource_decorator
51
57
  @resource_decorator ||=
52
58
  defined?(::Admin::ApplicationDecorator) \
53
59
  && ::Admin::ApplicationDecorator < ::Wallaby::ResourceDecorator \
54
- && ::Admin::ApplicationDecorator
55
- @resource_decorator ||= ResourceDecorator
60
+ && 'Admin::ApplicationDecorator'
61
+ to_class @resource_decorator ||= 'Wallaby::ResourceDecorator'
56
62
  end
57
63
 
58
64
  # @!attribute [w] model_servicer
59
- attr_writer :model_servicer
65
+ def model_servicer=(model_servicer)
66
+ @model_servicer = to_class_name model_servicer
67
+ end
60
68
 
61
69
  # @!attribute [r] model_servicer
62
70
  # To globally configure the model servicer.
@@ -71,23 +79,19 @@ module Wallaby
71
79
  # config.mapping.model_servicer = ::GlobalModelServicer
72
80
  # end
73
81
  # @return [Class] model servicer class
74
- # @since 5.1.6
82
+ # @since wallaby-5.1.6
75
83
  def model_servicer
76
84
  @model_servicer ||=
77
85
  defined?(::Admin::ApplicationServicer) \
78
86
  && ::Admin::ApplicationServicer < ::Wallaby::ModelServicer \
79
- && ::Admin::ApplicationServicer
80
- @model_servicer ||= ModelServicer
81
- end
82
-
83
- # @deprecated Use {#model_paginator=} instead. It will be removed from 5.3.*
84
- def resource_paginator=(resource_paginator)
85
- Utils.deprecate 'deprecation.resource_paginator=', caller: caller
86
- self.model_paginator = resource_paginator
87
+ && 'Admin::ApplicationServicer'
88
+ to_class @model_servicer ||= 'Wallaby::ModelServicer'
87
89
  end
88
90
 
89
91
  # @!attribute [w] model_authorizer
90
- attr_writer :model_authorizer
92
+ def model_authorizer=(model_authorizer)
93
+ @model_authorizer = to_class_name model_authorizer
94
+ end
91
95
 
92
96
  # @!attribute [r] model_authorizer
93
97
  # To globally configure the model authorizer.
@@ -102,17 +106,19 @@ module Wallaby
102
106
  # config.mapping.model_authorizer = ::GlobalModelAuthorizer
103
107
  # end
104
108
  # @return [Class] model authorizer class
105
- # @since 5.2.0
109
+ # @since wallaby-5.2.0
106
110
  def model_authorizer
107
111
  @model_authorizer ||=
108
112
  defined?(::Admin::ApplicationAuthorizer) \
109
113
  && ::Admin::ApplicationAuthorizer < ::Wallaby::ModelAuthorizer \
110
- && ::Admin::ApplicationAuthorizer
111
- @model_authorizer ||= ModelAuthorizer
114
+ && 'Admin::ApplicationAuthorizer'
115
+ to_class @model_authorizer ||= 'Wallaby::ModelAuthorizer'
112
116
  end
113
117
 
114
118
  # @!attribute [w] model_paginator
115
- attr_writer :model_paginator
119
+ def model_paginator=(model_paginator)
120
+ @model_paginator = to_class_name model_paginator
121
+ end
116
122
 
117
123
  # @!attribute [r] model_paginator
118
124
  # To globally configure the resource paginator.
@@ -127,13 +133,13 @@ module Wallaby
127
133
  # config.mapping.model_paginator = ::GlobalModelPaginator
128
134
  # end
129
135
  # @return [Class] resource paginator class
130
- # @since 5.2.0
136
+ # @since wallaby-5.2.0
131
137
  def model_paginator
132
138
  @model_paginator ||=
133
139
  defined?(::Admin::ApplicationPaginator) \
134
140
  && ::Admin::ApplicationPaginator < ::Wallaby::ModelPaginator \
135
- && ::Admin::ApplicationPaginator
136
- @model_paginator ||= ModelPaginator
141
+ && 'Admin::ApplicationPaginator'
142
+ to_class @model_paginator ||= 'Wallaby::ModelPaginator'
137
143
  end
138
144
  end
139
145
  end
@@ -14,7 +14,7 @@ module Wallaby
14
14
  # config.metadata.max = 50
15
15
  # end
16
16
  # @return [Integer] max number of characters to truncate, default to 20
17
- # @since 5.1.6
17
+ # @since wallaby-5.1.6
18
18
  def max
19
19
  @max ||= DEFAULT_MAX
20
20
  end
@@ -2,11 +2,7 @@
2
2
 
3
3
  module Wallaby
4
4
  class Configuration
5
- # @note In `development` environment, Rails recreates module/class constants on reload event.
6
- # If constants are cached/stored, they will become stale and Rails will raise conflicts.
7
- #
8
- # Hence, class name strings should be stored instead.
9
- # When classes are requested, strings will be constantized into classes.
5
+ # @deprecated will move this configuration to {Wallaby::ResourcesController} from 6.2
10
6
  # Models configuration to specify the model classes that Wallaby should handle.
11
7
  class Models
12
8
  # @note If models are whitelisted, models exclusion will NOT be applied.
@@ -17,12 +13,12 @@ module Wallaby
17
13
  # end
18
14
  # @param models [Array<Class, String>]
19
15
  def set(*models)
20
- @models = Array(models).flatten.map(&:to_s)
16
+ @models = ClassArray.new(models.flatten)
21
17
  end
22
18
 
23
19
  # @return [Array<Class>] the models configured
24
20
  def presence
25
- (@models ||= []).map(&:constantize)
21
+ @models ||= ClassArray.new # rubocop:disable Naming/MemoizedInstanceVariableName
26
22
  end
27
23
 
28
24
  # @note If models are whitelisted using {#set}, models exclusion will NOT be applied.
@@ -33,13 +29,13 @@ module Wallaby
33
29
  # end
34
30
  # @param models [Array<Class, String>]
35
31
  def exclude(*models)
36
- @excludes = Array(models).flatten.map(&:to_s)
32
+ @excludes = ClassArray.new(models.flatten)
37
33
  end
38
34
 
39
35
  # @return [Array<Class>] the list of models to exclude.
40
36
  # By default, `ActiveRecord::SchemaMigration` is excluded.
41
37
  def excludes
42
- (@excludes ||= ['ActiveRecord::SchemaMigration']).map(&:constantize)
38
+ @excludes ||= ClassArray.new ['ActiveRecord::SchemaMigration']
43
39
  end
44
40
  end
45
41
  end
@@ -3,6 +3,7 @@
3
3
  module Wallaby
4
4
  class Configuration
5
5
  # Security configuration
6
+ # TODO: remove this from 6.2
6
7
  class Security
7
8
  # Default block to return nil for current user
8
9
  DEFAULT_CURRENT_USER = -> { nil }
@@ -20,7 +21,7 @@ module Wallaby
20
21
  # Wallaby.config do |config|
21
22
  # config.security.logout_path = 'logout_path'
22
23
  # end
23
- # @since 5.1.4
24
+ # @since wallaby-5.1.4
24
25
  attr_accessor :logout_path
25
26
 
26
27
  # @!attribute logout_method
@@ -34,7 +35,7 @@ module Wallaby
34
35
  # Wallaby.config do |config|
35
36
  # config.security.logout_method = 'post'
36
37
  # end
37
- # @since 5.1.4
38
+ # @since wallaby-5.1.4
38
39
  attr_accessor :logout_method
39
40
 
40
41
  # @!attribute email_method
@@ -45,7 +46,7 @@ module Wallaby
45
46
  # Wallaby.config do |config|
46
47
  # config.security.email_method = 'email_address'
47
48
  # end
48
- # @since 5.1.4
49
+ # @since wallaby-5.1.4
49
50
  attr_accessor :email_method
50
51
 
51
52
  # To globally configure how to get user object.
@@ -57,6 +58,7 @@ module Wallaby
57
58
  # end
58
59
  # @yield A block to get user object. All application controller methods can be used in the block.
59
60
  def current_user(&block)
61
+ Logger.deprecated 'Wallaby will remove security.current_user? from 6.2.'
60
62
  if block_given?
61
63
  @current_user = block
62
64
  else
@@ -81,6 +83,7 @@ module Wallaby
81
83
  # end
82
84
  # @yield A block to authenticate user. All application controller methods can be used in the block.
83
85
  def authenticate(&block)
86
+ Logger.deprecated 'Wallaby will remove security.authenticate from 6.2.'
84
87
  if block_given?
85
88
  @authenticate = block
86
89
  else
@@ -3,7 +3,7 @@
3
3
  module Wallaby
4
4
  class Configuration
5
5
  # Sorting global configuration
6
- # @since 5.2.0
6
+ # @since wallaby-5.2.0
7
7
  class Sorting
8
8
  # @!attribute [w] strategy
9
9
  attr_writer :strategy
@@ -4,8 +4,37 @@
4
4
  module Wallaby
5
5
  # Global configuration
6
6
  class Configuration
7
+ include Classifier
8
+
9
+ # @!attribute [w] model_paths
10
+ def model_paths=(*model_paths)
11
+ @model_paths =
12
+ model_paths.flatten.compact.presence.try do |paths|
13
+ next paths if paths.all? { |p| p.is_a?(String) }
14
+
15
+ raise(
16
+ ArgumentError,
17
+ 'Please provide a list of string paths, e.g. `["app/models", "app/core"]`'
18
+ )
19
+ end
20
+ end
21
+
22
+ # @!attribute [r] model_paths
23
+ # To configure the model folders that {Wallaby::Preloader} needs to load before everything else.
24
+ # @example To set the model paths
25
+ # Wallaby.config do |config|
26
+ # config.model_paths = ["app/models", "app/core"]
27
+ # end
28
+ # @return [Array<String>] model paths
29
+ # @since 0.2.2
30
+ def model_paths
31
+ @model_paths ||= %w(app/models)
32
+ end
33
+
7
34
  # @!attribute [w] base_controller
8
- attr_writer :base_controller
35
+ def base_controller=(base_controller)
36
+ @base_controller = to_class_name base_controller
37
+ end
9
38
 
10
39
  # @!attribute [r] base_controller
11
40
  # To globally configure the base controller class that {Wallaby::ApplicationController} should inherit from.
@@ -18,7 +47,7 @@ module Wallaby
18
47
  # end
19
48
  # @return [Class] base controller class
20
49
  def base_controller
21
- @base_controller ||= ::ApplicationController
50
+ to_class @base_controller ||= '::ApplicationController'
22
51
  end
23
52
 
24
53
  # @return [Wallaby::Configuration::Models] models configuration for custom mode
@@ -1,14 +1,16 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Wallaby
4
- EMPTY_STRING = ''.html_safe
5
- EMPTY_HASH = {}.freeze
6
- EMPTY_ARRAY = [].freeze
7
- SPACE = ' '
8
- SLASH = '/'
9
- COLONS = '::'
10
- COMMA = ','
11
- DOT = '.'
4
+ EMPTY_STRING = ''.html_safe.freeze # :nodoc:
5
+ EMPTY_HASH = {}.freeze # :nodoc:
6
+ EMPTY_ARRAY = [].freeze # :nodoc:
7
+ SPACE = ' ' # :nodoc:
8
+ SLASH = '/' # :nodoc:
9
+ COLONS = '::' # :nodoc:
10
+ COMMA = ',' # :nodoc:
11
+ DOT = '.' # :nodoc:
12
+ UNDERSCORE = '_' # :nodoc:
13
+ PCT = '%' # :nodoc:
12
14
 
13
15
  # Default page size for {Wallaby::Configuration::Pagination#page_size}
14
16
  DEFAULT_PAGE_SIZE = 20
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Wallaby
4
4
  module Core
5
- VERSION = '0.1.2'
5
+ VERSION = '0.2.3' # :nodoc:
6
6
  end
7
7
  end
data/lib/wallaby/core.rb CHANGED
@@ -1,14 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'active_model'
3
4
  require 'parslet'
4
5
  require 'responders'
6
+ require 'wallaby/view'
5
7
 
6
8
  require 'wallaby/core/version'
7
9
  require 'wallaby/constants'
10
+ require 'wallaby/logger'
11
+ require 'wallaby/preloader'
8
12
  require 'wallaby/engine'
9
13
 
10
- require 'support/action_dispatch/routing/mapper'
11
-
14
+ # Global class attributes that holds the most important configuration/information
15
+ # NOTE: DO NOT store any Class in both configuration and map
16
+ require 'wallaby/classifier'
17
+ require 'wallaby/class_array'
18
+ require 'wallaby/class_hash'
12
19
  require 'wallaby/configuration'
13
20
  require 'wallaby/configuration/features'
14
21
  require 'wallaby/configuration/mapping'
@@ -19,20 +26,25 @@ require 'wallaby/configuration/security'
19
26
  require 'wallaby/configuration/sorting'
20
27
  require 'wallaby/map'
21
28
 
29
+ require 'support/action_dispatch/routing/mapper'
30
+
22
31
  require 'routes/wallaby/resources_router'
23
32
  require 'tree/wallaby/node'
24
33
  require 'parsers/wallaby/parser'
25
34
 
26
- require 'utils/wallaby/cell_utils'
27
35
  require 'utils/wallaby/field_utils'
28
36
  require 'utils/wallaby/filter_utils'
37
+ require 'utils/wallaby/locale'
29
38
  require 'utils/wallaby/model_utils'
30
39
  require 'utils/wallaby/module_utils'
31
40
  require 'utils/wallaby/params_utils'
32
- require 'utils/wallaby/preload_utils'
33
41
  require 'utils/wallaby/test_utils'
34
42
  require 'utils/wallaby/utils'
35
43
 
44
+ require 'concerns/wallaby/application_concern'
45
+ require 'concerns/wallaby/authentication_concern'
46
+ require 'concerns/wallaby/resources_concern'
47
+
36
48
  require 'concerns/wallaby/authorizable'
37
49
  require 'concerns/wallaby/baseable'
38
50
  require 'concerns/wallaby/decoratable'
@@ -40,11 +52,10 @@ require 'concerns/wallaby/defaultable'
40
52
  require 'concerns/wallaby/engineable'
41
53
  require 'concerns/wallaby/fieldable'
42
54
  require 'concerns/wallaby/paginatable'
43
- require 'concerns/wallaby/rails_overridden_methods'
55
+ require 'concerns/wallaby/prefixable'
44
56
  require 'concerns/wallaby/resourcable'
45
57
  require 'concerns/wallaby/servicable'
46
58
  require 'concerns/wallaby/shared_helpers'
47
- require 'concerns/wallaby/themeable'
48
59
 
49
60
  require 'interfaces/wallaby/mode'
50
61
  require 'interfaces/wallaby/model_decorator'
@@ -54,12 +65,13 @@ require 'interfaces/wallaby/model_pagination_provider'
54
65
  require 'interfaces/wallaby/model_authorization_provider'
55
66
 
56
67
  require 'errors/wallaby/general_error'
68
+
69
+ require 'errors/wallaby/class_not_found'
57
70
  require 'errors/wallaby/invalid_error'
58
71
  require 'errors/wallaby/not_implemented'
59
72
  require 'errors/wallaby/not_found'
60
73
  require 'errors/wallaby/model_not_found'
61
74
  require 'errors/wallaby/resource_not_found'
62
- require 'errors/wallaby/cell_handling'
63
75
 
64
76
  require 'errors/wallaby/forbidden'
65
77
  require 'errors/wallaby/not_authenticated'
@@ -68,7 +80,6 @@ require 'errors/wallaby/unprocessable_entity'
68
80
  require 'decorators/wallaby/resource_decorator'
69
81
  require 'servicers/wallaby/model_servicer'
70
82
  require 'paginators/wallaby/model_paginator'
71
- require 'paginators/wallaby/resource_paginator'
72
83
  require 'authorizers/wallaby/model_authorizer'
73
84
  require 'authorizers/wallaby/default_authorization_provider'
74
85
  require 'authorizers/wallaby/cancancan_authorization_provider'
@@ -96,19 +107,13 @@ require 'helpers/wallaby/links_helper'
96
107
  require 'helpers/wallaby/styling_helper'
97
108
 
98
109
  require 'helpers/wallaby/base_helper'
99
- require 'helpers/wallaby/resources_helper'
100
- require 'helpers/wallaby/secure_helper'
101
110
  require 'helpers/wallaby/application_helper'
111
+ require 'helpers/wallaby/secure_helper'
112
+ require 'helpers/wallaby/resources_helper'
102
113
 
103
114
  require 'responders/wallaby/resources_responder'
104
115
  require 'responders/wallaby/json_api_responder'
105
116
 
106
- require 'renderers/wallaby/cell'
107
- require 'renderers/wallaby/cell_resolver'
108
- require 'renderers/wallaby/custom_lookup_context'
109
- require 'renderers/wallaby/custom_renderer'
110
- require 'renderers/wallaby/custom_partial_renderer'
111
-
112
117
  require 'adaptors/wallaby/custom'
113
118
  require 'adaptors/wallaby/custom/default_provider'
114
119
  require 'adaptors/wallaby/custom/model_finder'
@@ -3,40 +3,29 @@
3
3
  module Wallaby
4
4
  # Wallaby engine
5
5
  class Engine < ::Rails::Engine
6
- initializer 'wallaby.autoload_paths', before: :set_load_path do |_|
7
- # NOTE: this needs to be run before `set_load_path`
8
- # so that files under `app/views` can be eager loaded
9
- # and therefore, Wallaby's renderer can function properly
10
- [Rails.configuration].each do |conf|
11
- next if conf.paths['app/views'].eager_load?
12
-
13
- conf.paths.add 'app/views', eager_load: true
14
- end
15
- end
16
-
17
6
  initializer 'wallaby.development.reload' do |_|
18
7
  # NOTE: Rails reload! will hit here
19
8
  # @see http://rmosolgo.github.io/blog/2017/04/12/watching-files-during-rails-development/
20
9
  config.to_prepare do
21
10
  if Rails.env.development? || Rails.configuration.eager_load
22
- Rails.logger.debug ' [WALLABY] Reloading...'
23
- ::Wallaby::Map.clear
24
- ::Wallaby::PreloadUtils.require_all
11
+ Logger.debug 'Reloading after Rails\' reload...', sourcing: false
12
+ Map.clear
13
+ Preloader.require_all
25
14
  end
26
15
  end
27
16
  end
28
17
 
29
18
  config.before_eager_load do
30
- # NOTE: We need to ensure that the core models are loaded before anything else
31
- Rails.logger.debug ' [WALLABY] Preload all model files.'
32
- ::Wallaby::PreloadUtils.require_one 'app/models'
19
+ # NOTE: The models must be loaded before everything else
20
+ Logger.debug 'Preload all `app/models` files.', sourcing: false
21
+ Preloader.require_models
33
22
  end
34
23
 
35
- # Preload the rest files
36
24
  config.after_initialize do
25
+ # Load the rest files
37
26
  unless Rails.env.development? || Rails.configuration.eager_load
38
- Rails.logger.debug ' [WALLABY] Preload files after initialize.'
39
- ::Wallaby::PreloadUtils.require_all
27
+ Logger.debug 'Preload all other eager load files after initialize.', sourcing: false
28
+ Preloader.require_all
40
29
  end
41
30
  end
42
31
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ # Custom logger
5
+ module Logger
6
+ class << self
7
+ %i(unknown fatal error warn info debug deprecated).each do |method_id|
8
+ define_method method_id do |message, replacements = {}|
9
+ sourcing = replacements.delete :sourcing # sourcing can be set to false
10
+ heading = replacements.delete(:heading) || 'WALLABY '
11
+ new_message, from = normalize message, sourcing != false && Array(caller[sourcing || 0]) || nil
12
+ Rails.logger.public_send(
13
+ method_id == :deprecated ? :warn : method_id,
14
+ "#{heading}#{method_id.to_s.upcase}: #{format new_message, replacements}#{from}"
15
+ )
16
+ nil
17
+ end
18
+ end
19
+
20
+ protected
21
+
22
+ # @param message [Object]
23
+ def normalize(message, sources)
24
+ case message
25
+ when String
26
+ [message, sources && "\nfrom #{sources.join(" \n")}"]
27
+ when StandardError
28
+ [message.message, sources && "\n#{message.backtrace.join("\n")}"]
29
+ else
30
+ [message.inspect, sources && "\nfrom #{sources.join(" \n")}"]
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end