scaffold_pico 0.3.1 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +23 -47
- data/lib/scaffold/cli.rb +16 -4
- data/lib/scaffold/erb_context.rb +11 -0
- data/lib/scaffold/generators/base_generator.rb +74 -0
- data/lib/scaffold/generators/controller_generator.rb +27 -0
- data/lib/scaffold/generators/fabricator_generator.rb +26 -0
- data/lib/scaffold/generators/locales_generator.rb +42 -0
- data/lib/scaffold/generators/models_generator.rb +53 -0
- data/lib/scaffold/generators/routes_generator.rb +48 -0
- data/lib/scaffold/generators/views_generator.rb +57 -0
- data/lib/scaffold/main.rb +15 -6
- data/lib/scaffold/models/resource.rb +66 -0
- data/lib/scaffold/rails.rb +54 -0
- data/lib/scaffold/services/controller.rb +112 -0
- data/lib/scaffold/services/nested_in_resources.rb +42 -0
- data/lib/scaffold/services/path.rb +72 -0
- data/lib/scaffold/services/resource.rb +73 -0
- data/lib/scaffold/services/route.rb +20 -0
- data/lib/scaffold/services/view.rb +14 -0
- data/lib/scaffold_pico.rb +6 -7
- data/lib/templates/pico/controller.rb.erb +34 -26
- data/lib/templates/pico/fabricators/fabrication.rb.erb +4 -4
- data/lib/templates/pico/locales/bg.scaffold_pico.yml.erb +35 -0
- data/lib/templates/pico/locales/en.scaffold_pico.yml.erb +35 -0
- data/lib/templates/pico/model.rb.erb +2 -2
- data/lib/templates/pico/search.rb.erb +12 -12
- data/lib/templates/pico/views/materialize/slim/_form.html.slim.erb +1 -4
- data/lib/templates/pico/views/materialize/slim/edit.html.slim.erb +9 -7
- data/lib/templates/pico/views/materialize/slim/index.html.slim.erb +15 -15
- data/lib/templates/pico/views/materialize/slim/new.html.slim.erb +7 -5
- data/lib/templates/pico/views/materialize/slim/show.html.slim.erb +10 -10
- data/lib/templates/pico/views/zurb/slim/_form.html.slim.erb +2 -5
- data/lib/templates/pico/views/zurb/slim/edit.html.slim.erb +8 -6
- data/lib/templates/pico/views/zurb/slim/index.html.slim.erb +14 -14
- data/lib/templates/pico/views/zurb/slim/new.html.slim.erb +6 -4
- data/lib/templates/pico/views/zurb/slim/show.html.slim.erb +7 -7
- metadata +22 -10
- data/lib/scaffold/base_generator.rb +0 -60
- data/lib/scaffold/controller_generator.rb +0 -24
- data/lib/scaffold/fabricator_generator.rb +0 -25
- data/lib/scaffold/models_generator.rb +0 -51
- data/lib/scaffold/params.rb +0 -174
- data/lib/scaffold/routes_generator.rb +0 -29
- data/lib/scaffold/views_generator.rb +0 -52
@@ -1,17 +1,17 @@
|
|
1
|
-
h1 = t('scaffold.show.title', model: <%= @
|
1
|
+
h1 = t('scaffold.show.title', model: <%= @rails.resource.class_name %>.model_name.human(count: 1).mb_chars.downcase)
|
2
2
|
|
3
3
|
.section
|
4
4
|
.left
|
5
|
-
= link_to <%= @
|
5
|
+
= link_to <%= @rails.path.collection %>, class: 'waves-effect waves-light btn' do
|
6
6
|
i.material-icons.right view_list
|
7
|
-
= t('scaffold.actions.index', model: <%= @
|
7
|
+
= t('scaffold.actions.index', model: <%= @rails.resource.class_name %>.model_name.human(count: 2).mb_chars.downcase)
|
8
8
|
.right
|
9
|
-
= link_to <%= @
|
9
|
+
= link_to <%= @rails.path.edit_instance_resource %>, class: 'btn waves-effect waves-light' do
|
10
10
|
i.material-icons.right mode_edit
|
11
|
-
= t('scaffold.actions.edit', model: <%= @
|
12
|
-
= link_to <%= @
|
11
|
+
= t('scaffold.actions.edit', model: <%= @rails.resource.class_name %>.model_name.human(count: 1).mb_chars.downcase)
|
12
|
+
= link_to <%= @rails.path.new_resource %>, class: 'btn waves-effect waves-light' do
|
13
13
|
i.material-icons.right add
|
14
|
-
= t('scaffold.actions.new', model: <%= @
|
14
|
+
= t('scaffold.actions.new', model: <%= @rails.resource.class_name %>.model_name.human(count: 1).mb_chars.downcase)
|
15
15
|
|
16
16
|
.clearfix
|
17
17
|
|
@@ -19,8 +19,8 @@ h1 = t('scaffold.show.title', model: <%= @resource_class_name %>.model_name.huma
|
|
19
19
|
.card-content
|
20
20
|
table.striped.highlight.responsive-table
|
21
21
|
tbody
|
22
|
-
<% @fields.keys.each do |field_name| %>
|
22
|
+
<% @rails.resource.fields.keys.each do |field_name| %>
|
23
23
|
tr
|
24
|
-
td = <%= @
|
25
|
-
td = @<%= @
|
24
|
+
td = <%= @rails.resource.class_name -%>.human_attribute_name(:<%= field_name -%>)
|
25
|
+
td = @<%= @rails.resource.name %>.<%= field_name -%>
|
26
26
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
= form.error_notification
|
2
2
|
.form-inputs
|
3
|
-
<% @fields.each_pair do |field_name, kind| -%>
|
3
|
+
<% @rails.resource.fields.each_pair do |field_name, kind| -%>
|
4
4
|
<% if kind == 'file' -%>
|
5
5
|
= form.input :<%= field_name -%>, as: :file
|
6
6
|
<% elsif kind == 'belongs_to' -%>
|
@@ -12,7 +12,4 @@
|
|
12
12
|
<% else -%>
|
13
13
|
= form.input :<%= field_name %>
|
14
14
|
<% end -%>
|
15
|
-
<% end -%>
|
16
|
-
|
17
|
-
.form-actions
|
18
|
-
= form.submit class: 'waves-effect waves btn-large'
|
15
|
+
<% end -%>
|
@@ -1,11 +1,13 @@
|
|
1
|
-
h1 = t('scaffold.edit.title', model: <%= @
|
1
|
+
h1 = t('scaffold.edit.title', model: <%= @rails.resource.class_name %>.model_name.human(count: 1).mb_chars.downcase)
|
2
2
|
|
3
3
|
.callout.clearfix
|
4
4
|
.float-left
|
5
|
-
= link_to t('scaffold.show.actions.index', model: <%= @
|
5
|
+
= link_to t('scaffold.show.actions.index', model: <%= @rails.resource.class_name %>.model_name.human(count: 2).mb_chars.downcase), <%= @rails.path.collection %>, class: 'button small primary'
|
6
6
|
.float-right
|
7
|
-
= link_to t('scaffold.actions.edit', model: <%= @
|
8
|
-
= link_to t('scaffold.actions.new', model: <%= @
|
7
|
+
= link_to t('scaffold.actions.edit', model: <%= @rails.resource.class_name %>.model_name.human(count: 1).mb_chars.downcase), <%= @rails.path.edit_instance_resource %>, class: 'button small warning'
|
8
|
+
= link_to t('scaffold.actions.new', model: <%= @rails.resource.class_name %>.model_name.human(count: 1).mb_chars.downcase), <%= @rails.path.new_resource %>, class: 'button small secondary'
|
9
9
|
|
10
|
-
= simple_form_for <%= @
|
11
|
-
= render 'form', form: form
|
10
|
+
= simple_form_for <%= @rails.path.instance_resource %> do |form|
|
11
|
+
= render 'form', form: form
|
12
|
+
.form-actions
|
13
|
+
= form.submit class: 'waves-effect waves btn-large'
|
@@ -1,37 +1,37 @@
|
|
1
|
-
h1 = t('scaffold.index.title', model: <%= @
|
1
|
+
h1 = t('scaffold.index.title', model: <%= @rails.resource.class_name_with_modules %>.model_name.human(count: 2).mb_chars.downcase)
|
2
2
|
|
3
3
|
.row
|
4
4
|
.small-12.medium-10.columns
|
5
5
|
table
|
6
6
|
thead
|
7
7
|
tr
|
8
|
-
<% @fields.select {|k,v| @index_fields.include?(k) }.keys.each do |field_name| %>
|
9
|
-
th = <%= @
|
8
|
+
<% @rails.resource.fields.select {|k,v| @rails.controller.index_fields.include?(k) }.keys.each do |field_name| %>
|
9
|
+
th = <%= @rails.resource.class_name_with_modules -%>.human_attribute_name(:<%= field_name -%>)
|
10
10
|
<% end %>
|
11
11
|
th colspan=3 = t('scaffold.index.actions')
|
12
12
|
|
13
13
|
tbody
|
14
|
-
- @<%= @collection_name %>.each do |<%= @
|
14
|
+
- @<%= @rails.resource.collection_name %>.each do |<%= @rails.resource.name %>|
|
15
15
|
tr
|
16
|
-
<% @fields.select {|k,v| @index_fields.include?(k) }.keys.each do |field_name| %>
|
17
|
-
td = <%= @
|
16
|
+
<% @rails.resource.fields.select {|k,v| @rails.controller.index_fields.include?(k) }.keys.each do |field_name| %>
|
17
|
+
td = <%= @rails.resource.name %>.<%= field_name -%>
|
18
18
|
<% end %>
|
19
|
-
td = link_to t('scaffold.index.show'), <%= @
|
20
|
-
td = link_to t('scaffold.index.edit'), <%= @
|
21
|
-
td = link_to t('scaffold.index.destroy'), <%= @
|
22
|
-
= paginate @<%= @collection_name %>
|
19
|
+
td = link_to t('scaffold.index.show'), <%= @rails.path.resource %>
|
20
|
+
td = link_to t('scaffold.index.edit'), <%= @rails.path.edit_resource %>
|
21
|
+
td = link_to t('scaffold.index.destroy'), <%= @rails.path.resource %>, data: {:confirm => t('scaffold.confirm')}, :method => :delete
|
22
|
+
= paginate @<%= @rails.resource.collection_name %>
|
23
23
|
|
24
24
|
.small-12.medium-2.columns
|
25
25
|
aside.callout.clearfix.actions
|
26
|
-
= link_to t('scaffold.actions.new', model: <%= @
|
26
|
+
= link_to t('scaffold.actions.new', model: <%= @rails.resource.class_name_with_modules %>.model_name.human.mb_chars.downcase), <%= @rails.path.new_resource %>, class: 'button small secondary'
|
27
27
|
|
28
28
|
aside.search.callout.clearfix
|
29
29
|
h5 = t('scaffold.index.search.header')
|
30
30
|
|
31
|
-
= simple_form_for <%= "@#{@collection_name}_search" %>, as: :<%= @collection_name %>_search, url: <%= @
|
31
|
+
= simple_form_for <%= "@#{@rails.resource.collection_name}_search" %>, as: :<%= @rails.resource.collection_name %>_search, url: <%= @rails.path.collection %>, method: :get do |form|
|
32
32
|
= form.error_notification
|
33
33
|
.form-inputs
|
34
|
-
<% @fields.select {|k,v| @search_fields.include?(k) }.each_pair do |field_name, field_type| %>
|
34
|
+
<% @rails.resource.fields.select {|k,v| @rails.controller.search_fields.include?(k) }.each_pair do |field_name, field_type| %>
|
35
35
|
<% if field_type == 'belongs_to' -%>
|
36
36
|
= form.input :<%= field_name -%>_id
|
37
37
|
<% elsif ['date', 'datetime'].include?(field_type) -%>
|
@@ -45,4 +45,4 @@ h1 = t('scaffold.index.title', model: <%= @modulized_resource_class_name %>.mode
|
|
45
45
|
|
46
46
|
.form-actions
|
47
47
|
= form.submit t('scaffold.index.search.button'), class: 'button'
|
48
|
-
= link_to t('scaffold.index.search.reset'), url_for(<%= @
|
48
|
+
= link_to t('scaffold.index.search.reset'), url_for(<%= @rails.path.collection %>), class: 'button small secondary'
|
@@ -1,8 +1,10 @@
|
|
1
|
-
h1 = t('scaffold.new.title', model: <%= @
|
1
|
+
h1 = t('scaffold.new.title', model: <%= @rails.resource.class_name %>.model_name.human(count: 1).mb_chars.downcase)
|
2
2
|
|
3
3
|
.callout.clearfix
|
4
4
|
.float-left
|
5
|
-
= link_to t('scaffold.show.actions.index', model: <%= @
|
5
|
+
= link_to t('scaffold.show.actions.index', model: <%= @rails.resource.class_name %>.model_name.human(count: 2).mb_chars.downcase), <%= @rails.path.collection %>, class: 'button small primary'
|
6
6
|
|
7
|
-
= simple_form_for <%= @
|
8
|
-
= render 'form', form: form
|
7
|
+
= simple_form_for <%= @rails.path.instance_resource %> do |form|
|
8
|
+
= render 'form', form: form
|
9
|
+
.form-actions
|
10
|
+
= form.submit class: 'waves-effect waves btn-large'
|
@@ -1,16 +1,16 @@
|
|
1
|
-
h1 = t('scaffold.show.title', model: <%= @
|
1
|
+
h1 = t('scaffold.show.title', model: <%= @rails.resource.class_name %>.model_name.human(count: 1).mb_chars.downcase)
|
2
2
|
|
3
3
|
.callout.clearfix
|
4
4
|
.float-left
|
5
|
-
= link_to t('scaffold.show.actions.index', model: <%= @
|
5
|
+
= link_to t('scaffold.show.actions.index', model: <%= @rails.resource.class_name %>.model_name.human(count: 2).mb_chars.downcase), <%= @rails.path.collection %>, class: 'button small primary'
|
6
6
|
.float-right
|
7
|
-
= link_to t('scaffold.actions.edit', model: <%= @
|
8
|
-
= link_to t('scaffold.actions.new', model: <%= @
|
7
|
+
= link_to t('scaffold.actions.edit', model: <%= @rails.resource.class_name %>.model_name.human(count: 1).mb_chars.downcase), <%= @rails.path.edit_instance_resource %>, class: 'button small warning'
|
8
|
+
= link_to t('scaffold.actions.new', model: <%= @rails.resource.class_name %>.model_name.human(count: 1).mb_chars.downcase), <%= @rails.path.new_resource %>, class: 'button small secondary'
|
9
9
|
|
10
10
|
table
|
11
11
|
tbody
|
12
|
-
<% @fields.keys.each do |field_name| %>
|
12
|
+
<% @rails.resource.fields.keys.each do |field_name| %>
|
13
13
|
tr
|
14
|
-
td = <%= @
|
15
|
-
td = @<%= @
|
14
|
+
td = <%= @rails.resource.class_name -%>.human_attribute_name(:<%= field_name -%>)
|
15
|
+
td = @<%= @rails.resource.name %>.<%= field_name -%>
|
16
16
|
<% end %>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scaffold_pico
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gudata
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-02-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -92,19 +92,30 @@ files:
|
|
92
92
|
- LICENSE.txt
|
93
93
|
- README.md
|
94
94
|
- bin/scaffold_pico
|
95
|
-
- lib/scaffold/base_generator.rb
|
96
95
|
- lib/scaffold/cli.rb
|
97
|
-
- lib/scaffold/
|
98
|
-
- lib/scaffold/
|
96
|
+
- lib/scaffold/erb_context.rb
|
97
|
+
- lib/scaffold/generators/base_generator.rb
|
98
|
+
- lib/scaffold/generators/controller_generator.rb
|
99
|
+
- lib/scaffold/generators/fabricator_generator.rb
|
100
|
+
- lib/scaffold/generators/locales_generator.rb
|
101
|
+
- lib/scaffold/generators/models_generator.rb
|
102
|
+
- lib/scaffold/generators/routes_generator.rb
|
103
|
+
- lib/scaffold/generators/views_generator.rb
|
99
104
|
- lib/scaffold/main.rb
|
100
|
-
- lib/scaffold/
|
101
|
-
- lib/scaffold/
|
102
|
-
- lib/scaffold/
|
105
|
+
- lib/scaffold/models/resource.rb
|
106
|
+
- lib/scaffold/rails.rb
|
107
|
+
- lib/scaffold/services/controller.rb
|
108
|
+
- lib/scaffold/services/nested_in_resources.rb
|
109
|
+
- lib/scaffold/services/path.rb
|
110
|
+
- lib/scaffold/services/resource.rb
|
111
|
+
- lib/scaffold/services/route.rb
|
112
|
+
- lib/scaffold/services/view.rb
|
103
113
|
- lib/scaffold/template_engines/slim.rb
|
104
|
-
- lib/scaffold/views_generator.rb
|
105
114
|
- lib/scaffold_pico.rb
|
106
115
|
- lib/templates/pico/controller.rb.erb
|
107
116
|
- lib/templates/pico/fabricators/fabrication.rb.erb
|
117
|
+
- lib/templates/pico/locales/bg.scaffold_pico.yml.erb
|
118
|
+
- lib/templates/pico/locales/en.scaffold_pico.yml.erb
|
108
119
|
- lib/templates/pico/model.rb.erb
|
109
120
|
- lib/templates/pico/search.rb.erb
|
110
121
|
- lib/templates/pico/views/materialize/slim/_form.html.slim.erb
|
@@ -137,8 +148,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
148
|
version: '0'
|
138
149
|
requirements: []
|
139
150
|
rubyforge_project:
|
140
|
-
rubygems_version: 2.
|
151
|
+
rubygems_version: 2.5.2
|
141
152
|
signing_key:
|
142
153
|
specification_version: 4
|
143
154
|
summary: Scaffold should be simple
|
144
155
|
test_files: []
|
156
|
+
has_rdoc:
|
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'readline'
|
2
|
-
|
3
|
-
module Scaffold
|
4
|
-
class BaseGenerator
|
5
|
-
@@aways_ovewrite = false
|
6
|
-
|
7
|
-
def initialize params
|
8
|
-
@params = params
|
9
|
-
end
|
10
|
-
|
11
|
-
def objectify
|
12
|
-
OpenStruct.new(vars).instance_eval { binding }
|
13
|
-
end
|
14
|
-
|
15
|
-
# where is the root of the gem
|
16
|
-
def root
|
17
|
-
Scaffold.root
|
18
|
-
end
|
19
|
-
|
20
|
-
def project_root
|
21
|
-
Dir.pwd
|
22
|
-
end
|
23
|
-
|
24
|
-
# Check to see if it is overridden and use it
|
25
|
-
def find_root *segments
|
26
|
-
original = File.join(root, segments)
|
27
|
-
overridden = File.join(project_root, segments)
|
28
|
-
File.exists?(overridden) ? overridden : original
|
29
|
-
end
|
30
|
-
|
31
|
-
# the root of the templates
|
32
|
-
def templates
|
33
|
-
'lib/templates/pico/'
|
34
|
-
end
|
35
|
-
|
36
|
-
def ask(prompt="", newline=false)
|
37
|
-
prompt += "\n" if newline
|
38
|
-
Readline.readline(prompt, true).squeeze(" ").strip
|
39
|
-
end
|
40
|
-
|
41
|
-
def write_with_confirmation(target_file_path, content)
|
42
|
-
unless File.exists?(target_file_path)
|
43
|
-
IO.write(target_file_path, content)
|
44
|
-
return
|
45
|
-
end
|
46
|
-
|
47
|
-
answer = if @@aways_ovewrite
|
48
|
-
puts "#{target_file_path} exists, overwrite? [yaN] y"
|
49
|
-
'y'
|
50
|
-
else
|
51
|
-
ask("#{target_file_path} exists, overwrite? [yaN]").downcase
|
52
|
-
end
|
53
|
-
|
54
|
-
@@aways_ovewrite = true if answer == 'a'
|
55
|
-
|
56
|
-
IO.write(target_file_path, content) if answer == 'y'
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
module Scaffold
|
2
|
-
class ControllerGenerator < Scaffold::BaseGenerator
|
3
|
-
|
4
|
-
def generate
|
5
|
-
controller_file_path = create_path(@params.controller_file_name)
|
6
|
-
|
7
|
-
# puts "Creating #{controller_file_path}"
|
8
|
-
|
9
|
-
filepath = find_root(templates, 'controller.rb.erb')
|
10
|
-
content = File.read(filepath)
|
11
|
-
# http://www.stuartellis.eu/articles/erb/
|
12
|
-
content = ::ERB.new(content, nil, '-').result(@params.instance_eval{ binding })
|
13
|
-
# puts content
|
14
|
-
write_with_confirmation(controller_file_path, content)
|
15
|
-
end
|
16
|
-
|
17
|
-
def create_path file_name
|
18
|
-
controller_path = File.join(Dir.pwd, 'app', 'controllers', @params.namespaces_array)
|
19
|
-
controller_file_path = File.join(controller_path, file_name)
|
20
|
-
FileUtils.mkpath(controller_path)
|
21
|
-
controller_file_path
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
module Scaffold
|
2
|
-
class FabricatorGenerator < Scaffold::BaseGenerator
|
3
|
-
def generate
|
4
|
-
fabricators_path = create_fabricators_path
|
5
|
-
source_file_name = "fabrication.rb.erb"
|
6
|
-
target_file_name = "#{@params.resource_name}_fabricator.rb"
|
7
|
-
source_file_path = find_root(templates, 'fabricators', source_file_name)
|
8
|
-
content = File.read(source_file_path)
|
9
|
-
|
10
|
-
# http://www.stuartellis.eu/articles/erb/
|
11
|
-
content = ::ERB.new(content, nil, '-').result(@params.instance_eval{ binding })#.gsub(/\s+\n$/, "")
|
12
|
-
|
13
|
-
target_file_path = File.join(fabricators_path, target_file_name)
|
14
|
-
|
15
|
-
write_with_confirmation(target_file_path, content)
|
16
|
-
end
|
17
|
-
|
18
|
-
def create_fabricators_path
|
19
|
-
fabricators_path = File.join(Dir.pwd, 'spec', 'fabricators')
|
20
|
-
FileUtils.mkpath(fabricators_path)
|
21
|
-
fabricators_path
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
module Scaffold
|
2
|
-
class ModelsGenerator < Scaffold::BaseGenerator
|
3
|
-
def generate
|
4
|
-
searches_path = create_searches_path
|
5
|
-
puts "Add '#{@params.services_folder}' folder in your autoload_paths (application.rb)"
|
6
|
-
create_search_object searches_path
|
7
|
-
create_model
|
8
|
-
end
|
9
|
-
|
10
|
-
def create_model
|
11
|
-
source_file_name = "model.rb.erb"
|
12
|
-
target_file_name = "#{@params.resource_name}.rb"
|
13
|
-
|
14
|
-
source_file_path = find_root(templates, source_file_name)
|
15
|
-
content = File.read(source_file_path)
|
16
|
-
|
17
|
-
content = ::ERB.new(content, nil, '-').result(@params.instance_eval{ binding })
|
18
|
-
|
19
|
-
if @params.modules.blank?
|
20
|
-
model_path = File.join(Dir.pwd, 'app', 'models')
|
21
|
-
else
|
22
|
-
model_path = File.join(Dir.pwd, 'app', 'models', @params.modules.map(&:underscore))
|
23
|
-
FileUtils.mkdir_p model_path
|
24
|
-
end
|
25
|
-
|
26
|
-
target_file_path = File.join(model_path, target_file_name)
|
27
|
-
|
28
|
-
write_with_confirmation(target_file_path, content)
|
29
|
-
end
|
30
|
-
|
31
|
-
def create_search_object searches_path
|
32
|
-
source_file_name = "search.rb.erb"
|
33
|
-
target_file_name = "#{@params.resource_name.pluralize}_search.rb"
|
34
|
-
|
35
|
-
source_file_path = find_root(templates, source_file_name)
|
36
|
-
content = File.read(source_file_path)
|
37
|
-
|
38
|
-
content = ::ERB.new(content, nil, '-').result(@params.instance_eval{ binding })
|
39
|
-
|
40
|
-
target_file_path = File.join(searches_path, target_file_name)
|
41
|
-
write_with_confirmation(target_file_path, content)
|
42
|
-
end
|
43
|
-
|
44
|
-
def create_searches_path
|
45
|
-
searches_path = File.join(Dir.pwd, 'app', @params.services_folder, 'search', @params.namespaces_array)
|
46
|
-
FileUtils.mkpath(searches_path)
|
47
|
-
searches_path
|
48
|
-
end
|
49
|
-
|
50
|
-
end
|
51
|
-
end
|
data/lib/scaffold/params.rb
DELETED
@@ -1,174 +0,0 @@
|
|
1
|
-
module Scaffold
|
2
|
-
class Params
|
3
|
-
attr_reader :resource_name, # user for use in @user or filenames
|
4
|
-
:resource_class_name, # CompanyOwnership
|
5
|
-
:namespaces_array, # The namespaces for the controller
|
6
|
-
:modules, # the modules for the model Admin::...
|
7
|
-
:controller_file_name,
|
8
|
-
:template,
|
9
|
-
:css_framework,
|
10
|
-
:views_folder_name,
|
11
|
-
:route_resource_name,
|
12
|
-
:services_folder
|
13
|
-
|
14
|
-
def initialize choice
|
15
|
-
(@modules, @model_name) = parse_model(choice[:model]) # what came from the params (it contain namespaces)
|
16
|
-
|
17
|
-
@fields = expand_default_types(hasherize_fields(choice[:fields]))
|
18
|
-
@index_fields = choice[:index_fields].blank? ? @fields.keys : choice[:index_fields]
|
19
|
-
@search_fields = choice[:search_fields].blank? ? @fields.keys : choice[:search_fields]
|
20
|
-
# permitted params
|
21
|
-
@fields_permitted = associations_to_ids(@fields)
|
22
|
-
@search_fields_permitted = search_fields_permitted(@search_fields, @fields)
|
23
|
-
|
24
|
-
@joins = choice[:joins]
|
25
|
-
@includes = choice[:includes]
|
26
|
-
@template = choice[:template]
|
27
|
-
@css_framework = choice[:css_framework]
|
28
|
-
|
29
|
-
@resource_class_name = @model_name.singularize # CompanyOwnership
|
30
|
-
# Admin::User or only User
|
31
|
-
if @modules.empty?
|
32
|
-
@modulized_resource_class_name = @resource_class_name
|
33
|
-
else
|
34
|
-
@modulized_resource_class_name = "#{@modules.join('::')}::#{@resource_class_name}"
|
35
|
-
end
|
36
|
-
|
37
|
-
# routes
|
38
|
-
@route_resource_name = @model_name.tableize # resourse :users
|
39
|
-
@namespace = choice[:namespace] # for the controllers
|
40
|
-
@base_controller = choice[:base_controller] || 'ApplicationController'
|
41
|
-
@namespaces_array = parse_namespaces_array(@namespace) # [:admin, ...?... ]
|
42
|
-
|
43
|
-
|
44
|
-
# controller
|
45
|
-
@resource_name = @model_name.tableize.singularize # user for use in @user or filenames
|
46
|
-
@collection_name = @model_name.tableize # users for use in @users
|
47
|
-
|
48
|
-
if @namespaces_array.blank?
|
49
|
-
@controller_class_name = "#{@model_name.pluralize}Controller"
|
50
|
-
@search_modulized_resource_class_name = "Search::#{@resource_class_name.pluralize}Search"
|
51
|
-
|
52
|
-
# paths without namespace
|
53
|
-
@new_resource_path = "[:new, :#{@resource_name}]"
|
54
|
-
|
55
|
-
@resource_path = "[#{@resource_name}]"
|
56
|
-
@edit_resource_path = "[:edit, #{@resource_name}]"
|
57
|
-
|
58
|
-
@instance_resource_path = "[@#{@resource_name}]"
|
59
|
-
@instance_edit_resource_path = "[:edit, @#{@resource_name}]"
|
60
|
-
|
61
|
-
@collection_path = [@collection_name.to_sym]
|
62
|
-
|
63
|
-
else
|
64
|
-
@controller_namespaces = @namespace.camelize
|
65
|
-
@controller_class_name = "#{@controller_namespaces}::#{@model_name.pluralize}Controller"
|
66
|
-
@search_modulized_resource_class_name = "Search::#{@controller_namespaces}::#{@resource_class_name.pluralize}Search"
|
67
|
-
|
68
|
-
# paths with namespace
|
69
|
-
@path_segments = @namespaces_array.map{|segment| segment.to_sym }
|
70
|
-
@new_resource_path = "[:new, #{@path_segments.map{|item| ":#{item}"}.join(", ")}, :#{@resource_name}]"
|
71
|
-
|
72
|
-
@resource_path = "[#{@path_segments.map{|item| ":#{item}"}.join(", ")}, #{@resource_name}]"
|
73
|
-
@edit_resource_path = "[:edit, #{@path_segments.map{|item| ":#{item}"}.join(", ")}, #{@resource_name}]"
|
74
|
-
|
75
|
-
@instance_resource_path = "[#{@path_segments.map{|item| ":#{item}"}.join(", ")}, @#{@resource_name}]"
|
76
|
-
@instance_edit_resource_path = "[:edit, #{@path_segments.map{|item| ":#{item}"}.join(", ")}, @#{@resource_name}]"
|
77
|
-
|
78
|
-
@collection_path = @path_segments.dup << @collection_name.to_sym
|
79
|
-
|
80
|
-
end
|
81
|
-
@controller_file_name = "#{@resource_class_name.tableize}_controller.rb"
|
82
|
-
|
83
|
-
|
84
|
-
# view
|
85
|
-
@views_folder_name = @model_name.tableize # users
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
@services_folder = choice[:services_folder]
|
90
|
-
debug_info if choice[:debug]
|
91
|
-
end
|
92
|
-
|
93
|
-
private
|
94
|
-
def debug_info
|
95
|
-
puts "\n"
|
96
|
-
puts "Debug:"
|
97
|
-
puts "resource_class_name: #{@resource_class_name}, resource_name: #{@resource_name}, collection_name: #{@collection_name}"
|
98
|
-
puts "modulized_resource_class_name: #{@modulized_resource_class_name}"
|
99
|
-
|
100
|
-
puts "\ncontroller:"
|
101
|
-
puts "class: #{@controller_class_name}"
|
102
|
-
|
103
|
-
puts "\nroutes:"
|
104
|
-
puts "route_resource_name: #{@route_resource_name}"
|
105
|
-
puts "namespaces_array: #{@namespaces_array} (for urls helpers)"
|
106
|
-
puts "resource_path: #{@resource_path}, resource_name: #{@collection_path}"
|
107
|
-
puts "collection_path: #{@collection_path}"
|
108
|
-
puts "\n\n"
|
109
|
-
end
|
110
|
-
|
111
|
-
def parse_model model
|
112
|
-
chunks = model.split('::').select{|chunk| !chunk.empty?}
|
113
|
-
class_name = chunks.pop
|
114
|
-
[chunks, class_name]
|
115
|
-
end
|
116
|
-
|
117
|
-
def parse_namespaces_array namespace
|
118
|
-
(namespace || "").split('/').collect{|name| name.underscore}
|
119
|
-
end
|
120
|
-
|
121
|
-
def hasherize_fields fields_array
|
122
|
-
fields = {}
|
123
|
-
fields_array.each do |field_string|
|
124
|
-
(key, value) = field_string.split(':')
|
125
|
-
fields[key] = value
|
126
|
-
end
|
127
|
-
fields
|
128
|
-
end
|
129
|
-
|
130
|
-
|
131
|
-
def expand_default_types hash
|
132
|
-
hash.each_pair do |key, value|
|
133
|
-
hash[key] = 'string' if value.blank?
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
# convert company => company_id
|
138
|
-
def associations_to_ids hash
|
139
|
-
to_ids = {}
|
140
|
-
hash.each_pair do |key, type|
|
141
|
-
key_name = ['references', 'belongs_to'].include?(type.downcase) ? "#{key}_id" : key
|
142
|
-
to_ids[key_name] = type
|
143
|
-
end
|
144
|
-
to_ids
|
145
|
-
end
|
146
|
-
|
147
|
-
# convert company => company_id
|
148
|
-
def search_fields_permitted search_fields, fields
|
149
|
-
to_ids = []
|
150
|
-
|
151
|
-
expanded_fields = expand_association_to_ids fields
|
152
|
-
|
153
|
-
search_fields.each do |key|
|
154
|
-
next unless expanded_fields.keys.include?(key)
|
155
|
-
type = expanded_fields[key]
|
156
|
-
to_ids << (['references', 'belongs_to'].include?(type.downcase) ? "#{key}_id" : key)
|
157
|
-
end
|
158
|
-
to_ids
|
159
|
-
end
|
160
|
-
|
161
|
-
# if the field is belongs_to
|
162
|
-
# make so that fields contains the `field` and field_id
|
163
|
-
def expand_association_to_ids fields
|
164
|
-
expanded = {}
|
165
|
-
fields.each_pair do |name, type|
|
166
|
-
case type
|
167
|
-
when 'belongs_to'
|
168
|
-
expanded["#{name}_id"] = 'integer'
|
169
|
-
end
|
170
|
-
end
|
171
|
-
fields.merge(expanded)
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|