king_views 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/README.rdoc +84 -0
  3. data/Rakefile +31 -0
  4. data/VERSION +1 -0
  5. data/init.rb +3 -0
  6. data/king_form/MIT-LICENSE +20 -0
  7. data/king_form/README.rdoc +64 -0
  8. data/king_form/Rakefile +23 -0
  9. data/king_form/init.rb +1 -0
  10. data/king_form/lib/king_form.rb +19 -0
  11. data/king_form/lib/king_form/builder/base.rb +238 -0
  12. data/king_form/lib/king_form/builder/definition_list.rb +119 -0
  13. data/king_form/lib/king_form/builder/form_fields.rb +333 -0
  14. data/king_form/lib/king_form/builder/form_fields_overrides.rb +146 -0
  15. data/king_form/lib/king_form/builder/labeled.rb +116 -0
  16. data/king_form/lib/king_form/helper.rb +97 -0
  17. data/king_form/lib/king_form/nested_form_helper.rb +61 -0
  18. data/king_form/lib/king_form/overrides.rb +25 -0
  19. data/king_form/tasks/king_forms_tasks.rake +4 -0
  20. data/king_form/test/king_forms_test.rb +8 -0
  21. data/king_form/test/test_helper.rb +3 -0
  22. data/king_format/MIT-LICENSE +20 -0
  23. data/king_format/README.rdoc +20 -0
  24. data/king_format/Rakefile +23 -0
  25. data/king_format/init.rb +1 -0
  26. data/king_format/lib/helpers/date_helper.rb +25 -0
  27. data/king_format/lib/helpers/formatting_helper.rb +108 -0
  28. data/king_format/lib/helpers/money_helper.rb +63 -0
  29. data/king_format/lib/king_format.rb +14 -0
  30. data/king_format/lib/model_mixins/has_date_fields.rb +42 -0
  31. data/king_format/lib/model_mixins/has_money_fields.rb +42 -0
  32. data/king_format/lib/model_mixins/has_percent_fields.rb +34 -0
  33. data/king_format/tasks/king_format_tasks.rake +4 -0
  34. data/king_format/test/king_format_test.rb +8 -0
  35. data/king_format/test/test_helper.rb +3 -0
  36. data/king_list/MIT-LICENSE +20 -0
  37. data/king_list/README.rdoc +21 -0
  38. data/king_list/Rakefile +23 -0
  39. data/king_list/init.rb +1 -0
  40. data/king_list/lib/king_list.rb +18 -0
  41. data/king_list/lib/king_list/app_helper.rb +30 -0
  42. data/king_list/lib/king_list/builder/show.rb +71 -0
  43. data/king_list/lib/king_list/builder/table.rb +166 -0
  44. data/king_list/lib/king_list/list_helper.rb +329 -0
  45. data/king_list/lib/king_list/overrides.rb +6 -0
  46. data/king_list/tasks/king_list_tasks.rake +4 -0
  47. data/king_list/test/king_list_test.rb +8 -0
  48. data/king_list/test/test_helper.rb +3 -0
  49. data/king_views.gemspec +85 -0
  50. metadata +110 -0
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 Georg Leciejewski
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,84 @@
1
+ = KingViews
2
+
3
+ This is the new offical home of KingViews(forked from schorsch)
4
+
5
+ KingViews where extracted from SalesKing(https://www.SalesKing.eu) and consist
6
+ of three different view helpers, KingForm( dl || labeled forms, enhanced inputs ),
7
+ KingList( dl, tables ) and KingFormat( date, money, percent )
8
+
9
+ This stuff is not optimized(yet) to run seamlessly within any rails project.
10
+ Fixes for rails 2.3.5 and of course 3.0 are needed. Some refacturing and of
11
+ course testing(still stuck in SalesKing) should be done, leaving space for forks.
12
+
13
+ == Install
14
+
15
+ You must use HAML for your views .. the cure for erb eye cancer
16
+
17
+ gem install king_views
18
+
19
+
20
+ == KingForm
21
+
22
+ Clean up your forms with helpers in rails haml views, with support for:
23
+ * dl or labeled forms
24
+ * shorter syntax for inputs
25
+ * fieldset support (section)
26
+ * labels auto translated when present in I18n or Gettext
27
+ * info-text for auto translated info after each input
28
+ * bundle a couple of inputs under one label or dt incl. css class based counter for the wrapper
29
+ * based on rails action view helpers so all parameters are passed through(nearly all) to the original versions
30
+
31
+ === Example
32
+ - dl_form_for @payment, :url => 'a path', :html => { :method => :post } do |f|
33
+ -f.section do
34
+ = f.hidden :lock_version
35
+ = f.text :amount, :class => 'required', :value=> 'a custom val'
36
+ = f.date :date, :title => t(:'from'), :info=>'Help me'
37
+ = f.selection :payment_method
38
+ - f.bundle 'status' do
39
+ = f.radio :new_status, :closed, :checked=>true
40
+ %span=t(:'status.closed')
41
+ = f.radio :new_status, :open
42
+ %span= t(:'activerecord.attributes.document.enum.status.open')
43
+ -f.actions do
44
+ = f.submit t(:'form.save')
45
+ = secondary_link_to t(:'link.cancel'), parent_path
46
+
47
+ == KingList
48
+
49
+ Use KingList for an easy markup inside your lists and detail views. Its not as
50
+ extensive as KingForm and only provides the following:
51
+
52
+ * easy to use tables for listings
53
+ * dl-helper for detail views
54
+ * action_icons & action_buttons(forms) for css enabled icon markup
55
+
56
+ === Example
57
+ # Definition list for detail views
58
+ - dl_for @invoice do |f|
59
+ = f.show :number
60
+ = f.show :date # auto-formated date field
61
+ = f.show :total # auto-formated money field
62
+
63
+ # table with header-klick sorting disabled
64
+ - table_for(@payments,{:sorting => false} ) do |t, payment|
65
+ - t.action_column do
66
+ = action_button 'delete', {:url=> 'some-path', :title => t(:'link.delete'), :method => :delete, :class=>'delete'}
67
+ = t.column :date
68
+ = t.column :amount, :td_options => {opt=>val}
69
+
70
+ == KingFormat
71
+ Provides a semi-automatic formatting of date, money, percent fields. The field
72
+ types are defined inside a model. And the view helpers will show a nice output.
73
+
74
+ === Example:
75
+
76
+ #define date fields you model definition
77
+ class Invoice < ActiveRecord::Base
78
+ has_date_fields :date, :valid_until
79
+ has_money_fields :total, :price
80
+ end
81
+ # see above for usage in views
82
+
83
+ == License
84
+ Copyright (c) 2009 Georg Leciejewski, released under the MIT-LICENSE
@@ -0,0 +1,31 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/rdoctask'
4
+ require 'spec/rake/spectask'
5
+
6
+ begin
7
+ require 'jeweler'
8
+ Jeweler::Tasks.new do |gem|
9
+ gem.name = "king_views"
10
+ gem.summary = %Q{Ultraclean haml views with list and forms helpers for rails }
11
+ gem.description = %Q{Clean up your Forms using king_form for dl or labeled forms. Use king_list for an easy markup of tables in your lists and dl-enabled listings in your detail views. }
12
+ gem.email = "gl@salesking.eu"
13
+ gem.homepage = "http://github.com/salesking/king_views"
14
+ gem.authors = ["Georg Leciejewski"]
15
+ #gem.add_development_dependency "rspec", ">= 0"
16
+ end
17
+ Jeweler::GemcutterTasks.new
18
+ rescue LoadError
19
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
20
+ end
21
+
22
+ desc 'Generate king_views documentation.'
23
+ Rake::RDocTask.new(:rdoc) do |rdoc|
24
+ rdoc.rdoc_dir = 'rdoc'
25
+ rdoc.title = 'KingViews'
26
+ rdoc.options << '--line-numbers' << '--inline-source'
27
+ rdoc.rdoc_files.include('README')
28
+ rdoc.rdoc_files.include('king_form/lib/**/*.rb')
29
+ rdoc.rdoc_files.include('king_format/lib/**/*.rb')
30
+ rdoc.rdoc_files.include('king_list/lib/**/*.rb')
31
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.0.0
data/init.rb ADDED
@@ -0,0 +1,3 @@
1
+ require "#{File.dirname(__FILE__)}/king_format/init"
2
+ require "#{File.dirname(__FILE__)}/king_list/init"
3
+ require "#{File.dirname(__FILE__)}/king_form/init"
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 [name of plugin creator]
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,64 @@
1
+ = KingForm
2
+
3
+ Writing forms is is an enerving repetitive task. It already got easier through rails
4
+ but still you have to huddle with a lot of html, erb markup and options around your fields.
5
+
6
+ King forms internals are based on haml, rails' form helpers, I18n translations
7
+ and a simplified syntax for fieldnames.
8
+
9
+ Additionally it includes a nested_form_helper to easiely show related models in a form.
10
+
11
+ == Example KingForm
12
+ ruby code
13
+ - dl_form_for( current_object, :url => object_url, :html => { :id => 'productForm'} ) do |f|
14
+ - f.section 'Name & Number' do
15
+ = f.hidden :lock_version
16
+ = f.text :name, :class => 'required'
17
+ = f.text :number
18
+ = f.selection :category
19
+ = f.selection :quantity_unit, :choices => ['some', 'choices']
20
+ - f.section '' do
21
+ = f.selection :tax, :choices => ['tax1', 'tax2'], :include_blank => false
22
+ = f.text :price, :class => 'required'
23
+ - f.actions do
24
+ = f.submit t(:'form.save')
25
+ = link_to t(:'link.cancel'), object_path
26
+
27
+ == Example Nested Forms
28
+
29
+ The first thing you need to do is enable attributes on the association in the model.
30
+ ruby code
31
+ class Project < ActiveRecord::Base
32
+ has_many :tasks
33
+ accepts_nested_attributes_for :tasks
34
+ end
35
+
36
+ The partial for the nested object(one Task) should have the name of the associated element's type( or the partial to use)
37
+
38
+ ## projects/_task.html.erb
39
+ <div class="task">
40
+ <label>Title</label>
41
+ <%= f.text_field :title %>
42
+ </div>
43
+
44
+ In the parent element's form (Project), call the render_nested_form method, with the collection of
45
+ elements you'd like to render as the first argument.
46
+
47
+ ## projects/_form.html.erb
48
+ <%= f.render_nested_form(@project.tasks) %>
49
+
50
+ That call will render the partial named _task.html.erb with each element in the supplied collection of tasks, wrapping
51
+ the partial in a form builder (fields_for) with all the necessary arguments to produce a hash that will satisfy the
52
+ tasks_attributes method(provided by Rails new accepts_nested_attributes_for).
53
+
54
+ === Options
55
+ See comments in lib/nested_form_helper for full reference of options.
56
+ You may want to add a few blank tasks to the bottom of your form; no need to do that in the controller anymore.
57
+
58
+ <%= f.render_nested_form(@project.tasks, :new => 3, :partial=>'some_partial', :locals=>..) %>
59
+
60
+
61
+
62
+ This plugin was extracted from SalesKing where it was developed by Georg Ledermann
63
+ and Georg Leciejewski
64
+ Copyright (c) 2009 Georg Leciejewski, released under the MIT license
@@ -0,0 +1,23 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+
5
+ desc 'Default: run unit tests.'
6
+ task :default => :test
7
+
8
+ desc 'Test the king_forms plugin.'
9
+ Rake::TestTask.new(:test) do |t|
10
+ t.libs << 'lib'
11
+ t.libs << 'test'
12
+ t.pattern = 'test/**/*_test.rb'
13
+ t.verbose = true
14
+ end
15
+
16
+ desc 'Generate documentation for the king_forms plugin.'
17
+ Rake::RDocTask.new(:rdoc) do |rdoc|
18
+ rdoc.rdoc_dir = 'rdoc'
19
+ rdoc.title = 'King-forms'
20
+ rdoc.options << '--line-numbers' << '--inline-source'
21
+ rdoc.rdoc_files.include('README')
22
+ rdoc.rdoc_files.include('lib/**/*.rb')
23
+ end
@@ -0,0 +1 @@
1
+ require "#{File.dirname(__FILE__)}/lib/king_form"
@@ -0,0 +1,19 @@
1
+ require "#{File.dirname(__FILE__)}/king_form/helper"
2
+ require "#{File.dirname(__FILE__)}/king_form/overrides"
3
+ require "#{File.dirname(__FILE__)}/king_form/builder/form_fields_overrides"
4
+ require "#{File.dirname(__FILE__)}/king_form/builder/form_fields"
5
+ require "#{File.dirname(__FILE__)}/king_form/builder/base"
6
+ require "#{File.dirname(__FILE__)}/king_form/builder/definition_list"
7
+ require "#{File.dirname(__FILE__)}/king_form/builder/labeled"
8
+ require "#{File.dirname(__FILE__)}/king_form/nested_form_helper"
9
+
10
+ # You need:
11
+ # - haml
12
+ # - mutlilang via I18n or gettext ??
13
+ # -switch to allow default rails helper
14
+
15
+ # extend AC with our helper module
16
+ ActionController::Base.helper KingForm::Helper
17
+
18
+ # include the nested_form helper method on the very top of FormBuilder
19
+ ActionView::Helpers::FormBuilder.class_eval { include KingForm::NestedFormHelper }
@@ -0,0 +1,238 @@
1
+ module KingForm
2
+ module Builder
3
+ # Base Form Helper Class overrides most of rails build in form / field methods.
4
+ # This class is used in conjunction with haml and makes your templates ultra clean.
5
+ #
6
+ # To further specify the resulting html for form fields and their wrappers,
7
+ # subclass KingForm::Builder::Base.
8
+ #
9
+ # Subclasses must define the following methods:
10
+ #
11
+ # ==== def section
12
+ # Definition of a section inside a form. A section is a wrapper around fields
13
+ # which belong together. The topmost element should be(most of the time) a fieldset
14
+ # followed by a legend and the openeing definition list.
15
+ # fieldset-> legend -> div -> ....
16
+ # fieldset-> legend -> dl -> ...
17
+ # See child class Labeled and DefinitionList for examples.
18
+ #
19
+ # ==== def tag_wrapper
20
+ # Wrapping/display of field descriptions(labels) and input tags
21
+ # => wrapped with div. actually no wrapping(see above):
22
+ # fieldset-> div -> label -> input
23
+ # => wrapped with dt / dd
24
+ # fieldset-> dl -> dd -> dt -> input
25
+ #
26
+ #
27
+ # ==== def bundle
28
+ # handle fields which are displayed toghether inside a wrapper
29
+ class Base < ActionView::Helpers::FormBuilder
30
+ include KingForm::Builder::FormFields
31
+ include KingForm::Builder::FormFieldsOverrides
32
+ attr_accessor :no_wrap
33
+ def initialize(object_name, object, template, options, proc)
34
+ # Store builder configuration data (only used by "render_associated_form")
35
+ @config = options.delete(:config) || {}
36
+
37
+ super(object_name, object, template, options, proc)
38
+ end
39
+
40
+ # Create a section(fieldset) within a form
41
+ # A section is a group of related object information with name/value pairs,
42
+ # like all dates of an object or the users name fields(last/first/title/nick).
43
+ def section(title = nil, options = {}, &block)
44
+ #must be overwritten in inerit classes
45
+ end
46
+
47
+ # Show multiple inputs as bundle
48
+ def bundle(title = nil, options = {}, &block)
49
+ #must be redefined in inerit class
50
+ end
51
+
52
+ # For using with nested forms with associated records => contact => addresses
53
+ # Another Builder instance will be created. Make sure it's also a DefinitionsListsFormBuilder
54
+ # and configuration data is available for the new created instance
55
+ def render_nested_form(associated, opts = {})
56
+ opts[:fields_for] = { :builder => KingForm::Builder::DefinitionList, :config => @config }
57
+ super(associated, opts)
58
+ end
59
+
60
+
61
+ # wraps a list of action links/buttons in a td od div
62
+ # those wrappers can then be formated with css td.actions
63
+ # also see #ListHelper
64
+ #
65
+ # ===Example haml
66
+ # = f.actions do
67
+ # = link_to my_actions
68
+ #
69
+ # <div class="actions">my actions</div>
70
+ # <td class="actions">my actions</td>
71
+ #
72
+ def actions(options = {}, &block)
73
+ options[:class] ||= 'actions'
74
+ if @config[:table]
75
+ @template.haml_tag :td, @template.capture_haml(&block), options
76
+ else
77
+ @template.haml_tag :div, @template.capture_haml(&block), options
78
+ end
79
+ end
80
+
81
+ #build a table
82
+ def table(title, options = {}, &block)
83
+ # Capture the block (with analyzing the header titles)
84
+ @config[:table] = true
85
+ @config[:column_header] = []
86
+ @config[:row_number] = 0
87
+ content = @template.capture_haml(&block)
88
+
89
+ # Now build the whole table tag
90
+ result = @template.capture_haml do
91
+ @template.haml_tag :table, options.reverse_merge({ :summary => title }) do
92
+ @template.haml_tag :thead do
93
+ @template.haml_tag :tr do
94
+ @config[:column_header].each do |c|
95
+ c[:options][:class] ||= ''
96
+ if c == @config[:column_header].first
97
+ c[:options][:class] << ' first'
98
+ elsif c == @config[:column_header].last
99
+ c[:options][:class] << ' last'
100
+ end
101
+
102
+ @template.haml_tag :th, c[:title], c[:options]
103
+ end
104
+ end
105
+ end
106
+ @template.haml_tag :tbody, content
107
+ end
108
+ end
109
+ @config[:table] = false
110
+
111
+ return result
112
+ end
113
+
114
+ # Build a single table row, only needed to be be able to render the table
115
+ # headers(th)
116
+ def table_row(&block)
117
+ @config[:row_number] += 1
118
+ @template.concat "<tr> #{@template.capture(&block)}</tr>"
119
+ end
120
+
121
+ private
122
+ # returns the current object
123
+ def current_object
124
+ # check for fields made with attribute_fu
125
+ if @object_name.to_s.match(/\[\w+_attributes\]/)
126
+ #field was constructed via attribute_fu: user[address_attributes][atLE1aPLKr3j9zabTJhScS]
127
+ @object
128
+ else
129
+ # Instance-Variable of the templates
130
+ @template.instance_variable_get("@#{@object_name}")
131
+ end
132
+ end
133
+
134
+ # returns the class of the current object
135
+ def current_class
136
+ current_object.class
137
+ end
138
+
139
+ # returns the value of an attribute belonging to the current object
140
+ def current_value(fieldname)
141
+ if current_object.is_a?(Hash)
142
+ current_object[fieldname]
143
+ else
144
+ current_object.send(fieldname) rescue nil
145
+ end
146
+ end
147
+
148
+
149
+ # Shortcut for using "content_tag", which exists in the context of the template
150
+ def content_tag(*args)
151
+ @template.content_tag(*args)
152
+ end
153
+
154
+ # Translate acts_as_enum dropdown field values either with I18n
155
+ # A key must be lokated in the language file under:
156
+ # "activerecord.attributes.client.enum.sending_methods.fax"
157
+ # "activerecord.attributes.client.enum.sending_methods.email"
158
+ # ==== Parameter
159
+ # fieldname<String,Symbol>:: The fieldname in the model which holds enum values from acts_as_enum plugin
160
+ # === Returns
161
+ # <Hash{'translated fldname'=>'value'}>::
162
+ def enum_values(fieldname)
163
+ # Check if there is a const in the class defined by acts_as_enum
164
+ return unless current_class.const_defined?(fieldname.to_s.upcase)
165
+ # Get Array with the values from this constant
166
+ values = current_class.const_get(fieldname.to_s.upcase)
167
+ # values are symbols as defined by "acts_as_enum"
168
+ if values && values.first.is_a?(Symbol)
169
+ values_with_translated_keys = {}
170
+ values.each do |value|
171
+ key = current_class.human_attribute_name("enum.#{fieldname.to_s}.#{value.to_s}")
172
+ values_with_translated_keys[key] = value.to_s
173
+ end
174
+ return values_with_translated_keys
175
+ else
176
+ #values are not symbols (probably not coming from acts_as_enum) =>return them unchanged
177
+ return values
178
+ end
179
+ end
180
+
181
+ # add titles to Input-Tag and embed/wrap in dt/dd
182
+ # options: Hash with following keys
183
+ # :dt => options for dt
184
+ # :dd => options for dd
185
+ def tag_wrapper(fieldname_or_title, tags, options = {})
186
+ #overwrite in inherit class !!!
187
+ end
188
+
189
+ # Build a fields title/label with translation
190
+ # takes the class and fieldname (like GetText ActiveRecord-Parser )
191
+ # ==== Parameter
192
+ # fieldname_or_title<String,Symbol>:: A string is directly returned.
193
+ # A Symbol is beeing looked up in I18n translation inside the models attribute namespace:
194
+ # => class.human_attribute_name(fieldname_or_title.to_s)
195
+ def build_title(fieldname_or_title)
196
+ if fieldname_or_title.is_a?(Symbol)
197
+ #i18n namespace under activerecord.attributes.model.attr_name
198
+ current_class.human_attribute_name(fieldname_or_title.to_s) if current_class.respond_to?(:human_attribute_name)
199
+ else
200
+ fieldname_or_title
201
+ end
202
+ end
203
+
204
+ # Build span-tag with an info text after a field
205
+ # ==== Parameter
206
+ # fieldname_or_text<String/Symbol>:: static text value or a fieldname as symbol.
207
+ # If a symbol is given the translated text is taken from I18n translation file
208
+ def info_tag(fieldname_or_text)
209
+ case fieldname_or_text
210
+ when String #just use the plain string
211
+ value = fieldname_or_text
212
+ when Symbol # lookup the the field in i18n under activerecord.attributes.class.fieldname_info
213
+ trans = I18n.translate("#{current_class.name.underscore}.#{fieldname_or_text.to_s}_info",
214
+ :default => '',
215
+ :scope => [:activerecord, :attributes])
216
+ value = trans.blank? ? nil : trans
217
+ else
218
+ raise ArgumentError
219
+ end
220
+
221
+ value ? content_tag(:div, value, :class => 'info') : ''
222
+ end
223
+
224
+
225
+ # Create the id of a field
226
+ # ==== Parameter
227
+ # name<String>::The name of the id
228
+ def build_id(name)
229
+ if current_object.blank?
230
+ name
231
+ else
232
+ "#{@object_name}_#{name}"
233
+ end
234
+ end
235
+
236
+ end #Class Base
237
+ end#Module Builder
238
+ end#Module KingForm