wallaby 5.1.3 → 5.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|