wallaby-core 0.1.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.
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