king_views 1.1.6 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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