wallaby-core 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (108) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +31 -0
  4. data/app/controllers/wallaby/application_controller.rb +84 -0
  5. data/app/controllers/wallaby/resources_controller.rb +381 -0
  6. data/app/controllers/wallaby/secure_controller.rb +81 -0
  7. data/app/security/ability.rb +13 -0
  8. data/config/locales/wallaby.en.yml +140 -0
  9. data/config/locales/wallaby_class.en.yml +30 -0
  10. data/config/routes.rb +39 -0
  11. data/lib/adaptors/wallaby/custom.rb +7 -0
  12. data/lib/adaptors/wallaby/custom/default_provider.rb +9 -0
  13. data/lib/adaptors/wallaby/custom/model_decorator.rb +71 -0
  14. data/lib/adaptors/wallaby/custom/model_finder.rb +13 -0
  15. data/lib/adaptors/wallaby/custom/model_pagination_provider.rb +14 -0
  16. data/lib/adaptors/wallaby/custom/model_service_provider.rb +48 -0
  17. data/lib/authorizers/wallaby/cancancan_authorization_provider.rb +72 -0
  18. data/lib/authorizers/wallaby/default_authorization_provider.rb +58 -0
  19. data/lib/authorizers/wallaby/model_authorizer.rb +100 -0
  20. data/lib/authorizers/wallaby/pundit_authorization_provider.rb +89 -0
  21. data/lib/concerns/wallaby/authorizable.rb +103 -0
  22. data/lib/concerns/wallaby/baseable.rb +36 -0
  23. data/lib/concerns/wallaby/decoratable.rb +101 -0
  24. data/lib/concerns/wallaby/defaultable.rb +38 -0
  25. data/lib/concerns/wallaby/engineable.rb +61 -0
  26. data/lib/concerns/wallaby/fieldable.rb +78 -0
  27. data/lib/concerns/wallaby/paginatable.rb +72 -0
  28. data/lib/concerns/wallaby/rails_overridden_methods.rb +42 -0
  29. data/lib/concerns/wallaby/resourcable.rb +149 -0
  30. data/lib/concerns/wallaby/servicable.rb +68 -0
  31. data/lib/concerns/wallaby/shared_helpers.rb +22 -0
  32. data/lib/concerns/wallaby/themeable.rb +40 -0
  33. data/lib/decorators/wallaby/resource_decorator.rb +189 -0
  34. data/lib/errors/wallaby/cell_handling.rb +6 -0
  35. data/lib/errors/wallaby/forbidden.rb +6 -0
  36. data/lib/errors/wallaby/general_error.rb +6 -0
  37. data/lib/errors/wallaby/invalid_error.rb +6 -0
  38. data/lib/errors/wallaby/model_not_found.rb +11 -0
  39. data/lib/errors/wallaby/not_authenticated.rb +6 -0
  40. data/lib/errors/wallaby/not_found.rb +6 -0
  41. data/lib/errors/wallaby/not_implemented.rb +6 -0
  42. data/lib/errors/wallaby/resource_not_found.rb +11 -0
  43. data/lib/errors/wallaby/unprocessable_entity.rb +6 -0
  44. data/lib/forms/wallaby/form_builder.rb +60 -0
  45. data/lib/helpers/wallaby/application_helper.rb +79 -0
  46. data/lib/helpers/wallaby/base_helper.rb +65 -0
  47. data/lib/helpers/wallaby/configuration_helper.rb +18 -0
  48. data/lib/helpers/wallaby/form_helper.rb +62 -0
  49. data/lib/helpers/wallaby/index_helper.rb +84 -0
  50. data/lib/helpers/wallaby/links_helper.rb +213 -0
  51. data/lib/helpers/wallaby/resources_helper.rb +52 -0
  52. data/lib/helpers/wallaby/secure_helper.rb +54 -0
  53. data/lib/helpers/wallaby/styling_helper.rb +82 -0
  54. data/lib/interfaces/wallaby/mode.rb +72 -0
  55. data/lib/interfaces/wallaby/model_authorization_provider.rb +99 -0
  56. data/lib/interfaces/wallaby/model_decorator.rb +168 -0
  57. data/lib/interfaces/wallaby/model_finder.rb +12 -0
  58. data/lib/interfaces/wallaby/model_pagination_provider.rb +107 -0
  59. data/lib/interfaces/wallaby/model_service_provider.rb +84 -0
  60. data/lib/paginators/wallaby/model_paginator.rb +115 -0
  61. data/lib/paginators/wallaby/resource_paginator.rb +12 -0
  62. data/lib/parsers/wallaby/parser.rb +34 -0
  63. data/lib/renderers/wallaby/cell.rb +137 -0
  64. data/lib/renderers/wallaby/cell_resolver.rb +89 -0
  65. data/lib/renderers/wallaby/custom_lookup_context.rb +64 -0
  66. data/lib/renderers/wallaby/custom_partial_renderer.rb +33 -0
  67. data/lib/renderers/wallaby/custom_renderer.rb +16 -0
  68. data/lib/responders/wallaby/json_api_responder.rb +101 -0
  69. data/lib/responders/wallaby/resources_responder.rb +28 -0
  70. data/lib/routes/wallaby/resources_router.rb +72 -0
  71. data/lib/servicers/wallaby/model_servicer.rb +154 -0
  72. data/lib/services/wallaby/engine_name_finder.rb +22 -0
  73. data/lib/services/wallaby/engine_url_for.rb +46 -0
  74. data/lib/services/wallaby/link_options_normalizer.rb +19 -0
  75. data/lib/services/wallaby/map/mode_mapper.rb +27 -0
  76. data/lib/services/wallaby/map/model_class_collector.rb +49 -0
  77. data/lib/services/wallaby/map/model_class_mapper.rb +38 -0
  78. data/lib/services/wallaby/prefixes_builder.rb +66 -0
  79. data/lib/services/wallaby/sorting/hash_builder.rb +19 -0
  80. data/lib/services/wallaby/sorting/link_builder.rb +69 -0
  81. data/lib/services/wallaby/sorting/next_builder.rb +63 -0
  82. data/lib/services/wallaby/sorting/single_builder.rb +20 -0
  83. data/lib/services/wallaby/type_renderer.rb +50 -0
  84. data/lib/support/action_dispatch/routing/mapper.rb +75 -0
  85. data/lib/tree/wallaby/node.rb +25 -0
  86. data/lib/utils/wallaby/cell_utils.rb +34 -0
  87. data/lib/utils/wallaby/field_utils.rb +43 -0
  88. data/lib/utils/wallaby/filter_utils.rb +20 -0
  89. data/lib/utils/wallaby/model_utils.rb +51 -0
  90. data/lib/utils/wallaby/module_utils.rb +46 -0
  91. data/lib/utils/wallaby/params_utils.rb +14 -0
  92. data/lib/utils/wallaby/preload_utils.rb +44 -0
  93. data/lib/utils/wallaby/test_utils.rb +34 -0
  94. data/lib/utils/wallaby/utils.rb +27 -0
  95. data/lib/wallaby/configuration.rb +103 -0
  96. data/lib/wallaby/configuration/features.rb +24 -0
  97. data/lib/wallaby/configuration/mapping.rb +140 -0
  98. data/lib/wallaby/configuration/metadata.rb +23 -0
  99. data/lib/wallaby/configuration/models.rb +46 -0
  100. data/lib/wallaby/configuration/pagination.rb +30 -0
  101. data/lib/wallaby/configuration/security.rb +98 -0
  102. data/lib/wallaby/configuration/sorting.rb +28 -0
  103. data/lib/wallaby/constants.rb +45 -0
  104. data/lib/wallaby/core.rb +117 -0
  105. data/lib/wallaby/core/version.rb +7 -0
  106. data/lib/wallaby/engine.rb +43 -0
  107. data/lib/wallaby/map.rb +170 -0
  108. metadata +222 -0
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ # Utils
5
+ module Utils
6
+ # Display deprecate message including the line where it's used
7
+ # @param key [String]
8
+ # @param caller [String] the line where it's called
9
+ # @param options [Hash]
10
+ def self.deprecate(key, caller:, options: {})
11
+ warn I18n.t(key, options.merge(from: caller[0]))
12
+ end
13
+
14
+ # @deprecated Use {Wallaby::FilterUtils.filter_name_by} instead. It will be removed from 5.3.*
15
+ def self.find_filter_name(filter_name, filters)
16
+ deprecate 'deprecation.find_filter_name', caller: caller
17
+ FilterUtils.filter_name_by filter_name, filters
18
+ end
19
+
20
+ # @see http://stackoverflow.com/a/8710663/1326499
21
+ # @param object [Object]
22
+ # @return [Object] a clone object
23
+ def self.clone(object)
24
+ ::Marshal.load(::Marshal.dump(object))
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Wallaby
4
+ module Wallaby
5
+ # Global configuration
6
+ class Configuration
7
+ # @!attribute [w] base_controller
8
+ attr_writer :base_controller
9
+
10
+ # @!attribute [r] base_controller
11
+ # To globally configure the base controller class that {Wallaby::ApplicationController} should inherit from.
12
+ #
13
+ # If no configuration is given, {Wallaby::ApplicationController} defaults to inherit from `::ApplicationController`
14
+ # from the host Rails app.
15
+ # @example To update base controller to `CoreController` in `config/initializers/wallaby.rb`
16
+ # Wallaby.config do |config|
17
+ # config.base_controller = ::CoreController
18
+ # end
19
+ # @return [Class] base controller class
20
+ def base_controller
21
+ @base_controller ||= ::ApplicationController
22
+ end
23
+
24
+ # @return [Wallaby::Configuration::Models] models configuration for custom mode
25
+ def custom_models
26
+ @custom_models ||= Models.new
27
+ end
28
+
29
+ # To globally configure the models for custom mode.
30
+ # @example To update the model classes in `config/initializers/wallaby.rb`
31
+ # Wallaby.config do |config|
32
+ # config.custom_models = [Product, Order]
33
+ # end
34
+ # @param models [Array<[Class, String]>] a list of model classes/name strings
35
+ def custom_models=(models)
36
+ custom_models.set models
37
+ end
38
+
39
+ # @return [Wallaby::Configuration::Models] models configuration
40
+ def models
41
+ @models ||= Models.new
42
+ end
43
+
44
+ # To globally configure the models that Wallaby should handle.
45
+ # @example To update the model classes in `config/initializers/wallaby.rb`
46
+ # Wallaby.config do |config|
47
+ # config.models = [Product, Order]
48
+ # end
49
+ # @param models [Array<[Class, String]>] a list of model classes/name strings
50
+ def models=(models)
51
+ self.models.set models
52
+ end
53
+
54
+ # @return [Wallaby::Configuration::Security] security configuration
55
+ def security
56
+ @security ||= Security.new
57
+ end
58
+
59
+ # @return [Wallaby::Configuration::Mapping] mapping configuration
60
+ def mapping
61
+ @mapping ||= Mapping.new
62
+ end
63
+
64
+ # @return [Wallaby::Configuration::Metadata] metadata configuration
65
+ def metadata
66
+ @metadata ||= Metadata.new
67
+ end
68
+
69
+ # @return [Wallaby::Configuration::Pagination] pagination configuration
70
+ def pagination
71
+ @pagination ||= Pagination.new
72
+ end
73
+
74
+ # @return [Wallaby::Configuration::Features] features configuration
75
+ def features
76
+ @features ||= Features.new
77
+ end
78
+
79
+ # @return [Wallaby::Configuration::Sorting] sorting configuration
80
+ def sorting
81
+ @sorting ||= Sorting.new
82
+ end
83
+
84
+ # Clear all configurations
85
+ def clear
86
+ instance_variables.each { |name| instance_variable_set name, nil }
87
+ end
88
+ end
89
+
90
+ # @return [Wallaby::Configuration]
91
+ def self.configuration
92
+ @configuration ||= Configuration.new
93
+ end
94
+
95
+ # To config settings using a block
96
+ # @example
97
+ # Wallaby.config do |c|
98
+ # c.pagination.page_size = 20
99
+ # end
100
+ def self.config
101
+ yield configuration
102
+ end
103
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ class Configuration
5
+ # Features global configuration
6
+ class Features
7
+ # @!attribute [w] turbolinks_enabled
8
+ attr_writer :turbolinks_enabled
9
+
10
+ # @!attribute [r] turbolinks_enabled
11
+ # To globally configure whether to use turbolinks or not.
12
+ #
13
+ # By default, turbolinks is disabled.
14
+ # @example To enable turbolinks:
15
+ # Wallaby.config do |config|
16
+ # config.features.turbolinks_enabled = true
17
+ # end
18
+ # @return [Boolean] a feture flag of turbolinks, default to false.
19
+ def turbolinks_enabled
20
+ @turbolinks_enabled ||= false
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ class Configuration
5
+ # Configuration used in {Wallaby::Map}
6
+ # @since 5.1.6
7
+ class Mapping
8
+ # @!attribute [w] resources_controller
9
+ attr_writer :resources_controller
10
+
11
+ # @!attribute [r] resources_controller
12
+ # To globally configure the resources controller.
13
+ #
14
+ # If no configuration is given, Wallaby will look up from the following controller classes
15
+ # and use the first available one:
16
+ #
17
+ # - ::Admin::ApplicationController (only when it inherits from {Wallaby::ResourcesController})
18
+ # - {Wallaby::ResourcesController}
19
+ # @example To update the resources controller to `GlobalResourcesController` in `config/initializers/wallaby.rb`
20
+ # Wallaby.config do |config|
21
+ # config.mapping.resources_controller = ::GlobalResourcesController
22
+ # end
23
+ # @return [Class] resources controller class
24
+ # @since 5.1.6
25
+ def resources_controller
26
+ @resources_controller ||=
27
+ defined?(::Admin::ApplicationController) \
28
+ && ::Admin::ApplicationController < ::Wallaby::ResourcesController \
29
+ && ::Admin::ApplicationController
30
+ @resources_controller ||= ResourcesController
31
+ end
32
+
33
+ # @!attribute [w] resource_decorator
34
+ attr_writer :resource_decorator
35
+
36
+ # @!attribute [r] resource_decorator
37
+ # To globally configure the resource decorator.
38
+ #
39
+ # If no configuration is given, Wallaby will look up from the following decorator classes
40
+ # and use the first available one:
41
+ #
42
+ # - ::Admin::ApplicationDecorator (only when it inherits from {Wallaby::ResourceDecorator})
43
+ # - {Wallaby::ResourceDecorator}
44
+ # @example To update the resource decorator to `GlobalResourceDecorator` in `config/initializers/wallaby.rb`
45
+ # Wallaby.config do |config|
46
+ # config.mapping.resource_decorator = ::GlobalResourceDecorator
47
+ # end
48
+ # @return [Class] resource decorator class
49
+ # @since 5.1.6
50
+ def resource_decorator
51
+ @resource_decorator ||=
52
+ defined?(::Admin::ApplicationDecorator) \
53
+ && ::Admin::ApplicationDecorator < ::Wallaby::ResourceDecorator \
54
+ && ::Admin::ApplicationDecorator
55
+ @resource_decorator ||= ResourceDecorator
56
+ end
57
+
58
+ # @!attribute [w] model_servicer
59
+ attr_writer :model_servicer
60
+
61
+ # @!attribute [r] model_servicer
62
+ # To globally configure the model servicer.
63
+ #
64
+ # If no configuration is given, Wallaby will look up from the following servicer classes
65
+ # and use the first available one:
66
+ #
67
+ # - ::Admin::ApplicationServicer (only when it inherits from {Wallaby::ModelServicer})
68
+ # - {Wallaby::ModelServicer}
69
+ # @example To update the model servicer to `GlobalModelServicer` in `config/initializers/wallaby.rb`
70
+ # Wallaby.config do |config|
71
+ # config.mapping.model_servicer = ::GlobalModelServicer
72
+ # end
73
+ # @return [Class] model servicer class
74
+ # @since 5.1.6
75
+ def model_servicer
76
+ @model_servicer ||=
77
+ defined?(::Admin::ApplicationServicer) \
78
+ && ::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
+ end
88
+
89
+ # @!attribute [w] model_authorizer
90
+ attr_writer :model_authorizer
91
+
92
+ # @!attribute [r] model_authorizer
93
+ # To globally configure the model authorizer.
94
+ #
95
+ # If no configuration is given, Wallaby will look up from the following authorizer classes
96
+ # and use the first available one:
97
+ #
98
+ # - ::Admin::ApplicationAuthorizer (only when it inherits from {Wallaby::ModelAuthorizer})
99
+ # - {Wallaby::ModelAuthorizer}
100
+ # @example To update the model authorizer to `GlobalModelAuthorizer` in `config/initializers/wallaby.rb`
101
+ # Wallaby.config do |config|
102
+ # config.mapping.model_authorizer = ::GlobalModelAuthorizer
103
+ # end
104
+ # @return [Class] model authorizer class
105
+ # @since 5.2.0
106
+ def model_authorizer
107
+ @model_authorizer ||=
108
+ defined?(::Admin::ApplicationAuthorizer) \
109
+ && ::Admin::ApplicationAuthorizer < ::Wallaby::ModelAuthorizer \
110
+ && ::Admin::ApplicationAuthorizer
111
+ @model_authorizer ||= ModelAuthorizer
112
+ end
113
+
114
+ # @!attribute [w] model_paginator
115
+ attr_writer :model_paginator
116
+
117
+ # @!attribute [r] model_paginator
118
+ # To globally configure the resource paginator.
119
+ #
120
+ # If no configuration is given, Wallaby will look up from the following paginator classes
121
+ # and use the first available one:
122
+ #
123
+ # - ::Admin::ApplicationPaginator (only when it inherits from {Wallaby::ModelPaginator})
124
+ # - {Wallaby::ModelPaginator}
125
+ # @example To update the resource paginator to `GlobalModelPaginator` in `config/initializers/wallaby.rb`
126
+ # Wallaby.config do |config|
127
+ # config.mapping.model_paginator = ::GlobalModelPaginator
128
+ # end
129
+ # @return [Class] resource paginator class
130
+ # @since 5.2.0
131
+ def model_paginator
132
+ @model_paginator ||=
133
+ defined?(::Admin::ApplicationPaginator) \
134
+ && ::Admin::ApplicationPaginator < ::Wallaby::ModelPaginator \
135
+ && ::Admin::ApplicationPaginator
136
+ @model_paginator ||= ModelPaginator
137
+ end
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ class Configuration
5
+ # Metadata configuration
6
+ class Metadata
7
+ # @!attribute [w] max
8
+ attr_writer :max
9
+
10
+ # @!attribute [r] resources_controller
11
+ # To globally configure max number of characters to truncate.
12
+ # @example To update max number of characters to truncate to 50 in `config/initializers/wallaby.rb`
13
+ # Wallaby.config do |config|
14
+ # config.metadata.max = 50
15
+ # end
16
+ # @return [Integer] max number of characters to truncate, default to 20
17
+ # @since 5.1.6
18
+ def max
19
+ @max ||= DEFAULT_MAX
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
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.
10
+ # Models configuration to specify the model classes that Wallaby should handle.
11
+ class Models
12
+ # @note If models are whitelisted, models exclusion will NOT be applied.
13
+ # To globally configure what model classes that Wallaby should handle.
14
+ # @example To whitelist the model classes in `config/initializers/wallaby.rb`
15
+ # Wallaby.config do |config|
16
+ # config.models = [Product, Order]
17
+ # end
18
+ # @param models [Array<Class, String>]
19
+ def set(*models)
20
+ @models = Array(models).flatten.map(&:to_s)
21
+ end
22
+
23
+ # @return [Array<Class>] the models configured
24
+ def presence
25
+ (@models ||= []).map(&:constantize)
26
+ end
27
+
28
+ # @note If models are whitelisted using {#set}, models exclusion will NOT be applied.
29
+ # To globally configure what model classes to exclude.
30
+ # @example To exclude models in `config/initializers/wallaby.rb`
31
+ # Wallaby.config do |config|
32
+ # config.models.exclude Product, Order
33
+ # end
34
+ # @param models [Array<Class, String>]
35
+ def exclude(*models)
36
+ @excludes = Array(models).flatten.map(&:to_s)
37
+ end
38
+
39
+ # @return [Array<Class>] the list of models to exclude.
40
+ # By default, `ActiveRecord::SchemaMigration` is excluded.
41
+ def excludes
42
+ (@excludes ||= ['ActiveRecord::SchemaMigration']).map(&:constantize)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ class Configuration
5
+ # Pagination configuration
6
+ class Pagination
7
+ # @!attribute [w] page_size
8
+ attr_writer :page_size
9
+
10
+ # @!attribute [r] page_size
11
+ # To globally configure the page size for pagination.
12
+ #
13
+ # Page size can be one of the following values:
14
+ #
15
+ # - 10
16
+ # - 20
17
+ # - 50
18
+ # - 100
19
+ # @see Wallaby::PERS
20
+ # @example To update the page size in `config/initializers/wallaby.rb`
21
+ # Wallaby.config do |config|
22
+ # config.pagination.page_size = 50
23
+ # end
24
+ # @return [Integer] page size, default to 20
25
+ def page_size
26
+ @page_size ||= DEFAULT_PAGE_SIZE
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,98 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Wallaby
4
+ class Configuration
5
+ # Security configuration
6
+ class Security
7
+ # Default block to return nil for current user
8
+ DEFAULT_CURRENT_USER = -> { nil }
9
+ # Default block to return nil
10
+ DEFAULT_AUTHENTICATE = -> { true }
11
+
12
+ # @!attribute logout_path
13
+ # To globally configure the logout path.
14
+ #
15
+ # Wallaby does not implement any authentication (e.g. login/logout), therefore, logout path will be required
16
+ # so that Wallaby knows where to navigate the user to when user clicks the logout button.
17
+ #
18
+ # But once it detects `Devise`, it will use the path that Devise uses without the need of configuration.
19
+ # @example To update the logout path in `config/initializers/wallaby.rb`
20
+ # Wallaby.config do |config|
21
+ # config.security.logout_path = 'logout_path'
22
+ # end
23
+ # @since 5.1.4
24
+ attr_accessor :logout_path
25
+
26
+ # @!attribute logout_method
27
+ # To globally configure the logout HTTP method.
28
+ #
29
+ # Wallaby does not implement any authentication (e.g. login/logout), therefore, logout method will be required
30
+ # so that Wallaby knows how navigate the user via what HTTP method when user clicks the logout button.
31
+ #
32
+ # But once it detects `Devise`, it will use the HTTP method that Devise uses without the need of configuration.
33
+ # @example To update the logout method in `config/initializers/wallaby.rb`
34
+ # Wallaby.config do |config|
35
+ # config.security.logout_method = 'post'
36
+ # end
37
+ # @since 5.1.4
38
+ attr_accessor :logout_method
39
+
40
+ # @!attribute email_method
41
+ # To globally configure the method on {#current_user} to retrieve email address.
42
+ #
43
+ # If no configuration is given, it will attempt to call `email` on {#current_user}.
44
+ # @example To update the email method in `config/initializers/wallaby.rb`
45
+ # Wallaby.config do |config|
46
+ # config.security.email_method = 'email_address'
47
+ # end
48
+ # @since 5.1.4
49
+ attr_accessor :email_method
50
+
51
+ # To globally configure how to get user object.
52
+ # @example To update how to get the current user object in `config/initializers/wallaby.rb`
53
+ # Wallaby.config do |config|
54
+ # config.security.current_user do
55
+ # User.find_by_email session[:user_email]
56
+ # end
57
+ # end
58
+ # @yield A block to get user object. All application controller methods can be used in the block.
59
+ def current_user(&block)
60
+ if block_given?
61
+ @current_user = block
62
+ else
63
+ @current_user ||= DEFAULT_CURRENT_USER
64
+ end
65
+ end
66
+
67
+ # Check if {#current_user} configuration is set.
68
+ # @return [Boolean]
69
+ def current_user?
70
+ current_user != DEFAULT_CURRENT_USER
71
+ end
72
+
73
+ # To globally configure how to authenicate a user.
74
+ # @example
75
+ # Wallaby.config do |config|
76
+ # config.security.authenticate do
77
+ # authenticate_or_request_with_http_basic do |username, password|
78
+ # username == 'too_simple' && password == 'too_naive'
79
+ # end
80
+ # end
81
+ # end
82
+ # @yield A block to authenticate user. All application controller methods can be used in the block.
83
+ def authenticate(&block)
84
+ if block_given?
85
+ @authenticate = block
86
+ else
87
+ @authenticate ||= DEFAULT_AUTHENTICATE
88
+ end
89
+ end
90
+
91
+ # Check if {#authenticate} configuration is set.
92
+ # @return [Boolean]
93
+ def authenticate?
94
+ authenticate != DEFAULT_AUTHENTICATE
95
+ end
96
+ end
97
+ end
98
+ end