informant 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.rdoc CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  Per-release changes to Informant.
4
4
 
5
+ == 0.7.2 (2010 Apr 11)
6
+
7
+ * Fix Ruby 1.9 compatibility.
8
+ * Allow customization of each HABTM check box.
9
+
5
10
  == 0.7.1 (2010 Jun 1)
6
11
 
7
12
  * Add compatibility with Rails 3 and rails_xss plugin.
data/Rakefile CHANGED
@@ -1,21 +1,5 @@
1
- require 'rubygems'
2
- require 'rake'
3
-
4
- begin
5
- require 'jeweler'
6
- Jeweler::Tasks.new do |gem|
7
- gem.name = "informant"
8
- gem.summary = %Q{A full-featured form builder for Rails.}
9
- gem.description = %Q{Informant is a full-featured form builder for Ruby on Rails which promotes a simple syntax that keeps your views clean. Everything about a field (label, description, error display, etc) is encapsulated in a single method call.}
10
- gem.email = "alex@alexreisner.com"
11
- gem.homepage = "http://github.com/alexreisner/informant"
12
- gem.authors = ["Alex Reisner"]
13
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
14
- end
15
- Jeweler::GemcutterTasks.new
16
- rescue LoadError
17
- puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
18
- end
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
19
3
 
20
4
  require 'rake/testtask'
21
5
  Rake::TestTask.new(:test) do |test|
@@ -24,21 +8,6 @@ Rake::TestTask.new(:test) do |test|
24
8
  test.verbose = true
25
9
  end
26
10
 
27
- begin
28
- require 'rcov/rcovtask'
29
- Rcov::RcovTask.new do |test|
30
- test.libs << 'test'
31
- test.pattern = 'test/**/*_test.rb'
32
- test.verbose = true
33
- end
34
- rescue LoadError
35
- task :rcov do
36
- abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
37
- end
38
- end
39
-
40
- task :test => :check_dependencies
41
-
42
11
  task :default => :test
43
12
 
44
13
  require 'rake/rdoctask'
@@ -50,8 +19,7 @@ Rake::RDocTask.new do |rdoc|
50
19
  end
51
20
 
52
21
  rdoc.rdoc_dir = 'rdoc'
53
- rdoc.title = "Informant #{version}"
54
- rdoc.rdoc_files.include('README*')
22
+ rdoc.title = "informant #{version}"
23
+ rdoc.rdoc_files.include('*.rdoc')
55
24
  rdoc.rdoc_files.include('lib/**/*.rb')
56
25
  end
57
-
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.7.1
1
+ 0.7.2
data/lib/informant.rb CHANGED
@@ -40,11 +40,11 @@ module Informant
40
40
  # Displays fields in a <div>, label on one line, field below it.
41
41
  #
42
42
  class Standard < ActionView::Helpers::FormBuilder
43
-
43
+
44
44
  # Declare some options as custom (don't pass to built-in form helpers).
45
45
  @@custom_field_options = [:label, :required, :description, :decoration]
46
46
  @@custom_label_options = [:required, :colon, :label_for]
47
-
47
+
48
48
  @@custom_options = @@custom_field_options + @@custom_label_options
49
49
 
50
50
  # Run already-defined helpers through our "shell".
@@ -54,20 +54,20 @@ module Informant
54
54
  helpers.each do |h|
55
55
  define_method h do |field, *args|
56
56
  options = args.detect { |a| a.is_a?(Hash) } || {}
57
- case h
58
- when 'check_box':
57
+ case h
58
+ when 'check_box'
59
59
  template = "check_box_field"
60
60
  options[:colon] = false
61
- when 'radio_button':
61
+ when 'radio_button'
62
62
  template = "radio_button_choice"
63
63
  options[:colon] = false
64
64
  else
65
65
  template = "default_field"
66
66
  end
67
- build_shell(field, options, template) { super }
67
+ build_shell(field, options, template) { super(field, *args) }
68
68
  end
69
69
  end
70
-
70
+
71
71
  ##
72
72
  # Render a set of radio buttons. Takes a method name, an array of
73
73
  # choices (just like a +select+ field), and an Informant options hash.
@@ -79,7 +79,7 @@ module Informant
79
79
  :label_for => [object_name, method, c[1].to_s.downcase].join('_') }
80
80
  end
81
81
  end
82
-
82
+
83
83
  ##
84
84
  # Render a set of check boxes for selecting HABTM-associated objects.
85
85
  # Takes a method name (eg, category_ids), an array of
@@ -87,17 +87,17 @@ module Informant
87
87
  # In the default template the check boxes are enclosed in a <div> with
88
88
  # CSS class <tt>habtm_check_boxes</tt> which can be styled thusly to
89
89
  # achieve a scrolling list:
90
- #
90
+ #
91
91
  # .habtm_check_boxes {
92
92
  # overflow: auto;
93
93
  # height: 150px;
94
94
  # }
95
- #
95
+ #
96
96
  # A hidden field is included which eliminates the need to handle the
97
97
  # no-boxes-checked case in the controller, for example:
98
- #
98
+ #
99
99
  # <input type="hidden" name="article[categories][]" value="" />
100
- #
100
+ #
101
101
  # This ensures that un-checking all boxes will work as expected.
102
102
  # Unfortunately the check_box template is not applied to each check box
103
103
  # (because the standard method of querying the @object for the field's
@@ -113,17 +113,17 @@ module Informant
113
113
  build_shell(method, options, "habtm_check_boxes_field") do
114
114
  choices.map do |c|
115
115
  field_id = "#{base_id}_#{c[1].to_s.downcase}"
116
- @template.content_tag(:div, :class => "field") do
117
- @template.check_box_tag(
118
- "#{base_name}[]", "1",
119
- @object.send(method).include?(c[1]),
120
- :id => field_id
121
- ) + @template.label_tag(field_id, c[0])
122
- end
116
+ habtm_single_check_box_template(
117
+ :name => "#{base_name}[]",
118
+ :id => field_id,
119
+ :value => c[1],
120
+ :checked => @object.send(method).include?(c[1]),
121
+ :label => @template.label_tag(field_id, c[0])
122
+ )
123
123
  end
124
124
  end
125
125
  end
126
-
126
+
127
127
  ##
128
128
  # Standard Rails date selector.
129
129
  #
@@ -132,9 +132,9 @@ module Informant
132
132
  options[:start_year] ||= 1801
133
133
  options[:end_year] ||= Time.now.year
134
134
  options[:label_for] = "#{object_name}_#{method}_1i"
135
- build_shell(method, options) { super }
135
+ build_shell(method, options) { super }
136
136
  end
137
-
137
+
138
138
  ##
139
139
  # This differs from the Rails-default date_select in that it
140
140
  # submits three distinct fields for storage in three separate attributes.
@@ -148,16 +148,16 @@ module Informant
148
148
  options[:end_year] ||= Time.now.year
149
149
  options[:prefix] = object_name # for date helpers
150
150
  options[:label_for] = "#{object_name}_#{method}_y"
151
- build_shell(method, options) do
151
+ build_shell(method, options) do
152
152
  [['y', 'year'], ['m', 'month'], ['d', 'day']].map{ |p|
153
153
  i,j = p
154
154
  value = @object.send(method.to_s + '_' + i)
155
155
  options[:field_name] = method.to_s + '_' + i
156
156
  eval("@template.select_#{j}(#{value.inspect}, options)")
157
157
  }.join(' ')
158
- end
158
+ end
159
159
  end
160
-
160
+
161
161
  ##
162
162
  # Year select field. Takes options <tt>:start_year</tt> and
163
163
  # <tt>:end_year</tt>, and <tt>:step</tt>.
@@ -167,7 +167,7 @@ module Informant
167
167
  options[:last] = options[:end_year] || Date.today.year
168
168
  integer_select(method, options)
169
169
  end
170
-
170
+
171
171
  ##
172
172
  # Integer select field.
173
173
  # Takes options <tt>:first</tt>, <tt>:last</tt>, and <tt>:step</tt>.
@@ -179,9 +179,9 @@ module Informant
179
179
  choices << n if i % options[:step] == 0
180
180
  i += 1
181
181
  end
182
- select method, choices, options
182
+ select method, choices, options
183
183
  end
184
-
184
+
185
185
  ##
186
186
  # Submit button with smart default text (if +value+ is nil uses "Create"
187
187
  # for new record or "Update" for old record).
@@ -203,13 +203,13 @@ module Informant
203
203
  options.delete :colon
204
204
  options.delete :label_for
205
205
  options.delete :required
206
-
206
+
207
207
  text = @template.send(:h, text.blank?? method.to_s.humanize : text.to_s)
208
208
  text << ':'.html_safe if colon
209
209
  text << @template.content_tag(:span, "*", :class => "required") if required
210
210
  super
211
211
  end
212
-
212
+
213
213
  ##
214
214
  # Render a field set (HTML <fieldset>). Takes the legend (optional), an
215
215
  # options hash, and a block in which fields are rendered.
@@ -220,8 +220,8 @@ module Informant
220
220
  @template.capture(&block)
221
221
  end
222
222
  end
223
-
224
-
223
+
224
+
225
225
  private # ---------------------------------------------------------------
226
226
 
227
227
  ##
@@ -231,14 +231,14 @@ module Informant
231
231
 
232
232
  # Build new options hash for custom label options.
233
233
  label_options = options.reject{ |i,j| !@@custom_label_options.include? i }
234
-
234
+
235
235
  # Build new options hash for custom field options.
236
236
  field_options = options.reject{ |i,j| !@@custom_field_options.include? i }
237
237
 
238
238
  # Remove custom options from options hash so things like
239
239
  # <tt>include_blank</tt> aren't added as HTML attributes.
240
240
  options.reject!{ |i,j| @@custom_options.include? i }
241
-
241
+
242
242
  locals = {
243
243
  :element => yield,
244
244
  :label => label(method, field_options[:label], label_options),
@@ -249,30 +249,30 @@ module Informant
249
249
  }
250
250
  send("#{template}_template", locals).html_safe
251
251
  end
252
-
252
+
253
253
  ##
254
254
  # Render default field template.
255
255
  #
256
256
  def default_field_template(l = {})
257
257
  <<-END
258
258
  <div id="#{l[:div_id]}" class="field">
259
- #{l[:label]}<br />
259
+ #{l[:label]}<br />
260
260
  #{l[:element]}#{l[:decoration]}
261
261
  #{"<p class=\"field_description\">#{l[:description]}</p>" unless l[:description].blank?}
262
- </div>
263
- END
262
+ </div>
263
+ END
264
264
  end
265
-
265
+
266
266
  ##
267
267
  # Render check box field template.
268
268
  #
269
269
  def check_box_field_template(l = {})
270
270
  <<-END
271
271
  <div id="#{l[:div_id]}" class="field">
272
- #{l[:element]} #{l[:label]} #{l[:decoration]}<br />
273
- #{"<p class=\"field_description\">#{l[:description]}</p>" unless l[:description].blank?}
274
- </div>
275
- END
272
+ #{l[:element]} #{l[:label]} #{l[:decoration]}<br />
273
+ #{"<p class=\"field_description\">#{l[:description]}</p>" unless l[:description].blank?}
274
+ </div>
275
+ END
276
276
  end
277
277
 
278
278
  ##
@@ -283,7 +283,7 @@ module Informant
283
283
  def radio_button_choice_template(l = {})
284
284
  <<-END
285
285
  #{l[:element]} #{l[:label]}
286
- END
286
+ END
287
287
  end
288
288
 
289
289
  ##
@@ -299,11 +299,20 @@ module Informant
299
299
  def habtm_check_boxes_field_template(l = {})
300
300
  <<-END
301
301
  <div id="#{l[:div_id]}" class="field">
302
- #{l[:label]}<br />
303
- <div class="habtm_check_boxes">#{l[:element]}</div>#{l[:decoration]}
302
+ #{l[:label]}<br />
303
+ <div class="habtm_check_boxes">#{l[:element].join}</div>#{l[:decoration]}
304
304
  #{"<p class=\"field_description\">#{l[:description]}</p>" unless l[:description].blank?}
305
- </div>
306
- END
305
+ </div>
306
+ END
307
+ end
308
+
309
+ ##
310
+ # Render a single check box in a HABTM set.
311
+ #
312
+ def habtm_single_check_box_template(l = {})
313
+ <<-END
314
+ <div class="habtm_single_check_box"><input type="checkbox" name="#{l[:name]}" id="#{l[:id]}" value="#{l[:value]}" #{'checked="checked"' if l[:checked]}} /> #{l[:label]}</div>
315
+ END
307
316
  end
308
317
 
309
318
  ##
@@ -312,16 +321,16 @@ module Informant
312
321
  def submit_button_template(l = {})
313
322
  <<-END
314
323
  <div class="button">#{l[:element]}</div>
315
- END
324
+ END
316
325
  end
317
326
  end
318
327
 
319
-
328
+
320
329
  ##
321
330
  # Displays fields with no surrounding HTML containers.
322
331
  #
323
332
  class Simple < Standard
324
-
333
+
325
334
  private # ---------------------------------------------------------------
326
335
 
327
336
  ##
@@ -330,7 +339,7 @@ module Informant
330
339
  def default_field_template(l = {})
331
340
  "#{l[:element]}#{l[:decoration]}"
332
341
  end
333
-
342
+
334
343
  ##
335
344
  # Render check box field template.
336
345
  #
@@ -345,14 +354,14 @@ module Informant
345
354
  l[:element]
346
355
  end
347
356
  end
348
-
349
-
357
+
358
+
350
359
  ##
351
360
  # Displays fields in table rows: label in first column, field (with
352
361
  # description and decoration) in second.
353
362
  #
354
363
  class Table < Standard
355
-
364
+
356
365
  private # ---------------------------------------------------------------
357
366
 
358
367
  ##
@@ -361,13 +370,13 @@ module Informant
361
370
  def default_field_template(l = {})
362
371
  <<-END
363
372
  <tr id="#{l[:div_id]}" class="field">
364
- <td>#{l[:label]}</td>
373
+ <td>#{l[:label]}</td>
365
374
  <td>#{l[:element]}#{l[:decoration]}
366
375
  #{"<p class=\"field_description\">#{l[:description]}</p>" unless l[:description].blank?}</td>
367
- </tr>
368
- END
376
+ </tr>
377
+ END
369
378
  end
370
-
379
+
371
380
  ##
372
381
  # Render check box field template.
373
382
  #
@@ -381,10 +390,10 @@ module Informant
381
390
  def submit_button_template(l = {})
382
391
  <<-END
383
392
  <tr id="#{l[:div_id]}" class="field">
384
- <td></td>
393
+ <td></td>
385
394
  <td class="button">#{l[:element]}</td>
386
- </tr>
387
- END
395
+ </tr>
396
+ END
388
397
  end
389
398
  end
390
399
  end
data/test/test_helper.rb CHANGED
@@ -1,8 +1,9 @@
1
1
  require 'rubygems'
2
+ require 'test/unit'
2
3
  #require 'active_support'
3
4
  #require 'active_support/test_case'
4
5
  require 'action_controller'
5
6
  #require 'action_view'
6
7
  #require 'action_view/test_case'
7
- require 'test_help'
8
+ #require 'test_help'
8
9
  require 'informant'
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: informant
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 7
8
- - 1
9
- version: 0.7.1
4
+ prerelease:
5
+ version: 0.7.2
10
6
  platform: ruby
11
7
  authors:
12
8
  - Alex Reisner
@@ -14,19 +10,19 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-06-01 00:00:00 -04:00
13
+ date: 2011-04-11 00:00:00 -04:00
18
14
  default_executable:
19
15
  dependencies: []
20
16
 
21
17
  description: Informant is a full-featured form builder for Ruby on Rails which promotes a simple syntax that keeps your views clean. Everything about a field (label, description, error display, etc) is encapsulated in a single method call.
22
- email: alex@alexreisner.com
18
+ email:
19
+ - alex@alexreisner.com
23
20
  executables: []
24
21
 
25
22
  extensions: []
26
23
 
27
- extra_rdoc_files:
28
- - LICENSE
29
- - README.rdoc
24
+ extra_rdoc_files: []
25
+
30
26
  files:
31
27
  - .document
32
28
  - .gitignore
@@ -35,7 +31,6 @@ files:
35
31
  - README.rdoc
36
32
  - Rakefile
37
33
  - VERSION
38
- - informant.gemspec
39
34
  - lib/informant.rb
40
35
  - test/informant_test.rb
41
36
  - test/test_helper.rb
@@ -44,31 +39,28 @@ homepage: http://github.com/alexreisner/informant
44
39
  licenses: []
45
40
 
46
41
  post_install_message:
47
- rdoc_options:
48
- - --charset=UTF-8
42
+ rdoc_options: []
43
+
49
44
  require_paths:
50
45
  - lib
51
46
  required_ruby_version: !ruby/object:Gem::Requirement
47
+ none: false
52
48
  requirements:
53
49
  - - ">="
54
50
  - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
51
  version: "0"
58
52
  required_rubygems_version: !ruby/object:Gem::Requirement
53
+ none: false
59
54
  requirements:
60
55
  - - ">="
61
56
  - !ruby/object:Gem::Version
62
- segments:
63
- - 0
64
57
  version: "0"
65
58
  requirements: []
66
59
 
67
60
  rubyforge_project:
68
- rubygems_version: 1.3.6
61
+ rubygems_version: 1.6.2
69
62
  signing_key:
70
63
  specification_version: 3
71
- summary: A full-featured form builder for Rails.
72
- test_files:
73
- - test/test_helper.rb
74
- - test/informant_test.rb
64
+ summary: Form-building library for Rails.
65
+ test_files: []
66
+
data/informant.gemspec DELETED
@@ -1,52 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{informant}
8
- s.version = "0.7.1"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Alex Reisner"]
12
- s.date = %q{2010-06-01}
13
- s.description = %q{Informant is a full-featured form builder for Ruby on Rails which promotes a simple syntax that keeps your views clean. Everything about a field (label, description, error display, etc) is encapsulated in a single method call.}
14
- s.email = %q{alex@alexreisner.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.rdoc"
18
- ]
19
- s.files = [
20
- ".document",
21
- ".gitignore",
22
- "CHANGELOG.rdoc",
23
- "LICENSE",
24
- "README.rdoc",
25
- "Rakefile",
26
- "VERSION",
27
- "informant.gemspec",
28
- "lib/informant.rb",
29
- "test/informant_test.rb",
30
- "test/test_helper.rb"
31
- ]
32
- s.homepage = %q{http://github.com/alexreisner/informant}
33
- s.rdoc_options = ["--charset=UTF-8"]
34
- s.require_paths = ["lib"]
35
- s.rubygems_version = %q{1.3.6}
36
- s.summary = %q{A full-featured form builder for Rails.}
37
- s.test_files = [
38
- "test/test_helper.rb",
39
- "test/informant_test.rb"
40
- ]
41
-
42
- if s.respond_to? :specification_version then
43
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
44
- s.specification_version = 3
45
-
46
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
47
- else
48
- end
49
- else
50
- end
51
- end
52
-