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 +4 -4
- data/app/controllers/wallaby/abstract_resources_controller.rb +8 -8
- data/app/controllers/wallaby/application_controller.rb +10 -6
- data/config/locales/wallaby.en.yml +5 -0
- data/lib/adaptors/wallaby/active_record/model_decorator/fields_builder.rb +2 -4
- data/lib/adaptors/wallaby/active_record/model_decorator.rb +1 -2
- data/lib/adaptors/wallaby/active_record/model_service_provider/normalizer.rb +3 -3
- data/lib/adaptors/wallaby/active_record/model_service_provider/querier.rb +27 -8
- data/lib/adaptors/wallaby/active_record/model_service_provider.rb +1 -3
- data/lib/errors/wallaby/invalid_error.rb +1 -1
- data/lib/errors/wallaby/unprocessable_entity.rb +4 -0
- data/lib/helpers/wallaby/secure_helper.rb +18 -16
- data/lib/helpers/wallaby/styling_helper.rb +2 -2
- data/lib/interfaces/wallaby/model_decorator/field_helpers.rb +70 -0
- data/lib/interfaces/wallaby/model_decorator.rb +0 -60
- data/lib/services/wallaby/map/model_class_mapper.rb +10 -4
- data/lib/services/wallaby/map.rb +1 -1
- data/lib/services/wallaby/sorting/link_builder.rb +3 -3
- data/lib/wallaby/configuration/security.rb +3 -2
- data/lib/wallaby/engine.rb +2 -0
- data/lib/wallaby/version.rb +1 -1
- data/lib/wallaby.rb +2 -0
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09976f4239802ee3dc2eb137068c2f6289f0cf7a'
|
4
|
+
data.tar.gz: 724958b07b53194c30c6ccc9bf314791ae0c894e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
290
|
-
|
291
|
-
|
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,
|
315
|
+
current_model_service.find resource_id, whitelisted
|
317
316
|
else
|
318
|
-
current_model_service.new
|
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
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
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'
|
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
|
-
|
13
|
-
|
12
|
+
type = @model_decorator.metadata_of(field_name)[:type]
|
13
|
+
.try(:[], /range|point|binary/)
|
14
14
|
next unless type
|
15
|
-
|
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
|
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
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
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
|
-
|
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
|
@@ -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
|
-
|
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
|
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
|
-
|
24
|
-
path
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
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
|
-
|
38
|
-
|
39
|
-
|
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
|
@@ -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
|
-
|
11
|
-
|
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] =
|
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
|
data/lib/services/wallaby/map.rb
CHANGED
@@ -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
|
-
|
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
|
7
|
+
DEFAULT_CURRENT_USER = -> { nil }
|
7
8
|
# by default, not to stop the before_action chain
|
8
|
-
DEFAULT_AUTHENTICATE
|
9
|
+
DEFAULT_AUTHENTICATE = -> { true }
|
9
10
|
|
10
11
|
# Configure how to get the current user. All application controller
|
11
12
|
# methods will be available.
|
data/lib/wallaby/engine.rb
CHANGED
@@ -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
|
|
data/lib/wallaby/version.rb
CHANGED
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.
|
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-
|
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:
|
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:
|
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.
|
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:
|