king_views 1.1.6 → 1.2.0

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 (61) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/Gemfile +19 -0
  4. data/Rakefile +5 -28
  5. data/king_form/lib/king_form/builder/base.rb +23 -9
  6. data/king_form/lib/king_form/builder/definition_list.rb +8 -4
  7. data/king_form/lib/king_form/builder/form_fields.rb +3 -2
  8. data/king_form/lib/king_form/builder/form_fields_overrides.rb +5 -5
  9. data/king_form/lib/king_form/builder/labeled.rb +3 -3
  10. data/king_form/lib/king_form/helper.rb +21 -4
  11. data/king_form/lib/king_form/nested_form_helper.rb +9 -9
  12. data/king_form/lib/king_form/overrides.rb +13 -13
  13. data/king_format/lib/helpers/formatting_helper.rb +21 -16
  14. data/king_format/lib/helpers/money_helper.rb +6 -6
  15. data/king_format/lib/king_format.rb +2 -0
  16. data/king_format/lib/model_mixins/has_date_fields.rb +6 -2
  17. data/king_format/lib/model_mixins/has_money_fields.rb +6 -2
  18. data/king_format/lib/model_mixins/has_percent_fields.rb +5 -1
  19. data/king_list/Rakefile +2 -13
  20. data/king_list/lib/king_list/builder/show.rb +9 -6
  21. data/king_list/lib/king_list/builder/table.rb +29 -72
  22. data/king_list/lib/king_list/list_helper.rb +60 -63
  23. data/king_views.gemspec +24 -71
  24. data/spec/king_list_spec.rb +19 -0
  25. data/spec/rails_app/Rakefile +7 -0
  26. data/spec/rails_app/app/controllers/application_controller.rb +4 -0
  27. data/spec/rails_app/app/controllers/posts_controller.rb +6 -0
  28. data/spec/rails_app/app/helpers/application_helper.rb +2 -0
  29. data/spec/rails_app/app/models/comment.rb +3 -0
  30. data/spec/rails_app/app/models/person.rb +3 -0
  31. data/spec/rails_app/app/models/post.rb +4 -0
  32. data/spec/rails_app/app/views/layouts/application.html.erb +14 -0
  33. data/spec/rails_app/app/views/posts/index.haml +23 -0
  34. data/spec/rails_app/config.ru +4 -0
  35. data/spec/rails_app/config/application.rb +44 -0
  36. data/spec/rails_app/config/boot.rb +10 -0
  37. data/spec/rails_app/config/database.yml +22 -0
  38. data/spec/rails_app/config/environment.rb +5 -0
  39. data/spec/rails_app/config/environments/development.rb +26 -0
  40. data/spec/rails_app/config/environments/production.rb +49 -0
  41. data/spec/rails_app/config/environments/test.rb +35 -0
  42. data/spec/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  43. data/spec/rails_app/config/initializers/inflections.rb +10 -0
  44. data/spec/rails_app/config/initializers/mime_types.rb +5 -0
  45. data/spec/rails_app/config/initializers/secret_token.rb +7 -0
  46. data/spec/rails_app/config/initializers/session_store.rb +8 -0
  47. data/spec/rails_app/config/locales/en.yml +5 -0
  48. data/spec/rails_app/config/routes.rb +60 -0
  49. data/spec/rails_app/db/migrate/20110306212208_create_posts.rb +14 -0
  50. data/spec/rails_app/db/migrate/20110306212250_create_comments.rb +15 -0
  51. data/spec/rails_app/db/migrate/20110420222224_create_people.rb +15 -0
  52. data/spec/rails_app/db/schema.rb +30 -0
  53. data/spec/rails_app/public/404.html +26 -0
  54. data/spec/rails_app/public/422.html +26 -0
  55. data/spec/rails_app/public/500.html +26 -0
  56. data/spec/rails_app/public/favicon.ico +0 -0
  57. data/spec/rails_app/script/rails +6 -0
  58. data/spec/spec_helper.rb +65 -0
  59. metadata +238 -47
  60. data/king_list/test/king_list_test.rb +0 -9
  61. data/king_list/test/test_helper.rb +0 -3
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7528c9f76a2b366d8a4f42001c70b7a8566cf4b2
4
+ data.tar.gz: cf91b3cbe24369196457f2e92b53983437ea538d
5
+ SHA512:
6
+ metadata.gz: e8de0b59e7dabc1aef47faec45155040c9ce46f8f9e44b301a4423a3e31582ebc866b5b8906d8e3b50909800aeadb3ebd42923c41e3773a411f9468568279d31
7
+ data.tar.gz: f601ef0eb413ce869aed79f58fa77a3fa7f70aedc7ea438886be734dd81f26387ae95913802e12e4b024dc2ca2101c5b36a642535afd8169860cf2543b00a255
@@ -0,0 +1,23 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+ ## PROJECT::GENERAL
16
+ rdoc
17
+ pkg
18
+ /.idea/
19
+ Gemfile.lock
20
+ tmp/
21
+ log/
22
+ vendor/
23
+ test.sqlite3
data/Gemfile ADDED
@@ -0,0 +1,19 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+
4
+ #
5
+ # group :development, :test do
6
+ # gem 'rails', '>= 3.0.0'
7
+ # gem "haml"
8
+ # gem "sqlite3-ruby", :require => "sqlite3"
9
+ # gem 'jeweler', '>= 1.5.2'
10
+ # gem 'rake'
11
+ # gem 'tzinfo'
12
+ # gem 'rdoc'
13
+ # gem 'rspec'
14
+ # gem "rspec-rails"
15
+ # # For debugging under ruby 1.9 special gems are needed
16
+ # # gem 'ruby-debug19', :platform => :mri
17
+ # # gem 'ruby-debug-base19', '>=0.11.26'
18
+ # # gem 'linecache19', '>=0.5.13'
19
+ # end
data/Rakefile CHANGED
@@ -1,31 +1,8 @@
1
- require 'rubygems'
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
2
3
  require 'rake'
3
- require 'rdoc/task'
4
4
  require 'rspec/core/rake_task'
5
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
6
+ RSpec::Core::RakeTask.new('spec')
7
+ desc 'Default: run specs.'
8
+ task :default => :spec
@@ -57,7 +57,7 @@ module KingForm
57
57
  super(associated, opts)
58
58
  end
59
59
 
60
-
60
+
61
61
  # wraps a list of action links/buttons in a td od div
62
62
  # those wrappers can then be formated with css td.actions
63
63
  # also see #ListHelper
@@ -112,7 +112,7 @@ module KingForm
112
112
  end
113
113
 
114
114
  # Build a single table row, only needed to be be able to render the table
115
- # headers(th)
115
+ # headers(th)
116
116
  def table_row(&block)
117
117
  @config[:row_number] += 1
118
118
  @template.concat "<tr> #{@template.capture(&block)}</tr>"
@@ -168,7 +168,7 @@ module KingForm
168
168
  if values && values.first.is_a?(Symbol)
169
169
  values_with_translated_keys = {}
170
170
  values.each do |value|
171
- key = current_class.human_attribute_name("enum.#{fieldname.to_s}.#{value.to_s}")
171
+ key = translate_namespaced_enum_key(current_class, fieldname, value)
172
172
  values_with_translated_keys[key] = value.to_s
173
173
  end
174
174
  return values_with_translated_keys
@@ -178,6 +178,17 @@ module KingForm
178
178
  end
179
179
  end
180
180
 
181
+ # translation_key for fieldname
182
+ # replaces current_class.human_attribute_name("enum.#{fieldname.to_s}.#{value.to_s}")
183
+ # as `human_attribute_name` changed the way how "."'s are interpreted in 3.2.x (now as namespaces)
184
+ def translate_namespaced_enum_key(klass, field, value)
185
+ defaults = klass.lookup_ancestors.map do |_klass|
186
+ :"#{klass.i18n_scope}.attributes.#{_klass.model_name.i18n_key}.enum.#{field.to_s}.#{value.to_s}"
187
+ end
188
+
189
+ I18n.translate(default: defaults)
190
+ end
191
+
181
192
  # add titles to Input-Tag and embed/wrap in dt/dd
182
193
  # options: Hash with following keys
183
194
  # :dt => options for dt
@@ -199,7 +210,7 @@ module KingForm
199
210
  else
200
211
  fieldname_or_title
201
212
  end
202
- end
213
+ end
203
214
 
204
215
  # Build span-tag with an info text after a field
205
216
  # ==== Parameter
@@ -210,18 +221,21 @@ module KingForm
210
221
  when String #just use the plain string
211
222
  value = fieldname_or_text
212
223
  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 => '',
224
+ key = "#{current_class.name.underscore}.#{fieldname_or_text.to_s}_info"
225
+ trans = I18n.translate("#{key}_html",
226
+ :default => I18n.translate(key,
227
+ :default => '',
228
+ :scope => [:activerecord, :attributes]),
215
229
  :scope => [:activerecord, :attributes])
216
230
  value = trans.blank? ? nil : trans
217
231
  else
218
232
  raise ArgumentError
219
233
  end
220
234
 
221
- value ? content_tag(:div, value, :class => 'info') : ''
235
+ value ? content_tag(:div, value.html_safe, :class => 'info').html_safe : ''
222
236
  end
223
237
 
224
-
238
+
225
239
  # Create the id of a field
226
240
  # ==== Parameter
227
241
  # name<String>::The name of the id
@@ -235,4 +249,4 @@ module KingForm
235
249
 
236
250
  end #Class Base
237
251
  end#Module Builder
238
- end#Module KingForm
252
+ end#Module KingForm
@@ -66,7 +66,7 @@ module KingForm
66
66
  #
67
67
  # ==== Parameter
68
68
  # fieldname_or_title<Symbol, String>:: The fieldname to be used as the title in dt
69
- # tags<String>:: a bunch of html/haml tags
69
+ # tags<String>:: a bunch of html/haml tags
70
70
  # options<Hash{Symbol=>String}>: Hash with following keys
71
71
  # ==== Options:
72
72
  # :dt => options hash for dt
@@ -85,7 +85,7 @@ module KingForm
85
85
  @template.haml_tag(:td, tags.to_s, options)
86
86
  end
87
87
  else #wrap or no wrap
88
- @no_wrap ? tags : dt_tag(fieldname_or_title, options[:dt]) + dd_tag(tags.to_s, options[:dd])
88
+ (@no_wrap ? tags : dt_tag(fieldname_or_title, options[:dt]) + dd_tag(tags.to_s, options[:dd])).html_safe
89
89
  end
90
90
  end
91
91
 
@@ -100,7 +100,11 @@ module KingForm
100
100
  @bundle_counter = 0
101
101
  tags = @template.capture(&block)
102
102
  @config[:bundle] = false
103
- @template.concat( @config[:table] ? tag_wrapper(title, tags) : tag_wrapper(title, tags, :dt => options, :dd => { :class => "elements_#{@bundle_counter}" }) )
103
+ if @config[:table]
104
+ tag_wrapper(title, tags)
105
+ else
106
+ tag_wrapper(title, tags, :dt => options, :dd => { :class => "elements_#{@bundle_counter}" })
107
+ end
104
108
  end
105
109
 
106
110
  # The definition type dt tag
@@ -116,4 +120,4 @@ module KingForm
116
120
 
117
121
  end
118
122
  end
119
- end
123
+ end
@@ -154,6 +154,7 @@ module KingForm
154
154
  options[:include_blank] = true unless options.has_key?(:include_blank)
155
155
  options[:selected] ||= value.is_a?(Array) ? value : value.to_s
156
156
 
157
+ html_options[:'data-placeholder'] ||= title
157
158
  # Got an AR object so full automatic contruction should work
158
159
  if current_object.is_a?(ActiveRecord::Base) && fieldname.is_a?(Symbol)
159
160
  # try to sort by key f.ex. when transl. enum_fields
@@ -219,7 +220,7 @@ module KingForm
219
220
  select_options << "</optgroup>"
220
221
  end
221
222
  end
222
- tag_wrapper title, select_tag(fieldname, select_options, options)
223
+ tag_wrapper title, select_tag(fieldname, select_options.html_safe, options)
223
224
  end
224
225
 
225
226
  def time_zone_selection(fieldname, options = {}, html_options = {})
@@ -281,4 +282,4 @@ module KingForm
281
282
 
282
283
  end
283
284
  end
284
- end
285
+ end
@@ -16,9 +16,9 @@ module KingForm
16
16
  super(method, opts) + info_tag(info_text || method)
17
17
  end
18
18
 
19
- def check_box(method, opts = {})
19
+ def check_box(method, opts = {}, checked_value = "1", unchecked_value = "0")
20
20
  info_text = opts.delete(:info)
21
- super(method, opts) + info_tag(info_text || method)
21
+ super(method, opts, checked_value, unchecked_value) + info_tag(info_text || method)
22
22
  end
23
23
 
24
24
  def radio_button(method, tag_value, opts = {})
@@ -53,7 +53,7 @@ module KingForm
53
53
  name, infos, opts = build_id_name_info(name, opts)
54
54
  @template.text_field_tag(name, value, opts) + infos
55
55
  end
56
-
56
+
57
57
  # Create a hidden field tag and construct its fieldname (object[name]) from
58
58
  # the current object
59
59
  # When the name is beeing passed in as string its just taken like it is
@@ -132,7 +132,7 @@ module KingForm
132
132
  # build info tag, cause info_tag(:symbol) is looking into I18n transl
133
133
  infos = info_tag( opts.delete(:info) || name)
134
134
  #now set real name as string
135
- name = "#{@object_name}[#{name}]"
135
+ name = "#{@object_name}[#{name}]".html_safe
136
136
  else
137
137
  opts[:id] ||= nil
138
138
  info_text = opts.delete(:info)
@@ -143,4 +143,4 @@ module KingForm
143
143
 
144
144
  end
145
145
  end
146
- end
146
+ end
@@ -70,7 +70,7 @@ module KingForm
70
70
  @bundle_counter = 0
71
71
  tags = @template.capture(&block)
72
72
  @config[:bundle] = false
73
- @template.concat( tag_wrapper(title, tags, options) )
73
+ tag_wrapper(title, tags.html_safe, options)
74
74
  end
75
75
 
76
76
  # Add titles/labels to input tag and wrap in div
@@ -86,7 +86,7 @@ module KingForm
86
86
  def tag_wrapper(fieldname_or_title, tags, options = {})
87
87
  if @config[:bundle]
88
88
  @bundle_counter += 1
89
- tags
89
+ tags.html_safe
90
90
  elsif @config[:table] # called from "table" => build a table cell (td)
91
91
  # Only in first row: Build column header
92
92
  if @config[:row_number] == 1
@@ -102,7 +102,7 @@ module KingForm
102
102
  else # other tags stay outside label tag, because they don't like to be wrapped sometimes
103
103
  label_tag(fieldname_or_title, options[:label]) + tags
104
104
  end
105
- "<div> #{out}</div>"
105
+ "<div> #{out}</div>".html_safe
106
106
  end
107
107
  end
108
108
 
@@ -35,7 +35,17 @@ module KingForm
35
35
  def dl_fields_for(record_or_name_or_array, *args, &block)
36
36
  options = args.last.is_a?(Hash) ? args.pop : {}
37
37
  options[:builder] = KingForm::Builder::DefinitionList
38
- fields_for(record_or_name_or_array, *(args << options), &block)
38
+
39
+ case record_or_name_or_array
40
+ when String, Symbol
41
+ object_name = record_or_name_or_array
42
+ object = args.first
43
+ else
44
+ object = record_or_name_or_array
45
+ object_name = ActiveModel::Naming.singular(object)
46
+ end
47
+
48
+ fields_for(object_name, object, options, &block)
39
49
  end
40
50
 
41
51
  # renders a form with the KingForm::Builder::Labeled
@@ -68,8 +78,15 @@ module KingForm
68
78
  #
69
79
  def labeled_form_for(record_or_name_or_array, *args, &proc)
70
80
  options = args.last.is_a?(Hash) ? args.pop : {}
71
- options[:builder] = KingForm::Builder::Labeled
72
- form_for(record_or_name_or_array, *(args << options), &proc)
81
+ options[:builder] = KingForm::Builder::Labeled
82
+
83
+ case record_or_name_or_array
84
+ when String, Symbol
85
+ options[:as] = record_or_name_or_array
86
+ form_for(args.shift, *(args << options), &proc)
87
+ else
88
+ form_for(record_or_name_or_array, *(args << options), &proc)
89
+ end
73
90
  end
74
91
 
75
92
  def labeled_fields_for(record_or_name_or_array, *args, &block)
@@ -94,4 +111,4 @@ module KingForm
94
111
  result
95
112
  end
96
113
  end
97
- end
114
+ end
@@ -2,15 +2,15 @@ module KingForm
2
2
  # was attribute_fu with changes from: http://github.com/odadata/attribute_fu/commit/a0402d12f2d380d8decc82bdfbcc5d8a0a185524
3
3
  # Methods for building forms that contain fields for associated models.
4
4
  module NestedFormHelper
5
-
5
+
6
6
  # Renders the form for nested objects defined via activerecord accepts_nested_attributes_for
7
7
  #
8
8
  # The associated argument can be either an object, or a collection of objects to be rendered.
9
9
  #
10
10
  # An options hash can be specified to override the default behaviors.
11
- #
11
+ #
12
12
  # Options are:
13
- # * <tt>:new</tt> - specify a certain number of new elements to be added to the form. Useful for displaying a
13
+ # * <tt>:new</tt> - specify a certain number of new elements to be added to the form. Useful for displaying a
14
14
  # few blank elements at the bottom.
15
15
  # * <tt>:name</tt> - override the name of the association, both for the field names, and the name of the partial
16
16
  # * <tt>:partial</tt> - specify the name of the partial in which the form is located.
@@ -21,8 +21,8 @@ module KingForm
21
21
  # eg. obj.addresses, render the firt address on top of form, render all the other addresses at the bottom
22
22
  #
23
23
  def render_nested_form(associated, opts = {})
24
- associated = associated.is_a?(Array) ? associated : [associated] # preserve association proxy if this is one
25
- opts.symbolize_keys!
24
+ associated = associated.is_a?(Array) ? associated : [associated] # preserve association proxy if this is one
25
+ opts = opts.to_hash.symbolize_keys
26
26
  (opts[:new] - associated.select(&:new_record?).length).times { associated.build } if opts[:new]
27
27
 
28
28
  unless associated.empty?
@@ -43,13 +43,13 @@ module KingForm
43
43
  #The current objects classname is always present in partial so:
44
44
  #when Object is LineItem locals has :line_item => object
45
45
  :locals => {name.to_sym => f.object, :f => f}.merge( opts[:locals] || {} )
46
- }.merge( opts[:render] || {} ) )
46
+ }.merge( opts[:render] || {} ) )
47
47
  end
48
48
  end
49
- output.join
49
+ output.join.html_safe
50
50
  end
51
51
  end
52
-
52
+
53
53
  private
54
54
  def association_name(class_name)
55
55
  @object.respond_to?("#{class_name}_attributes=") ? class_name : class_name.pluralize
@@ -58,4 +58,4 @@ module KingForm
58
58
  (hash.delete(option) || object.class.name.split('::').last.underscore).to_s
59
59
  end
60
60
  end
61
- end
61
+ end
@@ -9,17 +9,17 @@ module ActionView::Helpers::FormTagHelper
9
9
  private
10
10
  # overridden method to kill inline styles
11
11
  # from actionpack-2.1.0/lib/action_view/helpers/form_tag_helper.rb
12
- def extra_tags_for_form(html_options)
13
- case method = html_options.delete("method").to_s
14
- when /^get$/i # must be case-insentive, but can't use downcase as might be nil
15
- html_options["method"] = "get"
16
- ''
17
- when /^post$/i, "", nil
18
- html_options["method"] = "post"
19
- protect_against_forgery? ? content_tag(:div, token_tag) : ''
20
- else
21
- html_options["method"] = "post"
22
- content_tag(:div, tag(:input, :type => "hidden", :name => "_method", :value => method) + token_tag)
23
- end
24
- end
12
+ #def extra_tags_for_form(html_options)
13
+ # case method = html_options.delete("method").to_s
14
+ # when /^get$/i # must be case-insentive, but can't use downcase as might be nil
15
+ # html_options["method"] = "get"
16
+ # ''
17
+ # when /^post$/i, "", nil
18
+ # html_options["method"] = "post"
19
+ # protect_against_forgery? ? content_tag(:div, token_tag) : ''
20
+ # else
21
+ # html_options["method"] = "post"
22
+ # content_tag(:div, tag(:input, :type => "hidden", :name => "_method", :value => method) + token_tag)
23
+ # end
24
+ #end
25
25
  end
@@ -16,7 +16,7 @@ module KingFormat
16
16
  # When set this will be used instead of asking the object for its value.
17
17
  # See types for more
18
18
  # opts<Hash{Symbol=>String}>:: Options
19
- #
19
+ #
20
20
  # ==== Options opts
21
21
  # :currency<Hash{Symbol=>String}>:: Currency settings to format string as
22
22
  # money like found in rails I18n(see rails number_helper)
@@ -64,7 +64,7 @@ module KingFormat
64
64
  format_method = "#{fld}_format_opts".to_sym
65
65
  # check if the object has a custom money format method => price_total_format_opts
66
66
  fopts = object && object.respond_to?(format_method) ? object.send(format_method) : opts[:currency]
67
- strfmoney(val, fopts)
67
+ strfmoney(val, fopts, object)
68
68
  elsif ( val.is_a?(Date) || (object.class.is_date_field?(fld) rescue nil) || opts[:date] )
69
69
  return val if val.blank? # blank value can occur when a is_date_field is empty
70
70
  # get date from opts or default or fallback into i18n
@@ -89,9 +89,9 @@ module KingFormat
89
89
  # val<Number>:: the number to format
90
90
  # opts<Hash{Symbol=>String}>:: Rails compatible currency formatting options,
91
91
  # when nil searches default format, last exit is rails i18n
92
- def strfmoney(val, opts=nil)
92
+ def strfmoney(val, opts=nil, object = nil)
93
93
  settings = opts || default_currency_format || {}
94
- number_to_currency(val, settings.merge({:locale => I18n.locale}))
94
+ number_to_currency(val, settings.merge({:locale => I18n.locale}).to_hash)
95
95
  end
96
96
 
97
97
  # Deprecated, to be dropped
@@ -107,10 +107,10 @@ module KingFormat
107
107
  # => 7,5%
108
108
  def number_to_percentage_auto_precision(number)
109
109
  return nil unless number
110
- # for now use separator
111
- pres = (number.to_i == number.to_f) ? 0 : 1
112
110
  sep = I18n.t(:'number.format.separator')
113
- number_to_percentage(number,{:precision => pres, :separator=>sep } )
111
+ number_to_percentage(number,{ :separator=>sep,
112
+ :precision => 4,
113
+ :strip_insignificant_zeros=>true } )
114
114
  end
115
115
 
116
116
  # Translate the value of an enum field, as defined by act_as_enum
@@ -129,9 +129,14 @@ module KingFormat
129
129
  # Don't translate blank value
130
130
  return nil if value.blank?
131
131
  #return the translation
132
- klass.human_attribute_name("enum.#{fieldname.to_s}.#{value.to_s}")
132
+ defaults = klass.lookup_ancestors.map do |_klass|
133
+ :"#{klass.i18n_scope}.attributes.#{_klass.model_name.i18n_key}.enum.#{fieldname.to_s}.#{value.to_s}"
134
+ end
135
+ defaults << klass.human_attribute_name("enum.#{fieldname.to_s}.#{value.to_s}")
136
+
137
+ I18n.translate(default: defaults)
133
138
  end
134
-
139
+
135
140
  # Returns the default date formatting, as string '%d.%m.%Y'
136
141
  # The returned string is passed to strftime(format)
137
142
  # Override this function or set the thread var somehere in your including
@@ -142,7 +147,7 @@ module KingFormat
142
147
  def default_date_format
143
148
  Thread.current[:default_date_format]
144
149
  end
145
-
150
+
146
151
  # Returns the default currency formatting, in I18n style
147
152
  # The returned hash is used in rails number_to_currency helper.
148
153
  # Override this function or set the thread var somehere in your including
@@ -154,17 +159,17 @@ module KingFormat
154
159
  def default_currency_format
155
160
  Thread.current[:default_currency_format]
156
161
  end
157
-
158
- # Formats a number to the visible decimal places. If there are more decimal
162
+
163
+ # Formats a number to the visible decimal places. If there are more decimal
159
164
  # places than the given prescision those are used.
160
165
  #
161
166
  # === Examples
162
167
  # auto_precision(1.2340, 2)
163
168
  # => "1.234"
164
- #
169
+ #
165
170
  # auto_precision(1.234500)
166
171
  # => "1.2345"
167
- #
172
+ #
168
173
  # auto_precision(1.2345, 5)
169
174
  # => "1.23450"
170
175
  #
@@ -182,5 +187,5 @@ module KingFormat
182
187
  "%01.#{precision}f" % rounded_number
183
188
  end
184
189
 
185
- end # FormattingHelper
186
- end # KingFormat
190
+ end # FormattingHelper
191
+ end # KingFormat