props_template 1.0.0 → 1.0.2
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/generators/props/templates/index.json.props +11 -0
- data/lib/generators/props/templates/show.json.props +6 -0
- data/lib/generators/props/views/USAGE +9 -0
- data/lib/generators/props/views/views_generator.rb +64 -0
- data/lib/props_template/extensions/partial_renderer.rb +8 -2
- data/lib/props_template/handler.rb +2 -2
- data/lib/props_template/version.rb +1 -1
- data/lib/props_template.rb +9 -2
- metadata +6 -3
- data/lib/props_template/test.md +0 -28
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: d701cbf0bc05a74ec52fcab3e939b795bdb99eefc436b1bb5029d24deff16aac
|
|
4
|
+
data.tar.gz: da5e8ab92010fcf43d147cd677527024904fa57a0914f17737cccdf81e014bc5
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4a0e09a2b3845cfb26a682f0fa4cde60bcfb156d671e96c8a0cba443bfcd65b30017202bd174e649055bc5b7971317b5b8bc9a60185721d4fc94adb48744a441
|
|
7
|
+
data.tar.gz: f4ad6bdd2ac66c9504ed79f0bc28b1a2a486432be47b31700b31783fa93d7c8d4826eeea33d4de1d00fc281b21345db5cc563e2e66d22282792d98a8fa9a03ec
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
json.<%= js_plural_table_name %> do
|
|
2
|
+
json.array! @<%= plural_table_name %> do |<%= singular_table_name %>|
|
|
3
|
+
<%- attributes_list_with_timestamps.each do |attr| -%>
|
|
4
|
+
json.<%=attr.to_s.camelize(:lower)%> <%= singular_table_name %>.<%=attr%>
|
|
5
|
+
<%- end -%>
|
|
6
|
+
json.edit<%=js_singular_table_name(:upper)%>Path edit_<%=singular_table_name%>_path(<%=singular_table_name%>)
|
|
7
|
+
json.<%=js_singular_table_name%>Path <%=singular_table_name%>_path(<%=singular_table_name%>)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
json.new<%= js_singular_table_name(:upper) %>Path new_<%= singular_table_name %>_path
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<%- attributes_list_with_timestamps.each do |attr|-%>
|
|
2
|
+
json.<%=attr.to_s.camelize(:lower)%> @<%= singular_table_name %>.<%=attr%>
|
|
3
|
+
<%- end -%>
|
|
4
|
+
|
|
5
|
+
json.<%= js_plural_table_name %>Path <%= plural_table_name %>_path
|
|
6
|
+
json.edit<%= js_singular_table_name(:upper) %>Path edit_<%= singular_table_name %>_path(@<%= singular_table_name %>)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
require "rails/generators/named_base"
|
|
2
|
+
require "rails/generators/resource_helpers"
|
|
3
|
+
|
|
4
|
+
module Props
|
|
5
|
+
module Generators
|
|
6
|
+
class ViewsGenerator < Rails::Generators::NamedBase
|
|
7
|
+
include Rails::Generators::ResourceHelpers
|
|
8
|
+
|
|
9
|
+
source_root File.expand_path("../templates", __dir__)
|
|
10
|
+
|
|
11
|
+
argument :attributes, type: :array, default: [], banner: "field:type field:type"
|
|
12
|
+
|
|
13
|
+
def create_root_folder
|
|
14
|
+
path = File.join("app/views", controller_file_path)
|
|
15
|
+
empty_directory path unless File.directory?(path)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def copy_prop_files
|
|
19
|
+
available_views.each do |view|
|
|
20
|
+
@action_name = view
|
|
21
|
+
filename = filename_with_extensions(view)
|
|
22
|
+
template filename, File.join("app/views", controller_file_path, filename)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
protected
|
|
27
|
+
|
|
28
|
+
def js_singular_table_name(casing = :lower)
|
|
29
|
+
singular_table_name.camelize(casing)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def js_plural_table_name(casing = :lower)
|
|
33
|
+
plural_table_name.camelize(casing)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def available_views
|
|
37
|
+
%w[index show]
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
attr_reader :action_name
|
|
41
|
+
|
|
42
|
+
def attributes_names
|
|
43
|
+
[:id] + super
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def filename_with_extensions(name)
|
|
47
|
+
[name, :json, :props].join(".")
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def attributes_list_with_timestamps
|
|
52
|
+
attributes_list(attributes_names + %w[created_at updated_at])
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def attributes_list(attributes = attributes_names)
|
|
56
|
+
if self.attributes.any? { |attr| attr.name == "password" && attr.type == :digest }
|
|
57
|
+
attributes = attributes.reject { |name| %w[password password_confirmation].include? name }
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
attributes
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
@@ -49,9 +49,15 @@ module Props
|
|
|
49
49
|
partial = partial_opts[:partial]
|
|
50
50
|
template_keys = retrieve_template_keys(partial_opts)
|
|
51
51
|
details = extract_details(partial_opts)
|
|
52
|
+
lookup_context = @context.lookup_context
|
|
52
53
|
|
|
53
|
-
prefixes = partial.include?("/") ? [] :
|
|
54
|
-
|
|
54
|
+
prefixes = partial.include?("/") ? [] : lookup_context.prefixes
|
|
55
|
+
|
|
56
|
+
if lookup_context.respond_to?(:find!)
|
|
57
|
+
lookup_context.find!(partial, prefixes, true, template_keys, details)
|
|
58
|
+
else
|
|
59
|
+
lookup_context.find_template(partial, prefixes, true, template_keys, details)
|
|
60
|
+
end
|
|
55
61
|
end
|
|
56
62
|
|
|
57
63
|
def retrieve_template_keys(options)
|
|
@@ -8,8 +8,8 @@ module Props
|
|
|
8
8
|
def self.call(template, source = nil)
|
|
9
9
|
source ||= template.source
|
|
10
10
|
# this juggling is required to keep line numbers right in the error
|
|
11
|
-
%{ __finalize =
|
|
12
|
-
json.result
|
|
11
|
+
%{ __finalize = @__json.nil?; @__json ||= Props::Template.new(self); json = @__json; #{source};
|
|
12
|
+
if __finalize; result = json.result!; @__json = nil; result; end
|
|
13
13
|
}
|
|
14
14
|
end
|
|
15
15
|
end
|
data/lib/props_template.rb
CHANGED
|
@@ -59,7 +59,11 @@ module Props
|
|
|
59
59
|
@builder = prev_builder
|
|
60
60
|
@fragment_path = fragment_path
|
|
61
61
|
|
|
62
|
-
|
|
62
|
+
# An inline options object, e.g. `json.foo(with.partial("foo"))`, has
|
|
63
|
+
# no block; its content comes from the options instead.
|
|
64
|
+
found_inline_options = found_options.is_a?(Props::Options)
|
|
65
|
+
|
|
66
|
+
if found_block || found_inline_options
|
|
63
67
|
@builder.item_context = found_item
|
|
64
68
|
set!(key, found_options, &found_block)
|
|
65
69
|
end
|
|
@@ -72,8 +76,11 @@ module Props
|
|
|
72
76
|
@context.render options
|
|
73
77
|
end
|
|
74
78
|
|
|
79
|
+
# Relative to the fragment the dig ended in, so the client can graft into
|
|
80
|
+
# it; the full path when no fragment was crossed.
|
|
75
81
|
def found_path!
|
|
76
|
-
@
|
|
82
|
+
fragment_path = @fragment_path || []
|
|
83
|
+
@found_path[fragment_path.size..].join(".")
|
|
77
84
|
end
|
|
78
85
|
|
|
79
86
|
def fragment_context!
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: props_template
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Johny Ho
|
|
@@ -72,6 +72,10 @@ extensions: []
|
|
|
72
72
|
extra_rdoc_files: []
|
|
73
73
|
files:
|
|
74
74
|
- README.md
|
|
75
|
+
- lib/generators/props/templates/index.json.props
|
|
76
|
+
- lib/generators/props/templates/show.json.props
|
|
77
|
+
- lib/generators/props/views/USAGE
|
|
78
|
+
- lib/generators/props/views/views_generator.rb
|
|
75
79
|
- lib/props_template.rb
|
|
76
80
|
- lib/props_template/base.rb
|
|
77
81
|
- lib/props_template/base_with_extensions.rb
|
|
@@ -89,7 +93,6 @@ files:
|
|
|
89
93
|
- lib/props_template/partial_patch.rb
|
|
90
94
|
- lib/props_template/railtie.rb
|
|
91
95
|
- lib/props_template/searcher.rb
|
|
92
|
-
- lib/props_template/test.md
|
|
93
96
|
- lib/props_template/version.rb
|
|
94
97
|
homepage: https://github.com/thoughtbot/props_template/
|
|
95
98
|
licenses:
|
|
@@ -109,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
109
112
|
- !ruby/object:Gem::Version
|
|
110
113
|
version: '0'
|
|
111
114
|
requirements: []
|
|
112
|
-
rubygems_version:
|
|
115
|
+
rubygems_version: 4.0.16
|
|
113
116
|
specification_version: 4
|
|
114
117
|
summary: A fast JSON builder
|
|
115
118
|
test_files: []
|
data/lib/props_template/test.md
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
array
|
|
2
|
-
handle_collection
|
|
3
|
-
all_opts = collection.map do |item|
|
|
4
|
-
refine_item_options(item, options)
|
|
5
|
-
end
|
|
6
|
-
creates clone of the opts using
|
|
7
|
-
refine_item_options clones original options
|
|
8
|
-
then subsequently the ext refine_item_options
|
|
9
|
-
gets called first,
|
|
10
|
-
|
|
11
|
-
refine_all_item_options <- operates on the entire collection
|
|
12
|
-
|
|
13
|
-
handle_collection_item
|
|
14
|
-
set_content options
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
base with ExtensionManager
|
|
19
|
-
refine_all_item_options - overrided with ext manager
|
|
20
|
-
- which attahes a _template with partialer
|
|
21
|
-
to it AND multifetch and attaches it to cache
|
|
22
|
-
as [key, result]
|
|
23
|
-
|
|
24
|
-
refine_item_options
|
|
25
|
-
- transforms key: :id to key = [key, val]
|
|
26
|
-
- passes to refine_options
|
|
27
|
-
which is then asks the searcher the cache and
|
|
28
|
-
deferment to mutate the option
|