beautiful_scaffold 1.0.1 → 2.0.2

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.
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