beautiful_scaffold 1.0.1 → 2.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/CHANGELOG +78 -1
  4. data/Gemfile +25 -9
  5. data/README.rdoc +45 -28
  6. data/Rakefile +29 -0
  7. data/beautiful_scaffold.gemspec +7 -7
  8. data/lib/beautiful_scaffold/version.rb +3 -0
  9. data/lib/generators/USAGE +3 -1
  10. data/lib/generators/beautiful_cancancan_generator.rb +51 -0
  11. data/lib/generators/beautiful_jointable_generator.rb +41 -8
  12. data/lib/generators/beautiful_locale_generator.rb +107 -104
  13. data/lib/generators/beautiful_migration_generator.rb +14 -20
  14. data/lib/generators/beautiful_scaffold_common_methods.rb +56 -26
  15. data/lib/generators/beautiful_scaffold_generator.rb +116 -78
  16. data/lib/generators/beautiful_sorcery_generator.rb +137 -0
  17. data/lib/generators/beautiful_storage_generator.rb +61 -0
  18. data/lib/generators/templates/app/assets/javascripts/application-bs.js +5 -7
  19. data/lib/generators/templates/app/assets/javascripts/beautiful_scaffold.js +65 -79
  20. data/lib/generators/templates/app/assets/javascripts/bootstrap-datetimepicker-for-beautiful-scaffold.js +26 -23
  21. data/lib/generators/templates/app/assets/javascripts/fixed_menu.js +3 -1
  22. data/lib/generators/templates/app/assets/javascripts/jstree.min.js +6 -0
  23. data/lib/generators/templates/app/assets/stylesheets/application-bs.css +14 -6
  24. data/lib/generators/templates/app/assets/stylesheets/beautiful-scaffold.css.scss +20 -3
  25. data/lib/generators/templates/app/assets/stylesheets/themes/default-dark/32px.png +0 -0
  26. data/lib/generators/templates/app/assets/stylesheets/themes/default-dark/40px.png +0 -0
  27. data/lib/generators/templates/app/assets/stylesheets/themes/default-dark/style.scss +1146 -0
  28. data/lib/generators/templates/app/assets/stylesheets/themes/default-dark/throbber.gif +0 -0
  29. data/lib/generators/templates/app/assets/stylesheets/themes/default/32px.png +0 -0
  30. data/lib/generators/templates/app/assets/stylesheets/themes/default/40px.png +0 -0
  31. data/lib/generators/templates/app/assets/stylesheets/themes/default/style.scss +1102 -0
  32. data/lib/generators/templates/app/assets/stylesheets/themes/default/throbber.gif +0 -0
  33. data/lib/generators/templates/app/controllers/base.rb +14 -7
  34. data/lib/generators/templates/app/controllers/master_base.rb +19 -25
  35. data/lib/generators/templates/app/controllers/user_sessions_controller.rb +20 -0
  36. data/lib/generators/templates/app/helpers/beautiful_helper.rb +102 -66
  37. data/lib/generators/templates/app/initializers/link_renderer.rb +23 -18
  38. data/lib/generators/templates/app/locales/beautiful_scaffold.en.yml +8 -0
  39. data/lib/generators/templates/app/locales/beautiful_scaffold.fr.yml +9 -1
  40. data/lib/generators/templates/app/locales/beautiful_scaffold.ja.yml +9 -2
  41. data/lib/generators/templates/app/mailers/user_mailer.rb +13 -0
  42. data/lib/generators/templates/app/models/ability.rb +39 -0
  43. data/lib/generators/templates/app/models/concerns/caption_concern.rb +1 -1
  44. data/lib/generators/templates/app/models/user.rb +11 -0
  45. data/lib/generators/templates/app/views/_form.html.erb +4 -1
  46. data/lib/generators/templates/app/views/_form_habtm_tag.html.erb +6 -2
  47. data/lib/generators/templates/app/views/_mass_inserting.html.erb +38 -30
  48. data/lib/generators/templates/app/views/_modal_columns.html.erb +3 -3
  49. data/lib/generators/templates/app/views/edit.html.erb +1 -3
  50. data/lib/generators/templates/app/views/index.html.erb +83 -79
  51. data/lib/generators/templates/app/views/layout.html.erb +36 -36
  52. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.en.html.erb +16 -0
  53. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.en.text.erb +9 -0
  54. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.fr.html.erb +16 -0
  55. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_needed_email.fr.text.erb +8 -0
  56. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.en.html.erb +19 -0
  57. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.en.text.erb +8 -0
  58. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.fr.html.erb +19 -0
  59. data/lib/generators/templates/app/views/login_logout/user_mailer/activation_success_email.fr.text.erb +8 -0
  60. data/lib/generators/templates/app/views/login_logout/user_sessions/_form.html.erb +15 -0
  61. data/lib/generators/templates/app/views/login_logout/user_sessions/new.html.erb +3 -0
  62. data/lib/generators/templates/app/views/new.html.erb +0 -2
  63. data/lib/generators/templates/app/views/partials/_forget_password.html.erb +2 -2
  64. data/lib/generators/templates/app/views/partials/_form_field.html.erb +37 -29
  65. data/lib/generators/templates/app/views/partials/_index_batch.html.erb +1 -1
  66. data/lib/generators/templates/app/views/partials/_index_column.html.erb +6 -4
  67. data/lib/generators/templates/app/views/partials/_index_header.html.erb +1 -1
  68. data/lib/generators/templates/app/views/partials/_index_search.html.erb +1 -1
  69. data/lib/generators/templates/app/views/partials/_login_logout_register.html.erb +7 -0
  70. data/lib/generators/templates/app/views/partials/_show_field.html.erb +5 -3
  71. data/lib/generators/templates/app/views/show.html.erb +2 -2
  72. data/lib/generators/templates/app/views/treeview.html.erb +8 -5
  73. metadata +38 -24
  74. data/lib/generators/beautiful_devisecancan_generator.rb +0 -128
  75. data/lib/generators/templates/app/assets/javascripts/bootstrap-colorpicker.js +0 -520
  76. data/lib/generators/templates/app/assets/javascripts/jquery.jstree.js +0 -4551
  77. data/lib/generators/templates/app/assets/stylesheets/bootstrap_and_overrides.css.less +0 -40
  78. data/lib/generators/templates/app/assets/stylesheets/colorpicker.css +0 -127
  79. data/lib/generators/templates/app/assets/stylesheets/datepicker.css +0 -224
  80. data/lib/generators/templates/app/assets/stylesheets/reset.css +0 -48
  81. data/lib/generators/templates/app/assets/stylesheets/themes/default/d.gif +0 -0
  82. data/lib/generators/templates/app/assets/stylesheets/themes/default/d.png +0 -0
  83. data/lib/generators/templates/app/assets/stylesheets/themes/default/style.css +0 -74
  84. data/lib/generators/templates/app/assets/stylesheets/timepicker.css +0 -89
  85. data/lib/generators/templates/app/views/partials/_register_form.html.erb +0 -44
  86. data/lib/generators/templates/app/views/partials/_sign_in_form.html.erb +0 -18
  87. data/lib/generators/templates/app/views/partials/_sign_in_sign_out.html.erb +0 -19
  88. data/lib/generators/templates/lib/custom_failure.rb +0 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 22819b7aae444a86cc628089c52962012d24c031
4
- data.tar.gz: 26aa274ae0fa88969e570ef22415ac490ef7e913
2
+ SHA256:
3
+ metadata.gz: 29b4c80363aba59d47f1219a1dbc4b205a149b0d2745f6a295e1511a2898d96f
4
+ data.tar.gz: 13fe2f58f7b2a30e7eff49e55ab8d8ec1ac5e7d77f78b41f50ec18919fb2cb98
5
5
  SHA512:
6
- metadata.gz: 1e555f0e2242f97ead7b3ff4ed8b1260ea9bd73f66e6ea27498a514f7990b3aafb582cac388eac8a0a3663a83a1e7769a33ae6a672380c542e1c261448163345
7
- data.tar.gz: 1408deef315e1e3d7a1fa84f7e9543a32c5c70db40138f186ec4368abbbf7f8bfde3ddd2de6283a212571046ac1028dcc02067ec0ef264a40ee1c2913b6b9d72
6
+ metadata.gz: ebd54c4c42924851fb5039d1edf3a749ff0b153f605cd1b9671c0a292d030a43d839bac61b8e830b3733d35694425a602f63f24fa81a357bd099dd1f12d91a43
7
+ data.tar.gz: 370ee3d28e84836c4f81d7dbedd894c5ccd56997d00e598d10959375c0037b5c8ce4802a28d1e6f819532c57b6d929583e3649a1d5cd8045f5bba225262bed2b
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ test/dummy/log/test.log
2
+ Gemfile.lock
data/CHANGELOG CHANGED
@@ -1,3 +1,80 @@
1
+ == master
2
+
3
+ * enhancement
4
+
5
+ * bugfix
6
+
7
+
8
+ == Soon
9
+
10
+ ActionText / trix.
11
+
12
+ == 2.0.2
13
+
14
+ * enhancement
15
+ * Native html colorpicker
16
+
17
+ * bugfix
18
+ * Datetime picker for model form
19
+ * Display price in model form
20
+
21
+ == 2.0.1
22
+
23
+ * enhancement
24
+ * Replace Devise by Sorcery
25
+ * Tests Sorcery and Cancancan generators
26
+ * New generator for ActiveStorage
27
+
28
+ * bugfix
29
+ * Locale : fix all locale in the same file.
30
+ * Visual fix ('-' in menu)
31
+ * Will_paginate right locales
32
+ * Avoid adding gems multiple times
33
+
34
+ == 2.0.0
35
+
36
+ * enhancement
37
+ * Bootstrap 4.5 for search field.
38
+
39
+ * bugfix
40
+ * Beautiful migration & Rails 6 (fix #23)
41
+
42
+ == 2.0.0.pre
43
+
44
+ * enhancement
45
+ * replace chardinjs by driverjs : https://github.com/kamranahmedse/driver.js
46
+ * replace bootstrapdatetimepicker by https://tempusdominus.github.io/bootstrap-4/Usage/
47
+ * Update JStreeview
48
+ * Update Bootstrap 4.2
49
+ * Update FontAwesome 5
50
+ * Generate beautiful scaffold for mountable engine
51
+ * Tests generators works !
52
+ * Refactoring ruby code.
53
+
54
+ * bugfix
55
+ * Bugfix for engine
56
+
57
+ == 1.0.3
58
+
59
+ * enhancement
60
+ * You can generate scaffold in a mountable engine, now. (see README for syntax)
61
+
62
+ * Bugfix
63
+ * I18n translation default value (model.column).
64
+
65
+ == 1.0.2
66
+
67
+ * enhancement
68
+ * Using static twitter bootstrap files
69
+ * UI : button back & submit on the same line
70
+ * Add tests (better late than never :/)
71
+
72
+ * bugfix
73
+ * Fix #18 : Responsive Theme Navbar Overlaps Content When Resizing Below ~979px
74
+ * Fix generator locales
75
+ * Fix icon datetimepicker
76
+ * render nothing: true replace with head :ok
77
+
1
78
  == 1.0.1
2
79
 
3
80
  * enhancement
@@ -183,4 +260,4 @@
183
260
 
184
261
  == Previous versions
185
262
 
186
- * See commits on github
263
+ * See commits on github
data/Gemfile CHANGED
@@ -2,12 +2,28 @@ source "http://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- gem "rails", "~> 4.0"
6
- # Pagination
7
- gem "will_paginate"
8
- # Search and filter
9
- gem "ransack"
10
- # Pdf
11
- gem 'prawn'
12
- # Clear html tag
13
- gem 'sanitize'
5
+ gem "rails", "~> 6.1"
6
+
7
+ group :test do
8
+ gem 'sqlite3'
9
+
10
+ gems = {
11
+ 'will_paginate' => nil, # v 3.1.5
12
+ 'ransack' => nil, #'2.3.2',
13
+ 'jquery-ui-rails' => nil,
14
+ 'prawn' => nil, #'2.1.0',
15
+ 'prawn-table' => nil, #'0.2.2',
16
+ 'sanitize' => nil,
17
+ 'bootstrap' => '~> 4.3.1',
18
+ 'font-awesome-rails' => '4.7.0.7',
19
+ 'momentjs-rails' => '>= 2.9.0',
20
+ 'bootstrap4-datetime-picker-rails' => nil,
21
+ 'jquery-rails' => '4.3.1',
22
+ 'sorcery' => '0.15.0'
23
+ }
24
+
25
+ gems.each{ |gem_to_add, version|
26
+ gem(gem_to_add, version)
27
+ }
28
+ end
29
+
data/README.rdoc CHANGED
@@ -2,28 +2,18 @@
2
2
 
3
3
  Beautiful Scaffold is a gem which propose generators for a complete scaffold with paginate, sort and filter.
4
4
  Fully customizable.
5
- Info : https://github.com/rivsc/Beautiful-Scaffold
6
- Demo : http://demo.beautiful-scaffold.escarworld.com/
7
-
8
- == Install
9
-
10
- === RubyOnRails 4.1
11
-
12
- Add this in your Gemfile :
13
5
 
14
- gem 'beautiful_scaffold', '0.3.4'
6
+ Note : Avoid to change Beautiful-Scaffold version in your project (incompatibility between generated code).
7
+ Note 2 : Be careful to have a clean git repository for your project because Beautiful-Scaffold change many files.
8
+ It will be easier to revert changes.
15
9
 
16
- === RubyOnRails 4.2
17
-
18
- Add this in your Gemfile :
19
-
20
- gem 'beautiful_scaffold', '0.3.5'
21
-
22
- === RubyOnRails 5+
10
+ Info : https://github.com/rivsc/Beautiful-Scaffold
11
+ Demo : http://beautiful-scaffold.rivsc.ovh/
23
12
 
24
- Add this in your Gemfile :
13
+ == Install
25
14
 
26
- gem 'beautiful_scaffold', '1.0.1'
15
+ Add this in the Gemfile of your rails app or engine :
16
+ gem 'beautiful_scaffold'
27
17
 
28
18
  === Next
29
19
 
@@ -35,7 +25,10 @@ And run
35
25
 
36
26
  === Scaffold
37
27
 
38
- rails generate beautiful_scaffold model attr:type attr:type... [--namespace=name] [--donttouchgem=name]
28
+ # model : underscore and singular
29
+ # mountable_engine : underscore
30
+ # namespace : underscore
31
+ rails generate beautiful_scaffold model attr:type attr:type... [--namespace=name] [--donttouchgem=yes] [--mountable_engine=name]
39
32
 
40
33
  Types available:
41
34
  * integer
@@ -46,6 +39,8 @@ Types available:
46
39
  * color
47
40
  * wysiwyg
48
41
 
42
+ (See below #label-Barcodes)
43
+
49
44
  # Example : products
50
45
 
51
46
  rails g beautiful_scaffold product name:string price:price tva:float description:wysiwyg visible:boolean && rake db:migrate
@@ -54,6 +49,15 @@ Types available:
54
49
 
55
50
  rails g beautiful_scaffold product name:string price:price tva:float description:wysiwyg overview_description:wysiwyg visible:boolean --namespace=admin && rake db:migrate
56
51
 
52
+ # Example (for an engine) :
53
+ # You need to add beautiful-scaffold to the gemfile of the engine (not the gemspec !).
54
+
55
+ rails g beautiful_scaffold user code:string --mountable-engine=faq
56
+ rails g beautiful_scaffold question title:string description:wysiwyg user:references resolved:boolean --mountable-engine=faq
57
+ rails g beautiful_scaffold answer description:wysiwyg user:references up:integer down:integer --mountable-engine=faq
58
+ rails g beautiful_migration AddPositionToFaqAnswers position:integer --mountable-engine=faq
59
+ rails g beautiful_jointable answer tag --mountable-engine=faq
60
+
57
61
  === Migration (Use Add[Field]To[ModelPluralize] syntax)
58
62
 
59
63
  rails g beautiful_migration AddFieldToModels field:type
@@ -71,9 +75,23 @@ Run `rake db:migrate` before `rails g beautiful_locale` (to get lastest attribut
71
75
 
72
76
  rails g beautiful_jointable model1 model2
73
77
 
74
- === Install et Configure Devise (authentification) and Cancan (authorization)
78
+ === Install et preconfigure Sorcery (authentification) (this generator doesn't work on engine)
79
+
80
+ # If it is not done yet
81
+ rails g beautiful_scaffold user email:string
82
+ rails g beautiful_sorcery
83
+
84
+ === Install et preconfigure Cancancan (authorization) (this generator doesn't work on engine)
85
+
86
+ # If it is not done yet
87
+ rails g beautiful_scaffold user email:string
88
+ # If it is not done yet
89
+ rails g beautiful_sorcery
90
+ rails g beautiful_cancancan
91
+
92
+ === Storage (ActiveStorage)
75
93
 
76
- rails g beautiful_devisecancan model
94
+ rails g beautiful_storage model attachment_field
77
95
 
78
96
  === In views
79
97
 
@@ -97,16 +115,15 @@ data-type-barcode can be :
97
115
  msi
98
116
  datamatrix (ASCII + extended)
99
117
 
100
- ==== Chardinjs (overlay instructions)
118
+ ==== Driverjs (overlay instructions)
101
119
 
102
- Example : This button triggers chardinjs on element with 'menu' id.
120
+ Example : when you click on the #bs-help tag presentation tour display on screen !
103
121
 
104
- <a href="#" class="bs-chardinjs" data-selector="#menu">Help Menu</a>
122
+ If you want to add 'slide' :
105
123
 
106
- If you want display all chardinjs :
124
+ For add instruction to DOM element, add this to your markup :
107
125
 
108
- <a href="#" class="bs-chardinjs" data-selector="body">Help</a>
126
+ id="myunique-id-in-the-page" data-present-title="Title for the slide" data-present-description="Short description" data-present-order="1"
109
127
 
110
- Just add `class="bs-chardinjs"` in a button / link for trigger chardinjs. Beautiful-Scaffold does the job !
128
+ And Beautiful-Scaffold does the job !
111
129
 
112
- For add instruction to element, read official documentation : https://github.com/heelhook/chardin.js#adding-data-for-the-instructions
data/Rakefile ADDED
@@ -0,0 +1,29 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Beautiful-Scaffold'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.md')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
18
+ load 'rails/tasks/engine.rake'
19
+ load 'rails/tasks/statistics.rake'
20
+ require 'bundler/gem_tasks'
21
+ require 'rake/testtask'
22
+
23
+ Rake::TestTask.new(:test) do |t|
24
+ t.libs << 'test'
25
+ t.pattern = 'test/**/*_test.rb'
26
+ t.verbose = false
27
+ end
28
+
29
+ task default: :test
@@ -1,19 +1,19 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
+ require "beautiful_scaffold/version"
5
+
4
6
  Gem::Specification.new do |s|
5
7
  s.name = "beautiful_scaffold"
6
- s.version = "1.0.1"
8
+ s.version = BeautifulScaffold::VERSION
7
9
  s.platform = Gem::Platform::RUBY
8
10
  s.summary = "Beautiful Scaffold generate fully customizable scaffold"
9
11
  s.email = "claudel.sylvain@gmail.com"
10
- s.homepage = "http://beautiful-scaffold.com"
11
- s.description = "Beautiful Scaffold generate a complete scaffold (sort, export, paginate and filter data) http://www.beautiful-scaffold.com"
12
+ s.homepage = "https://blog.rivsc.ovh"
13
+ s.description = "Beautiful Scaffold generate a complete scaffold (sort, export, paginate and filter data) http://beautiful-scaffold.rivsc.ovh"
12
14
  s.authors = ['Sylvain Claudel']
13
- s.files = `git ls-files`.split("\n")
15
+ s.files = `git ls-files`.split("\n").reject{ |filepath| filepath.start_with? 'test/' }
14
16
  s.licenses = ['MIT']
15
17
 
16
- s.rubyforge_project = "beautiful_scaffold"
17
-
18
- s.require_paths = ["lib","lib/generators"]
18
+ s.require_paths = ["lib","lib/generators","test/*"]
19
19
  end
@@ -0,0 +1,3 @@
1
+ module BeautifulScaffold
2
+ VERSION = '2.0.2'
3
+ end
data/lib/generators/USAGE CHANGED
@@ -12,5 +12,7 @@ Example:
12
12
 
13
13
  rails generate beautiful_jointable product tag
14
14
 
15
- rails generate beautiful_devisecancan user
15
+ rails generate beautiful_sorcery
16
+ rails generate beautiful_cancancan
17
+
16
18
 
@@ -0,0 +1,51 @@
1
+ # encoding : utf-8
2
+ class BeautifulCancancanGenerator < Rails::Generators::Base
3
+ require_relative 'beautiful_scaffold_common_methods'
4
+ include BeautifulScaffoldCommonMethods
5
+
6
+ source_root File.expand_path('../templates', __FILE__)
7
+
8
+ #argument :model, :type => :string, :desc => "Name of model (ex: user)"
9
+
10
+ def install_cancancan
11
+ model = "user"
12
+
13
+ gem("cancancan", "3.2.1")
14
+
15
+ Bundler.with_unbundled_env do
16
+ run "bundle install"
17
+ end
18
+
19
+ # Because generators doesn't work !
20
+ copy_file("app/models/ability.rb")
21
+
22
+ # Why that doesn't work... boring...
23
+ #puts rails_command("generate cancan:ability", capture: true)
24
+ # Why that doesn't work too... boring...
25
+ #generate("cancan:ability")
26
+
27
+ # current_user method need for CanCan
28
+ current_user_method = ""
29
+ if model != "user" then
30
+ current_user_method = "
31
+ def current_user
32
+ current_#{model}
33
+ end"
34
+ end
35
+
36
+ # Exception for AccessDenied
37
+ inject_into_file("app/controllers/application_controller.rb", "
38
+ rescue_from CanCan::AccessDenied do |exception|
39
+ respond_to do |format|
40
+ format.json { head :forbidden, content_type: 'text/html' }
41
+ format.html { redirect_to root_url, :alert => exception.message }
42
+ format.js { head :forbidden, content_type: 'text/html' }
43
+ end
44
+ end
45
+ #{current_user_method}
46
+ ", :after => "class ApplicationController < ActionController::Base\n")
47
+
48
+ # Access controlled by CanCanCan (in beautiful_scaffold)
49
+ inject_into_file("app/controllers/application_controller.rb", "#", :before => "before_action :authenticate_#{model}!, :except => [:dashboard]")
50
+ end
51
+ end
@@ -1,11 +1,13 @@
1
1
  # encoding : utf-8
2
2
  class BeautifulJointableGenerator < Rails::Generators::Base
3
- require 'beautiful_scaffold_common_methods'
3
+ require_relative 'beautiful_scaffold_common_methods'
4
4
  include BeautifulScaffoldCommonMethods
5
5
 
6
6
  source_root File.expand_path('../templates', __FILE__)
7
7
 
8
- argument :join_models, :type => :array, :default => [], :banner => "model model"
8
+ argument :join_models, :type => :array, :default => [], :banner => "Two model names singular downcase (ex: product family)"
9
+
10
+ class_option :mountable_engine, default: nil
9
11
 
10
12
  def create_join_table
11
13
  if join_models.length != 2 then
@@ -13,14 +15,21 @@ class BeautifulJointableGenerator < Rails::Generators::Base
13
15
  else
14
16
  sorted_model = join_models.sort
15
17
 
18
+ prefix_str = ''
19
+ if engine_name.present?
20
+ prefix_str = "#{engine_opt}_"
21
+ end
22
+
23
+ join_table_name = "#{prefix_str}#{sorted_model[0].pluralize}_#{sorted_model[1].pluralize}"
24
+
16
25
  # Generate migration
17
26
  migration_content = "
18
- create_table :#{sorted_model[0].pluralize}_#{sorted_model[1].pluralize}, :id => false do |t|
27
+ create_table :#{join_table_name}, :id => false do |t|
19
28
  t.integer :#{sorted_model[0]}_id
20
29
  t.integer :#{sorted_model[1]}_id
21
30
  end
22
31
 
23
- add_index :#{sorted_model[0].pluralize}_#{sorted_model[1].pluralize}, [:#{sorted_model[0]}_id, :#{sorted_model[1]}_id]
32
+ add_index :#{join_table_name}, [:#{sorted_model[0]}_id, :#{sorted_model[1]}_id]
24
33
  "
25
34
 
26
35
  migration_name = "create_join_table_for_#{sorted_model[0]}_and_#{sorted_model[1]}"
@@ -31,11 +40,35 @@ class BeautifulJointableGenerator < Rails::Generators::Base
31
40
  inject_into_file(filename, migration_content, :after => "def change")
32
41
 
33
42
  # Add habtm relation
34
- inject_into_file("app/models/#{sorted_model[0]}.rb", "\n has_and_belongs_to_many :#{sorted_model[1].pluralize}", :after => "ActiveRecord::Base")
35
- inject_into_file("app/models/#{sorted_model[1]}.rb", "\n has_and_belongs_to_many :#{sorted_model[0].pluralize}", :after => "ActiveRecord::Base")
36
- inject_into_file("app/models/#{sorted_model[0]}.rb", ":#{sorted_model[1]}_ids, ", :after => "attr_accessible ")
37
- inject_into_file("app/models/#{sorted_model[1]}.rb", ":#{sorted_model[0]}_ids, ", :after => "attr_accessible ")
43
+ inject_into_file("app/models/#{engine_name}#{sorted_model[0]}.rb", "\n #{engine_name.present? ? ' ' : ''}has_and_belongs_to_many :#{sorted_model[1].pluralize}", :after => "ApplicationRecord")
44
+ inject_into_file("app/models/#{engine_name}#{sorted_model[1]}.rb", "\n #{engine_name.present? ? ' ' : ''}has_and_belongs_to_many :#{sorted_model[0].pluralize}", :after => "ApplicationRecord")
45
+ inject_into_file("app/models/#{engine_name}#{sorted_model[0]}.rb", "{ :#{sorted_model[1]}_ids => [] }, ", :after => "permitted_attributes
46
+ return ")
47
+ inject_into_file("app/models/#{engine_name}#{sorted_model[1]}.rb", "{ :#{sorted_model[0]}_ids => [] }, ", :after => "permitted_attributes
48
+ return ")
38
49
  end
39
50
  end
40
51
 
52
+ def add_habtm_field_in_forms
53
+ models = join_models.sort
54
+
55
+ 2.times do
56
+ html = "<%=
57
+ render :partial => 'layouts/#{engine_name}form_habtm_tag', :locals => {
58
+ :model_class => @#{models[0]},
59
+ :model_name => '#{models[0]}',
60
+ :plural_model_name => '#{models[0].pluralize}',
61
+ :linked_model_name => '#{models[1]}',
62
+ :plural_linked_model_name => '#{models[1].pluralize}',
63
+ :namespace_bs => '',
64
+ :engine_bs => '#{engine_opt}',
65
+ :field_to_search_for_linked_model => 'name',
66
+ :attr_to_show => 'caption',
67
+ :f => f
68
+ } %>"
69
+
70
+ inject_into_file("app/views/#{engine_name}#{models[0].pluralize}/_form.html.erb", html, :before => "<!-- Beautiful_scaffold - AddField - Do not remove -->")
71
+ models = models.reverse
72
+ end
73
+ end
41
74
  end