wallaby 5.1.3 → 5.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 918ba41ac5ba7f6971332674647888cc6f989126
4
- data.tar.gz: 44c4f9006a6628ea19d26134d1fa9d8acd1e1511
3
+ metadata.gz: '09976f4239802ee3dc2eb137068c2f6289f0cf7a'
4
+ data.tar.gz: 724958b07b53194c30c6ccc9bf314791ae0c894e
5
5
  SHA512:
6
- metadata.gz: dfddc7545545924c353c5c41a000ed5f9a97c986c9713898c13c0e82abbec0df36652445aa38540241ca8c08c7f937c917b6d43449764c99c55639a74fe49465
7
- data.tar.gz: 0170cdf8218bb7881a5fa56fb8605520f2e1358b9719e0296825f9f063021af0b9f6c8feb63c2eb8407b203a6a4f0a0ecdd4f7a9554d4d16c368a091744d14a6
6
+ metadata.gz: 2c83059d14238fa032b1a41d44b2809cbbb5b27613335498e8f550296d974a4168697a6b7952f12f6424b7ebbf04f479184911e2c417cc2cbb65c7fc8f2cb914
7
+ data.tar.gz: 147288bc92b01a8b9a8f98ce3d9f134e57dca63a1fafea891bb0916b6b79d3449cc3d8ac0d9cd3578871fd51d0a6ecb224a167835dd580d8a6dab2fc79984d9a
@@ -286,11 +286,9 @@ module Wallaby
286
286
  # given, or requesting HTML response
287
287
  # @see Wallaby::ModelServicer#paginate
288
288
  def paginate(query)
289
- if params[:page] || params[:per] || request.format.symbol == :html
290
- current_model_service.paginate(query, params)
291
- else
292
- query
293
- end
289
+ paginatable =
290
+ params[:page] || params[:per] || request.format.symbol == :html
291
+ paginatable ? current_model_service.paginate(query, params) : query
294
292
  end
295
293
 
296
294
  # To whitelist the params for CRUD actions
@@ -311,12 +309,14 @@ module Wallaby
311
309
 
312
310
  # @return either persisted or unpersisted resource instance
313
311
  def resource
314
- @resource ||=
312
+ @resource ||= begin
313
+ whitelisted = action_name.in?(SAVE_ACTIONS) ? resource_params : {}
315
314
  if resource_id.present?
316
- current_model_service.find resource_id, resource_params
315
+ current_model_service.find resource_id, whitelisted
317
316
  else
318
- current_model_service.new resource_params
317
+ current_model_service.new whitelisted
319
318
  end
319
+ end
320
320
  end
321
321
 
322
322
  # Get current model decorator so that we could retrive metadata for given
@@ -8,12 +8,10 @@ module Wallaby
8
8
 
9
9
  ERROR_PATH = ERROR_LAYOUT = 'wallaby/error'.freeze
10
10
 
11
- # NOTE: we want to see the error blown up in development environment
12
- unless Rails.env.development?
13
- rescue_from NotFound, with: :not_found
14
- rescue_from ::ActionController::ParameterMissing, with: :bad_request
15
- rescue_from ::ActiveRecord::StatementInvalid, with: :unprocessable_entity
16
- end
11
+ rescue_from NotFound, with: :not_found
12
+ rescue_from ::ActionController::ParameterMissing, with: :bad_request
13
+ rescue_from ::ActiveRecord::StatementInvalid, with: :unprocessable_entity
14
+ rescue_from UnprocessableEntity, with: :unprocessable_entity
17
15
 
18
16
  layout 'wallaby/application'
19
17
 
@@ -34,6 +32,12 @@ module Wallaby
34
32
 
35
33
  protected
36
34
 
35
+ # @see https://github.com/rails/rails/blob/5-0-stable/actionpack/lib/action_controller/metal/helpers.rb#L118
36
+ # `helpers` exists since Rails 5, need to replicate this for Rails 4.2
37
+ def helpers
38
+ @helpers ||= defined?(super) ? super : view_context
39
+ end
40
+
37
41
  def configuration
38
42
  ::Wallaby.configuration
39
43
  end
@@ -24,6 +24,8 @@ en:
24
24
  count: 'Count: '
25
25
  auto_select_hint: 'Type to select...'
26
26
  upload: 'Upload'
27
+ empty: 'null'
28
+ na: 'n/a'
27
29
 
28
30
  buttons:
29
31
  save: 'Save'
@@ -60,6 +62,9 @@ en:
60
62
  collection: 'Records could not be found. Click + button to add one.'
61
63
  model: 'Model %{model} could not be found.'
62
64
  resource: 'Record %{resource} could not be found.'
65
+ unprocessable_entity:
66
+ keyword_search: 'Unable to perform keyword search when no text fields can be used.'
67
+ field_colon_search: 'Unable to perform field colon search for %{invalid_fields}.'
63
68
 
64
69
  pagination:
65
70
  prev: 'Prev'
@@ -12,8 +12,7 @@ module Wallaby
12
12
  metadata = {
13
13
  name: column.name,
14
14
  type: column.type.to_s.freeze,
15
- label: @model_class.human_attribute_name(column.name),
16
- is_origin: true
15
+ label: @model_class.human_attribute_name(column.name)
17
16
  }
18
17
  sti_builder.update(metadata, column)
19
18
  fields[column.name] = metadata
@@ -24,8 +23,7 @@ module Wallaby
24
23
  @model_class.reflections.each_with_object({}) do |(name, ref), fields|
25
24
  metadata = {
26
25
  name: name, type: ref.macro.to_s,
27
- label: @model_class.human_attribute_name(name),
28
- is_origin: true
26
+ label: @model_class.human_attribute_name(name)
29
27
  }
30
28
  association_builder.update(metadata, ref)
31
29
  polymorphic_builder.update(metadata, ref)
@@ -15,13 +15,12 @@ module Wallaby
15
15
  # example:
16
16
  # {
17
17
  # # general field
18
- # id: { name: 'id', type: 'integer', label: 'Id', is_origin: true },
18
+ # id: { name: 'id', type: 'integer', label: 'Id' },
19
19
  # # association field
20
20
  # category: {
21
21
  # 'name' => 'category',
22
22
  # 'type' => 'belongs_to',
23
23
  # 'label' => 'Category',
24
- # 'is_origin' => true,
25
24
  # 'is_association' => true,
26
25
  # 'is_through' => false,
27
26
  # 'has_scope' => false,
@@ -9,10 +9,10 @@ module Wallaby
9
9
 
10
10
  def normalize(params)
11
11
  params.each do |field_name, values|
12
- metadata = @model_decorator.fields[field_name] || EMPTY_HASH
13
- type = (metadata[:type] || EMPTY_STRING)[/range|point|binary/]
12
+ type = @model_decorator.metadata_of(field_name)[:type]
13
+ .try(:[], /range|point|binary/)
14
14
  next unless type
15
- send "normalize_#{type}_values", params, field_name, values
15
+ public_send "normalize_#{type}_values", params, field_name, values
16
16
  end
17
17
  end
18
18
 
@@ -3,7 +3,7 @@ module Wallaby
3
3
  class ModelServiceProvider
4
4
  # Query builder
5
5
  class Querier
6
- TEXT_FIELDS = %w(string text citext).freeze
6
+ TEXT_FIELDS = %w(string text citext longtext tinytext mediumtext).freeze
7
7
 
8
8
  def initialize(model_decorator)
9
9
  @model_decorator = model_decorator
@@ -68,7 +68,7 @@ module Wallaby
68
68
  end
69
69
 
70
70
  def text_search(keywords, query = nil)
71
- return query if keywords.blank?
71
+ return query unless keywords_check? keywords
72
72
  text_fields.each do |field_name|
73
73
  sub_query = nil
74
74
  keywords.each do |keyword|
@@ -81,8 +81,8 @@ module Wallaby
81
81
  end
82
82
 
83
83
  def field_search(field_queries, query)
84
+ return query unless field_check? field_queries
84
85
  field_queries.each do |exp|
85
- next unless @model_decorator.fields[exp[:left]]
86
86
  sub_query = table[exp[:left]].public_send(exp[:op], exp[:right])
87
87
  query = query.try(:and, sub_query) || sub_query
88
88
  end
@@ -90,11 +90,30 @@ module Wallaby
90
90
  end
91
91
 
92
92
  def text_fields
93
- index_field_names = @model_decorator.index_field_names.map(&:to_s)
94
- @model_decorator.fields.select do |field_name, metadata|
95
- index_field_names.include?(field_name) &&
96
- TEXT_FIELDS.include?(metadata[:type].to_s)
97
- end.keys
93
+ @text_fields ||= begin
94
+ index_field_names = @model_decorator.index_field_names.map(&:to_s)
95
+ @model_decorator.fields.select do |field_name, metadata|
96
+ index_field_names.include?(field_name) &&
97
+ TEXT_FIELDS.include?(metadata[:type].to_s)
98
+ end.keys
99
+ end
100
+ end
101
+
102
+ def keywords_check?(keywords)
103
+ return false if keywords.blank?
104
+ return true if text_fields.present?
105
+ message = I18n.t 'errors.unprocessable_entity.keyword_search'
106
+ raise UnprocessableEntity, message
107
+ end
108
+
109
+ def field_check?(field_queries)
110
+ return false if field_queries.blank?
111
+ fields = field_queries.map { |exp| exp[:left] }
112
+ invalid_fields = fields - @model_decorator.fields.keys
113
+ return true if invalid_fields.blank?
114
+ message = I18n.t 'errors.unprocessable_entity.field_colon_search',
115
+ invalid_fields: invalid_fields.to_sentence
116
+ raise UnprocessableEntity, message
98
117
  end
99
118
  end
100
119
  end
@@ -5,9 +5,7 @@ module Wallaby
5
5
  class ModelServiceProvider < ::Wallaby::ModelServiceProvider
6
6
  # @see Wallaby::ModelServiceProvider#permit
7
7
  def permit(params)
8
- return {} if params[param_key].blank?
9
- # using fetch could avoid ActionController::ParameterMissing
10
- params.fetch(param_key, {}).permit permitted_fields
8
+ params.require(param_key).permit permitted_fields
11
9
  end
12
10
 
13
11
  # @see Wallaby::ModelServiceProvider#collection
@@ -1,4 +1,4 @@
1
1
  module Wallaby
2
- class InvalidError < ::StandardError
2
+ class InvalidError < GeneralError
3
3
  end
4
4
  end
@@ -0,0 +1,4 @@
1
+ module Wallaby
2
+ class UnprocessableEntity < GeneralError
3
+ end
4
+ end
@@ -5,9 +5,11 @@ module Wallaby
5
5
  # @param user [Object]
6
6
  # @return [String] IMG or I element
7
7
  def user_portrait(user = current_user)
8
- if user.respond_to? :email
8
+ email_method = Wallaby.configuration.security.email_method || :email
9
+ email = user.respond_to?(email_method) && user.public_send(email_method)
10
+ if email.present?
9
11
  https = "http#{request.ssl? ? 's' : EMPTY_STRING}"
10
- email_md5 = Digest::MD5.hexdigest user.email.downcase
12
+ email_md5 = ::Digest::MD5.hexdigest email.downcase
11
13
  image_source = "#{https}://www.gravatar.com/avatar/#{email_md5}"
12
14
  image_tag image_source, class: 'hidden-xs user-portrait'
13
15
  else
@@ -20,23 +22,23 @@ module Wallaby
20
22
  # @param app [Object]
21
23
  # @return [String] HTML anchor element
22
24
  def logout_path(user = current_user, app = main_app)
23
- # TODO: use authenticater
24
- path =
25
- if defined? ::Devise
26
- scope = ::Devise::Mapping.find_scope! user
27
- "destroy_#{scope}_session_path"
28
- else
29
- 'logout_path'
30
- end
31
- app.public_send path if app.respond_to? path
25
+ path = Wallaby.configuration.security.logout_path
26
+ path ||= if defined? ::Devise
27
+ scope = ::Devise::Mapping.find_scope! user
28
+ "destroy_#{scope}_session_path"
29
+ end
30
+ app.public_send path if path && app.respond_to?(path)
32
31
  end
33
32
 
34
- # Logout method
33
+ # Logout method for given user
35
34
  # @return [String, Symbol]
36
- def logout_method
37
- # TODO: use authenticater
38
- method = Array(Devise.sign_out_via).first if defined? Devise
39
- method || :delete
35
+ def logout_method(user = current_user)
36
+ http_method = Wallaby.configuration.security.logout_method
37
+ http_method || if defined? ::Devise
38
+ scope = ::Devise::Mapping.find_scope! user
39
+ mapping = ::Devise.mappings[scope]
40
+ mapping.sign_out_via
41
+ end
40
42
  end
41
43
  end
42
44
  end
@@ -48,12 +48,12 @@ module Wallaby
48
48
 
49
49
  # @return [String] grey null
50
50
  def null
51
- muted 'null'
51
+ muted t 'labels.empty'
52
52
  end
53
53
 
54
54
  # @return [String] grey N/A
55
55
  def na
56
- muted 'n/a'
56
+ muted t 'labels.na'
57
57
  end
58
58
 
59
59
  # Grey text
@@ -0,0 +1,70 @@
1
+ module Wallaby
2
+ # @private
3
+ class ModelDecorator
4
+ # @private
5
+ # Field helper for model decorator
6
+ module FieldHelpers
7
+ # @return [Hash] metadata information for a given field
8
+ def metadata_of(field_name)
9
+ fields[field_name] || {}
10
+ end
11
+
12
+ # @return [String] label for a given field
13
+ def label_of(field_name)
14
+ metadata_of(field_name)[:label]
15
+ end
16
+
17
+ # @return [String, Symbol] type for a given field
18
+ def type_of(field_name)
19
+ validate_presence_of metadata_of(field_name)[:type]
20
+ end
21
+
22
+ # @return [Hash] index metadata information for a given field
23
+ def index_metadata_of(field_name)
24
+ index_fields[field_name] || {}
25
+ end
26
+
27
+ # @return [String] index label for a given field
28
+ def index_label_of(field_name)
29
+ index_metadata_of(field_name)[:label]
30
+ end
31
+
32
+ # @return [String, Symbol] index type for a given field
33
+ def index_type_of(field_name)
34
+ validate_presence_of index_metadata_of(field_name)[:type]
35
+ end
36
+
37
+ # @return [Hash] show metadata information for a given field
38
+ def show_metadata_of(field_name)
39
+ show_fields[field_name] || {}
40
+ end
41
+
42
+ # @return [String] show label for a given field
43
+ def show_label_of(field_name)
44
+ show_metadata_of(field_name)[:label]
45
+ end
46
+
47
+ # @return [String, Symbol] show type for a given field
48
+ def show_type_of(field_name)
49
+ validate_presence_of show_metadata_of(field_name)[:type]
50
+ end
51
+
52
+ # @return [Hash] form metadata information for a given field
53
+ def form_metadata_of(field_name)
54
+ form_fields[field_name] || {}
55
+ end
56
+
57
+ # @return [String] form label for a given field
58
+ def form_label_of(field_name)
59
+ form_metadata_of(field_name)[:label]
60
+ end
61
+
62
+ # @return [String, Symbol] form type for a given field
63
+ def form_type_of(field_name)
64
+ validate_presence_of form_metadata_of(field_name)[:type]
65
+ end
66
+ end
67
+
68
+ include FieldHelpers
69
+ end
70
+ end
@@ -28,21 +28,6 @@ module Wallaby
28
28
  @field_names ||= reposition fields.keys, primary_key
29
29
  end
30
30
 
31
- # @return [Hash] metadata information for a given field
32
- def metadata_of(field_name)
33
- fields[field_name] || {}
34
- end
35
-
36
- # @return [String] label for a given field
37
- def label_of(field_name)
38
- metadata_of(field_name)[:label]
39
- end
40
-
41
- # @return [String, Symbol] type for a given field
42
- def type_of(field_name)
43
- validate_presence_of metadata_of(field_name)[:type]
44
- end
45
-
46
31
  # @return [Hash] metadata information for all fields that would be used on
47
32
  # index page
48
33
  def index_fields
@@ -60,21 +45,6 @@ module Wallaby
60
45
  @index_field_names ||= reposition index_fields.keys, primary_key
61
46
  end
62
47
 
63
- # @return [Hash] index metadata information for a given field
64
- def index_metadata_of(field_name)
65
- index_fields[field_name] || {}
66
- end
67
-
68
- # @return [String] index label for a given field
69
- def index_label_of(field_name)
70
- index_metadata_of(field_name)[:label]
71
- end
72
-
73
- # @return [String, Symbol] index type for a given field
74
- def index_type_of(field_name)
75
- validate_presence_of index_metadata_of(field_name)[:type]
76
- end
77
-
78
48
  # @return [Hash] metadata information for all fields that would be used on
79
49
  # show page
80
50
  def show_fields
@@ -92,21 +62,6 @@ module Wallaby
92
62
  @show_field_names ||= reposition show_fields.keys, primary_key
93
63
  end
94
64
 
95
- # @return [Hash] show metadata information for a given field
96
- def show_metadata_of(field_name)
97
- show_fields[field_name] || {}
98
- end
99
-
100
- # @return [String] show label for a given field
101
- def show_label_of(field_name)
102
- show_metadata_of(field_name)[:label]
103
- end
104
-
105
- # @return [String, Symbol] show type for a given field
106
- def show_type_of(field_name)
107
- validate_presence_of show_metadata_of(field_name)[:type]
108
- end
109
-
110
65
  # @return [Hash] metadata information for all fields that would be used on
111
66
  # form page
112
67
  def form_fields
@@ -124,21 +79,6 @@ module Wallaby
124
79
  @form_field_names ||= reposition form_fields.keys, primary_key
125
80
  end
126
81
 
127
- # @return [Hash] form metadata information for a given field
128
- def form_metadata_of(field_name)
129
- form_fields[field_name] || {}
130
- end
131
-
132
- # @return [String] form label for a given field
133
- def form_label_of(field_name)
134
- form_metadata_of(field_name)[:label]
135
- end
136
-
137
- # @return [String, Symbol] form type for a given field
138
- def form_type_of(field_name)
139
- validate_presence_of form_metadata_of(field_name)[:type]
140
- end
141
-
142
82
  # @return [Hash] custom filters
143
83
  def filters
144
84
  @filters ||= ::ActiveSupport::HashWithIndifferentAccess.new
@@ -2,15 +2,17 @@ module Wallaby
2
2
  class Map
3
3
  # To map model class to a klass
4
4
  class ModelClassMapper
5
+ DEFAULT_BLOCK = ->(same) { same }.freeze
6
+
5
7
  def initialize(base_class)
6
8
  @base_class = base_class
7
9
  end
8
10
 
9
- def map
10
- (@base_class.try(:subclasses) || EMPTY_HASH)
11
- .each_with_object({}) do |klass, map|
11
+ def map(&block)
12
+ block ||= DEFAULT_BLOCK
13
+ classes_array.each_with_object({}) do |klass, map|
12
14
  next if anonymous? klass
13
- map[klass.model_class] = block_given? ? yield(klass) : klass
15
+ map[klass.model_class] = block.call klass
14
16
  end
15
17
  end
16
18
 
@@ -19,6 +21,10 @@ module Wallaby
19
21
  def anonymous?(klass)
20
22
  klass.name.blank?
21
23
  end
24
+
25
+ def classes_array
26
+ @base_class.try(:descendants) || EMPTY_ARRAY
27
+ end
22
28
  end
23
29
  end
24
30
  end
@@ -3,7 +3,7 @@ module Wallaby
3
3
  class Map
4
4
  # { model => mode }
5
5
  def self.mode_map
6
- @mode_map ||= ModeMapper.new(Mode.subclasses).map.freeze
6
+ @mode_map ||= ModeMapper.new(Mode.descendants).map.freeze
7
7
  end
8
8
 
9
9
  # [ model classes ]
@@ -22,7 +22,7 @@ module Wallaby
22
22
  def build(field_name)
23
23
  metadata = @model_decorator.index_metadata_of field_name
24
24
  label = Utils.to_field_label field_name, metadata
25
- return label unless sortable? metadata
25
+ return label unless sortable? field_name, metadata
26
26
  sort_field_name = metadata[:sort_field_name] || field_name
27
27
  url_params = next_builder.next_params sort_field_name
28
28
  @helper.index_link(model_class, url_params: url_params) { label }
@@ -36,8 +36,8 @@ module Wallaby
36
36
  end
37
37
 
38
38
  # If it's non-association field or custom sorting field
39
- def sortable?(metadata)
40
- metadata[:is_origin] && !metadata[:is_association] \
39
+ def sortable?(field_name, metadata)
40
+ @model_decorator.fields[field_name] && !metadata[:is_association] \
41
41
  || metadata[:sort_field_name]
42
42
  end
43
43
  end
@@ -2,10 +2,11 @@ module Wallaby
2
2
  class Configuration
3
3
  # Security configuration
4
4
  class Security
5
+ attr_accessor :logout_path, :logout_method, :email_method
5
6
  # by default, current_user returns nil
6
- DEFAULT_CURRENT_USER = -> { nil }
7
+ DEFAULT_CURRENT_USER = -> { nil }
7
8
  # by default, not to stop the before_action chain
8
- DEFAULT_AUTHENTICATE = -> { true }
9
+ DEFAULT_AUTHENTICATE = -> { true }
9
10
 
10
11
  # Configure how to get the current user. All application controller
11
12
  # methods will be available.
@@ -66,6 +66,7 @@ require 'tree/wallaby/node'
66
66
 
67
67
  require 'interfaces/wallaby/mode'
68
68
  require 'interfaces/wallaby/model_decorator'
69
+ require 'interfaces/wallaby/model_decorator/field_helpers'
69
70
  require 'interfaces/wallaby/model_finder'
70
71
  require 'interfaces/wallaby/model_service_provider'
71
72
  require 'interfaces/wallaby/model_pagination_provider'
@@ -77,6 +78,7 @@ require 'errors/wallaby/model_not_found'
77
78
  require 'errors/wallaby/not_authenticated'
78
79
  require 'errors/wallaby/not_implemented'
79
80
  require 'errors/wallaby/resource_not_found'
81
+ require 'errors/wallaby/unprocessable_entity'
80
82
 
81
83
  require 'parsers/wallaby/parser'
82
84
 
@@ -1,3 +1,3 @@
1
1
  module Wallaby
2
- VERSION = '5.1.3'.freeze
2
+ VERSION = '5.1.4'.freeze
3
3
  end
data/lib/wallaby.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module Wallaby
2
2
  EMPTY_STRING = ''.freeze
3
3
  EMPTY_HASH = {}.freeze
4
+ EMPTY_ARRAY = [].freeze
4
5
  SPACE = ' '.freeze
5
6
  SLASH = '/'.freeze
6
7
  COLONS = '::'.freeze
@@ -19,6 +20,7 @@ module Wallaby
19
20
  ).freeze
20
21
  WILDCARD = 'QUERY'.freeze
21
22
  FORM_ACTIONS = %w(new create edit update).freeze
23
+ SAVE_ACTIONS = %w(create update).freeze
22
24
  end
23
25
 
24
26
  require 'wallaby/engine'
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.3
4
+ version: 5.1.4
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-01-13 00:00:00.000000000 Z
11
+ date: 2018-01-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bootstrap-sass
@@ -170,14 +170,14 @@ dependencies:
170
170
  requirements:
171
171
  - - ">="
172
172
  - !ruby/object:Gem::Version
173
- version: '5.0'
173
+ version: 4.2.0
174
174
  type: :runtime
175
175
  prerelease: false
176
176
  version_requirements: !ruby/object:Gem::Requirement
177
177
  requirements:
178
178
  - - ">="
179
179
  - !ruby/object:Gem::Version
180
- version: '5.0'
180
+ version: 4.2.0
181
181
  - !ruby/object:Gem::Dependency
182
182
  name: responders
183
183
  requirement: !ruby/object:Gem::Requirement
@@ -519,6 +519,7 @@ files:
519
519
  - lib/errors/wallaby/not_found.rb
520
520
  - lib/errors/wallaby/not_implemented.rb
521
521
  - lib/errors/wallaby/resource_not_found.rb
522
+ - lib/errors/wallaby/unprocessable_entity.rb
522
523
  - lib/forms/wallaby/form_builder.rb
523
524
  - lib/helpers/wallaby/application_helper.rb
524
525
  - lib/helpers/wallaby/base_helper.rb
@@ -530,6 +531,7 @@ files:
530
531
  - lib/helpers/wallaby/styling_helper.rb
531
532
  - lib/interfaces/wallaby/mode.rb
532
533
  - lib/interfaces/wallaby/model_decorator.rb
534
+ - lib/interfaces/wallaby/model_decorator/field_helpers.rb
533
535
  - lib/interfaces/wallaby/model_finder.rb
534
536
  - lib/interfaces/wallaby/model_pagination_provider.rb
535
537
  - lib/interfaces/wallaby/model_service_provider.rb
@@ -584,9 +586,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
584
586
  version: '0'
585
587
  requirements: []
586
588
  rubyforge_project:
587
- rubygems_version: 2.6.14
589
+ rubygems_version: 2.5.2
588
590
  signing_key:
589
591
  specification_version: 4
590
592
  summary: Rails way database admin interface
591
593
  test_files: []
592
- has_rdoc: