express_templates 0.9.4 → 0.9.5
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/lib/arbre/patches.rb +14 -0
- data/lib/express_templates/components/capabilities/resourceful.rb +46 -10
- data/lib/express_templates/components/configurable.rb +2 -2
- data/lib/express_templates/components/forms/express_form.rb +1 -1
- data/lib/express_templates/components/forms/option_support.rb +10 -6
- data/lib/express_templates/version.rb +1 -1
- data/test/components/configurable_test.rb +13 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 018beee9648be7172909cb241812b004795dbe49
|
4
|
+
data.tar.gz: 47e8b5946af001b551ee6e5897de40857409748f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 74dcb721d16f6281b1f5b8824ac1314a7cfccbf0fe427cf360a611f9b629688723a9df6caf405a9f60ef38e858928e10b192ba25e8e9bf16dbc40448c1cee11f
|
7
|
+
data.tar.gz: 49eb76041d82f329fab1a67232b8e55870b395c62b863d40d3d781c6bbf07fbc8c253555ff1a855e5299ab273acaec59345d7df8ece71c9bcb8b69df254ccf7c
|
data/lib/arbre/patches.rb
CHANGED
@@ -25,6 +25,16 @@ module Arbre
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
+
def possible_route_proxy(name)
|
29
|
+
if helpers.controller.class.parent &&
|
30
|
+
helpers.respond_to?(namespace = helpers.controller.class.parent.to_s.underscore)
|
31
|
+
if (route_proxy = helpers.send(namespace)).respond_to?(name)
|
32
|
+
return route_proxy
|
33
|
+
end
|
34
|
+
end
|
35
|
+
return nil
|
36
|
+
end
|
37
|
+
|
28
38
|
# Implements the method lookup chain. When you call a method that
|
29
39
|
# doesn't exist, we:
|
30
40
|
#
|
@@ -40,6 +50,8 @@ module Arbre
|
|
40
50
|
assigns[name]
|
41
51
|
elsif helpers.respond_to?(name)
|
42
52
|
helper_method(name, *args, &block)
|
53
|
+
elsif route_proxy = possible_route_proxy(name)
|
54
|
+
route_proxy.send(name, *args, &block)
|
43
55
|
else
|
44
56
|
super
|
45
57
|
end
|
@@ -52,6 +64,8 @@ module Arbre
|
|
52
64
|
def helper_method(name, *args, &block)
|
53
65
|
if name.match /_path$/
|
54
66
|
helpers.send(name, *args, &block)
|
67
|
+
elsif (const_get([name, 'engine'].join('/').classify) rescue nil)
|
68
|
+
helpers.send(name, *args, &block)
|
55
69
|
else
|
56
70
|
current_arbre_element.add_child helpers.send(name, *args, &block)
|
57
71
|
end
|
@@ -8,10 +8,13 @@ module ExpressTemplates
|
|
8
8
|
base.class_eval do
|
9
9
|
has_argument :id, "The name of the collection", type: :symbol, optional: false
|
10
10
|
has_option :collection, 'Provide an explicit collection as a resource.'
|
11
|
-
has_option :collection_path, 'Provide an explicit path for the collection resource.'
|
11
|
+
has_option :collection_path, 'Provide an explicit path for the collection resource.', type: [:string, :proc]
|
12
12
|
has_option :resource_class, 'Overrides namespaced resource_class for using resources from a different module or namespace.'
|
13
|
-
has_option :resource_path, 'Overides the resource path which is otherwise inferred from the class name.'
|
13
|
+
has_option :resource_path, 'Overides the resource path which is otherwise inferred from the class name.', type: [:string, :proc]
|
14
14
|
has_option :path_prefix, 'Rarely used. Override inferred path_prefix for path helpers.'
|
15
|
+
# note there is some duplication here.
|
16
|
+
# resource_path can be specified as a proc which can specify a namespace
|
17
|
+
# TODO: investigate which approach is better and deprecate if desirable
|
15
18
|
has_option :namespace, 'Rarely used. Overrides inferred namespace for resources.'
|
16
19
|
end
|
17
20
|
end
|
@@ -123,10 +126,21 @@ module ExpressTemplates
|
|
123
126
|
|
124
127
|
def collection_path
|
125
128
|
if config[:collection_path]
|
126
|
-
config[:collection_path]
|
129
|
+
if config[:collection_path].respond_to?(:call)
|
130
|
+
config[:collection_path].call()
|
131
|
+
else
|
132
|
+
config[:collection_path]
|
133
|
+
end
|
127
134
|
else
|
128
|
-
|
129
|
-
|
135
|
+
helpers.instance_eval collection_path_helper
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def collection_path_helper
|
140
|
+
if path_namespace
|
141
|
+
"#{path_namespace}.#{collection_name_with_prefix}_path"
|
142
|
+
else
|
143
|
+
"#{collection_name_with_prefix}_path"
|
130
144
|
end
|
131
145
|
end
|
132
146
|
|
@@ -139,15 +153,37 @@ module ExpressTemplates
|
|
139
153
|
end
|
140
154
|
|
141
155
|
def resource_path_helper
|
142
|
-
|
156
|
+
if path_namespace
|
157
|
+
"#{path_namespace}.#{resource_name_with_path_prefix}_path"
|
158
|
+
else
|
159
|
+
"#{resource_name_with_path_prefix}_path"
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
def path_namespace
|
164
|
+
resource_class_name = resource_class.to_s
|
165
|
+
resource_class_name.match(/::/) ?
|
166
|
+
resource_class_name.split("::").first.try(:underscore) : nil
|
143
167
|
end
|
144
168
|
|
145
|
-
|
169
|
+
# accepts boolean to indicate whether to use an ivar or not
|
170
|
+
# and also may accept a resource on which we call to_param
|
171
|
+
def resource_path(ivar_or_resource = nil)
|
146
172
|
if config[:resource_path]
|
147
|
-
config[:resource_path]
|
173
|
+
if config[:resource_path].respond_to?(:call) &&
|
174
|
+
ivar_or_resource.respond_to?(:to_param) &&
|
175
|
+
![true, false].include?(ivar_or_resource)
|
176
|
+
config[:resource_path].call(ivar_or_resource)
|
177
|
+
else
|
178
|
+
config[:resource_path]
|
179
|
+
end
|
148
180
|
else
|
149
|
-
|
150
|
-
|
181
|
+
if ivar_or_resource.respond_to?(:to_param) &&
|
182
|
+
![true, false].include?(ivar_or_resource)
|
183
|
+
helpers.instance_eval("#{resource_path_helper}('#{ivar_or_resource.to_param}')")
|
184
|
+
else
|
185
|
+
helpers.instance_eval("#{resource_path_helper}(#{ivar_or_resource ? '@' : ''}#{resource_name})")
|
186
|
+
end
|
151
187
|
end
|
152
188
|
end
|
153
189
|
|
@@ -47,10 +47,10 @@ module ExpressTemplates
|
|
47
47
|
@config ||= {}
|
48
48
|
end
|
49
49
|
|
50
|
-
def self.has_option(name, description, type: :
|
50
|
+
def self.has_option(name, description, type: :string, required: nil, default: nil, attribute: nil, values: nil)
|
51
51
|
raise "name must be a symbol" unless name.kind_of?(Symbol)
|
52
52
|
option_definition = {description: description}
|
53
|
-
option_definition.merge!(type: type, required: required, default: default, attribute: attribute)
|
53
|
+
option_definition.merge!(type: type, required: required, default: default, attribute: attribute, values: values)
|
54
54
|
self.supported_options =
|
55
55
|
self.supported_options.merge(name => option_definition)
|
56
56
|
end
|
@@ -7,18 +7,22 @@ module ExpressTemplates
|
|
7
7
|
module OptionSupport
|
8
8
|
|
9
9
|
def has_many_through_association
|
10
|
-
|
11
|
-
|
10
|
+
if resource_class.respond_to?(:reflect_on_association)
|
11
|
+
reflection = resource_class.reflect_on_association(field_name.to_sym)
|
12
|
+
return reflection if reflection && reflection.macro.eql?(:has_many) && reflection.options.keys.include?(:through)
|
13
|
+
end
|
12
14
|
end
|
13
15
|
|
14
16
|
# Reflect on any association and return it if the association type
|
15
17
|
# is :belongs_to. Returns false if the association is not :belongs_to.
|
16
18
|
# Returns nil if there was a problem reflecting.
|
17
19
|
def belongs_to_association
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
if resource_class.respond_to?(:reflect_on_association)
|
21
|
+
# assumes the belongs_to association uses <name>_id
|
22
|
+
reflection = resource_class.reflect_on_association(field_name.gsub(/_id$/, '').to_sym)
|
23
|
+
if reflection && reflection.macro.eql?(:belongs_to)
|
24
|
+
return reflection
|
25
|
+
end
|
22
26
|
end
|
23
27
|
end
|
24
28
|
|
@@ -72,6 +72,19 @@ class ConfigurableTest < ActiveSupport::TestCase
|
|
72
72
|
assert render { config_with_required_options(title: 'foo') }
|
73
73
|
end
|
74
74
|
|
75
|
+
class ConfigWithOptionValues < ETCC
|
76
|
+
has_option :virtual, 'gets the virtual_attributes of a resource', values: -> (*) { resource_class.virtual_attributes }
|
77
|
+
|
78
|
+
def resource_class
|
79
|
+
OpenStruct.new(virtual_attributes: [:password, :password_confirmation])
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
test "values can be set for options" do
|
84
|
+
component = ConfigWithOptionValues.new
|
85
|
+
assert_equal [:password, :password_confirmation], component.instance_eval(&ConfigWithOptionValues.new.supported_options[:virtual][:values])
|
86
|
+
end
|
87
|
+
|
75
88
|
class ConfigSubclass < ConfigWithRequiredOptions
|
76
89
|
has_option :status, 'something'
|
77
90
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: express_templates
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Talcott Smith
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-08-
|
12
|
+
date: 2015-08-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|