model_gen 0.1.2 → 0.1.3
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/app/controllers/model_gen/application_controller.rb +8 -0
- data/app/controllers/model_gen/entities_controller.rb +12 -5
- data/app/controllers/model_gen/relations_controller.rb +19 -0
- data/app/helpers/model_gen/entities_helper.rb +0 -8
- data/app/helpers/model_gen/relations_helper.rb +7 -0
- data/app/views/model_gen/entities/new.html.erb +10 -2
- data/app/views/model_gen/relations/new.html.erb +59 -0
- data/config/routes.rb +1 -0
- data/lib/generators/model_gen/create_model/USAGE +8 -0
- data/lib/generators/model_gen/create_model/create_model_generator.rb +14 -0
- data/lib/generators/model_gen/define_relations/USAGE +8 -0
- data/lib/generators/model_gen/define_relations/define_relations_generator.rb +23 -0
- data/lib/model_gen/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b19c8da8798e836c8acee5a7ee15947dee10a993
|
4
|
+
data.tar.gz: 880b97d31e54e1ae209f5984a9cc8b678195bb5c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7afcfe48ec600f81fd5d073dfe0d989b49db5607c58afc5a9f39b1361cddf0c6dec5fe0bf64bcf2924d95e1b63efb9fd6ac0977ddb838836e20ef6f37026026c
|
7
|
+
data.tar.gz: 32b049d0e4dabfee9f7907ec15bc44133db821db6e1f205f8c8672a2d407961e132a85eeb9804fb2c4200b58085f1574df4fd7960e041e0b9de2ded80b3b4bfc
|
@@ -1,5 +1,13 @@
|
|
1
1
|
module ModelGen
|
2
2
|
class ApplicationController < ActionController::Base
|
3
3
|
protect_from_forgery with: :exception
|
4
|
+
helper_method :available_models
|
5
|
+
|
6
|
+
def available_models
|
7
|
+
rb_files = File.join("**", "*.rb")
|
8
|
+
Dir.glob("#{Rails.root}/app/models" + rb_files).collect do |filename|
|
9
|
+
filename.chomp('.rb').split("/").last.camelize
|
10
|
+
end.flatten.reject { |m| m.starts_with?('Concerns::') || m == 'ApplicationRecord' }
|
11
|
+
end
|
4
12
|
end
|
5
13
|
end
|
@@ -6,12 +6,19 @@ module ModelGen
|
|
6
6
|
end
|
7
7
|
|
8
8
|
def create
|
9
|
-
|
10
|
-
params[:
|
11
|
-
|
9
|
+
@errors = []
|
10
|
+
if available_models.include?(params[:name].capitalize)
|
11
|
+
@errors << "Model with name #{params[:name]} already exists."
|
12
|
+
render 'new'
|
13
|
+
else
|
14
|
+
command = "rails g model #{params[:name].downcase}"
|
15
|
+
params[:fields].each do |index, field|
|
16
|
+
command = command + " #{field[:name].downcase}:#{field[:type].downcase}"
|
17
|
+
end
|
18
|
+
system command
|
19
|
+
system 'rake db:migrate'
|
20
|
+
redirect_to new_entity_path
|
12
21
|
end
|
13
|
-
system command
|
14
|
-
redirect_to new_entity_path
|
15
22
|
end
|
16
23
|
end
|
17
24
|
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_dependency "model_gen/application_controller"
|
2
|
+
|
3
|
+
module ModelGen
|
4
|
+
class RelationsController < ApplicationController
|
5
|
+
|
6
|
+
def new
|
7
|
+
|
8
|
+
end
|
9
|
+
|
10
|
+
def create
|
11
|
+
command = "rails g model_gen:define_relations #{params[:name]}"
|
12
|
+
params[:relations].each do |index, relation|
|
13
|
+
command = command + " #{relation[:model].downcase}:#{relation[:type].downcase}"
|
14
|
+
end
|
15
|
+
system command
|
16
|
+
redirect_to new_relations_path
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -2,14 +2,6 @@ module ModelGen
|
|
2
2
|
module EntitiesHelper
|
3
3
|
def available_data_types
|
4
4
|
%w{binary boolean date datetime decimal float integer bigint references string text time timestamp}
|
5
|
-
# primary_key
|
6
|
-
end
|
7
|
-
|
8
|
-
def available_models
|
9
|
-
rb_files = File.join("**", "*.rb")
|
10
|
-
Dir.glob("#{Rails.root}/app/models" + rb_files).collect do |filename|
|
11
|
-
filename.chomp('.rb').split("/").last.camelize
|
12
|
-
end.flatten.reject { |m| m.starts_with?('Concerns::') || m == 'ApplicationRecord' }
|
13
5
|
end
|
14
6
|
end
|
15
7
|
end
|
@@ -1,7 +1,15 @@
|
|
1
|
+
<% if @errors.present? %>
|
2
|
+
<ul>
|
3
|
+
<% @errors.each do |error| %>
|
4
|
+
<li><%= error %></li>
|
5
|
+
<% end %>
|
6
|
+
</ul>
|
7
|
+
<% end %>
|
8
|
+
|
1
9
|
<%= form_tag entities_path do %>
|
2
10
|
<div>
|
3
11
|
<label>Model Name</label>
|
4
|
-
<%= text_field_tag :name %>
|
12
|
+
<%= text_field_tag :name, '', required: true %>
|
5
13
|
</div>
|
6
14
|
<br/>
|
7
15
|
<br/>
|
@@ -9,7 +17,7 @@
|
|
9
17
|
<div id="field">
|
10
18
|
<div>
|
11
19
|
<label>Field Name</label>
|
12
|
-
<%= text_field_tag 'fields[0][name]' %>
|
20
|
+
<%= text_field_tag 'fields[0][name]', '', required: true %>
|
13
21
|
</div>
|
14
22
|
<br/>
|
15
23
|
<div>
|
@@ -0,0 +1,59 @@
|
|
1
|
+
<% if @errors.present? %>
|
2
|
+
<ul>
|
3
|
+
<% @errors.each do |error| %>
|
4
|
+
<li><%= error %></li>
|
5
|
+
<% end %>
|
6
|
+
</ul>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<%= form_tag relations_path do %>
|
10
|
+
<div>
|
11
|
+
<label>Target Model</label>
|
12
|
+
<%= select_tag "name", options_for_select(available_models), required: true %>
|
13
|
+
</div>
|
14
|
+
<br/>
|
15
|
+
<br/>
|
16
|
+
<div id="relations">
|
17
|
+
<div id="relation">
|
18
|
+
<div>
|
19
|
+
<label>Relation Type</label>
|
20
|
+
<%= select_tag "relations[0][type]", options_for_select(available_relation_types), required: true %>
|
21
|
+
</div>
|
22
|
+
<br/>
|
23
|
+
<div>
|
24
|
+
<label>Associated Model</label>
|
25
|
+
<%= select_tag "relations[0][model]", options_for_select(available_models), required: true %>
|
26
|
+
</div>
|
27
|
+
<br/>
|
28
|
+
<a class="remove-relation" onclick="removeRelation(this)" style="display: none;">Remove</a>
|
29
|
+
<br/>
|
30
|
+
<br/>
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<a id="add-relation">
|
35
|
+
Add Relation
|
36
|
+
</a>
|
37
|
+
<%= submit_tag 'Define Relations' %>
|
38
|
+
<% end %>
|
39
|
+
<script>
|
40
|
+
document.getElementById('add-relation').onclick = function(){
|
41
|
+
var index = Math.floor(Math.random()*1000000000000000);
|
42
|
+
var relation = document.getElementById("relation");
|
43
|
+
var new_relation = relation.cloneNode(true);
|
44
|
+
var relation_model_input = new_relation.querySelector("div > #relations_0_model")
|
45
|
+
var relation_type_input = new_relation.querySelector("div > #relations_0_type")
|
46
|
+
relation_model_input.name = 'relations[' + index + '][target_model]'
|
47
|
+
relation_model_input.id = 'relations_' + index + '_target_model'
|
48
|
+
relation_model_input.value = ''
|
49
|
+
relation_type_input.name = 'relations[' + index + '][type]'
|
50
|
+
relation_type_input.id = 'relations_' + index + '_type'
|
51
|
+
relation_type_input.value = ''
|
52
|
+
new_relation.querySelector(".remove-relation").style = '';
|
53
|
+
document.getElementById("relations").appendChild(new_relation);
|
54
|
+
}
|
55
|
+
function removeRelation(element){
|
56
|
+
console.log(element.parentElement)
|
57
|
+
element.parentElement.remove()
|
58
|
+
}
|
59
|
+
</script>
|
data/config/routes.rb
CHANGED
@@ -0,0 +1,14 @@
|
|
1
|
+
class ModelGen::CreateModelGenerator < Rails::Generators::NamedBase
|
2
|
+
source_root File.expand_path('../templates', __FILE__)
|
3
|
+
|
4
|
+
argument :attributes, type: :array, default: [], banner: "field[:type][:index] field[:type][:index]"
|
5
|
+
|
6
|
+
def create
|
7
|
+
command = "rails g model #{name.downcase}"
|
8
|
+
attributes.each do |field|
|
9
|
+
command = command + " #{field.name.downcase}:#{field.type.downcase}"
|
10
|
+
end
|
11
|
+
system command
|
12
|
+
system 'rake db:migrate'
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class ModelGen::DefineRelationsGenerator < Rails::Generators::NamedBase
|
2
|
+
source_root File.expand_path('../templates', __FILE__)
|
3
|
+
argument :attributes, type: :array, default: [], banner: "relation[:type] relation[:type]"
|
4
|
+
|
5
|
+
def create
|
6
|
+
attributes.each do |relation|
|
7
|
+
line = "class #{name.downcase.capitalize} < ApplicationRecord"
|
8
|
+
case relation.type
|
9
|
+
when :has_many
|
10
|
+
gsub_file "app/models/#{name.downcase}.rb", /(#{Regexp.escape(line)})/mi do |match|
|
11
|
+
"#{match}\n #{relation.type} :#{relation.name.downcase.pluralize}\n"
|
12
|
+
end
|
13
|
+
when :has_one
|
14
|
+
gsub_file "app/models/#{name.downcase}.rb", /(#{Regexp.escape(line)})/mi do |match|
|
15
|
+
"#{match}\n #{relation.type} :#{relation.name.downcase}\n"
|
16
|
+
end
|
17
|
+
when :has_and_belongs_to_many
|
18
|
+
puts relation.type
|
19
|
+
puts relation.name
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/model_gen/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: model_gen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Atharva System
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -46,14 +46,21 @@ files:
|
|
46
46
|
- app/assets/stylesheets/model_gen/application.css
|
47
47
|
- app/controllers/model_gen/application_controller.rb
|
48
48
|
- app/controllers/model_gen/entities_controller.rb
|
49
|
+
- app/controllers/model_gen/relations_controller.rb
|
49
50
|
- app/helpers/model_gen/application_helper.rb
|
50
51
|
- app/helpers/model_gen/entities_helper.rb
|
52
|
+
- app/helpers/model_gen/relations_helper.rb
|
51
53
|
- app/jobs/model_gen/application_job.rb
|
52
54
|
- app/mailers/model_gen/application_mailer.rb
|
53
55
|
- app/models/model_gen/application_record.rb
|
54
56
|
- app/views/layouts/model_gen/application.html.erb
|
55
57
|
- app/views/model_gen/entities/new.html.erb
|
58
|
+
- app/views/model_gen/relations/new.html.erb
|
56
59
|
- config/routes.rb
|
60
|
+
- lib/generators/model_gen/create_model/USAGE
|
61
|
+
- lib/generators/model_gen/create_model/create_model_generator.rb
|
62
|
+
- lib/generators/model_gen/define_relations/USAGE
|
63
|
+
- lib/generators/model_gen/define_relations/define_relations_generator.rb
|
57
64
|
- lib/model_gen.rb
|
58
65
|
- lib/model_gen/engine.rb
|
59
66
|
- lib/model_gen/version.rb
|