wallaby 5.1.5 → 5.1.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -1
  3. data/app/controllers/wallaby/abstract_resources_controller.rb +171 -187
  4. data/app/controllers/wallaby/application_controller.rb +15 -4
  5. data/app/controllers/wallaby/base_controller.rb +1 -3
  6. data/app/controllers/wallaby/secure_controller.rb +10 -6
  7. data/app/security/ability.rb +1 -0
  8. data/app/views/wallaby/resources/form/_float.html.erb +1 -1
  9. data/config/locales/wallaby.en.yml +5 -0
  10. data/lib/adaptors/wallaby/active_record.rb +1 -1
  11. data/lib/adaptors/wallaby/active_record/model_decorator.rb +17 -19
  12. data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder.rb +7 -0
  13. data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/association_builder.rb +11 -0
  14. data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/polymorphic_builder.rb +10 -1
  15. data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder/sti_builder.rb +14 -7
  16. data/lib/adaptors/wallaby/active_record/model_decorator/title_field_finder.rb +4 -0
  17. data/lib/adaptors/wallaby/active_record/model_finder.rb +4 -3
  18. data/lib/adaptors/wallaby/active_record/model_pagination_provider.rb +3 -6
  19. data/lib/adaptors/wallaby/active_record/model_service_provider.rb +12 -3
  20. data/lib/adaptors/wallaby/active_record/model_service_provider/normalizer.rb +16 -1
  21. data/lib/adaptors/wallaby/active_record/model_service_provider/permitter.rb +14 -2
  22. data/lib/adaptors/wallaby/active_record/model_service_provider/querier.rb +46 -1
  23. data/lib/adaptors/wallaby/active_record/model_service_provider/querier/transformer.rb +11 -5
  24. data/lib/adaptors/wallaby/active_record/model_service_provider/validator.rb +6 -0
  25. data/lib/concerns/wallaby/resources_helper_methods.rb +44 -0
  26. data/lib/decorators/wallaby/abstract_resource_decorator.rb +9 -4
  27. data/lib/errors/wallaby/model_not_found.rb +1 -0
  28. data/lib/errors/wallaby/resource_not_found.rb +1 -0
  29. data/lib/forms/wallaby/form_builder.rb +5 -3
  30. data/lib/helpers/wallaby/application_helper.rb +10 -1
  31. data/lib/helpers/wallaby/base_helper.rb +12 -4
  32. data/lib/helpers/wallaby/form_helper.rb +7 -4
  33. data/lib/helpers/wallaby/links_helper.rb +10 -7
  34. data/lib/helpers/wallaby/resources_helper.rb +2 -0
  35. data/lib/helpers/wallaby/secure_helper.rb +13 -7
  36. data/lib/helpers/wallaby/styling_helper.rb +1 -1
  37. data/lib/interfaces/wallaby/mode.rb +38 -16
  38. data/lib/interfaces/wallaby/model_decorator.rb +36 -27
  39. data/lib/interfaces/wallaby/model_decorator/field_helpers.rb +12 -2
  40. data/lib/interfaces/wallaby/model_finder.rb +1 -0
  41. data/lib/interfaces/wallaby/model_pagination_provider.rb +6 -5
  42. data/lib/interfaces/wallaby/model_service_provider.rb +10 -2
  43. data/lib/paginators/wallaby/abstract_resource_paginator.rb +6 -1
  44. data/lib/parsers/wallaby/parser.rb +1 -0
  45. data/lib/responders/wallaby/abstract_responder.rb +15 -2
  46. data/lib/routes/wallaby/resources_router.rb +4 -0
  47. data/lib/servicers/wallaby/abstract_model_servicer.rb +25 -1
  48. data/lib/servicers/wallaby/model_servicer.rb +1 -0
  49. data/lib/services/wallaby/link_options_normalizer.rb +13 -9
  50. data/lib/services/wallaby/lookup_context_wrapper.rb +11 -2
  51. data/lib/services/wallaby/map.rb +107 -69
  52. data/lib/services/wallaby/map/mode_mapper.rb +2 -0
  53. data/lib/services/wallaby/map/model_class_collector.rb +7 -0
  54. data/lib/services/wallaby/map/model_class_mapper.rb +15 -7
  55. data/lib/services/wallaby/partial_renderer.rb +7 -0
  56. data/lib/services/wallaby/prefixes_builder.rb +18 -0
  57. data/lib/services/wallaby/sorting/hash_builder.rb +7 -1
  58. data/lib/services/wallaby/sorting/link_builder.rb +6 -1
  59. data/lib/services/wallaby/sorting/next_builder.rb +23 -2
  60. data/lib/tree/wallaby/node.rb +2 -0
  61. data/lib/utils/wallaby/test_utils.rb +32 -0
  62. data/lib/utils/wallaby/utils.rb +51 -5
  63. data/lib/wallaby.rb +1 -0
  64. data/lib/wallaby/configuration.rb +9 -3
  65. data/lib/wallaby/configuration/features.rb +2 -1
  66. data/lib/wallaby/configuration/mapping.rb +66 -0
  67. data/lib/wallaby/configuration/metadata.rb +1 -0
  68. data/lib/wallaby/configuration/pagination.rb +2 -1
  69. data/lib/wallaby/engine.rb +4 -0
  70. data/lib/wallaby/version.rb +1 -1
  71. metadata +5 -3
  72. data/lib/tasks/wallaby_tasks.rake +0 -4
@@ -6,10 +6,12 @@ module Wallaby
6
6
 
7
7
  delegate :name, to: :klass
8
8
 
9
+ # @param klass [Class]
9
10
  def initialize(klass)
10
11
  @klass = klass
11
12
  end
12
13
 
14
+ # @return [Array<Class>] a list of children classes
13
15
  def children
14
16
  @children ||= []
15
17
  end
@@ -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
@@ -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
@@ -6,6 +6,7 @@ module Wallaby
6
6
  SLASH = '/'.freeze
7
7
  COLONS = '::'.freeze
8
8
  COMMA = ','.freeze
9
+ DOT = '.'.freeze
9
10
  CSV = 'csv'.freeze
10
11
  PERS = [10, 20, 50, 100].freeze
11
12
  DEFAULT_PAGE_SIZE = 20
@@ -2,7 +2,7 @@
2
2
  module Wallaby
3
3
  # Global configuration
4
4
  class Configuration
5
- attr_writer :base_controller, :page_size
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, @pagination, @metadata,
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 metadata
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
@@ -4,6 +4,7 @@ module Wallaby
4
4
  class Metadata
5
5
  attr_writer :max
6
6
 
7
+ # @return [Integer] max characters to display, default to 20
7
8
  def max
8
9
  @max ||= DEFAULT_MAX
9
10
  end
@@ -1,9 +1,10 @@
1
1
  module Wallaby
2
2
  class Configuration
3
- # Configuration for metadata
3
+ # Configuration for pagination
4
4
  class Pagination
5
5
  attr_writer :page_size
6
6
 
7
+ # @return [Integer] page size, default to 20
7
8
  def page_size
8
9
  @page_size ||= DEFAULT_PAGE_SIZE
9
10
  end
@@ -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'
@@ -1,3 +1,3 @@
1
1
  module Wallaby
2
- VERSION = '5.1.5'.freeze
2
+ VERSION = '5.1.6'.freeze
3
3
  end
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.5
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-03-06 00:00:00.000000000 Z
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
@@ -1,4 +0,0 @@
1
- # desc "Explaining what the task does"
2
- # task :wallaby do
3
- # # Task goes here
4
- # end