wallaby 5.1.5 → 5.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -1
- data/app/controllers/wallaby/abstract_resources_controller.rb +171 -187
- data/app/controllers/wallaby/application_controller.rb +15 -4
- data/app/controllers/wallaby/base_controller.rb +1 -3
- data/app/controllers/wallaby/secure_controller.rb +10 -6
- data/app/security/ability.rb +1 -0
- data/app/views/wallaby/resources/form/_float.html.erb +1 -1
- data/config/locales/wallaby.en.yml +5 -0
- data/lib/adaptors/wallaby/active_record.rb +1 -1
- data/lib/adaptors/wallaby/active_record/model_decorator.rb +17 -19
- data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder.rb +7 -0
- data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/association_builder.rb +11 -0
- data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/polymorphic_builder.rb +10 -1
- data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/sti_builder.rb +14 -7
- data/lib/adaptors/wallaby/active_record/model_decorator/title_field_finder.rb +4 -0
- data/lib/adaptors/wallaby/active_record/model_finder.rb +4 -3
- data/lib/adaptors/wallaby/active_record/model_pagination_provider.rb +3 -6
- data/lib/adaptors/wallaby/active_record/model_service_provider.rb +12 -3
- data/lib/adaptors/wallaby/active_record/model_service_provider/normalizer.rb +16 -1
- data/lib/adaptors/wallaby/active_record/model_service_provider/permitter.rb +14 -2
- data/lib/adaptors/wallaby/active_record/model_service_provider/querier.rb +46 -1
- data/lib/adaptors/wallaby/active_record/model_service_provider/querier/transformer.rb +11 -5
- data/lib/adaptors/wallaby/active_record/model_service_provider/validator.rb +6 -0
- data/lib/concerns/wallaby/resources_helper_methods.rb +44 -0
- data/lib/decorators/wallaby/abstract_resource_decorator.rb +9 -4
- data/lib/errors/wallaby/model_not_found.rb +1 -0
- data/lib/errors/wallaby/resource_not_found.rb +1 -0
- data/lib/forms/wallaby/form_builder.rb +5 -3
- data/lib/helpers/wallaby/application_helper.rb +10 -1
- data/lib/helpers/wallaby/base_helper.rb +12 -4
- data/lib/helpers/wallaby/form_helper.rb +7 -4
- data/lib/helpers/wallaby/links_helper.rb +10 -7
- data/lib/helpers/wallaby/resources_helper.rb +2 -0
- data/lib/helpers/wallaby/secure_helper.rb +13 -7
- data/lib/helpers/wallaby/styling_helper.rb +1 -1
- data/lib/interfaces/wallaby/mode.rb +38 -16
- data/lib/interfaces/wallaby/model_decorator.rb +36 -27
- data/lib/interfaces/wallaby/model_decorator/field_helpers.rb +12 -2
- data/lib/interfaces/wallaby/model_finder.rb +1 -0
- data/lib/interfaces/wallaby/model_pagination_provider.rb +6 -5
- data/lib/interfaces/wallaby/model_service_provider.rb +10 -2
- data/lib/paginators/wallaby/abstract_resource_paginator.rb +6 -1
- data/lib/parsers/wallaby/parser.rb +1 -0
- data/lib/responders/wallaby/abstract_responder.rb +15 -2
- data/lib/routes/wallaby/resources_router.rb +4 -0
- data/lib/servicers/wallaby/abstract_model_servicer.rb +25 -1
- data/lib/servicers/wallaby/model_servicer.rb +1 -0
- data/lib/services/wallaby/link_options_normalizer.rb +13 -9
- data/lib/services/wallaby/lookup_context_wrapper.rb +11 -2
- data/lib/services/wallaby/map.rb +107 -69
- data/lib/services/wallaby/map/mode_mapper.rb +2 -0
- data/lib/services/wallaby/map/model_class_collector.rb +7 -0
- data/lib/services/wallaby/map/model_class_mapper.rb +15 -7
- data/lib/services/wallaby/partial_renderer.rb +7 -0
- data/lib/services/wallaby/prefixes_builder.rb +18 -0
- data/lib/services/wallaby/sorting/hash_builder.rb +7 -1
- data/lib/services/wallaby/sorting/link_builder.rb +6 -1
- data/lib/services/wallaby/sorting/next_builder.rb +23 -2
- data/lib/tree/wallaby/node.rb +2 -0
- data/lib/utils/wallaby/test_utils.rb +32 -0
- data/lib/utils/wallaby/utils.rb +51 -5
- data/lib/wallaby.rb +1 -0
- data/lib/wallaby/configuration.rb +9 -3
- data/lib/wallaby/configuration/features.rb +2 -1
- data/lib/wallaby/configuration/mapping.rb +66 -0
- data/lib/wallaby/configuration/metadata.rb +1 -0
- data/lib/wallaby/configuration/pagination.rb +2 -1
- data/lib/wallaby/engine.rb +4 -0
- data/lib/wallaby/version.rb +1 -1
- metadata +5 -3
- data/lib/tasks/wallaby_tasks.rake +0 -4
data/lib/tree/wallaby/node.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Wallaby
|
2
|
+
# Utils for test
|
3
|
+
module TestUtils
|
4
|
+
class << self
|
5
|
+
# @param context
|
6
|
+
# @param controller_class [Class]
|
7
|
+
def around_crud(context, controller_class = nil)
|
8
|
+
context.before do
|
9
|
+
controller_class ||= described_class
|
10
|
+
controller_path = controller_class.controller_path
|
11
|
+
Wallaby::TestUtils.draw(routes, controller_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
context.after { Rails.application.reload_routes! }
|
15
|
+
end
|
16
|
+
|
17
|
+
# @param routes
|
18
|
+
# @param controller_path [String]
|
19
|
+
def draw(routes, controller_path)
|
20
|
+
routes.draw do
|
21
|
+
get ':resources', to: "#{controller_path}#index", as: :resources
|
22
|
+
get ':resources/:id', to: "#{controller_path}#show", as: :resource
|
23
|
+
get ':resources/new', to: "#{controller_path}#new"
|
24
|
+
get ':resources/:id/edit', to: "#{controller_path}#edit"
|
25
|
+
post ':resources', to: "#{controller_path}#create"
|
26
|
+
patch ':resources/:id', to: "#{controller_path}#update"
|
27
|
+
delete ':resources/:id', to: "#{controller_path}#destroy"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/utils/wallaby/utils.rb
CHANGED
@@ -1,22 +1,55 @@
|
|
1
1
|
module Wallaby
|
2
2
|
# Utils
|
3
3
|
module Utils
|
4
|
+
# @param klass [Class]
|
5
|
+
# @return [Boolean] whether a class is anonymous
|
6
|
+
def self.anonymous_class?(klass)
|
7
|
+
klass.name.blank? || klass.to_s.start_with?('#<Class')
|
8
|
+
end
|
9
|
+
|
10
|
+
# Help to translate a message for a class
|
11
|
+
# @param object [Object]
|
12
|
+
# @param key [String, Symbol]
|
13
|
+
# @param options [Hash]
|
14
|
+
# @return [String] a message for this class
|
15
|
+
def self.translate_class(object, key, options = {})
|
16
|
+
klass = object.is_a?(Class) ? object : object.class
|
17
|
+
key = [klass.name, key].join(SLASH).underscore.gsub(SLASH, DOT)
|
18
|
+
I18n.t key, options
|
19
|
+
end
|
20
|
+
|
21
|
+
# Convert model class (e.g. `Namespace::Product`) into resources name
|
22
|
+
# (e.g. `namespace::products`)
|
23
|
+
# @param model_class [Class, String] model class
|
24
|
+
# @return [String] resources name
|
4
25
|
def self.to_resources_name(model_class)
|
5
26
|
return EMPTY_STRING if model_class.blank?
|
6
27
|
model_class.to_s.underscore.gsub(SLASH, COLONS).pluralize
|
7
28
|
end
|
8
29
|
|
30
|
+
# Convert model class (e.g. `Namespace::Product`) into model label
|
31
|
+
# (e.g. `Namespace / Product`)
|
32
|
+
# @param model_class [Class, String] model class
|
33
|
+
# @return [String] model label
|
9
34
|
def self.to_model_label(model_class)
|
10
35
|
return EMPTY_STRING if model_class.blank?
|
11
36
|
model_class_name = to_model_name model_class
|
12
37
|
model_class_name.titleize.gsub(SLASH, SPACE + SLASH + SPACE)
|
13
38
|
end
|
14
39
|
|
40
|
+
# Convert resources name (e.g. `namespace::products`) into model name
|
41
|
+
# (e.g. `Namespace::Product`)
|
42
|
+
# @param resources_name [String] resources name
|
43
|
+
# @return [String] model name
|
15
44
|
def self.to_model_name(resources_name)
|
16
45
|
return EMPTY_STRING if resources_name.blank?
|
17
46
|
resources_name.to_s.singularize.gsub(COLONS, SLASH).camelize
|
18
47
|
end
|
19
48
|
|
49
|
+
# Convert resources name (e.g. `namespace::products`) into model class
|
50
|
+
# (e.g. `Namespace::Product`)
|
51
|
+
# @param resources_name [String] resources name
|
52
|
+
# @return [Class] model class
|
20
53
|
def self.to_model_class(resources_name)
|
21
54
|
return if resources_name.blank?
|
22
55
|
class_name = to_model_name resources_name
|
@@ -27,30 +60,42 @@ module Wallaby
|
|
27
60
|
raise ModelNotFound, class_name
|
28
61
|
end
|
29
62
|
|
63
|
+
# Find filter name in the following precedences:
|
64
|
+
# - filter name argument
|
65
|
+
# - filters that has been marked as default
|
66
|
+
# - `:all`
|
67
|
+
# @param filter_name [String, Symbol] filter name
|
68
|
+
# @param filters [Hash] filter metadata
|
69
|
+
# @return [String, Symbol]
|
30
70
|
def self.find_filter_name(filter_name, filters)
|
31
71
|
filter_name || # from params
|
32
72
|
filters.find { |_k, v| v[:default] }.try(:first) || # from default value
|
33
73
|
:all # last resort
|
34
74
|
end
|
35
75
|
|
76
|
+
# @todo maybe delegate this label thing to the mode?
|
77
|
+
# @param field_name [String, Symbol] field name
|
78
|
+
# @return [String] field label
|
36
79
|
def self.to_field_label(field_name, metadata)
|
37
80
|
field_name = field_name.to_s if field_name.is_a? Symbol
|
38
81
|
metadata[:label] || field_name.humanize
|
39
82
|
end
|
40
83
|
|
84
|
+
# Return `form` for `new/create/edit/update`
|
85
|
+
# @param action_name [String]
|
86
|
+
# @return [String] action name
|
41
87
|
def self.to_partial_name(action_name)
|
42
88
|
FORM_ACTIONS.include?(action_name) ? 'form' : action_name
|
43
89
|
end
|
44
90
|
|
45
|
-
def self.to_hash(array)
|
46
|
-
Hash[*array.flatten(1)]
|
47
|
-
end
|
48
|
-
|
49
91
|
# @see http://stackoverflow.com/a/8710663/1326499
|
92
|
+
# @param object [Object]
|
93
|
+
# @return [Object] a clone object
|
50
94
|
def self.clone(object)
|
51
95
|
::Marshal.load(::Marshal.dump(object))
|
52
96
|
end
|
53
97
|
|
98
|
+
# Preload files
|
54
99
|
def self.preload_all
|
55
100
|
::Wallaby::ApplicationController.to_s
|
56
101
|
preload 'app/models/**/*.rb'
|
@@ -60,9 +105,10 @@ module Wallaby
|
|
60
105
|
preload 'app/**/*.rb'
|
61
106
|
end
|
62
107
|
|
108
|
+
# Preload files
|
63
109
|
def self.preload(file_pattern)
|
64
110
|
Dir[file_pattern].each do |file_path|
|
65
|
-
begin
|
111
|
+
begin # rubocop:disable Style/RedundantBegin
|
66
112
|
name = file_path[%r{app/[^/]+/(.+)\.rb}, 1].gsub('concerns/', '')
|
67
113
|
class_name = name.classify
|
68
114
|
class_name.constantize unless Module.const_defined? class_name
|
data/lib/wallaby.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
module Wallaby
|
3
3
|
# Global configuration
|
4
4
|
class Configuration
|
5
|
-
attr_writer :base_controller
|
5
|
+
attr_writer :base_controller
|
6
6
|
|
7
7
|
# @return [Class]
|
8
8
|
# the controller that Wallaby should inherit from
|
@@ -29,6 +29,12 @@ module Wallaby
|
|
29
29
|
@security ||= Security.new
|
30
30
|
end
|
31
31
|
|
32
|
+
# @return [Wallaby::Configuration::Mapping]
|
33
|
+
# configuration for Wallaby::Map
|
34
|
+
def mapping
|
35
|
+
@mapping ||= Mapping.new
|
36
|
+
end
|
37
|
+
|
32
38
|
# @return [Wallaby::Configuration::Metadata] configuration of metadata
|
33
39
|
def metadata
|
34
40
|
@metadata ||= Metadata.new
|
@@ -47,8 +53,8 @@ module Wallaby
|
|
47
53
|
# Clear all configurations
|
48
54
|
# @return nil
|
49
55
|
def clear
|
50
|
-
@base_controller, @models, @security, @
|
51
|
-
@features = []
|
56
|
+
@base_controller, @models, @security, @mapping,
|
57
|
+
@pagination, @metadata, @features = []
|
52
58
|
end
|
53
59
|
end
|
54
60
|
|
@@ -1,9 +1,10 @@
|
|
1
1
|
module Wallaby
|
2
2
|
class Configuration
|
3
|
-
# Configuration for
|
3
|
+
# Configuration for features
|
4
4
|
class Features
|
5
5
|
attr_writer :turbolinks_enabled
|
6
6
|
|
7
|
+
# @return [Boolean] a feture flag for turbolinks
|
7
8
|
def turbolinks_enabled
|
8
9
|
@turbolinks_enabled ||= false
|
9
10
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module Wallaby
|
2
|
+
class Configuration
|
3
|
+
# Configuration used in Wallaby::Map
|
4
|
+
class Mapping
|
5
|
+
attr_writer \
|
6
|
+
:resources_controller, :resource_decorator,
|
7
|
+
:resource_paginator, :model_servicer
|
8
|
+
|
9
|
+
# This configuration is used by `Wallaby::Map.controller_map`
|
10
|
+
#
|
11
|
+
# If `resources_controller` is not defined,
|
12
|
+
# it will fallback to `Admin::ApplicationController`,
|
13
|
+
# then `Wallaby::ResourcesController`.
|
14
|
+
# @return [Class] configurable resources controller
|
15
|
+
def resources_controller
|
16
|
+
@resources_controller ||=
|
17
|
+
defined?(::Admin::ApplicationController) \
|
18
|
+
&& ::Admin::ApplicationController < ::Wallaby::ResourcesController \
|
19
|
+
&& ::Admin::ApplicationController
|
20
|
+
@resources_controller ||= ResourcesController
|
21
|
+
end
|
22
|
+
|
23
|
+
# This configuration is used by `Wallaby::Map.resource_decorator_map`
|
24
|
+
#
|
25
|
+
# If `resource_decorator` is not defined,
|
26
|
+
# it will fallback to `Admin::ApplicationDecorator`,
|
27
|
+
# then `Wallaby::ResourcesDecorator`.
|
28
|
+
# @return [Class] configurable resource decorator
|
29
|
+
def resource_decorator
|
30
|
+
@resource_decorator ||=
|
31
|
+
defined?(::Admin::ApplicationDecorator) \
|
32
|
+
&& ::Admin::ApplicationDecorator < ::Wallaby::ResourceDecorator \
|
33
|
+
&& ::Admin::ApplicationDecorator
|
34
|
+
@resource_decorator ||= ResourceDecorator
|
35
|
+
end
|
36
|
+
|
37
|
+
# This configuration is used by `Wallaby::Map.paginator_map`
|
38
|
+
#
|
39
|
+
# If resource_paginator is not defined,
|
40
|
+
# it will fallback to `Admin::ApplicationPaginator`,
|
41
|
+
# then `Wallaby::ResourcesPaginator`.
|
42
|
+
# @return [Class] configurable resource paginator
|
43
|
+
def resource_paginator
|
44
|
+
@resource_paginator ||=
|
45
|
+
defined?(::Admin::ApplicationPaginator) \
|
46
|
+
&& ::Admin::ApplicationPaginator < ::Wallaby::ResourcePaginator \
|
47
|
+
&& ::Admin::ApplicationPaginator
|
48
|
+
@resource_paginator ||= ResourcePaginator
|
49
|
+
end
|
50
|
+
|
51
|
+
# This configuration is used by `Wallaby::Map.servicer_map`
|
52
|
+
#
|
53
|
+
# If model_servicer is not defined,
|
54
|
+
# it will fallback to `Admin::ApplicationServicer`,
|
55
|
+
# then `Wallaby::ResourcesServicer`.
|
56
|
+
# @return [Class] configurable model servicer
|
57
|
+
def model_servicer
|
58
|
+
@model_servicer ||=
|
59
|
+
defined?(::Admin::ApplicationServicer) \
|
60
|
+
&& ::Admin::ApplicationServicer < ::Wallaby::ModelServicer \
|
61
|
+
&& ::Admin::ApplicationServicer
|
62
|
+
@model_servicer ||= ModelServicer
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
data/lib/wallaby/engine.rb
CHANGED
@@ -70,11 +70,13 @@ end
|
|
70
70
|
require 'wallaby/configuration'
|
71
71
|
require 'wallaby/configuration/models'
|
72
72
|
require 'wallaby/configuration/security'
|
73
|
+
require 'wallaby/configuration/mapping'
|
73
74
|
require 'wallaby/configuration/metadata'
|
74
75
|
require 'wallaby/configuration/pagination'
|
75
76
|
require 'wallaby/configuration/features'
|
76
77
|
|
77
78
|
require 'utils/wallaby/utils'
|
79
|
+
require 'utils/wallaby/test_utils'
|
78
80
|
require 'routes/wallaby/resources_router'
|
79
81
|
require 'tree/wallaby/node'
|
80
82
|
|
@@ -146,5 +148,7 @@ require 'helpers/wallaby/base_helper'
|
|
146
148
|
require 'helpers/wallaby/secure_helper'
|
147
149
|
require 'helpers/wallaby/application_helper'
|
148
150
|
|
151
|
+
require 'concerns/wallaby/resources_helper_methods'
|
152
|
+
|
149
153
|
require 'responders/wallaby/abstract_responder'
|
150
154
|
require 'responders/wallaby/resources_responder'
|
data/lib/wallaby/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wallaby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.1.
|
4
|
+
version: 5.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tianwen Chen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bootstrap-sass
|
@@ -509,6 +509,7 @@ files:
|
|
509
509
|
- lib/adaptors/wallaby/active_record/model_service_provider/querier.rb
|
510
510
|
- lib/adaptors/wallaby/active_record/model_service_provider/querier/transformer.rb
|
511
511
|
- lib/adaptors/wallaby/active_record/model_service_provider/validator.rb
|
512
|
+
- lib/concerns/wallaby/resources_helper_methods.rb
|
512
513
|
- lib/decorators/wallaby/abstract_resource_decorator.rb
|
513
514
|
- lib/decorators/wallaby/resource_decorator.rb
|
514
515
|
- lib/errors/wallaby/general_error.rb
|
@@ -554,12 +555,13 @@ files:
|
|
554
555
|
- lib/services/wallaby/sorting/link_builder.rb
|
555
556
|
- lib/services/wallaby/sorting/next_builder.rb
|
556
557
|
- lib/services/wallaby/url_for.rb
|
557
|
-
- lib/tasks/wallaby_tasks.rake
|
558
558
|
- lib/tree/wallaby/node.rb
|
559
|
+
- lib/utils/wallaby/test_utils.rb
|
559
560
|
- lib/utils/wallaby/utils.rb
|
560
561
|
- lib/wallaby.rb
|
561
562
|
- lib/wallaby/configuration.rb
|
562
563
|
- lib/wallaby/configuration/features.rb
|
564
|
+
- lib/wallaby/configuration/mapping.rb
|
563
565
|
- lib/wallaby/configuration/metadata.rb
|
564
566
|
- lib/wallaby/configuration/models.rb
|
565
567
|
- lib/wallaby/configuration/pagination.rb
|