beautiful_scaffold 1.0.1 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 22819b7aae444a86cc628089c52962012d24c031
4
- data.tar.gz: 26aa274ae0fa88969e570ef22415ac490ef7e913
3
+ metadata.gz: e51faa22a7e9fbad343b1597ca5bb417c144476b
4
+ data.tar.gz: fb09b6d7228778e26ec391109ab77e35f8839f29
5
5
  SHA512:
6
- metadata.gz: 1e555f0e2242f97ead7b3ff4ed8b1260ea9bd73f66e6ea27498a514f7990b3aafb582cac388eac8a0a3663a83a1e7769a33ae6a672380c542e1c261448163345
7
- data.tar.gz: 1408deef315e1e3d7a1fa84f7e9543a32c5c70db40138f186ec4368abbbf7f8bfde3ddd2de6283a212571046ac1028dcc02067ec0ef264a40ee1c2913b6b9d72
6
+ metadata.gz: aa11569d24429d62e3f5f3ba79db359921bbcd70c233aa7a1730973468d861b6a7967e2f0aa56a4efd114bb9c8fb7977fa75f3c0073f2e41f9e8f48862dbab5a
7
+ data.tar.gz: 1a59f7aaad1ea361376af40e7fd8f16713e3ce61473aa39cbcd41063524ca14467478878405d29724d983d63978f7cf396c0b528c8a94ef8112fd895579cd310
data/CHANGELOG CHANGED
@@ -1,3 +1,22 @@
1
+ == master
2
+
3
+ * enhancement
4
+
5
+ * bugfix
6
+
7
+ == 1.0.2
8
+
9
+ * enhancement
10
+ * Using static twitter bootstrap files
11
+ * UI : button back & submit on the same line
12
+ * Add tests (better late than never :/)
13
+
14
+ * bugfix
15
+ * Fix #18 : Responsive Theme Navbar Overlaps Content When Resizing Below ~979px
16
+ * Fix generator locales
17
+ * Fix icon datetimepicker
18
+ * render nothing: true replace with head :ok
19
+
1
20
  == 1.0.1
2
21
 
3
22
  * enhancement
@@ -0,0 +1,9 @@
1
+ require 'rake/testtask'
2
+
3
+ task default: :test
4
+
5
+ task :test do |t|
6
+ ruby "test/scaffold_test.rb"
7
+ end
8
+
9
+
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "beautiful_scaffold"
6
- s.version = "1.0.1"
6
+ s.version = "1.0.2"
7
7
  s.platform = Gem::Platform::RUBY
8
8
  s.summary = "Beautiful Scaffold generate fully customizable scaffold"
9
9
  s.email = "claudel.sylvain@gmail.com"
@@ -15,5 +15,5 @@ Gem::Specification.new do |s|
15
15
 
16
16
  s.rubyforge_project = "beautiful_scaffold"
17
17
 
18
- s.require_paths = ["lib","lib/generators"]
18
+ s.require_paths = ["lib","lib/generators","test/*"]
19
19
  end
@@ -1,6 +1,6 @@
1
1
  # encoding : utf-8
2
2
  class BeautifulDevisecancanGenerator < 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__)
@@ -1,6 +1,6 @@
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__)
@@ -1,6 +1,6 @@
1
1
  # encoding : utf-8
2
2
  class BeautifulLocaleGenerator < 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__)
@@ -8,21 +8,16 @@ class BeautifulLocaleGenerator < Rails::Generators::Base
8
8
  argument :name, :type => :string, :desc => "type of locale : fr OR en OR de OR ja all..."
9
9
 
10
10
  class_option :mountable_engine, :default => nil
11
-
12
- def install_locale
11
+
12
+ def list_locales
13
13
  availablelocale = ["fr", "en", "ja"]
14
-
15
- localestr = name.downcase
16
-
17
- locale_to_process = []
18
14
 
19
- if localestr == 'all' then
20
- locale_to_process = availablelocale
21
- else
22
- locale_to_process << localestr
23
- end
24
-
25
- locale_to_process.each{ |temp_locale|
15
+ localestr = name.downcase
16
+ (localestr == 'all' ? availablelocale : [localestr])
17
+ end
18
+
19
+ def install_locale
20
+ list_locales.each{ |temp_locale|
26
21
  filename = "beautiful_scaffold.#{temp_locale}.yml"
27
22
  gem_localepath = "app/locales/#{filename}"
28
23
  app_localepath = "config/locales/#{filename}"
@@ -56,105 +51,112 @@ class BeautifulLocaleGenerator < Rails::Generators::Base
56
51
  def regenerate_app_locale
57
52
  require 'net/http'
58
53
 
59
- already_processed = { name.downcase => {}}
60
-
61
54
  app_name = (Rails.root || engine_opt)
62
55
  engine_or_apps = (Rails.application.class.parent_name || engine_opt).downcase
56
+ prefix = engine_opt.blank? ? '' : "#{engine_opt.camelize}::"
63
57
 
64
- puts "===>"
65
- puts app_name
66
- puts "=======>"
67
- puts engine_or_apps
58
+ already_processed = {}
59
+ hi18n = {}
68
60
 
69
- filepath = File.join(app_name, 'config', 'locales', "#{engine_or_apps}.#{name.downcase}.yml")
70
- begin
71
- hi18n = YAML.load_file(filepath)
72
- rescue
73
- puts "Error loading locale file : #{filepath}"
74
- end
61
+ list_locales.each do |locale_str|
62
+ locale = locale_str.downcase
75
63
 
76
- hi18n ||= { name.downcase => {} }
77
- hi18n[name.downcase] ||= { 'app' => {} }
78
- hi18n[name.downcase]['app'] ||= { 'models' => {} }
79
- hi18n[name.downcase]['app']['models'] ||= {}
80
-
81
- # Feed data already translated
82
- hi18n[name.downcase]['app']['models'].each{ |modelname,hshtranslations|
83
- hshtranslations['bs_attributes'].each{ |attr, translated_attr|
84
- already_processed[name.downcase][attr] = translated_attr
85
- }
86
- }
64
+ already_processed[locale] ||= {}
87
65
 
88
- Dir.glob("app/models/**/*").each { |model_file|
89
- puts model_file
90
- next if File.directory?(model_file) or
91
- File.basename(model_file).first == '.' or
92
- model_file.include?('/concerns/') or
93
- model_file.include?('pdf_report.rb') or
94
- model_file.include?('application_record.rb')
66
+ filepath = File.join(app_name, 'config', 'locales', "#{engine_or_apps}.#{locale}.yml")
67
+ begin
68
+ if File.exist?(filepath)
69
+ hi18n = YAML.load_file(filepath)
70
+ end
71
+ rescue
72
+ puts "Error loading locale file (YAML invalid?) : #{filepath}"
73
+ end
95
74
 
96
- model = File.basename(model_file, File.extname(model_file))
75
+ hi18n[locale] ||= { 'app' => {} }
76
+ hi18n[locale]['app'] ||= { 'models' => {} }
77
+ hi18n[locale]['app']['models'] ||= {}
97
78
 
98
- if !engine_opt.blank?
99
- prefix = "#{engine_opt.camelize}::"
100
- else
101
- prefix = ''
79
+ # Feed data already translated
80
+ hi18n[locale]['app']['models'].each do |modelname, hshtranslations|
81
+ hshtranslations['bs_attributes'].each do |attr, translated_attr|
82
+ already_processed[locale][attr] = translated_attr
83
+ end
102
84
  end
103
- klass = "#{prefix}#{model.camelize.constantize}"
104
85
 
105
- begin
86
+ Dir.glob("app/models/**/*").each do |model_file|
87
+ puts model_file
88
+
89
+ next if File.directory?(model_file) or
90
+ File.basename(model_file).first == '.' or
91
+ model_file.include?('/concerns/') or
92
+ model_file.include?('pdf_report.rb') or
93
+ model_file.include?('application_record.rb')
94
+
95
+ model = File.basename(model_file, File.extname(model_file))
96
+
97
+ klass = "#{prefix}#{model}".camelize.constantize
106
98
  sorted_attr = klass.attribute_names.sort
107
- rescue
108
- next
109
- end
110
99
 
111
- newmodel = !hi18n[name.downcase]['app']['models'].has_key?(model)
100
+ newmodel = !hi18n[locale]['app']['models'].has_key?(model)
112
101
 
113
- hi18n[name.downcase]['app']['models'][model] ||= {
102
+ hi18n[locale]['app']['models'][model] ||= {
114
103
  'bs_caption' => model,
115
104
  'bs_caption_plural' => model.pluralize,
116
105
  'bs_attributes' => {},
117
- }
118
-
119
- if newmodel then
120
- bs_caption = (begin translate_string(name.downcase, model) rescue model end)
121
- bs_caption_plural = (begin translate_string(name.downcase, model.pluralize) rescue model.pluralize end)
106
+ }
107
+
108
+ if newmodel then
109
+ bs_caption = ""
110
+ begin
111
+ bs_caption = translate_string(locale, model)
112
+ rescue Exception => e
113
+ puts "Erreur traduction #{e.backtrace}"
114
+ bs_caption = model
115
+ end
116
+ bs_caption_plural = ""
117
+ begin
118
+ bs_caption_plural = translate_string(locale, model.pluralize)
119
+ rescue Exception => e
120
+ puts "Erreur traduction #{e.backtrace}"
121
+ bs_caption_plural = model.pluralize
122
+ end
122
123
 
123
- hi18n[name.downcase]['app']['models'][model]['bs_caption'] = bs_caption
124
- hi18n[name.downcase]['app']['models'][model]['bs_caption_plural'] = bs_caption_plural
125
- end
124
+ hi18n[locale]['app']['models'][model]['bs_caption'] = bs_caption
125
+ hi18n[locale]['app']['models'][model]['bs_caption_plural'] = bs_caption_plural
126
+ end
126
127
 
127
- hi18n[name.downcase]['app']['models'][model]['bs_attributes'] ||= {}
128
-
129
- sorted_attr.each { |k|
130
- # Si pas déjà renseigné
131
- if hi18n[name.downcase]['app']['models'][model]['bs_attributes'][k].blank? then
132
- # Si pas déjà traduit
133
- if already_processed[name.downcase][k].nil? then
134
- begin
135
- attr_translate = translate_string(name.downcase, k)
136
- already_processed[name.downcase][k] = attr_translate
137
- rescue
138
- puts "Plantage translate API"
139
- attr_translate = k
128
+ hi18n[locale]['app']['models'][model]['bs_attributes'] ||= {}
129
+
130
+ sorted_attr.each do |k|
131
+ # Si pas déjà renseigné
132
+ if hi18n[locale]['app']['models'][model]['bs_attributes'][k].blank?
133
+ # Si pas déjà traduit
134
+ if already_processed[locale][k].blank?
135
+ begin
136
+ attr_translate = translate_string(locale, k)
137
+ already_processed[locale][k] = attr_translate
138
+ rescue
139
+ puts "Plantage translate API"
140
+ attr_translate = k
141
+ end
142
+ else
143
+ attr_translate = already_processed[locale][k]
140
144
  end
141
145
  else
142
- attr_translate = already_processed[name.downcase][k]
146
+ # Récupère l'attribut traduit
147
+ attr_translate = hi18n[locale]['app']['models'][model]['bs_attributes'][k]
143
148
  end
144
- else
145
- # Récupère l'attribut traduit
146
- attr_translate = hi18n[name.downcase]['app']['models'][model]['bs_attributes'][k]
147
- end
148
149
 
149
- hi18n[name.downcase]['app']['models'][model]['bs_attributes'][k] = attr_translate
150
- }
151
- }
150
+ hi18n[locale]['app']['models'][model]['bs_attributes'][k] = attr_translate
151
+ end
152
+ end
152
153
 
153
- File.unlink(filepath) if File.exist?(filepath)
154
+ File.unlink(filepath) if File.exist?(filepath)
154
155
 
155
- file = File.open(filepath, "w")
156
- file.write(hi18n.to_yaml)
157
- file.close
156
+ file = File.open(filepath, "w")
157
+ file.write(hi18n.to_yaml)
158
+ file.close
159
+ end
158
160
  end
159
161
 
160
162
  private
@@ -162,14 +164,13 @@ class BeautifulLocaleGenerator < Rails::Generators::Base
162
164
  def translate_string(locale, str)
163
165
  # See http://www.microsofttranslator.com/dev/
164
166
  #
165
- if locale == "en" then
167
+ if locale == "en"
166
168
  attr_translate = "#{str.gsub(/_/, " ")}"
167
169
  else
168
- url_domain = "mymemory.translated.net"
169
- url_translate = "/api/get?q=to_translate&langpair=en%7C#{locale}"
170
+ url_domain = "api.mymemory.translated.net"
171
+ url_query = "/get?q=#{str.gsub(/_/, "%20")}&langpair=en%7C#{locale}"
170
172
 
171
- urlstr = url_translate.gsub(/to_translate/, str.gsub(/_/, "%20"))
172
- json = JSON.parse(Net::HTTP.get(url_domain, urlstr))
173
+ json = JSON.parse(Net::HTTP.get(url_domain, url_query))
173
174
  attr_translate = json["responseData"]["translatedText"].strip.downcase
174
175
  end
175
176
  raise 'Free Limit' if attr_translate =~ /mymemory/
@@ -1,6 +1,6 @@
1
1
  # encoding : utf-8
2
2
  class BeautifulMigrationGenerator < Rails::Generators::Base
3
- require 'beautiful_scaffold_common_methods'
3
+ require_relative 'beautiful_scaffold_common_methods'
4
4
  include BeautifulScaffoldCommonMethods
5
5
 
6
6
  #include Rails::Generators::ResourceHelpers
@@ -181,18 +181,19 @@ module BeautifulScaffoldCommonMethods
181
181
 
182
182
  def require_gems
183
183
  gems = {
184
- 'less-rails' => '2.8.0',
185
184
  'will_paginate' => nil, # v 3.1.5
186
- 'ransack' => '1.8.2',
185
+ 'ransack' => '1.8.4',
187
186
  'polyamorous' => '1.3.1',
188
187
  'jquery-ui-rails' => nil,
189
188
  'prawn' => '2.1.0',
190
189
  'prawn-table' => '0.2.2',
191
190
  'sanitize' => nil,
192
191
  'twitter-bootstrap-rails' => '3.2.2',
192
+ 'font-awesome-rails' => '4.7.0.2',
193
193
  'chardinjs-rails' => nil,
194
194
  'momentjs-rails' => '>= 2.9.0',
195
- 'bootstrap3-datetimepicker-rails' => '~> 4.17.47'
195
+ 'bootstrap3-datetimepicker-rails' => '~> 4.17.47',
196
+ 'jquery-rails' => '4.3.1'
196
197
  }
197
198
 
198
199
  # Si engine il faut mettre les gems dans le gemspec et faire le require
@@ -1,6 +1,6 @@
1
1
  # encoding : utf-8
2
2
  class BeautifulScaffoldGenerator < Rails::Generators::Base
3
- require 'beautiful_scaffold_common_methods'
3
+ require_relative 'beautiful_scaffold_common_methods'
4
4
  include BeautifulScaffoldCommonMethods
5
5
 
6
6
  # Resources
@@ -13,12 +13,12 @@ class BeautifulScaffoldGenerator < Rails::Generators::Base
13
13
 
14
14
  source_root File.expand_path('../templates', __FILE__)
15
15
 
16
- argument :model_opt, :type => :string, :desc => "Name of model (singular)"
17
- argument :myattributes, :type => :array, :default => [], :banner => "field:type field:type"
18
-
19
- class_option :namespace, :default => nil
20
- class_option :donttouchgem, :default => nil
21
- class_option :mountable_engine, :default => nil
16
+ argument :model_opt, type: :string, desc: "Name of model (singular)"
17
+ argument :myattributes, type: :array, default: [], banner: "field:type field:type"
18
+
19
+ class_option :namespace, default: nil
20
+ class_option :donttouchgem, default: nil
21
+ class_option :mountable_engine, default: nil
22
22
 
23
23
  def install_gems
24
24
  if options[:donttouchgem].blank? then
@@ -54,11 +54,11 @@ class BeautifulScaffoldGenerator < Rails::Generators::Base
54
54
  end
55
55
  end
56
56
  end
57
-
57
+
58
58
  def generate_assets
59
59
  stylesheetspath = "app/assets/stylesheets/"
60
60
  stylesheetspath_dest = "#{stylesheetspath}#{engine_name}"
61
-
61
+
62
62
  # Css
63
63
  reset = "reset.css"
64
64
  bc_css = [
@@ -75,7 +75,7 @@ class BeautifulScaffoldGenerator < Rails::Generators::Base
75
75
  [reset, bc_css].flatten.each{ |path|
76
76
  copy_file "#{stylesheetspath}#{path}", "#{stylesheetspath_dest}#{path}"
77
77
  }
78
-
78
+
79
79
  # Js
80
80
  bc_js = [
81
81
  "application-bs.js",
@@ -102,12 +102,6 @@ class BeautifulScaffoldGenerator < Rails::Generators::Base
102
102
  dir_image_dest = "app/assets/images/#{engine_opt}"
103
103
  directory dir_image, dir_image_dest
104
104
 
105
- # Old method
106
- #generate("bootstrap:install","static")
107
- # New method
108
- copy_file "#{stylesheetspath}bootstrap_and_overrides.css.less",
109
- "#{stylesheetspath_dest}bootstrap_and_overrides.css.less"
110
-
111
105
  # Precompile BS assets
112
106
  if File.exist?("config/initializers/assets.rb") then # For mountable engine
113
107
  inject_into_file("config/initializers/assets.rb", "Rails.application.config.assets.precompile += ['#{engine_name}application-bs.css','#{engine_name}application-bs.js']", after: /\z/m)
@@ -115,7 +109,7 @@ class BeautifulScaffoldGenerator < Rails::Generators::Base
115
109
  puts "============> Engine : You must add `Rails.application.config.assets.precompile += ['#{engine_name}application-bs.css','#{engine_name}application-bs.js']` to your config/initializers/assets.rb main app !"
116
110
  end
117
111
  end
118
-
112
+
119
113
  def generate_layout
120
114
  template "app/views/layout.html.erb", "app/views/layouts/beautiful_layout.html.erb"
121
115
  if not File.exist?("app/views/layouts/_beautiful_menu.html.erb") then
@@ -126,7 +120,7 @@ class BeautifulScaffoldGenerator < Rails::Generators::Base
126
120
  template "app/views/dashboard.html.erb", "app/views/#{engine_name}beautiful/dashboard.html.erb"
127
121
  copy_file "app/views/_modal_columns.html.erb", "app/views/layouts/_modal_columns.html.erb"
128
122
  copy_file "app/views/_mass_inserting.html.erb", "app/views/layouts/_mass_inserting.html.erb"
129
-
123
+
130
124
  inject_into_file("app/views/layouts/_beautiful_menu.html.erb",'
131
125
  <li class="<%= "active" if params[:controller] == "' + namespace_for_url + model.pluralize + '" %>">
132
126
  <%= link_to ' + i18n_t_m_p(model) + '.capitalize, ' + namespace_for_route + model.pluralize + '_path %>
@@ -177,7 +171,7 @@ class BeautifulScaffoldGenerator < Rails::Generators::Base
177
171
  dest_ctrl_file = File.join([dirs, "#{model_pluralize}_controller.rb"].flatten)
178
172
  template "app/controllers/base.rb", dest_ctrl_file
179
173
  end
180
-
174
+
181
175
  def generate_helper
182
176
  dest_bs_helper_file = "app/helpers/#{engine_name}beautiful_helper.rb"
183
177
  template "app/helpers/beautiful_helper.rb", dest_bs_helper_file
@@ -191,15 +185,14 @@ class BeautifulScaffoldGenerator < Rails::Generators::Base
191
185
  def generate_views
192
186
  namespacedirs = ["app", "views", engine_name, options[:namespace]].compact
193
187
  empty_directory File.join(namespacedirs)
194
-
188
+
195
189
  dirs = [namespacedirs, model_pluralize]
196
190
  empty_directory File.join(dirs)
197
-
191
+
198
192
  [available_views, 'treeview'].flatten.each do |view|
199
193
  filename = view + ".html.erb"
200
194
  current_template_path = File.join([dirs, filename].flatten)
201
195
  empty_template_path = File.join(["app", "views", filename].flatten)
202
-
203
196
  template empty_template_path, current_template_path
204
197
  end
205
198
 
@@ -215,12 +208,8 @@ class BeautifulScaffoldGenerator < Rails::Generators::Base
215
208
  end
216
209
 
217
210
  def routes
218
- routes_in_text = File.read("config/routes.rb")
219
-
220
- if not routes_in_text[/beautiful#dashboard/] and not routes_in_text[/beautiful#select_fields/] then
221
-
222
- myroute = <<EOF
223
- root :to => 'beautiful#dashboard'
211
+ myroute = <<EOF
212
+ root :to => 'beautiful#dashboard'
224
213
  match ':model_sym/select_fields' => 'beautiful#select_fields', :via => [:get, :post]
225
214
 
226
215
  concern :bs_routes do
@@ -237,11 +226,7 @@ root :to => 'beautiful#dashboard'
237
226
  # Add route with concerns: :bs_routes here # Do not remove
238
227
  EOF
239
228
 
240
- route(myroute)
241
- end
242
-
243
- search_namespace = namespace_alone + "/" if not namespace_alone.blank?
244
- search_namespace ||= ""
229
+ inject_into_file("config/routes.rb", myroute, :after => "routes.draw do\n")
245
230
 
246
231
  myroute = "\n "
247
232
  myroute += "namespace :#{namespace_alone} do\n " if not namespace_alone.blank?
@@ -2,7 +2,16 @@ function datetimepicker_init(){
2
2
  $(document).on('click', '.dpicker', function(e){
3
3
  e.stopPropagation();
4
4
  e.stopImmediatePropagation();
5
- $(this).datetimepicker({ format : 'DD/MM/YYYY', locale : 'en' }).on('dp.change', function(elt){
5
+ $(this).datetimepicker({
6
+ format : 'DD/MM/YYYY',
7
+ locale : 'en',
8
+ icons: {
9
+ time: "fa fa-clock-o",
10
+ date: "fa fa-calendar",
11
+ up: "fa fa-arrow-up",
12
+ down: "fa fa-arrow-down"
13
+ }
14
+ }).on('dp.change', function(elt){
6
15
  var eltid = elt.currentTarget.dataset.id;
7
16
  $('#' + eltid + '_3i').val(elt.date.date());
8
17
  $('#' + eltid + '_2i').val(elt.date.month()+1);
@@ -15,7 +24,16 @@ function datetimepicker_init(){
15
24
  $(document).on('click', '.tpicker', function(e){
16
25
  e.stopPropagation();
17
26
  e.stopImmediatePropagation();
18
- $(this).datetimepicker({ format : 'HH:mm', locale : 'en' }).on('dp.change', function(elt){
27
+ $(this).datetimepicker({
28
+ format : 'HH:mm',
29
+ locale : 'en',
30
+ icons: {
31
+ time: "fa fa-clock-o",
32
+ date: "fa fa-calendar",
33
+ up: "fa fa-arrow-up",
34
+ down: "fa fa-arrow-down"
35
+ }
36
+ }).on('dp.change', function(elt){
19
37
  var eltid = elt.currentTarget.dataset.id;
20
38
  $('#' + eltid + '_4i').val(elt.date.hour());
21
39
  $('#' + eltid + '_5i').val(elt.date.minute());
@@ -11,11 +11,12 @@
11
11
  *= require_self
12
12
  *= require reset
13
13
  *= require jquery-ui
14
+ *= require twitter-bootstrap-static/bootstrap
15
+ *= require font-awesome
14
16
  *= require bootstrap-datetimepicker
15
17
  *= require beautiful-scaffold
16
18
  *= require tagit-dark-grey
17
19
  *= require colorpicker
18
20
  *= require bootstrap-wysihtml5
19
- *= require bootstrap_and_overrides
20
21
  *= require chardinjs
21
22
  */
@@ -127,7 +127,7 @@ body {
127
127
  padding:10px;
128
128
  }
129
129
  body {
130
- padding-top:0px;
130
+ padding-top: 35px;
131
131
  }
132
132
  }
133
133
  html, body {
@@ -58,7 +58,7 @@ class <%= namespace_for_class %><%= model_camelize.pluralize %>Controller < Beau
58
58
  csv << <%= model_camelize %>.attribute_names.map{ |a| o[a] }
59
59
  }
60
60
  end
61
- render :text => csvstr
61
+ render :plain => csvstr
62
62
  }
63
63
  format.xml{
64
64
  render :xml => @<%= model %>_scope.to_a
@@ -189,7 +189,12 @@ class <%= namespace_for_class %><%= model_camelize.pluralize %>Controller < Beau
189
189
  modelclass = <%= model_camelize %>
190
190
  foreignkey = :<%= model %>_id
191
191
 
192
- render :nothing => true, :status => (update_treeview(modelclass, foreignkey) ? 200 : 500)
192
+
193
+ if update_treeview(modelclass, foreignkey)
194
+ head :ok
195
+ else
196
+ head :internal_server_error
197
+ end
193
198
  end
194
199
 
195
200
  private
@@ -25,7 +25,7 @@ class BeautifulController < ApplicationController
25
25
 
26
26
  do_select_fields(model_sym.to_s) #TODO vérifier si nécessaire
27
27
 
28
- render :nothing => true
28
+ head :ok
29
29
  end
30
30
 
31
31
  # TODO session use key string because json serializer don't know the type of key.
@@ -17,6 +17,9 @@ end
17
17
  <%% end %>
18
18
  <%= render_partial 'app/views/partials/_form_field.html.erb' %><!-- Beautiful_scaffold - AddField - Do not remove -->
19
19
  <div>
20
+ <%%= link_to <%= namespace_for_route %><%= plural_table_name %>_path, :class => "btn btn-default" do %>
21
+ <i class="fa fa-chevron-left"></i> <%%= t(:back, :default => "Back") %>
22
+ <%% end %>
20
23
  <%%= f.submit :class => "btn btn-primary", :data => { :disable_with => t(:saving, :default => "Saving...") } %>
21
24
  </div>
22
25
  <%% end %>
@@ -1,5 +1,3 @@
1
1
  <h2><%%= t(:editing, :default => 'Editing') %> <%%= <%= i18n_t_m(singular_table_name) %> %></h2>
2
2
 
3
- <%%= render 'form' %>
4
-
5
- <%%= link_to t(:back, :default => "Back"), <%= namespace_for_route %><%= plural_table_name %>_path, :class => "btn btn-default" %>
3
+ <%%= render 'form' %>
@@ -1,5 +1,3 @@
1
1
  <h2><%%= t(:new, :default => 'New') %> <%%= <%= i18n_t_m(singular_table_name) %> %></h2>
2
2
 
3
3
  <%%= render 'form' %>
4
-
5
- <%%= link_to t(:back, :default => "Back"), <%= namespace_for_route %><%= plural_table_name %>_path, :class => "btn btn-default" %>
@@ -0,0 +1,68 @@
1
+ require 'bundler'
2
+ require 'thor'
3
+ require 'rails'
4
+ require 'rails/generators'
5
+ require 'minitest/autorun'
6
+
7
+ require_relative File.expand_path("../../lib/generators/beautiful_scaffold_generator", __FILE__)
8
+
9
+ ENV["RAILS_ENV"] = 'test'
10
+
11
+ class ScaffoldGeneratorTest < ::Rails::Generators::TestCase
12
+
13
+ tests BeautifulScaffoldGenerator
14
+ destination File.expand_path("../tmp/dummyapp", File.dirname(__FILE__))
15
+
16
+ def create_generator_sample_app
17
+ if !File.exist?(destination_root)
18
+ puts "---> Create Dummy App #{destination_root}"
19
+ FileUtils.cd(File.dirname(destination_root)) do
20
+ system "rails new dummyapp --quiet --skip-bundle"
21
+ end
22
+
23
+ test_params = "User email:string birthday:datetime children:integer biography:text"
24
+
25
+ run_generator test_params.split(' ')
26
+ end
27
+ end
28
+
29
+ Minitest.after_run do
30
+ FileUtils.rm_rf(destination_root)
31
+ end
32
+
33
+ setup do
34
+ create_generator_sample_app
35
+ end
36
+
37
+ test "generates js css" do
38
+ assert_file "app/assets/javascripts/application-bs.js"
39
+ assert_file "app/assets/javascripts/beautiful_scaffold.js"
40
+ assert_file "app/assets/javascripts/bootstrap-colorpicker.js"
41
+ assert_file "app/assets/javascripts/bootstrap-datetimepicker-for-beautiful-scaffold.js"
42
+ assert_file "app/assets/javascripts/bootstrap-wysihtml5.js"
43
+ end
44
+
45
+ test "generates model" do
46
+ assert_file "app/models/user.rb" do |content|
47
+ assert_match('self.permitted_attributes', content)
48
+ #assert_match(/return #{test_params.split(' ')[1..-1]keys.map{ |k| ":#{k}"}.join(',')}/, content)
49
+ end
50
+ end
51
+
52
+ test "generates controller" do
53
+ assert_file "app/controllers/users_controller.rb" do |content|
54
+ assert_match("session['fields']['user'] ||= (User.columns.map(&:name) - [\"id\"])[0..4]", content)
55
+ end
56
+ end
57
+
58
+ test "generates initializer" do
59
+ assert_file "config/initializers/ransack.rb" do |content|
60
+ assert_match('Ransack.configure do |config|', content)
61
+ end
62
+
63
+ assert_file "config/initializers/link_renderer.rb" do |content|
64
+ assert_match('class LinkRenderer < LinkRendererBase', content)
65
+ end
66
+ end
67
+
68
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: beautiful_scaffold
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sylvain Claudel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-18 00:00:00.000000000 Z
11
+ date: 2018-09-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Beautiful Scaffold generate a complete scaffold (sort, export, paginate
14
14
  and filter data) http://www.beautiful-scaffold.com
@@ -22,6 +22,7 @@ files:
22
22
  - Gemfile
23
23
  - MIT-LICENSE
24
24
  - README.rdoc
25
+ - Rakefile
25
26
  - beautiful_scaffold.gemspec
26
27
  - lib/generators/USAGE
27
28
  - lib/generators/beautiful_devisecancan_generator.rb
@@ -49,7 +50,6 @@ files:
49
50
  - lib/generators/templates/app/assets/stylesheets/application-bs.css
50
51
  - lib/generators/templates/app/assets/stylesheets/beautiful-scaffold.css.scss
51
52
  - lib/generators/templates/app/assets/stylesheets/bootstrap-wysihtml5.css
52
- - lib/generators/templates/app/assets/stylesheets/bootstrap_and_overrides.css.less
53
53
  - lib/generators/templates/app/assets/stylesheets/colorpicker.css
54
54
  - lib/generators/templates/app/assets/stylesheets/datepicker.css
55
55
  - lib/generators/templates/app/assets/stylesheets/reset.css
@@ -97,6 +97,7 @@ files:
97
97
  - lib/generators/templates/app/views/show.html.erb
98
98
  - lib/generators/templates/app/views/treeview.html.erb
99
99
  - lib/generators/templates/lib/custom_failure.rb
100
+ - test/scaffold_test.rb
100
101
  homepage: http://beautiful-scaffold.com
101
102
  licenses:
102
103
  - MIT
@@ -106,6 +107,7 @@ rdoc_options: []
106
107
  require_paths:
107
108
  - lib
108
109
  - lib/generators
110
+ - test/*
109
111
  required_ruby_version: !ruby/object:Gem::Requirement
110
112
  requirements:
111
113
  - - ">="
@@ -118,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
120
  version: '0'
119
121
  requirements: []
120
122
  rubyforge_project: beautiful_scaffold
121
- rubygems_version: 2.5.2
123
+ rubygems_version: 2.6.12
122
124
  signing_key:
123
125
  specification_version: 4
124
126
  summary: Beautiful Scaffold generate fully customizable scaffold
@@ -1,40 +0,0 @@
1
- //= de pend_on_asset "glyphicons-halflings-regular.eot"
2
- //= de pend_on_asset "glyphicons-halflings-regular.woff"
3
- //= de pend_on_asset "glyphicons-halflings-regular.ttf"
4
- //= de pend_on_asset "glyphicons-halflings-regular.svg"
5
- //= de pend_on_asset "twitter/bootstrap/glyphicons-halflings.png"
6
- //= de pend_on_asset "twitter/bootstrap/glyphicons-halflings-white.png"
7
- //= depend_on_asset "fontawesome-webfont.eot"
8
- //= depend_on_asset "fontawesome-webfont.woff"
9
- //= depend_on_asset "fontawesome-webfont.ttf"
10
- //= depend_on_asset "fontawesome-webfont.svg"
11
-
12
- @import "twitter/bootstrap/bootstrap";
13
-
14
- // Set the correct sprite paths
15
- @iconSpritePath: image-url("twitter/bootstrap/glyphicons-halflings.png");
16
- @iconWhiteSpritePath: image-url("twitter/bootstrap/glyphicons-halflings-white.png");
17
-
18
- // Set the Font Awesome (Font Awesome is default. You can disable by commenting below lines)
19
- @fontAwesomeEotPath: asset-url("fontawesome-webfont.eot");
20
- @fontAwesomeEotPath_iefix: asset-url("fontawesome-webfont.eot?#iefix");
21
- @fontAwesomeWoffPath: asset-url("fontawesome-webfont.woff");
22
- @fontAwesomeTtfPath: asset-url("fontawesome-webfont.ttf");
23
- @fontAwesomeSvgPath: asset-url("fontawesome-webfont.svg#fontawesomeregular");
24
-
25
- // Font Awesome
26
- @import "fontawesome/font-awesome";
27
-
28
- // Glyphicons
29
- //@import "twitter/bootstrap/sprites.less";
30
-
31
- // Your custom LESS stylesheets goes here
32
- //
33
- // Since bootstrap was imported above you have access to its mixins which
34
- // you may use and inherit here
35
- //
36
- // If you'd like to override bootstrap's own variables, you can do so here as well
37
- // See http://twitter.github.com/bootstrap/customize.html#variables for their names and documentation
38
- //
39
- // Example:
40
- // @linkColor: #ff0000;