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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9fec52a545c338bbcd9d624d709eb6bc48ea4265
4
- data.tar.gz: 8a17b8d883258b40ed743a7b5d63f97a94f4d4c8
3
+ metadata.gz: b19c8da8798e836c8acee5a7ee15947dee10a993
4
+ data.tar.gz: 880b97d31e54e1ae209f5984a9cc8b678195bb5c
5
5
  SHA512:
6
- metadata.gz: 828069d41e27cc623837c406fddba1a8b5d1c12a31099d936c4a80654123e4346f7f4f75e5af1ac2b9a2590f892051948a263e2b61bc4126ab76a08716cee891
7
- data.tar.gz: d85f578a4041e000f002debe96d57ed0ed6ef62e104f6182ab6be1bea7d93c3d9c10c053f36498360d13bee4cae105836057f096e611c04abc8a9731de60a7ff
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
- command = "rails g model #{params[:name].downcase}"
10
- params[:fields].each do |index, field|
11
- command = command + " #{field[:name].downcase}:#{field[:type].downcase}"
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
@@ -0,0 +1,7 @@
1
+ module ModelGen
2
+ module RelationsHelper
3
+ def available_relation_types
4
+ %w{has_many has_one has_and_belongs_to_many}
5
+ end
6
+ end
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>
@@ -1,3 +1,4 @@
1
1
  ModelGen::Engine.routes.draw do
2
2
  resources :entities, only: [:new, :create]
3
+ resources :relations, only: [:new, :create]
3
4
  end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ rails generate create_model Thing
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -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,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ rails generate define_relations Thing
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -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
@@ -1,3 +1,3 @@
1
1
  module ModelGen
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
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.2
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-10-27 00:00:00.000000000 Z
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