basepack 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -2
  3. data/README.md +64 -44
  4. data/app/assets/javascripts/basepack/loading_spinner.coffee.erb +2 -2
  5. data/app/controllers/basepack/base_controller.rb +22 -1
  6. data/app/views/forms/_bulk_edit.html.haml +1 -1
  7. data/app/views/forms/_export.html.haml +18 -17
  8. data/app/views/forms/_import.html.haml +2 -2
  9. data/app/views/forms/_import_configuration_csv.html.haml +10 -7
  10. data/app/views/forms/_query.html.haml +8 -8
  11. data/app/views/forms/_show.html.haml +1 -1
  12. data/app/views/forms/_show_without_blanks.html.haml +1 -1
  13. data/app/views/forms/buttons/_apply.html.haml +1 -1
  14. data/app/views/forms/buttons/_bulk_delete.html.haml +3 -3
  15. data/app/views/forms/buttons/_create.html.haml +1 -2
  16. data/app/views/forms/buttons/_delete.html.haml +1 -1
  17. data/app/views/forms/buttons/_edit.html.haml +1 -1
  18. data/app/views/forms/buttons/_export.html.haml +1 -2
  19. data/app/views/forms/buttons/_import.html.haml +1 -1
  20. data/app/views/forms/buttons/_print.html.haml +1 -1
  21. data/app/views/forms/buttons/_query.html.haml +3 -3
  22. data/app/views/forms/buttons/_submit_create.html.haml +1 -1
  23. data/app/views/forms/edit/_form_colorpicker.html.haml +4 -4
  24. data/app/views/forms/edit/_form_datetime.html.haml +4 -4
  25. data/app/views/forms/edit/_form_enumeration.html.haml +19 -20
  26. data/app/views/forms/edit/_tag_list_with_suggestions.html.haml +1 -1
  27. data/config/basepack-settings.yml +2 -1
  28. data/config/locales/cs.yml +60 -5
  29. data/config/locales/en.yml +53 -9
  30. data/config/locales/kaminari.en.yml +1 -1
  31. data/lib/basepack.rb +1 -0
  32. data/lib/basepack/engine.rb +1 -0
  33. data/lib/basepack/forms/query.rb +1 -1
  34. data/lib/basepack/import/model_dragonfly.rb +2 -2
  35. data/lib/basepack/rails_admin/fields_types/phone.rb +61 -0
  36. data/lib/basepack/version.rb +1 -1
  37. data/lib/generators/basepack/install_generator.rb +41 -24
  38. data/lib/generators/basepack/templates/import.rb +4 -1
  39. data/lib/generators/rails/scaffold_controller_generator.rb +12 -0
  40. data/spec/dummy_app/app/controllers/employee_with_destroyable_nesteds_controller.rb +3 -0
  41. data/spec/dummy_app/app/models/employee_with_destroyable_nested.rb +6 -0
  42. data/spec/dummy_app/config/routes.rb +6 -2
  43. data/spec/dummy_app/db/development.sqlite3 +0 -0
  44. data/spec/dummy_app/db/migrate/20140117153133_add_phone_to_employee.rb +5 -0
  45. data/spec/dummy_app/db/schema.rb +2 -27
  46. data/spec/dummy_app/db/test.sqlite3 +0 -0
  47. data/spec/dummy_app/log/development.log +2907 -0
  48. data/spec/dummy_app/log/test.log +16850 -0
  49. data/spec/dummy_app/tmp/cache/assets/development/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  50. data/spec/dummy_app/tmp/cache/assets/development/sprockets/6f4d8a75f9952ad791647a0c21be66d3 +0 -0
  51. data/spec/dummy_app/tmp/cache/assets/development/sprockets/93a7167bf36c621d305a9481e3d25bce +0 -0
  52. data/spec/dummy_app/tmp/cache/assets/development/sprockets/a6fad88c8628b92fa21b43b1aa76cf7d +0 -0
  53. data/spec/dummy_app/tmp/cache/assets/development/sprockets/b8a8c2faf730407b004ec269c26473d7 +0 -0
  54. data/spec/dummy_app/tmp/cache/assets/development/sprockets/cb1f853dc4682e46b8f6922910af7491 +0 -0
  55. data/spec/dummy_app/tmp/cache/assets/development/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  56. data/spec/dummy_app/tmp/cache/assets/development/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  57. data/spec/dummy_app/tmp/cache/assets/test/sprockets/0006b869e74d698c8b4e140f70f87b90 +0 -0
  58. data/spec/dummy_app/tmp/cache/assets/test/sprockets/2d71a2a9ba73844a029c993068e478d5 +0 -0
  59. data/spec/dummy_app/tmp/cache/assets/test/sprockets/2f416db7ec3594c66c478e2c70dc5032 +0 -0
  60. data/spec/dummy_app/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
  61. data/spec/dummy_app/tmp/cache/assets/test/sprockets/3202398591e97bce52539e961f5516c4 +0 -0
  62. data/spec/dummy_app/tmp/cache/assets/test/sprockets/6659113c653e0ca831f730df1b6b0558 +0 -0
  63. data/spec/dummy_app/tmp/cache/assets/test/sprockets/780412261881a814294a5333a4a042d2 +0 -0
  64. data/spec/dummy_app/tmp/cache/assets/test/sprockets/7af866e59b2c1fec401995dbceaf6e72 +0 -0
  65. data/spec/dummy_app/tmp/cache/assets/test/sprockets/8618734b87c2e32d68b15881891d9286 +0 -0
  66. data/spec/dummy_app/tmp/cache/assets/test/sprockets/93a7167bf36c621d305a9481e3d25bce +0 -0
  67. data/spec/dummy_app/tmp/cache/assets/test/sprockets/9b856b2df0d8b82ecd548aebe2c5268f +0 -0
  68. data/spec/dummy_app/tmp/cache/assets/test/sprockets/a6fad88c8628b92fa21b43b1aa76cf7d +0 -0
  69. data/spec/dummy_app/tmp/cache/assets/test/sprockets/c174814b8349dc263c8f65404949e933 +0 -0
  70. data/spec/dummy_app/tmp/cache/assets/test/sprockets/c81fa603414eab811f5a75f5be6fc7a0 +0 -0
  71. data/spec/dummy_app/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
  72. data/spec/dummy_app/tmp/cache/assets/test/sprockets/dbc50e82415d51f2497fbc2dc1983bc2 +0 -0
  73. data/spec/dummy_app/tmp/cache/assets/test/sprockets/dcaf58e5c22740a96f5f349888c4cc6f +0 -0
  74. data/spec/dummy_app/tmp/cache/assets/test/sprockets/ed9f6df23839a0fd1983de2fcda43c5c +0 -0
  75. data/spec/dummy_app/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
  76. data/spec/dummy_app/tmp/capybara/capybara-201312292242327883099760.html +127 -0
  77. data/spec/integration/basic/edit/basepack_basic_edit_spec.rb +58 -0
  78. data/spec/integration/basic/show/basepack_basic_show_spec.rb +49 -0
  79. metadata +58 -7
  80. data/lib/generators/basepack/templates/dragonfly.rb +0 -8
@@ -1,7 +1,7 @@
1
1
  .form-show
2
2
  - form.visible_groups.each do |group|
3
3
  - if (fields = group.visible_fields).present?
4
- - unless group.name == :default
4
+ - unless group.name == :default
5
5
  %h4= group.label
6
6
  - if group.help
7
7
  %p= group.help
@@ -2,7 +2,7 @@
2
2
  - form.visible_groups.each do |group|
3
3
  - if (fields = group.visible_fields).present?
4
4
  - if (values = group.values_without_blank).present?
5
- - unless group.name == :default
5
+ - unless group.name == :default
6
6
  %h4= group.label
7
7
  - if group.help
8
8
  %p= group.help
@@ -1,4 +1,4 @@
1
- %button.btn.btn-primary{type: "submit", name: "_save",
1
+ %button.btn.btn-primary{type: "submit", name: "_save",
2
2
  'data-disable-with' => "<i class='icon-white icon-ok'></i> #{t("admin.form.save")}"}
3
3
  %i.icon-white.icon-ok
4
4
  OK
@@ -1,5 +1,5 @@
1
- = link_to url, class: 'btn btn-danger',
2
- :data => { :confirm => I18n.t('admin.form.confirmation'),
1
+ = link_to url, class: 'btn btn-danger',
2
+ :data => { :confirm => I18n.t('admin.form.confirmation'),
3
3
  params: params, 'bulk-action-method' => 'delete'} do
4
4
  %i.icon-trash
5
- = I18n.t('admin.actions.delete_all.menu')
5
+ = Basepack::Utils.translate(resource_class, :delete_all, :menu)
@@ -1,5 +1,4 @@
1
1
  -# TODO rename to "new"
2
2
  = link_to url, class: 'btn btn-info' do
3
3
  %i.icon-plus
4
- = I18n.t('admin.actions.new.menu')
5
-
4
+ = Basepack::Utils.translate(resource_class, :new, :menu)
@@ -1,3 +1,3 @@
1
1
  = link_to url, class: 'btn btn-danger', method: :delete, :data => { :confirm => I18n.t('admin.form.confirmation') } do
2
2
  %i.icon-trash
3
- = I18n.t('admin.actions.delete.menu')
3
+ = Basepack::Utils.translate(resource_class, :delete, :menu)
@@ -1,3 +1,3 @@
1
1
  = link_to url, class: 'btn btn-info' do
2
2
  %i.icon-pencil
3
- = I18n.t('admin.actions.edit.menu')
3
+ = Basepack::Utils.translate(resource_class, :edit, :menu)
@@ -1,4 +1,3 @@
1
1
  = link_to url, class: 'btn' do
2
2
  %i.icon-share
3
- Export
4
-
3
+ = Basepack::Utils.translate(resource_class, :export, :menu)
@@ -1,4 +1,4 @@
1
1
  = link_to url, class: 'btn' do
2
2
  %i.icon-download
3
- Import
3
+ = Basepack::Utils.translate(resource_class, :import, :menu)
4
4
 
@@ -1,3 +1,3 @@
1
1
  %a.btn{"data-print" => 1, href: "javascript:print();"}
2
2
  %i.icon-white.icon-print
3
- Vytisknout...
3
+ = Basepack::Utils.translate(resource_class, :print, :menu)
@@ -5,7 +5,7 @@
5
5
  - if Basepack::Settings.filters.model_name and can?(:create, Basepack::Settings.filters.model_name.constantize)
6
6
  = link_to url, class: classes, data: link_data do
7
7
  %i.icon-search
8
- Filtr
8
+ = I18n.t('basepack.query.filter')
9
9
  - filters = Basepack::Settings.filters.model_name.constantize.active.where(filter_type: resource_class.to_s).to_a
10
10
  - if filters.present?
11
11
  %button{type: "button", class: classes + ' dropdown-toggle', 'data-toggle' => "dropdown"}
@@ -15,11 +15,11 @@
15
15
  %small
16
16
  %a{href: polymorphic_path([:filters, association_chain, resource_class].flatten), tabindex: '-1'}
17
17
  %i.icon-folder-open-alt
18
- Seznam uložených filtrů
18
+ = I18n.t('basepack.query.filter_list')
19
19
  - filters.each do |filter|
20
20
  %li{class: (filter.filter == url_params['ql'] ? 'active' : '')}
21
21
  %a{href: polymorphic_path([association_chain, resource_class].flatten, ql: filter.filter), tabindex: '-1'}= filter.name
22
22
  - else
23
23
  = link_to url, class: classes, data: link_data do
24
24
  %i.icon-search
25
- = I18n.t('admin.misc.filter')
25
+ = I18n.t('basepack.query.filter')
@@ -1,4 +1,4 @@
1
1
  %button.btn.btn-primary{type: "submit", name: "_save",
2
2
  'data-disable-with' => "<i class='icon-white icon-ok'></i> Přidat"}
3
3
  %i.icon-white.icon-ok
4
- Přidat
4
+ = I18n.t('basepack.misc.submit_create')
@@ -1,7 +1,7 @@
1
- = form.input field.method_name,
1
+ = form.input field.method_name,
2
2
  as: :string,
3
- label: field.label,
4
- hint: field.help,
5
- required: field.required?,
3
+ label: field.label,
4
+ hint: field.help,
5
+ required: field.required?,
6
6
  input_html: field.html_attributes.reverse_merge({:style => "background-color: #{field.color}", :data => {:color => true}})
7
7
 
@@ -1,6 +1,6 @@
1
- = form.input field.method_name,
1
+ = form.input field.method_name,
2
2
  as: :string,
3
- label: field.label,
4
- hint: field.help,
5
- required: field.required?,
3
+ label: field.label,
4
+ hint: field.help,
5
+ required: field.required?,
6
6
  input_html: field.html_attributes.merge({:value => (field.value.present? ? field.value : field.html_default_value)}).reverse_merge({data: { datetimepicker: true, options: field.js_plugin_options.to_json }})
@@ -1,20 +1,19 @@
1
- = form.input field.method_name, collection: field.enum, label: field.label, hint: field.help, required: field.required?,
2
- input_html: { data: { select: {} } }.deep_merge(field.html_attributes)
3
- -#- unless field.multiple?
4
- -#- else
5
- -# / TODO
6
- -# :ruby
7
- -# js_data = {
8
- -# :xhr => false,
9
- -# :sortable => false,
10
- -# :cacheAll => true,
11
- -# :regional => {
12
- -# :chooseAll => t("admin.misc.chose_all"),
13
- -# :chosen => t("admin.misc.chosen", :name => config.label_plural),
14
- -# :clearAll => t("admin.misc.clear_all"),
15
- -# :search => t("admin.misc.search"),
16
- -# :up => t("admin.misc.up"),
17
- -# :down => t("admin.misc.down")
18
- -# }
19
- -# }
20
- -# = form.input field.method_name, :collection => field.enum , label: field.label, hint: field.help, required: field.required?, input_html: field.html_attributes, { :selected => field.value, :object => form.object }, field.html_attributes.reverse_merge({:data => { :filteringmultiselect => true, :options => js_data.to_json }, :multiple => true})
1
+ - unless field.multiple?
2
+ = form.input field.method_name, collection: field.enum, label: field.label, hint: field.help, required: field.required?,
3
+ input_html: { data: { select: {} } }.deep_merge(field.html_attributes)
4
+ - else
5
+ :ruby
6
+ js_data = {
7
+ :xhr => false,
8
+ :sortable => false,
9
+ :cacheAll => true,
10
+ :regional => {
11
+ :chooseAll => t("admin.misc.chose_all"),
12
+ :chosen => t("admin.misc.chosen", :name => config.label_plural),
13
+ :clearAll => t("admin.misc.clear_all"),
14
+ :search => t("admin.misc.search"),
15
+ :up => t("admin.misc.up"),
16
+ :down => t("admin.misc.down")
17
+ }
18
+ }
19
+ = form.input field.method_name, :collection => field.enum , label: field.label, hint: field.help, required: field.required?, input_html: field.html_attributes.reverse_merge({:data => { :filteringmultiselect => true, :options => js_data.to_json }, :multiple => true})
@@ -11,5 +11,5 @@
11
11
  }.to_json
12
12
  }
13
13
 
14
- = form.input field.method_name, label: "<i class='icon-tags'></i> #{field.label}", hint: field.help, required: field.required? do
14
+ = form.input field.method_name, label: "<i class='icon-tags'></i> #{h field.label}".html_safe, hint: field.help, required: field.required? do
15
15
  = form.input_field field.method_name, { type: 'text', data: js_data}
@@ -4,7 +4,7 @@ defaults: &defaults
4
4
  help:
5
5
  title: false
6
6
  export:
7
- default_col_sep: ";"
7
+ default_col_sep: ';'
8
8
  filters:
9
9
  model_name: null # for enabling saved filter set to 'Filter' model for instance
10
10
  bulk_edit:
@@ -13,6 +13,7 @@ defaults: &defaults
13
13
  - delete
14
14
  - assign
15
15
  import:
16
+ default_col_sep: ','
16
17
  mime_types: [text/csv, text/plain]
17
18
  model_name: Import
18
19
  default_action: :import
@@ -2,12 +2,67 @@ cs:
2
2
  web_name: "Název projektu"
3
3
  misc:
4
4
  loading: "Chvíli strpení"
5
- modify_query: "Upravit dotaz"
6
- save_filter: "Uložit filtr"
7
- error_filter: "Filter nelze uložiť"
8
- enter_filter_name: "Prosím vyplňte název filtru"
9
5
 
10
- admin:
6
+ basepack:
7
+ misc:
8
+ submit_create: 'Přidat'
9
+ flash:
10
+ error_on_items: "Objekt %{model_label_plural} nelze %{action}"
11
+ export:
12
+ no_exported_items: "Počet záznamů pro export"
13
+ select_all_fields: "Vybrat všechny pole"
14
+ select: "Vyberte políčka pro export"
15
+ click_to_reverse_selection: 'Klikněte pro reverzní výběr'
16
+ fields_from: "Poloíčka z %{name}"
17
+ fields_from_associated: "Políčka z přiřazeného %{name}"
18
+ options_for: "Možnosti pro %{name}"
19
+ csv:
20
+ skip_header: "Žádná hlavička"
21
+ skip_header_help: "Neexportovat hlavičku"
22
+ col_sep_help: "Nechte prázdné pro výchozí ('%{value}')"
23
+ col_sep:
24
+ label: "Oddělovač sloupců"
25
+ comma: "<čárka> ','"
26
+ semicolon: "<středník> ';'"
27
+ tab: "<tabulátor>"
28
+ confirmation: "Export to %{name}"
29
+
30
+ import:
31
+ new_import: "Nový import"
32
+ import_list: "Sezam importů"
33
+ csv:
34
+ configuration: "Konfigurace CSV importu"
35
+ blank_vals:
36
+ label: "Prázdné hodnoty"
37
+ skip: "Přeskočit"
38
+ use: "Nastavit"
39
+ column: "Sloupec %{idx}"
40
+ start: "Spustit"
41
+
42
+ bulk_edit:
43
+ title: "Hromadná změna %{count} položek"
44
+
45
+ query:
46
+ filter: 'Filtr'
47
+ add_filter: 'Přidat filtr'
48
+ query: 'Dotaz'
49
+ filter_list: "Seznam uložených filtrů"
50
+ modify_query: "Upravit dotaz"
51
+ save_filter: "Uložit filtr"
52
+ error_filter: "Filter nelze uložit"
53
+ enter_filter_name: "Prosím vyplňte název filtru"
54
+
11
55
  actions:
12
56
  delete_all:
13
57
  menu: "Smazat označené"
58
+ import:
59
+ title: "Import"
60
+ menu: "Import"
61
+ breadcrumb: "Import"
62
+ bulk_edit:
63
+ done: "importováno"
64
+ title: "Změna %{model_label_plural}"
65
+ menu: "Hromadná změna"
66
+ breadcrumb: 'Hromadná úprava'
67
+ bulk_link: "Změnit vybraný %{model_label_plural}"
68
+ done: "upraveno"
@@ -2,21 +2,65 @@ en:
2
2
  web_name: "Project Name"
3
3
  misc:
4
4
  loading: "Loading, please wait"
5
- modify_query: "Modify query"
6
- save_filter: "Save filter"
7
- error_filter: "Filter can't be saved"
8
- enter_filter_name: "Please enter filter name"
9
-
10
- admin:
11
- actions:
12
- delete_all:
13
- menu: "Delete selected"
14
5
 
15
6
  basepack:
7
+ misc:
8
+ submit_create: 'Add'
16
9
  flash:
17
10
  error_on_items: "Following %{model_label_plural} failed to be %{action}"
11
+ export:
12
+ no_exported_items: "Exported items count"
13
+ select_all_fields: "Select All Fields"
14
+ select: "Select fields to export"
15
+ click_to_reverse_selection: 'Click to reverse selection'
16
+ fields_from: "Fields from %{name}"
17
+ fields_from_associated: "Fields from associated %{name}"
18
+ options_for: "Options for %{name}"
19
+ csv:
20
+ skip_header: "No header"
21
+ skip_header_help: "Do not output a header (no fields description)"
22
+ col_sep_help: "Leave blank for default ('%{value}')"
23
+ col_sep:
24
+ label: "Column separator"
25
+ comma: "<comma> ','"
26
+ semicolon: "<semicolon> ';'"
27
+ tab: "<tabs>"
28
+ confirmation: "Export to %{name}"
29
+
30
+ import:
31
+ new_import: "New Import"
32
+ import_list: "List of Imports"
33
+ csv:
34
+ configuration: "Configuration of CSV import"
35
+ blank_vals:
36
+ label: "Blank values"
37
+ skip: "Skip"
38
+ use: "Set"
39
+ column: "Column %{idx}"
40
+ start: "Start Import"
41
+
42
+ bulk_edit:
43
+ title: "Bulk edit for %{count} items"
44
+
45
+ query:
46
+ filter: 'Filter'
47
+ add_filter: 'Add Filter'
48
+ query: 'Query'
49
+ filter_list: "List of Saved Filters"
50
+ modify_query: "Modify query"
51
+ save_filter: "Save filter"
52
+ error_filter: "Filter can't be saved"
53
+ enter_filter_name: "Please enter filter name"
54
+
18
55
  actions:
56
+ delete_all:
57
+ menu: "Delete selected"
58
+ import:
59
+ title: "Import"
60
+ menu: "Import"
61
+ breadcrumb: "Import"
19
62
  bulk_edit:
63
+ done: "imported"
20
64
  title: "Change %{model_label_plural}"
21
65
  menu: "Bulk change"
22
66
  breadcrumb: 'Bulk edit'
@@ -12,7 +12,7 @@ en:
12
12
  one_page:
13
13
  display_entries:
14
14
  zero: "No items found"
15
- one: "Displaying <b>1</b> %"
15
+ one: "Displaying <b>1</b> item"
16
16
  few: "Displaying <b>all %{count}</b> items"
17
17
  other: "Displaying <b>all %{count}</b>"
18
18
  more_pages:
@@ -3,6 +3,7 @@ require 'basepack/version'
3
3
  require 'basepack/sections/query'
4
4
  require 'basepack/sections/import'
5
5
  require 'basepack/sections/bulk_edit'
6
+ require 'basepack/rails_admin/fields_types/phone'
6
7
 
7
8
  module Basepack
8
9
  def self.setup
@@ -2,6 +2,7 @@ require 'csv'
2
2
  require 'rails_admin'
3
3
  require 'inherited_resources'
4
4
  require 'select2-rails'
5
+ require 'bootstrap-sass' #needs to be required before bootstrap-modal-rails
5
6
  require 'bootstrap-modal-rails'
6
7
  require 'underscore-rails'
7
8
  require 'underscore-string-rails'
@@ -136,7 +136,7 @@ module Basepack
136
136
 
137
137
  if @ql or @edit_ql
138
138
  init << {
139
- label: 'Dotaz',
139
+ label: I18n.t('basepack.query.query'),
140
140
  name: 'ql',
141
141
  type: 'ql',
142
142
  value: @ql || conditions_to_ql,
@@ -8,8 +8,8 @@ module Basepack
8
8
 
9
9
  has_many :importables, inverse_of: :import, dependent: :destroy, class_name: 'Basepack::ImportImportable'
10
10
 
11
- image_accessor :file
12
- image_accessor :report
11
+ dragonfly_accessor :file
12
+ dragonfly_accessor :report
13
13
 
14
14
  serialize :configuration, Hash
15
15
 
@@ -0,0 +1,61 @@
1
+ require 'rails_admin/config/fields/types/string'
2
+ require 'phony'
3
+
4
+ module RailsAdmin
5
+ module Config
6
+ module Fields
7
+ module Types
8
+ class Phone < RailsAdmin::Config::Fields::Types::String
9
+ # Register field type for the type loader
10
+ RailsAdmin::Config::Fields::Types::register(self)
11
+
12
+ register_instance_option :pretty_value do
13
+ if value.nil?
14
+ nil
15
+ else
16
+ options = {}
17
+ options[:format] = format if format.present?
18
+ options[:spaces] = spaces if spaces.present?
19
+ if Phony.plausible?(normalized_value)
20
+ Phony.formatted(normalized_value, options).html_safe
21
+ else
22
+ value.html_safe
23
+ end
24
+ end
25
+ end
26
+
27
+ register_instance_option :cc do
28
+ nil
29
+ end
30
+ register_instance_option :ndc do
31
+ nil
32
+ end
33
+ register_instance_option :format do
34
+ nil
35
+ end
36
+ register_instance_option :spaces do
37
+ nil
38
+ end
39
+
40
+ register_instance_option :export_value do
41
+ value.inspect
42
+ end
43
+
44
+ # in case you want to save normalized value
45
+ # must be called from controller
46
+ # def parse_input(params)
47
+ # raise params[name].inspect
48
+ # params[name] = Phony.normalize(params[name], {cc: cc, ndc: ndc}) if params[name].present?
49
+ # end
50
+
51
+ def normalized_value
52
+ options = {}
53
+ options[:cc] = cc if cc.present?
54
+ options[:ndc] = ndc if ndc.present?
55
+ Phony.normalize(value, options)
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end