scaffold_pico 0.2.10 → 0.3.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 +120 -0
- data/lib/scaffold/base_generator.rb +38 -0
- data/lib/scaffold/cli.rb +6 -4
- data/lib/scaffold/controller_generator.rb +4 -4
- data/lib/scaffold/fabricator_generator.rb +3 -2
- data/lib/scaffold/models_generator.rb +25 -4
- data/lib/scaffold/params.rb +20 -3
- data/lib/scaffold/views_generator.rb +8 -5
- data/lib/templates/pico/controller.rb.erb +1 -1
- data/lib/templates/pico/fabricators/fabrication.rb.erb +3 -3
- data/lib/templates/pico/model.rb.erb +7 -0
- data/lib/templates/pico/search.rb.erb +32 -9
- data/lib/templates/pico/views/materialize/slim/_form.html.slim.erb +3 -1
- data/lib/templates/pico/views/materialize/slim/index.html.slim.erb +19 -6
- data/lib/templates/pico/views/zurb/slim/_form.html.slim.erb +2 -0
- data/lib/templates/pico/views/zurb/slim/index.html.slim.erb +14 -5
- metadata +20 -20
- data/README.rdoc +0 -79
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b0258251d6091e9d884d900d5bdde424615fdd66
|
4
|
+
data.tar.gz: 0d06a1145b44ba61cb4f842b4ffd3f20e4e35387
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a2c33e98a649be87ae0ce4348c6653b41c840e558b140b34f658c243cad092c237809b3bd72e6cc3b5df6e9f358c474480290dfabd597cdd63c6829550a4ada
|
7
|
+
data.tar.gz: 9663b5be29ad4c8adcfff9926dfa7dd8a1e95f034ddc0c43ae11b98ce00ef58d6cc2cc7f5a6eb65d6124894ab6af71ce35a051c48c0f03be8f47de12e94d0e6b
|
data/README.md
ADDED
@@ -0,0 +1,120 @@
|
|
1
|
+
# scaffold_pico
|
2
|
+
## Scaffolding done right
|
3
|
+
With this gem you can create your own pretty administration with a seconds.
|
4
|
+
|
5
|
+
No learning curve.
|
6
|
+
|
7
|
+
No need to learn DSLs or support 3rd party gems.
|
8
|
+
|
9
|
+
|
10
|
+
* Support namespaces for the model and the controllers
|
11
|
+
* Generate fabricators
|
12
|
+
* Supports different css frameworks - zurb / materializecss
|
13
|
+
* Can specify different fields for #index, #edit/new and search
|
14
|
+
* Can override every file per project
|
15
|
+
* You can specify includes/joins for the #index action
|
16
|
+
* Includes search
|
17
|
+
|
18
|
+
# SYNOPSIS
|
19
|
+
|
20
|
+
scaffold_pico.rb -m Admin::Vector -n administration -b AdminController \
|
21
|
+
--fields name: description:text featured:boolean license:belongs_to group_id:integer svg:file \
|
22
|
+
--index-fields id name imported featured \
|
23
|
+
--search-fields name aspect_ratio license created_at \
|
24
|
+
--fabrication \
|
25
|
+
--services_folder=services \
|
26
|
+
--debug --css_framework=materialize
|
27
|
+
|
28
|
+
# Install
|
29
|
+
|
30
|
+
There is no need to have it in your gem file.
|
31
|
+
|
32
|
+
gem install scaffold_pico
|
33
|
+
|
34
|
+
Set some default I18n options
|
35
|
+
|
36
|
+
en.yml:
|
37
|
+
|
38
|
+
scaffold:
|
39
|
+
confirm: 'Are you sure?'
|
40
|
+
notices:
|
41
|
+
success:
|
42
|
+
create: Was successfully created %{model}
|
43
|
+
update: Was successfully updated %{model}
|
44
|
+
destroy: Was successfully destroyed %{model}
|
45
|
+
failed:
|
46
|
+
create: Fail creating %{model}
|
47
|
+
update: Fail updating %{model}
|
48
|
+
destroy: Fail destroing %{model}
|
49
|
+
new:
|
50
|
+
title: "New %{model}"
|
51
|
+
show:
|
52
|
+
title: "%{model}"
|
53
|
+
edit:
|
54
|
+
title: "Edit %{model}"
|
55
|
+
index:
|
56
|
+
title: "%{model}"
|
57
|
+
edit: Edit
|
58
|
+
show: Show
|
59
|
+
destroy: Delete
|
60
|
+
actions: Action
|
61
|
+
search:
|
62
|
+
header: Search
|
63
|
+
button: Search
|
64
|
+
reset: New
|
65
|
+
|
66
|
+
actions:
|
67
|
+
index: List %{model}
|
68
|
+
actions: 'Actions'
|
69
|
+
new: New %{model}
|
70
|
+
edit: Edit %{model}
|
71
|
+
|
72
|
+
# Overriding
|
73
|
+
If you want to change something you can put it in
|
74
|
+
|
75
|
+
|
76
|
+
RAILS_ROOT/lib/templates/pico
|
77
|
+
/controller.rb
|
78
|
+
/search.rb
|
79
|
+
/fabricators
|
80
|
+
fabrication.rb.erb
|
81
|
+
/views
|
82
|
+
/materialize
|
83
|
+
_form.html.slim.erb
|
84
|
+
edit.html.slim.erb
|
85
|
+
index.html.slim.erb
|
86
|
+
new.html.slim.erb
|
87
|
+
show.html.slim.erb
|
88
|
+
/zurb
|
89
|
+
_form.html.slim.erb
|
90
|
+
edit.html.slim.erb
|
91
|
+
index.html.slim.erb
|
92
|
+
new.html.slim.erb
|
93
|
+
show.html.slim.erb
|
94
|
+
|
95
|
+
# Develop
|
96
|
+
|
97
|
+
Clone the repo in ~/scaffold_pico or whatever, then in some rails project run the binary like this
|
98
|
+
|
99
|
+
export SCAFFOLD_PICO_HOME=~/scaffold_pico
|
100
|
+
ruby -I $SCAFFOLD_PICO_HOME/lib $SCAFFOLD_PICO_HOME/bin/scaffold_pico \
|
101
|
+
--css_framework=materialize \
|
102
|
+
--template=slim \
|
103
|
+
-m User -n Admin -b AdminController \
|
104
|
+
--fields name:string
|
105
|
+
|
106
|
+
# Known Issues
|
107
|
+
Help please: For some of the generated models/views there are extra blank links. It would be great if someone knows how to parse the erb and skip the new lines
|
108
|
+
|
109
|
+
It would be great if someone wants to make a pull request for erb output
|
110
|
+
|
111
|
+
Overwrites the existing files without warnings!
|
112
|
+
|
113
|
+
You can't generate scaffolds for a mounted named engines. I don't know if we need this feature.
|
114
|
+
|
115
|
+
The Param class has become very messy because of all those variables, so it should be split in small helpers.
|
116
|
+
|
117
|
+
|
118
|
+
## Copyright
|
119
|
+
|
120
|
+
Copyright (c) 2016 gudata. See LICENSE.txt for further details.
|
@@ -1,5 +1,8 @@
|
|
1
|
+
require 'readline'
|
2
|
+
|
1
3
|
module Scaffold
|
2
4
|
class BaseGenerator
|
5
|
+
@@aways_ovewrite = false
|
3
6
|
|
4
7
|
def initialize params
|
5
8
|
@params = params
|
@@ -14,9 +17,44 @@ module Scaffold
|
|
14
17
|
Scaffold.root
|
15
18
|
end
|
16
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
|
+
|
17
31
|
# the root of the templates
|
18
32
|
def templates
|
19
33
|
'lib/templates/pico/'
|
20
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
|
+
|
21
59
|
end
|
22
60
|
end
|
data/lib/scaffold/cli.rb
CHANGED
@@ -37,7 +37,7 @@ module Scaffold
|
|
37
37
|
|
38
38
|
option :model, :required => true do
|
39
39
|
short '-m'
|
40
|
-
long '--model=
|
40
|
+
long '--model=SuperAdmin::User'
|
41
41
|
desc 'The model. It could be with modules. Example: ModuleA::ModuleB::SomeClassName'
|
42
42
|
validate /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/
|
43
43
|
end
|
@@ -79,15 +79,17 @@ module Scaffold
|
|
79
79
|
option :template do
|
80
80
|
long '-t'
|
81
81
|
long '--template template'
|
82
|
+
validate /\A(slim)\z/
|
82
83
|
default 'slim'
|
83
84
|
desc 'slim'
|
84
85
|
end
|
85
86
|
|
86
87
|
option :css_framework do
|
87
88
|
long '-c'
|
88
|
-
long '--css_framework
|
89
|
-
default '
|
90
|
-
|
89
|
+
long '--css_framework materialize'
|
90
|
+
default 'materialize'
|
91
|
+
validate /\A(zurb|materialize)\z/
|
92
|
+
desc 'zurb or materialize'
|
91
93
|
end
|
92
94
|
|
93
95
|
option :services_folder do
|
@@ -4,14 +4,14 @@ module Scaffold
|
|
4
4
|
def generate
|
5
5
|
controller_file_path = create_path(@params.controller_file_name)
|
6
6
|
|
7
|
-
puts "Creating #{controller_file_path}"
|
7
|
+
# puts "Creating #{controller_file_path}"
|
8
8
|
|
9
|
-
|
10
|
-
content = File.read(
|
9
|
+
filepath = find_root(templates, 'controller.rb.erb')
|
10
|
+
content = File.read(filepath)
|
11
11
|
# http://www.stuartellis.eu/articles/erb/
|
12
12
|
content = ::ERB.new(content, nil, '-').result(@params.instance_eval{ binding })
|
13
13
|
# puts content
|
14
|
-
|
14
|
+
write_with_confirmation(controller_file_path, content)
|
15
15
|
end
|
16
16
|
|
17
17
|
def create_path file_name
|
@@ -4,14 +4,15 @@ module Scaffold
|
|
4
4
|
fabricators_path = create_fabricators_path
|
5
5
|
source_file_name = "fabrication.rb.erb"
|
6
6
|
target_file_name = "#{@params.resource_name}_fabricator.rb"
|
7
|
-
source_file_path =
|
7
|
+
source_file_path = find_root(templates, 'fabricators', source_file_name)
|
8
8
|
content = File.read(source_file_path)
|
9
9
|
|
10
10
|
# http://www.stuartellis.eu/articles/erb/
|
11
11
|
content = ::ERB.new(content, nil, '-').result(@params.instance_eval{ binding })#.gsub(/\s+\n$/, "")
|
12
12
|
|
13
13
|
target_file_path = File.join(fabricators_path, target_file_name)
|
14
|
-
|
14
|
+
|
15
|
+
write_with_confirmation(target_file_path, content)
|
15
16
|
end
|
16
17
|
|
17
18
|
def create_fabricators_path
|
@@ -2,21 +2,43 @@ module Scaffold
|
|
2
2
|
class ModelsGenerator < Scaffold::BaseGenerator
|
3
3
|
def generate
|
4
4
|
searches_path = create_searches_path
|
5
|
-
puts "
|
5
|
+
puts "Add '#{@params.services_folder}' folder in your autoload_paths (application.rb)"
|
6
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)
|
7
29
|
end
|
8
30
|
|
9
31
|
def create_search_object searches_path
|
10
32
|
source_file_name = "search.rb.erb"
|
11
33
|
target_file_name = "#{@params.resource_name.pluralize}_search.rb"
|
12
34
|
|
13
|
-
source_file_path =
|
35
|
+
source_file_path = find_root(templates, source_file_name)
|
14
36
|
content = File.read(source_file_path)
|
15
37
|
|
16
38
|
content = ::ERB.new(content, nil, '-').result(@params.instance_eval{ binding })
|
17
39
|
|
18
40
|
target_file_path = File.join(searches_path, target_file_name)
|
19
|
-
|
41
|
+
write_with_confirmation(target_file_path, content)
|
20
42
|
end
|
21
43
|
|
22
44
|
def create_searches_path
|
@@ -25,6 +47,5 @@ module Scaffold
|
|
25
47
|
searches_path
|
26
48
|
end
|
27
49
|
|
28
|
-
|
29
50
|
end
|
30
51
|
end
|
data/lib/scaffold/params.rb
CHANGED
@@ -2,7 +2,8 @@ module Scaffold
|
|
2
2
|
class Params
|
3
3
|
attr_reader :resource_name, # user for use in @user or filenames
|
4
4
|
:resource_class_name, # CompanyOwnership
|
5
|
-
:namespaces_array,
|
5
|
+
:namespaces_array, # The namespaces for the controller
|
6
|
+
:modules, # the modules for the model Admin::...
|
6
7
|
:controller_file_name,
|
7
8
|
:template,
|
8
9
|
:css_framework,
|
@@ -39,6 +40,7 @@ module Scaffold
|
|
39
40
|
@base_controller = choice[:base_controller] || 'ApplicationController'
|
40
41
|
@namespaces_array = parse_namespaces_array(@namespace) # [:admin, ...?... ]
|
41
42
|
|
43
|
+
|
42
44
|
# controller
|
43
45
|
@resource_name = @model_name.tableize.singularize # user for use in @user or filenames
|
44
46
|
@collection_name = @model_name.tableize # users for use in @users
|
@@ -145,13 +147,28 @@ module Scaffold
|
|
145
147
|
# convert company => company_id
|
146
148
|
def search_fields_permitted search_fields, fields
|
147
149
|
to_ids = []
|
150
|
+
|
151
|
+
expanded_fields = expand_association_to_ids fields
|
152
|
+
|
148
153
|
search_fields.each do |key|
|
149
|
-
next unless
|
150
|
-
type =
|
154
|
+
next unless expanded_fields.keys.include?(key)
|
155
|
+
type = expanded_fields[key]
|
151
156
|
to_ids << (['references', 'belongs_to'].include?(type.downcase) ? "#{key}_id" : key)
|
152
157
|
end
|
153
158
|
to_ids
|
154
159
|
end
|
155
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
|
156
173
|
end
|
157
174
|
end
|
@@ -3,18 +3,19 @@ module Scaffold
|
|
3
3
|
def generate
|
4
4
|
views_path = create_views_path
|
5
5
|
templating_engine = choose_templating_engine
|
6
|
-
|
6
|
+
|
7
|
+
# print "Creating view:"
|
7
8
|
%w(index new edit show _form).each do |view_name|
|
8
|
-
print view_name, ' '
|
9
|
+
# print view_name, ' '
|
9
10
|
create views_path, view_name, templating_engine, css_framework
|
10
11
|
end
|
11
|
-
print "\n"
|
12
|
+
# print "\n"
|
12
13
|
end
|
13
14
|
|
14
15
|
def create views_path, view_name, templating_engine, css_framework
|
15
16
|
source_file_name = "#{view_name}.html.#{templating_engine.extension}.erb"
|
16
17
|
target_file_name = "#{view_name}.html.#{templating_engine.extension}"
|
17
|
-
source_file_path =
|
18
|
+
source_file_path = find_root(templates, 'views',
|
18
19
|
css_framework,
|
19
20
|
templating_engine.source_folder_name,
|
20
21
|
source_file_name)
|
@@ -24,7 +25,7 @@ module Scaffold
|
|
24
25
|
content = ::ERB.new(content, nil, '-').result(@params.instance_eval{ binding })#.gsub(/\s+\n$/, "")
|
25
26
|
|
26
27
|
target_file_path = File.join(create_views_path, target_file_name)
|
27
|
-
|
28
|
+
write_with_confirmation(target_file_path, content)
|
28
29
|
end
|
29
30
|
|
30
31
|
def create_views_path
|
@@ -38,6 +39,8 @@ module Scaffold
|
|
38
39
|
case @params.template
|
39
40
|
when 'slim'
|
40
41
|
::Scaffold::TemplateEngines::Slim.new
|
42
|
+
else
|
43
|
+
raise "I don't have defined templates for #{@params.template}. However you can use [slim,]"
|
41
44
|
end
|
42
45
|
end
|
43
46
|
|
@@ -5,7 +5,7 @@ class <%= @controller_class_name %> < <%= @base_controller %>
|
|
5
5
|
<%=
|
6
6
|
active_record = ["@#{@collection_name}_search"]
|
7
7
|
active_record << [ "results" ]
|
8
|
-
active_record << [ "includes(#{@includes.join(', ')})" ] if @includes and !@includes.empty?
|
8
|
+
active_record << [ "includes(#{@includes.lazy.map(&:strip).map{|v| v.gsub(',', '')}.to_a.join(', ')})" ] if @includes and !@includes.empty?
|
9
9
|
active_record << [ "joins(#{@joins.join(', ')})" ] if @joins and !@joins.empty?
|
10
10
|
active_record << [ "page(params[:page])", "per(params[:per])" ]
|
11
11
|
active_record << [ "all" ]
|
@@ -1,6 +1,6 @@
|
|
1
|
-
<% if @modules.empty?
|
1
|
+
<% if @modules.empty? -%>
|
2
2
|
Fabricator(:<%= @resource_name %>) do
|
3
|
-
<% else
|
3
|
+
<% else -%>
|
4
4
|
Fabricator(:<%= @resource_name %>, class_name: '<%= @modulized_resource_class_name -%>') do
|
5
5
|
<% end -%>
|
6
6
|
<% @fields.each_pair do |field_name, kind| -%>
|
@@ -12,4 +12,4 @@ Fabricator(:<%= @resource_name %>, class_name: '<%= @modulized_resource_class_na
|
|
12
12
|
<%= field_name -%> { Faker::Lorem.word }
|
13
13
|
<% end -%>
|
14
14
|
<% end -%>
|
15
|
-
end
|
15
|
+
end
|
@@ -2,21 +2,44 @@ class <%= @search_modulized_resource_class_name %>
|
|
2
2
|
include ActiveModel::Model
|
3
3
|
|
4
4
|
attr_accessor(
|
5
|
-
|
5
|
+
<% @fields.select {|k,v| @search_fields.include?(k) }.each_pair do |field_name, field_type| %>
|
6
|
+
<% if field_type == 'belongs_to' -%>
|
7
|
+
:<%= field_name %>_id,
|
8
|
+
<% else %>
|
6
9
|
:<%= field_name %>,
|
7
10
|
<% end %>
|
11
|
+
<% end %>
|
8
12
|
)
|
9
13
|
|
14
|
+
<% @fields.select {|k,v| @search_fields.include?(k) }.each_pair do |field_name, field_type| %>
|
15
|
+
<%- if field_type == "integer" %>
|
16
|
+
validates :<%= field_name -%>, numericality: { only_integer: true }, allow_blank: true
|
17
|
+
<%- end %>
|
18
|
+
<%- end %>
|
19
|
+
|
20
|
+
def initialize *args
|
21
|
+
@relation = <%= @modulized_resource_class_name %>
|
22
|
+
super *args
|
23
|
+
end
|
10
24
|
|
11
25
|
def results
|
12
|
-
<%= @resource_name %> =
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
26
|
+
<%= @resource_name %> = @relation
|
27
|
+
|
28
|
+
<%= @resource_name %> = @relation.order("updated_at")
|
29
|
+
|
30
|
+
if valid?
|
31
|
+
<% @fields.select {|k,v| @search_fields.include?(k) }.each_pair do |field_name, field_type| %>
|
32
|
+
<% if ['string', 'text'].include?(field_type) -%>
|
33
|
+
<%= @resource_name %> = <%= @resource_name %>.where("<%= field_name %> LIKE ?", "%#{<%= field_name %>}%") if self.<%= field_name %>.present?
|
34
|
+
<% elsif field_type == "boolean" -%>
|
35
|
+
<%= @resource_name %> = <%= @resource_name %>.where(<%= field_name -%>: <%= field_name -%>=='1') if self.<%= field_name %>.present?
|
36
|
+
<% elsif field_type == 'belongs_to' -%>
|
37
|
+
<%= @resource_name %> = <%= @resource_name %>.where(<%= field_name %>_id: <%= field_name %>_id) if self.<%= field_name %>_id.present?
|
38
|
+
<% else -%>
|
39
|
+
<%= @resource_name %> = <%= @resource_name %>.where(<%= field_name %>: <%= field_name %>) if self.<%= field_name %>.present?
|
40
|
+
<% end -%>
|
41
|
+
<% end -%>
|
42
|
+
end
|
20
43
|
|
21
44
|
<%= @resource_name %>
|
22
45
|
end
|
@@ -7,10 +7,12 @@
|
|
7
7
|
= form.association :<%= field_name %>
|
8
8
|
<% elsif kind == 'text' -%>
|
9
9
|
= form.input :<%= field_name -%>, as: :text
|
10
|
+
<% elsif ['date', 'datetime'].include?(kind) -%>
|
11
|
+
= form.input :<%= field_name -%>, as: :date, html5: true
|
10
12
|
<% else -%>
|
11
13
|
= form.input :<%= field_name %>
|
12
14
|
<% end -%>
|
13
15
|
<% end -%>
|
14
16
|
|
15
17
|
.form-actions
|
16
|
-
= form.
|
18
|
+
= form.button :button, 'Reset Password', :class => 'btn btn-large waves-effect waves'
|
@@ -1,8 +1,11 @@
|
|
1
1
|
h1 = t('scaffold.index.title', model: <%= @modulized_resource_class_name %>.model_name.human(count: 2))
|
2
2
|
|
3
|
-
=
|
4
|
-
|
5
|
-
|
3
|
+
.fixed-action-btn style="bottom: 45px; right: 24px;"
|
4
|
+
= link_to <%= @new_resource_path %>, class: 'btn-floating btn-large waves-effect waves-light red' do
|
5
|
+
i.material-icons.right add
|
6
|
+
= t('scaffold.actions.new', model: <%= @modulized_resource_class_name %>.model_name.human(count: 1).mb_chars.downcase)
|
7
|
+
|
8
|
+
|
6
9
|
|
7
10
|
.row
|
8
11
|
.col.s12.m9
|
@@ -29,14 +32,24 @@ h1 = t('scaffold.index.title', model: <%= @modulized_resource_class_name %>.mode
|
|
29
32
|
= paginate @<%= @collection_name %>
|
30
33
|
|
31
34
|
.col.s12.m3
|
32
|
-
|
35
|
+
|
36
|
+
aside.card.search
|
33
37
|
= simple_form_for <%= "@#{@collection_name}_search" %>, as: :<%= @collection_name %>_search, url: <%= @collection_path %>, method: :get do |form|
|
34
38
|
.card-content
|
35
39
|
h5 = t('scaffold.index.search.header')
|
36
40
|
= form.error_notification
|
37
|
-
|
41
|
+
|
42
|
+
<% @fields.select {|k,v| @search_fields.include?(k) }.each_pair do |field_name, field_type| %>
|
43
|
+
<% if field_type == 'belongs_to' -%>
|
44
|
+
= form.input :<%= field_name -%>_id
|
45
|
+
<% elsif ['date', 'datetime'].include?(field_type) -%>
|
46
|
+
= form.input :<%= field_name -%>, as: :date, html5: true
|
47
|
+
<% elsif field_type == 'boolean' -%>
|
48
|
+
= form.input :<%= field_name -%>, as: :boolean, input_html: {class: 'filled-in'}
|
49
|
+
<% else %>
|
38
50
|
= form.input :<%= field_name -%>
|
39
|
-
|
51
|
+
<% end -%>
|
52
|
+
<% end %>
|
40
53
|
|
41
54
|
.card-action
|
42
55
|
= link_to t('scaffold.index.search.reset'), url_for(<%= @collection_path %>), class: 'waves-effect waves-light btn lime lighten-5 black-text'
|
@@ -7,6 +7,8 @@
|
|
7
7
|
= form.association :<%= field_name %>
|
8
8
|
<% elsif kind == 'text' -%>
|
9
9
|
= form.input :<%= field_name -%>, as: :text
|
10
|
+
<% elsif ['date', 'datetime'].include?(kind) -%>
|
11
|
+
= form.input :<%= field_name -%>, as: :date, html5: true
|
10
12
|
<% else -%>
|
11
13
|
= form.input :<%= field_name %>
|
12
14
|
<% end -%>
|
@@ -1,7 +1,5 @@
|
|
1
1
|
h1 = t('scaffold.index.title', model: <%= @modulized_resource_class_name %>.model_name.human(count: 2).mb_chars.downcase)
|
2
2
|
|
3
|
-
= link_to t('scaffold.actions.new', model: <%= @modulized_resource_class_name %>.model_name.human.mb_chars.downcase), <%= @new_resource_path %>, class: 'button small secondary'
|
4
|
-
|
5
3
|
.row
|
6
4
|
.small-12.medium-10.columns
|
7
5
|
table
|
@@ -24,15 +22,26 @@ h1 = t('scaffold.index.title', model: <%= @modulized_resource_class_name %>.mode
|
|
24
22
|
= paginate @<%= @collection_name %>
|
25
23
|
|
26
24
|
.small-12.medium-2.columns
|
27
|
-
.callout.clearfix
|
25
|
+
aside.callout.clearfix.actions
|
26
|
+
= link_to t('scaffold.actions.new', model: <%= @modulized_resource_class_name %>.model_name.human.mb_chars.downcase), <%= @new_resource_path %>, class: 'button small secondary'
|
27
|
+
|
28
|
+
aside.search.callout.clearfix
|
28
29
|
h5 = t('scaffold.index.search.header')
|
29
30
|
|
30
31
|
= simple_form_for <%= "@#{@collection_name}_search" %>, as: :<%= @collection_name %>_search, url: <%= @collection_path %>, method: :get do |form|
|
31
32
|
= form.error_notification
|
32
33
|
.form-inputs
|
33
|
-
|
34
|
+
<% @fields.select {|k,v| @search_fields.include?(k) }.each_pair do |field_name, field_type| %>
|
35
|
+
<% if field_type == 'belongs_to' -%>
|
36
|
+
= form.input :<%= field_name -%>_id
|
37
|
+
<% elsif ['date', 'datetime'].include?(field_type) -%>
|
38
|
+
= form.input :<%= field_name -%>, as: :date, html5: true
|
39
|
+
<% elsif field_type == 'boolean' -%>
|
40
|
+
= form.input :<%= field_name -%>, as: :boolean, input_html: {class: 'filled-in'}
|
41
|
+
<% else %>
|
34
42
|
= form.input :<%= field_name -%>
|
35
|
-
|
43
|
+
<% end -%>
|
44
|
+
<% end %>
|
36
45
|
|
37
46
|
.form-actions
|
38
47
|
= form.submit t('scaffold.index.search.button'), class: 'button'
|
metadata
CHANGED
@@ -1,85 +1,85 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: scaffold_pico
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- gudata
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: choice
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: require_all
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: jeweler
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: '0'
|
83
83
|
description: Scaffolding
|
84
84
|
email: i.bardarov@gmail.com
|
85
85
|
executables:
|
@@ -87,10 +87,10 @@ executables:
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files:
|
89
89
|
- LICENSE.txt
|
90
|
-
- README.
|
90
|
+
- README.md
|
91
91
|
files:
|
92
92
|
- LICENSE.txt
|
93
|
-
- README.
|
93
|
+
- README.md
|
94
94
|
- bin/scaffold_pico
|
95
95
|
- lib/scaffold/base_generator.rb
|
96
96
|
- lib/scaffold/cli.rb
|
@@ -105,6 +105,7 @@ files:
|
|
105
105
|
- lib/scaffold_pico.rb
|
106
106
|
- lib/templates/pico/controller.rb.erb
|
107
107
|
- lib/templates/pico/fabricators/fabrication.rb.erb
|
108
|
+
- lib/templates/pico/model.rb.erb
|
108
109
|
- lib/templates/pico/search.rb.erb
|
109
110
|
- lib/templates/pico/views/materialize/slim/_form.html.slim.erb
|
110
111
|
- lib/templates/pico/views/materialize/slim/edit.html.slim.erb
|
@@ -126,19 +127,18 @@ require_paths:
|
|
126
127
|
- lib
|
127
128
|
required_ruby_version: !ruby/object:Gem::Requirement
|
128
129
|
requirements:
|
129
|
-
- -
|
130
|
+
- - ">="
|
130
131
|
- !ruby/object:Gem::Version
|
131
132
|
version: '0'
|
132
133
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
134
|
requirements:
|
134
|
-
- -
|
135
|
+
- - ">="
|
135
136
|
- !ruby/object:Gem::Version
|
136
137
|
version: '0'
|
137
138
|
requirements: []
|
138
139
|
rubyforge_project:
|
139
|
-
rubygems_version: 2.
|
140
|
+
rubygems_version: 2.6.8
|
140
141
|
signing_key:
|
141
142
|
specification_version: 4
|
142
143
|
summary: Scaffold should be simple
|
143
144
|
test_files: []
|
144
|
-
has_rdoc:
|
data/README.rdoc
DELETED
@@ -1,79 +0,0 @@
|
|
1
|
-
= scaffold_pico
|
2
|
-
|
3
|
-
|
4
|
-
ruby -I lib bin/scaffold_pico.rb \
|
5
|
-
--css_framework=materialize --template=slim \
|
6
|
-
-m User -n Admin
|
7
|
-
--fields name:string
|
8
|
-
--fabrication \
|
9
|
-
|
10
|
-
|
11
|
-
Used in production:
|
12
|
-
scaffold_pico.rb -m Company -n super_admin --fields name:string website:string active:string subscription:string contact_person:string
|
13
|
-
|
14
|
-
scaffold_pico.rb -m CompanyOwnerships -b AuthenticatedController -n admin \
|
15
|
-
--includes :user :company \
|
16
|
-
--css_framework=materialize \
|
17
|
-
--fields user_id: company_id: admin:boolean approved:boolean \
|
18
|
-
--index-fields user_id admin approved \
|
19
|
-
--search-fields admin approved
|
20
|
-
|
21
|
-
scaffold_pico.rb -m Admin::Assistant -n administation/pencho --fields first_name:string last_name:string
|
22
|
-
|
23
|
-
Example with options:
|
24
|
-
scaffold_pico.rb -d --css_framework=materialize \
|
25
|
-
-m Vector -n manage -b AdminController \
|
26
|
-
--fields name: featured:boolean aspect_ratio: portrait:boolean landscape:boolean imported:boolean trending:boolean width:integer height:integer transperant:boolean bw:boolean license:belongs_to group_id:integer tool:belongs_to user_id: category_id: category_display_order:integer group_display_order:integer svg:file ai:file png:file emf:file wmf:file \
|
27
|
-
--index-fields id name imported featured \
|
28
|
-
--search-fields name aspect_ratio landscape portrait imported featured trending width height transperant bw license_id group_id tool_id user_id category_id
|
29
|
-
--services_folder=services
|
30
|
-
|
31
|
-
== I18n
|
32
|
-
|
33
|
-
en.yml:
|
34
|
-
|
35
|
-
activerecord:
|
36
|
-
notices:
|
37
|
-
success:
|
38
|
-
create: Was successfully created %{model}
|
39
|
-
update: Was successfully updated %{model}
|
40
|
-
destroy: Was successfully destroyed %{model}
|
41
|
-
failed:
|
42
|
-
create: Fail creating %{model}
|
43
|
-
update: Fail updating %{model}
|
44
|
-
destroy: Fail destroing %{model}
|
45
|
-
|
46
|
-
== Copyright
|
47
|
-
|
48
|
-
Copyright (c) 2016 gudata. See LICENSE.txt for
|
49
|
-
further details.
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
2fix
|
54
|
-
|
55
|
-
|
56
|
-
scaffold_pico.rb -m Admin::CompanyOwnerships -b AuthenticatedController -n admin \
|
57
|
-
--includes :user, :company \ <---
|
58
|
-
--css_framework=materialize \
|
59
|
-
--fields user_id: company_id: admin:boolean approved:boolean \ <---belongsto, file fields
|
60
|
-
--index-fields user_id admin approved \
|
61
|
-
--search-fields admin approved <-- missing searchfields
|
62
|
-
|
63
|
-
scaffold_pico.rb -m Auctions::AuctionItem -b Manage::BaseController -n manage \
|
64
|
-
--includes :user :page :auction \
|
65
|
-
--css_framework=zurb --services_folder=actions\
|
66
|
-
--fields id: auction:belongs_to user:belongs_to page:belongs_to state: message:text money_wanted_by_user: money_approved_for_user: tickets_count: ended_at: claimed_at: document_1:file document_2:file document_3:file document_4:file document_5:file created_at: \
|
67
|
-
--index-fields auction user page state money_wanted_by_user \
|
68
|
-
--search-fields auction_id user_id
|
69
|
-
|
70
|
-
|
71
|
-
Started POST "/super_admin/company_ownerships" for 127.0.0.1 at 2016-05-18 21:36:21 +0300
|
72
|
-
Processing by SuperAdmin::CompanyOwnershipsController#create as HTML
|
73
|
-
Parameters: {"utf8"=>"✓", "authenticity_token"=>"OBASAkBg11kfNd0omZ6Jd4AApmCIU1Q2f9uCq/665cwf/qJva74jkS620ELii96stkPcYfLfzes0yu0i/+nKAQ==", "company_ownership"=>{"user_id"=>"1", "company_id"=>"1", "admin"=>"0", "approved"=>"0"}, "commit"=>"Създай Членство"}
|
74
|
-
User Load (0.4ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ? [["id", 4], ["LIMIT", 1]]
|
75
|
-
Unpermitted parameters: user_id, company_id <---
|
76
|
-
|
77
|
-
|
78
|
-
services/action folder param
|
79
|
-
auction = auction.where(name: name) if self.name.present?
|