hot-glue 0.1.0 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +22 -19
  3. data/README.md +36 -19
  4. data/app/helpers/hot_glue/controller_helper.rb +1 -1
  5. data/lib/generators/hot_glue/install_generator.rb +0 -2
  6. data/lib/generators/hot_glue/markup_templates/base.rb +7 -0
  7. data/lib/generators/hot_glue/markup_templates/erb.rb +227 -0
  8. data/lib/generators/hot_glue/markup_templates/haml.rb +236 -0
  9. data/lib/generators/hot_glue/markup_templates/slim.rb +9 -0
  10. data/lib/generators/hot_glue/scaffold_generator.rb +127 -264
  11. data/lib/generators/hot_glue/templates/controller.rb.erb +14 -2
  12. data/lib/generators/hot_glue/templates/erb/_errors.erb +11 -0
  13. data/lib/generators/hot_glue/templates/erb/_flash_notices.erb +12 -0
  14. data/lib/generators/hot_glue/templates/erb/_form.erb +8 -0
  15. data/lib/generators/hot_glue/templates/erb/_line.erb +10 -0
  16. data/lib/generators/hot_glue/templates/erb/_list.erb +19 -0
  17. data/lib/generators/hot_glue/templates/erb/_new_button.erb +3 -0
  18. data/lib/generators/hot_glue/templates/erb/_new_form.erb +8 -0
  19. data/lib/generators/hot_glue/templates/erb/_show.erb +8 -0
  20. data/lib/generators/hot_glue/templates/erb/create.turbo_stream.erb +18 -0
  21. data/lib/generators/hot_glue/templates/erb/destroy.turbo_stream.erb +3 -0
  22. data/lib/generators/hot_glue/templates/erb/edit.erb +30 -0
  23. data/lib/generators/hot_glue/templates/erb/edit.turbo_stream.erb +3 -0
  24. data/lib/generators/hot_glue/templates/erb/index.erb +10 -0
  25. data/lib/generators/hot_glue/templates/erb/new.erb +1 -0
  26. data/lib/generators/hot_glue/templates/erb/update.turbo_stream.erb +10 -0
  27. data/lib/generators/hot_glue/templates/{_errors.haml → haml/_errors.haml} +0 -0
  28. data/lib/generators/hot_glue/templates/{_flash_notices.haml → haml/_flash_notices.haml} +0 -0
  29. data/lib/generators/hot_glue/templates/{_form.haml → haml/_form.haml} +1 -0
  30. data/lib/generators/hot_glue/templates/{_line.haml → haml/_line.haml} +0 -0
  31. data/lib/generators/hot_glue/templates/{_list.haml → haml/_list.haml} +0 -0
  32. data/lib/generators/hot_glue/templates/{_new_button.haml → haml/_new_button.haml} +0 -0
  33. data/lib/generators/hot_glue/templates/{_new_form.haml → haml/_new_form.haml} +0 -0
  34. data/lib/generators/hot_glue/templates/{_show.haml → haml/_show.haml} +0 -0
  35. data/lib/generators/hot_glue/templates/{create.turbo_stream.haml → haml/create.turbo_stream.haml} +0 -0
  36. data/lib/generators/hot_glue/templates/{destroy.turbo_stream.haml → haml/destroy.turbo_stream.haml} +0 -0
  37. data/lib/generators/hot_glue/templates/{edit.haml → haml/edit.haml} +0 -0
  38. data/lib/generators/hot_glue/templates/{edit.turbo_stream.haml → haml/edit.turbo_stream.haml} +0 -0
  39. data/lib/generators/hot_glue/templates/{index.haml → haml/index.haml} +0 -0
  40. data/lib/generators/hot_glue/templates/{new.haml → haml/new.haml} +0 -0
  41. data/lib/generators/hot_glue/templates/{update.turbo_stream.haml → haml/update.turbo_stream.haml} +0 -0
  42. data/lib/generators/hot_glue/templates/system_spec.rb.erb +1 -1
  43. data/lib/hot-glue.rb +6 -20
  44. data/lib/hotglue/version.rb +1 -1
  45. metadata +49 -24
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 88c8ae8859f5a37ed898fb4047ab2a406c5eacbb766bcbf6dc2b43f5d419b751
4
- data.tar.gz: 8685951b462a1b9c0f3e5920b193e057a15a2d497d103bf163702dfdbfa4f89f
3
+ metadata.gz: 4ea47eaaf1c1a9a92b6382e2dc41a5e9f119600cfd0f58bc8b8091c33e3ac48a
4
+ data.tar.gz: c9ebd867495aff539bbb53c7d1ecb09c5fd83cb00121a129eadfc96533647efc
5
5
  SHA512:
6
- metadata.gz: 54f3cbd725a0ca775b688405d8f00b0aa5611a4bd2d2bbb0566bb72fcf8a1c532e3dc88684e55a0c63dd300c0f0f0f9549f5536b74fba36714f5c97a14467c18
7
- data.tar.gz: 269fe5314a3acbc91591efea6b2f43e049244152bfb6e1c803b67c0d4b233a461cf2131fe4825a331e205c830ee7961ba78d7c6b617374291e8c9ebb63952735
6
+ metadata.gz: 2022393514c059339cc9e4c163962501a48609f317ab7d3f4be3a00e467637d6dbb14757dadf9312569dedc6372a43f427e28b6c3b2638067bdc25ca4d23fe3d
7
+ data.tar.gz: 7a19916224effd9ad2726baf944b110083978ee8328588301f89c4c2ae4791bfad8fcbf5f37b9dc5844153cfe39432933a47e1f890b121b78372e5cdedbc5afc
data/Gemfile.lock CHANGED
@@ -1,11 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- hot-glue (0.0.9)
4
+ hot-glue (0.2.2)
5
5
  ffaker (~> 2.16)
6
6
  haml-rails (~> 2.0)
7
7
  kaminari (~> 1.2)
8
- rails (~> 6.0)
8
+ rails (> 5.1, <= 7.0.0)
9
9
  sass-rails
10
10
  turbo-rails (~> 0.5)
11
11
 
@@ -74,9 +74,9 @@ GEM
74
74
  bcrypt (3.1.16)
75
75
  builder (3.2.4)
76
76
  byebug (11.1.3)
77
- concurrent-ruby (1.1.8)
77
+ concurrent-ruby (1.1.9)
78
78
  crass (1.0.6)
79
- devise (4.7.3)
79
+ devise (4.8.0)
80
80
  bcrypt (~> 3.0)
81
81
  orm_adapter (~> 0.1)
82
82
  railties (>= 4.1.0)
@@ -84,11 +84,11 @@ GEM
84
84
  warden (~> 1.2.3)
85
85
  erubi (1.10.0)
86
86
  erubis (2.7.0)
87
- ffaker (2.18.0)
88
- ffi (1.15.0)
87
+ ffaker (2.19.0)
88
+ ffi (1.15.4)
89
89
  globalid (0.4.2)
90
90
  activesupport (>= 4.2.0)
91
- haml (5.2.1)
91
+ haml (5.2.2)
92
92
  temple (>= 0.8.0)
93
93
  tilt
94
94
  haml-rails (2.0.1)
@@ -102,7 +102,7 @@ GEM
102
102
  haml (>= 4.0, < 6)
103
103
  nokogiri (>= 1.6.0)
104
104
  ruby_parser (~> 3.5)
105
- i18n (1.8.9)
105
+ i18n (1.8.10)
106
106
  concurrent-ruby (~> 1.0)
107
107
  kaminari (1.2.1)
108
108
  activesupport (>= 4.1.0)
@@ -116,7 +116,7 @@ GEM
116
116
  activerecord
117
117
  kaminari-core (= 1.2.1)
118
118
  kaminari-core (1.2.1)
119
- loofah (2.9.0)
119
+ loofah (2.10.0)
120
120
  crass (~> 1.0.2)
121
121
  nokogiri (>= 1.5.9)
122
122
  mail (2.7.1)
@@ -124,12 +124,14 @@ GEM
124
124
  marcel (0.3.3)
125
125
  mimemagic (~> 0.3.2)
126
126
  method_source (1.0.0)
127
- mimemagic (0.3.5)
128
- mini_mime (1.0.2)
129
- mini_portile2 (2.5.0)
127
+ mimemagic (0.3.10)
128
+ nokogiri (~> 1)
129
+ rake
130
+ mini_mime (1.1.0)
131
+ mini_portile2 (2.5.3)
130
132
  minitest (5.14.4)
131
133
  nio4r (2.5.7)
132
- nokogiri (1.11.1)
134
+ nokogiri (1.11.7)
133
135
  mini_portile2 (~> 2.5.0)
134
136
  racc (~> 1.4)
135
137
  orm_adapter (0.5.0)
@@ -167,8 +169,8 @@ GEM
167
169
  responders (3.0.1)
168
170
  actionpack (>= 5.0)
169
171
  railties (>= 5.0)
170
- ruby_parser (3.15.1)
171
- sexp_processor (~> 4.9)
172
+ ruby_parser (3.17.0)
173
+ sexp_processor (~> 4.15, >= 4.15.1)
172
174
  sass-rails (6.0.0)
173
175
  sassc-rails (~> 2.1, >= 2.1.1)
174
176
  sassc (2.4.0)
@@ -179,7 +181,7 @@ GEM
179
181
  sprockets (> 3.0)
180
182
  sprockets-rails
181
183
  tilt
182
- sexp_processor (4.15.2)
184
+ sexp_processor (4.15.3)
183
185
  sprockets (4.0.2)
184
186
  concurrent-ruby (~> 1.0)
185
187
  rack (> 1, < 3)
@@ -191,18 +193,19 @@ GEM
191
193
  temple (0.8.2)
192
194
  thor (1.1.0)
193
195
  tilt (2.0.10)
194
- turbo-rails (0.5.9)
196
+ turbo-rails (0.7.11)
195
197
  rails (>= 6.0.0)
196
198
  tzinfo (2.0.4)
197
199
  concurrent-ruby (~> 1.0)
198
200
  warden (1.2.9)
199
201
  rack (>= 2.0.9)
200
- websocket-driver (0.7.3)
202
+ websocket-driver (0.7.5)
201
203
  websocket-extensions (>= 0.1.0)
202
204
  websocket-extensions (0.1.5)
203
205
  zeitwerk (2.4.2)
204
206
 
205
207
  PLATFORMS
208
+ -darwin-20
206
209
  ruby
207
210
 
208
211
  DEPENDENCIES
@@ -213,4 +216,4 @@ DEPENDENCIES
213
216
  sqlite3
214
217
 
215
218
  BUNDLED WITH
216
- 2.1.4
219
+ 2.2.19
data/README.md CHANGED
@@ -1,4 +1,3 @@
1
- # Hot Glue
2
1
 
3
2
  Hot Glue is a Rails scaffold builder for the Turbo era. It is an evolution of the admin-interface style scaffolding systems of the 2010s ([activeadmin](https://github.com/activeadmin/activeadmin), [rails_admin](https://github.com/sferik/rails_admin), and [active_scaffold](https://github.com/activescaffold/active_scaffold)).
4
3
 
@@ -64,17 +63,17 @@ Instantly get a simple CRUD interface
64
63
  ```
65
64
 
66
65
  - Rspec setup
67
- add `gem 'rspec-rails'` to your gemfile inside :development and :test
68
- add `gem 'factory_bot_rails'` to your gemfile inside :development and :test
69
- run `rails generate rspec:install`
70
- configure Rspec to work with Factory Bot inside of `rails_helper.rb`
66
+ - add `gem 'rspec-rails'` to your gemfile inside :development and :test
67
+ - add `gem 'factory_bot_rails'` to your gemfile inside :development and :test
68
+ - run `rails generate rspec:install`
69
+ - configure Rspec to work with Factory Bot inside of `rails_helper.rb`
71
70
  ```
72
71
  RSpec.configure do |config|
73
72
  // ... more rspec configuration (not shown)
74
73
  config.include FactoryBot::Syntax::Methods
75
74
  end
76
75
  ```
77
-
76
+ more info:
78
77
  https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md#rspec
79
78
 
80
79
  - for a quick Capybara login, create a support helper in `spec/support/` and log-in as your user
@@ -89,10 +88,13 @@ Instantly get a simple CRUD interface
89
88
  end
90
89
  ```
91
90
 
92
- - Install Bootstrap (optional)
93
-
94
- Bootstrap with Webpack:
95
- - change `stylesheet_link_tag` to `stylesheet_pack_tag` in your application layout
91
+ - Install Bootstrap
92
+ - Bootstrap with Sprockets (Rails 5 or 7 default — Rails 6 custom)
93
+ - use twbs/bootstrap-rubygem gem
94
+ - see README for bootstrap-rubygem to install
95
+
96
+ Bootstrap with Webpack RAILS 6 ONLY:
97
+ - change `stylesheet_link_tag` to `stylesheet_pack_tag` in your application layout
96
98
  - run `yarn add bootstrap`
97
99
  - create a new file at `app/javascript/require_bootstrap.scss` with this content
98
100
  ```
@@ -103,11 +105,12 @@ Bootstrap with Webpack:
103
105
  ```
104
106
  import 'require_bootstrap'
105
107
  ```
106
-
107
- Bootstrap with Sprockets:
108
- - use bootstrap-rubygem gem
109
- - see README for bootstrap-rubygem to install
110
108
 
109
+ Bootstrap with Webpack for FOR RAILS 7 :
110
+ -- See this BLOG POST
111
+ https://jasonfleetwoodboldt.com/stepping-up-rails/rails-7-with-webpacker-and-bootstrap/
112
+
113
+
111
114
 
112
115
  - Install Devise or implement your own authentication
113
116
  (or only use --gd mode, see below)
@@ -318,6 +321,12 @@ end
318
321
 
319
322
  ```
320
323
 
324
+
325
+ ### `--markup` (default: 'erb')
326
+
327
+ ERB is default. For HAML, `--markup=haml`.
328
+
329
+
321
330
  ## FLAGS (Options with no values)
322
331
  These options (flags) also uses `--` syntax but do not take any values. Everything is assumed (default) to be false unless specified.
323
332
 
@@ -353,8 +362,15 @@ If you do not want inline editing of your list items but instead to fall back to
353
362
 
354
363
 
355
364
  # VERSION HISTORY
365
+ #### 2021-09-20 - v0.2.1 - Fixes nesting behavior when using gd option
366
+
367
+ #### 2021-09-06 - v0.2.0 - ERB or HAML; use the option --markup=erb or --markup=haml (default is now erb)
368
+
369
+ #### 2021-06-28 - v0.1.2 - fixes problem with namespaces on path helpers
370
+
371
+ #### 2021-05-09 (yanked) - v0.1.1 - add cancellation buttons
356
372
 
357
- #### 2021-04-28 - v0.1.0 - Very please to introduce full behavior specs, found in specs/system/, generated by default on all build code; also many fixes involving nesting and authentication"
373
+ #### 2021-04-28 - v0.1.0 - Very pleased to introduce full behavior specs, found in specs/system/, generated by default on all build code; also many fixes involving nesting and authentication"
358
374
 
359
375
  #### 2021-03-24 - v0.0.9 - fixes in the automatic field label detection; cleans up junk in spec output
360
376
 
@@ -378,15 +394,16 @@ If you do not want inline editing of your list items but instead to fall back to
378
394
 
379
395
 
380
396
 
381
-
382
-
383
397
  # HOW THIS GEM IS TESTED
384
398
 
385
- We have one kind of "sandboxes": a DUMMY sandbox
399
+ SETUP:
400
+ • Run bundle install
401
+ • if you can't get through see https://stackoverflow.com/questions/68050807/gem-install-mimemagic-v-0-3-10-fails-to-install-on-big-sur/68170982#68170982
402
+
386
403
 
387
404
  The dummy sandbox is found at `spec/dummy`
388
405
 
389
- The dummy lives as mostly checked- into the repository, except the folders where the generated code goes (`spec/dummy/app/views/`, `spec/dummy/app/controllers/`, `spec/dummy/specs/` are excluded from Git)
406
+ The dummy sandbox lives as mostly checked- into the repository, **except** the folders where the generated code goes (`spec/dummy/app/views/`, `spec/dummy/app/controllers/`, `spec/dummy/specs/` are excluded from Git)
390
407
 
391
408
  When you run the **internal specs**, which you can do **at the root of this repo** using the command `rspec`, a set of specs will run to assert the generators are erroring when they are supposed to and producing code when they are supposed to.
392
409
 
@@ -43,7 +43,7 @@ module HotGlue
43
43
  type: 'time',
44
44
  value: date_to_current_timezone(value, timezone))
45
45
 
46
- res << timezonize(tz)
46
+ res << timezonize(timezone)
47
47
  res
48
48
  end
49
49
 
@@ -10,8 +10,6 @@ module HotGlue
10
10
 
11
11
  def initialize(*args) #:nodoc:
12
12
  super
13
- # copy_file "hot_glue.js", "#{'spec/dummy/' if Rails.env.test?}app/javascript/hot_glue.js"
14
- # copy_file "hot_glue.scss", "#{'spec/dummy/' if Rails.env.test?}app/assets/stylesheets/hot_glue.scss"
15
13
  copy_file "_flash_notices.haml", "#{'spec/dummy/' if Rails.env.test?}app/views/layouts/_flash_notices.haml"
16
14
  end
17
15
  end
@@ -0,0 +1,7 @@
1
+ module HotGlue
2
+ class TemplateBase
3
+ def initialize()
4
+ end
5
+
6
+ end
7
+ end
@@ -0,0 +1,227 @@
1
+ module HotGlue
2
+ class ErbTemplate < TemplateBase
3
+
4
+ # include GeneratorHelper
5
+ attr_accessor :singular
6
+
7
+ def field_output(col, type = nil, width, col_identifier )
8
+ "<div class='col form-group <%='alert-danger' if @#{singular}.errors.details.keys.include?(:#{col.to_s})%>' > \n" +
9
+ " <%= f.text_field :#{col.to_s}, value: @#{@singular}.#{col.to_s}, size: #{width}, class: 'form-control', type: '#{type}' %>\n "+
10
+ " <label class='form-text' >#{col.to_s.humanize}</label>\n" +
11
+ "</div>"
12
+ end
13
+
14
+ def list_column_headings(*args)
15
+ columns = args[0][:columns]
16
+
17
+ columns.map(&:to_s).map{|col_name| "<div class='col'>#{col_name.humanize}</div>"}.join("\n")
18
+ end
19
+
20
+
21
+ def all_form_fields(*args)
22
+
23
+ columns = args[0][:columns]
24
+ show_only = args[0][:show_only]
25
+ singular_class = args[0][:singular_class]
26
+
27
+ # TODO: CLEAN ME
28
+ @singular = args[0][:singular]
29
+ singular = @singular
30
+
31
+
32
+ col_identifier = "col"
33
+ col_spaces_prepend = " "
34
+
35
+ res = columns.map { |col|
36
+
37
+ if show_only.include?(col)
38
+
39
+ "#{col_identifier}{class: \"form-group <%= 'alert-danger' if #{singular}.errors.details.keys.include?(:#{col.to_s}) %> \"}
40
+ = @#{singular}.#{col.to_s}
41
+ %label.form-text
42
+ #{col.to_s.humanize}\n"
43
+ else
44
+
45
+
46
+ type = eval("#{singular_class}.columns_hash['#{col}']").type
47
+ limit = eval("#{singular_class}.columns_hash['#{col}']").limit
48
+ sql_type = eval("#{singular_class}.columns_hash['#{col}']").sql_type
49
+
50
+ case type
51
+ when :integer
52
+ # look for a belongs_to on this object
53
+ if col.to_s.ends_with?("_id")
54
+ assoc_name = col.to_s.gsub("_id","")
55
+ assoc = eval("#{singular_class}.reflect_on_association(:#{assoc_name})")
56
+ if assoc.nil?
57
+ exit_message= "*** Oops. on the #{singular_class} object, there doesn't seem to be an association called '#{assoc_name}'"
58
+ exit
59
+ end
60
+ display_column = HotGlue.derrive_reference_name(assoc.class_name)
61
+
62
+ "<div class='#{col_identifier} form-group <%= 'alert-danger' if #{singular}.errors.details.keys.include?(:#{assoc_name.to_s}) %>' >
63
+ <%= f.collection_select(:#{col.to_s}, #{assoc.class_name}.all, :id, :#{display_column}, {prompt: true, selected: @#{singular}.#{col.to_s} }, class: 'form-control') %>
64
+ <label class='small form-text text-muted'>#{col.to_s.humanize}</label></div>"
65
+
66
+ else
67
+ "<div class=\"#{col_identifier} form-group <%= 'alert-danger' if #{singular}.errors.details.keys.include?(:#{col}) %> \" >
68
+ <%= f.text_field :#{col.to_s}, value: #{singular}.#{col.to_s}, class: 'form-control', size: 4, type: 'number' %>
69
+ <label class='small form-text text-muted'>#{col.to_s.humanize}</label></div>"
70
+
71
+ end
72
+ when :string
73
+ limit ||= 256
74
+ if limit <= 256
75
+ field_output(col, nil, limit, col_identifier)
76
+ else
77
+ text_area_output(col, limit, col_identifier)
78
+ end
79
+
80
+ when :text
81
+ limit ||= 256
82
+ if limit <= 256
83
+ field_output(col, nil, limit, col_identifier)
84
+ else
85
+ text_area_output(col, limit, col_identifier)
86
+ end
87
+ when :float
88
+ limit ||= 256
89
+ field_output(col, nil, limit, col_identifier)
90
+
91
+
92
+ when :datetime
93
+
94
+
95
+ "<div class='col form-group <%='alert-danger' if @#{singular}.errors.details.keys.include?(:#{col.to_s})%>' > \n" +
96
+ "<%= datetime_field_localized(f, :#{col.to_s}, #{singular}.#{col.to_s}, '#{ col.to_s.humanize }', #{@auth ? @auth+'.timezone' : 'nil'}) %>" +
97
+ "</div>"
98
+ when :date
99
+ "<div class='col form-group <%='alert-danger' if @#{singular}.errors.details.keys.include?(:#{col.to_s})%>' > \n" +
100
+ "<%= date_field_localized(f, :#{col.to_s}, #{singular}.#{col.to_s}, '#{ col.to_s.humanize }', #{@auth ? @auth+'.timezone' : 'nil'}) %>" +
101
+ "</div>"
102
+ when :time
103
+ "<div class='col form-group <%='alert-danger' if @#{singular}.errors.details.keys.include?(:#{col.to_s})%>' > \n" +
104
+ "<%= time_field_localized(f, :#{col.to_s}, #{singular}.#{col.to_s}, '#{ col.to_s.humanize }', #{@auth ? @auth+'.timezone' : 'nil'}) %>" +
105
+ "</div>"
106
+
107
+ when :boolean
108
+ "<div class='col form-group <%='alert-danger' if @#{singular}.errors.details.keys.include?(:#{col.to_s})%>' > \n" +
109
+ " <span>#{col.to_s.humanize}</span>" +
110
+ " <%= f.radio_button(:#{col.to_s}, '0', checked: #{singular}.#{col.to_s} ? '' : 'checked') %>\n" +
111
+ " <%= f.label(:#{col.to_s}, value: 'No', for: '#{singular}_#{col.to_s}_0') %>\n" +
112
+ " <%= f.radio_button(:#{col.to_s}, '1', checked: #{singular}.#{col.to_s} ? 'checked' : '') %>\n" +
113
+ " <%= f.label(:#{col.to_s}, value: 'Yes', for: '#{singular}_#{col.to_s}_1') %>\n" +
114
+ "</div>"
115
+ end
116
+ end
117
+ }.join("\n")
118
+ return res
119
+ end
120
+
121
+
122
+
123
+ def paginate(*args)
124
+ plural = args[0][:plural]
125
+
126
+ "<% if #{plural}.respond_to?(:total_pages) %><%= paginate(#{plural}) %> <% end %>"
127
+ end
128
+
129
+ def all_line_fields(*args)
130
+ columns = args[0][:columns]
131
+ show_only = args[0][:show_only]
132
+ singular_class = args[0][:singular_class]
133
+ singular = args[0][:singular]
134
+
135
+ columns_count = columns.count + 1
136
+ perc_width = (100/columns_count).floor
137
+
138
+ col_identifer = "col"
139
+ columns.map { |col|
140
+ type = eval("#{singular_class}.columns_hash['#{col}']").type
141
+ limit = eval("#{singular_class}.columns_hash['#{col}']").limit
142
+ sql_type = eval("#{singular_class}.columns_hash['#{col}']").sql_type
143
+
144
+ case type
145
+ when :integer
146
+ # look for a belongs_to on this object
147
+ if col.to_s.ends_with?("_id")
148
+
149
+ assoc_name = col.to_s.gsub("_id","")
150
+
151
+
152
+ assoc = eval("#{singular_class}.reflect_on_association(:#{assoc_name})")
153
+
154
+ if assoc.nil?
155
+ exit_message = "*** Oops. on the #{singular_class} object, there doesn't seem to be an association called '#{assoc_name}'"
156
+ raise(HotGlue::Error,exit_message)
157
+ end
158
+
159
+ display_column = HotGlue.derrive_reference_name(assoc.class_name)
160
+
161
+ "<div class='#{col_identifer}'>
162
+ <%= #{singular}.#{assoc.name.to_s}.try(:#{display_column}) || '<span class=\"content alert-danger\">MISSING</span>'.html_safe %>
163
+ </div>"
164
+
165
+ else
166
+ "<div class='#{col_identifer}'>
167
+ <%= #{singular}.#{col}%></div>"
168
+ end
169
+ when :float
170
+ width = (limit && limit < 40) ? limit : (40)
171
+ "#{col_identifer}
172
+ = #{singular}.#{col}"
173
+
174
+ when :string
175
+ width = (limit && limit < 40) ? limit : (40)
176
+ "<div class='#{col_identifer}'>
177
+ <%= #{singular}.#{col} %>
178
+ </div>"
179
+ when :text
180
+ "<div class='#{col_identifer}'>
181
+ <%= #{singular}.#{col} %>
182
+ </div>"
183
+ when :datetime
184
+
185
+ "<div class='#{col_identifer}'>
186
+ <% unless #{singular}.#{col}.nil? %>
187
+ <%= #{singular}.#{col}.in_time_zone(current_timezone).strftime('%m/%d/%Y @ %l:%M %p ') + timezonize(current_timezone) %>
188
+ <% else %>
189
+ <span class='alert-danger'>MISSING</span>
190
+ <% end %>
191
+ </div>"
192
+ when :date
193
+ "<div class='#{col_identifer}'>
194
+ <% unless #{singular}.#{col}.nil? %>
195
+ <%= #{singular}.#{col} %>
196
+ <% else %>
197
+ <span class='alert-danger'>MISSING</span>
198
+ <% end %>
199
+ </div>"
200
+ when :time
201
+ "<div class='#{col_identifer}'>
202
+ <% unless #{singular}.#{col}.nil? %>
203
+ <%= #{singular}.#{col}.in_time_zone(current_timezone).strftime('%l:%M %p ') + timezonize(current_timezone) %>
204
+ <% else %>
205
+ <span class='alert-danger'>MISSING</span>
206
+ <% end %>
207
+ </div>
208
+ "
209
+ when :boolean
210
+ "<div class='#{col_identifer}'>
211
+ <% if #{singular}.#{col}.nil? %>
212
+ <span class='alert-danger'>MISSING</span>
213
+ <% elsif #{singular}.#{col} %>
214
+ YES
215
+ <% else %>
216
+ NO
217
+ <% end %>
218
+ </div>
219
+ "
220
+ end #end of switch
221
+ }.join("\n")
222
+ end
223
+ end
224
+
225
+
226
+
227
+ end