nimbleshop_core 0.0.1.rc1

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 (359) hide show
  1. data/README.md +13 -0
  2. data/Rakefile +15 -0
  3. data/app/assets/images/engines/nimbleshop_authorizedotnet/american_express.png +0 -0
  4. data/app/assets/images/engines/nimbleshop_authorizedotnet/authorize_net_big.png +0 -0
  5. data/app/assets/images/engines/nimbleshop_authorizedotnet/authorizedotnet_big.png +0 -0
  6. data/app/assets/images/engines/nimbleshop_authorizedotnet/discover.png +0 -0
  7. data/app/assets/images/engines/nimbleshop_authorizedotnet/mastercard.png +0 -0
  8. data/app/assets/images/engines/nimbleshop_authorizedotnet/visa.png +0 -0
  9. data/app/assets/images/engines/nimbleshop_cod/cod_small.png +0 -0
  10. data/app/assets/images/engines/nimbleshop_paypalwp/paypal_big.png +0 -0
  11. data/app/assets/images/engines/nimbleshop_paypalwp/paypal_small.png +0 -0
  12. data/app/assets/images/engines/nimbleshop_splitable/splitable.png +0 -0
  13. data/app/assets/images/engines/nimbleshop_splitable/splitable_big.png +0 -0
  14. data/app/assets/images/engines/nimbleshop_splitable/splitable_small.png +0 -0
  15. data/app/assets/javascripts/admin/products/edit.js.coffee +19 -0
  16. data/app/assets/javascripts/admin/shipping_methods/edit.js.coffee +6 -0
  17. data/app/assets/javascripts/admin.js +25 -0
  18. data/app/assets/javascripts/fadeout_success.js.coffee +2 -0
  19. data/app/assets/javascripts/payment_method.js.coffee +19 -0
  20. data/app/assets/javascripts/product-group-condition.js.coffee +33 -0
  21. data/app/assets/javascripts/remove_deletion_of_product_pictures.js.coffee +5 -0
  22. data/app/assets/javascripts/shipit.js.coffee +10 -0
  23. data/app/assets/javascripts/twitter_bootstrap.js.coffee +4 -0
  24. data/app/assets/stylesheets/admin.css +9 -0
  25. data/app/assets/stylesheets/admin_bootstrap_and_overrides.css.less +38 -0
  26. data/app/assets/stylesheets/admin_custom.css +104 -0
  27. data/app/assets/twitter/bootstrap/glyphicons-halflings-white.png +0 -0
  28. data/app/assets/twitter/bootstrap/glyphicons-halflings.png +0 -0
  29. data/app/controllers/admin/custom_fields_controller.rb +56 -0
  30. data/app/controllers/admin/link_groups_controller.rb +76 -0
  31. data/app/controllers/admin/main_controller.rb +9 -0
  32. data/app/controllers/admin/navigations_controller.rb +49 -0
  33. data/app/controllers/admin/orders_controller.rb +47 -0
  34. data/app/controllers/admin/payment_methods_controller.rb +26 -0
  35. data/app/controllers/admin/product_groups_controller.rb +70 -0
  36. data/app/controllers/admin/products_controller.rb +71 -0
  37. data/app/controllers/admin/shipments_controller.rb +19 -0
  38. data/app/controllers/admin/shipping_methods_controller.rb +93 -0
  39. data/app/controllers/admin/shipping_zones_controller.rb +62 -0
  40. data/app/controllers/admin/shops_controller.rb +33 -0
  41. data/app/controllers/admin_controller.rb +38 -0
  42. data/app/helpers/admin_helper.rb +83 -0
  43. data/app/helpers/nimbleshop_helper.rb +43 -0
  44. data/app/helpers/payment_method_helper.rb +52 -0
  45. data/app/mailers/admin_mailer.rb +22 -0
  46. data/app/mailers/mailer.rb +31 -0
  47. data/app/models/address.rb +69 -0
  48. data/app/models/country_shipping_zone.rb +36 -0
  49. data/app/models/creditcard.rb +95 -0
  50. data/app/models/custom_field.rb +8 -0
  51. data/app/models/custom_field_answer/field.rb +101 -0
  52. data/app/models/custom_field_answer.rb +17 -0
  53. data/app/models/line_item.rb +48 -0
  54. data/app/models/link.rb +3 -0
  55. data/app/models/link_group.rb +8 -0
  56. data/app/models/navigation.rb +7 -0
  57. data/app/models/order.rb +158 -0
  58. data/app/models/payment_method.rb +20 -0
  59. data/app/models/payment_transaction.rb +11 -0
  60. data/app/models/picture.rb +30 -0
  61. data/app/models/product.rb +76 -0
  62. data/app/models/product_group.rb +65 -0
  63. data/app/models/product_group_condition.rb +8 -0
  64. data/app/models/regional_shipping_zone.rb +25 -0
  65. data/app/models/shipment.rb +19 -0
  66. data/app/models/shipment_carrier.rb +3 -0
  67. data/app/models/shipping_cost_calculator.rb +9 -0
  68. data/app/models/shipping_method.rb +103 -0
  69. data/app/models/shipping_zone.rb +9 -0
  70. data/app/models/shop.rb +26 -0
  71. data/app/models/tax_calculator.rb +18 -0
  72. data/app/observers/order_observer.rb +53 -0
  73. data/app/uploaders/picture_uploader.rb +65 -0
  74. data/app/views/admin/custom_fields/_form.html.erb +45 -0
  75. data/app/views/admin/custom_fields/edit.html.erb +7 -0
  76. data/app/views/admin/custom_fields/index.html.erb +31 -0
  77. data/app/views/admin/custom_fields/new.html.erb +7 -0
  78. data/app/views/admin/link_groups/_form.html.erb +31 -0
  79. data/app/views/admin/link_groups/_link_group.html.erb +50 -0
  80. data/app/views/admin/link_groups/_link_group_title.html.erb +5 -0
  81. data/app/views/admin/link_groups/edit.html.erb +8 -0
  82. data/app/views/admin/link_groups/index.html.erb +29 -0
  83. data/app/views/admin/link_groups/new.html.erb +9 -0
  84. data/app/views/admin/mailer/new_order_notification.text.erb +31 -0
  85. data/app/views/admin/main/index.html.erb +5 -0
  86. data/app/views/admin/navigations/new.html.erb +29 -0
  87. data/app/views/admin/orders/_line_item.html.erb +11 -0
  88. data/app/views/admin/orders/_line_items.html.erb +39 -0
  89. data/app/views/admin/orders/_payment_info.html.erb +20 -0
  90. data/app/views/admin/orders/_shipping_info.html.erb +40 -0
  91. data/app/views/admin/orders/index.html.erb +33 -0
  92. data/app/views/admin/orders/show.html.erb +40 -0
  93. data/app/views/admin/payment_methods/index.html.erb +6 -0
  94. data/app/views/admin/product_groups/_condition.html.mustache +20 -0
  95. data/app/views/admin/product_groups/_form.html.erb +72 -0
  96. data/app/views/admin/product_groups/edit.html.erb +7 -0
  97. data/app/views/admin/product_groups/index.html.erb +30 -0
  98. data/app/views/admin/product_groups/new.html.erb +7 -0
  99. data/app/views/admin/product_groups/show.html.erb +9 -0
  100. data/app/views/admin/products/_custom_field_answer.html.erb +9 -0
  101. data/app/views/admin/products/_form.html.erb +69 -0
  102. data/app/views/admin/products/_handle_pictures.html.erb +32 -0
  103. data/app/views/admin/products/_pictures.html.erb +33 -0
  104. data/app/views/admin/products/edit.html.erb +26 -0
  105. data/app/views/admin/products/index.html.erb +34 -0
  106. data/app/views/admin/products/new.html.erb +9 -0
  107. data/app/views/admin/shipping_methods/_form.html.erb +58 -0
  108. data/app/views/admin/shipping_methods/_shipping_method.html.erb +31 -0
  109. data/app/views/admin/shipping_methods/edit.html.erb +18 -0
  110. data/app/views/admin/shipping_methods/new.html.erb +7 -0
  111. data/app/views/admin/shipping_zones/_form.html.erb +31 -0
  112. data/app/views/admin/shipping_zones/_shipping_method.html.erb +13 -0
  113. data/app/views/admin/shipping_zones/_shipping_zone.html.erb +47 -0
  114. data/app/views/admin/shipping_zones/edit.html.erb +8 -0
  115. data/app/views/admin/shipping_zones/index.html.erb +16 -0
  116. data/app/views/admin/shipping_zones/new.html.erb +8 -0
  117. data/app/views/admin/shops/edit.html.erb +119 -0
  118. data/app/views/layouts/_admin_footer.html.erb +23 -0
  119. data/app/views/layouts/_admin_sidebar.html.erb +0 -0
  120. data/app/views/layouts/_container.html.erb +33 -0
  121. data/app/views/layouts/_top_nav_bar.html.erb +30 -0
  122. data/app/views/layouts/admin.html.erb +35 -0
  123. data/app/views/layouts/payment_method.html.erb +12 -0
  124. data/app/views/mailer/order_notification_to_buyer.text.erb +31 -0
  125. data/app/views/mailer/shipment_notification_to_buyer.text.erb +34 -0
  126. data/config/initializers/001_settings_application.rb +10 -0
  127. data/config/initializers/002_load_core_extensions.rb +8 -0
  128. data/config/initializers/field_with_error.rb +2 -0
  129. data/config/initializers/strip_and_nullify.rb +13 -0
  130. data/config/initializers/time_formats.rb +1 -0
  131. data/config/locales/en.yml +61 -0
  132. data/config/routes.rb +56 -0
  133. data/db/development.sqlite3 +0 -0
  134. data/db/migrate/20111022144421_create_product_groups.rb +12 -0
  135. data/db/migrate/20111022144426_create_products.rb +16 -0
  136. data/db/migrate/20111022144653_create_orders.rb +21 -0
  137. data/db/migrate/20111022144725_create_line_items.rb +15 -0
  138. data/db/migrate/20111022234951_create_shops.rb +20 -0
  139. data/db/migrate/20111026193227_create_link_groups.rb +12 -0
  140. data/db/migrate/20111026193435_create_navigations.rb +10 -0
  141. data/db/migrate/20111031135810_create_links.rb +10 -0
  142. data/db/migrate/20111106193938_create_custom_fields.rb +10 -0
  143. data/db/migrate/20111106195112_create_custom_field_answers.rb +14 -0
  144. data/db/migrate/20111106201548_create_product_group_conditions.rb +12 -0
  145. data/db/migrate/20111107035350_create_creditcard_transactions.rb +15 -0
  146. data/db/migrate/20111109190754_create_addresses.rb +24 -0
  147. data/db/migrate/20111125173344_create_pictures.rb +16 -0
  148. data/db/migrate/20111201024408_create_shipping_methods.rb +16 -0
  149. data/db/migrate/20111202143154_create_shipping_zones.rb +17 -0
  150. data/db/migrate/20111203034020_create_payment_methods.rb +14 -0
  151. data/db/migrate/20111221190000_create_preferences.rb +14 -0
  152. data/db/migrate/20120105234047_create_shipments.rb +11 -0
  153. data/db/migrate/20120105234553_create_shipment_carriers.rb +11 -0
  154. data/db/migrate/20120606165355_create_delayed_jobs.rb +22 -0
  155. data/db/production.sqlite3 +0 -0
  156. data/db/schema.rb +265 -0
  157. data/db/seeds.rb +1 -0
  158. data/db/test.sqlite3 +0 -0
  159. data/lib/assets/javascripts/loading_state_for_buttons.js.coffee +3 -0
  160. data/lib/assets/javascripts/show_help_on_hover.js.coffee +2 -0
  161. data/lib/assets/javascripts/utils/autoresize.js.coffee +3 -0
  162. data/lib/assets/javascripts/utils/focus.js.coffee +3 -0
  163. data/lib/assets/javascripts/utils/formatNumber.js.coffee +25 -0
  164. data/lib/assets/javascripts/utils/formatPrice.js.coffee +24 -0
  165. data/lib/generators/nimbleshop/app/app_generator.rb +84 -0
  166. data/lib/generators/nimbleshop/app/templates/config/application.yml +61 -0
  167. data/lib/generators/nimbleshop/app/templates/config/initializers/airbrake.rb +3 -0
  168. data/lib/generators/nimbleshop/app/templates/config/initializers/cache_images.rb +4 -0
  169. data/lib/generators/nimbleshop/app/templates/config/initializers/carrierwave.rb +36 -0
  170. data/lib/generators/nimbleshop/app/templates/config/initializers/delayed_job.rb +15 -0
  171. data/lib/generators/nimbleshop/app/templates/config/initializers/setup_email.rb +24 -0
  172. data/lib/nimbleshop/core_ext/activerecord_base.rb +18 -0
  173. data/lib/nimbleshop/core_ext/filelessio.rb +4 -0
  174. data/lib/nimbleshop/core_ext/force_ssl.rb +26 -0
  175. data/lib/nimbleshop/core_ext/mustache_templater_handler.rb +10 -0
  176. data/lib/nimbleshop/engine.rb +23 -0
  177. data/lib/nimbleshop/permalink/builder.rb +46 -0
  178. data/lib/nimbleshop/processor/base.rb +51 -0
  179. data/lib/nimbleshop/processor.rb +3 -0
  180. data/lib/nimbleshop/product_group_search/base_field.rb +19 -0
  181. data/lib/nimbleshop/product_group_search/core_field_strategy.rb +31 -0
  182. data/lib/nimbleshop/product_group_search/custom_field_strategy.rb +39 -0
  183. data/lib/nimbleshop/product_group_search/date_field.rb +16 -0
  184. data/lib/nimbleshop/product_group_search/extension.rb +46 -0
  185. data/lib/nimbleshop/product_group_search/number_field.rb +17 -0
  186. data/lib/nimbleshop/product_group_search/text_field.rb +33 -0
  187. data/lib/nimbleshop/product_group_search.rb +74 -0
  188. data/lib/nimbleshop/sampledata/data.rb +246 -0
  189. data/lib/nimbleshop/sampledata/pictures/product1/pic1.jpg +0 -0
  190. data/lib/nimbleshop/sampledata/pictures/product2/pic1.jpg +0 -0
  191. data/lib/nimbleshop/sampledata/pictures/product2/pic2.jpg +0 -0
  192. data/lib/nimbleshop/sampledata/pictures/product3/pic1.jpg +0 -0
  193. data/lib/nimbleshop/sampledata/pictures/product3/pic2.jpg +0 -0
  194. data/lib/nimbleshop/sampledata/pictures/product3/pic3.jpg +0 -0
  195. data/lib/nimbleshop/sampledata/pictures/product3/pic4.jpg +0 -0
  196. data/lib/nimbleshop/sampledata/pictures/product3/pic5.jpg +0 -0
  197. data/lib/nimbleshop/sampledata/pictures/product4/pic1.jpg +0 -0
  198. data/lib/nimbleshop/sampledata/pictures/product4/pic2.jpg +0 -0
  199. data/lib/nimbleshop/sampledata/pictures/product5/pic1.jpg +0 -0
  200. data/lib/nimbleshop/sampledata/pictures/product5/pic2.jpg +0 -0
  201. data/lib/nimbleshop/sampledata/pictures/product6/pic1.jpg +0 -0
  202. data/lib/nimbleshop/sampledata/pictures/product6/pic10.jpg +0 -0
  203. data/lib/nimbleshop/sampledata/pictures/product6/pic11.jpg +0 -0
  204. data/lib/nimbleshop/sampledata/pictures/product6/pic12.jpg +0 -0
  205. data/lib/nimbleshop/sampledata/pictures/product6/pic13.jpg +0 -0
  206. data/lib/nimbleshop/sampledata/pictures/product6/pic14.jpg +0 -0
  207. data/lib/nimbleshop/sampledata/pictures/product6/pic15.jpg +0 -0
  208. data/lib/nimbleshop/sampledata/pictures/product6/pic16.jpg +0 -0
  209. data/lib/nimbleshop/sampledata/pictures/product6/pic17.jpg +0 -0
  210. data/lib/nimbleshop/sampledata/pictures/product6/pic2.jpg +0 -0
  211. data/lib/nimbleshop/sampledata/pictures/product6/pic3.jpg +0 -0
  212. data/lib/nimbleshop/sampledata/pictures/product6/pic4.jpg +0 -0
  213. data/lib/nimbleshop/sampledata/pictures/product6/pic5.jpg +0 -0
  214. data/lib/nimbleshop/sampledata/pictures/product6/pic6.jpg +0 -0
  215. data/lib/nimbleshop/sampledata/pictures/product6/pic7.jpg +0 -0
  216. data/lib/nimbleshop/sampledata/pictures/product6/pic8.jpg +0 -0
  217. data/lib/nimbleshop/sampledata/pictures/product6/pic9.jpg +0 -0
  218. data/lib/nimbleshop/sampledata/pictures/product7/pic1.jpg +0 -0
  219. data/lib/nimbleshop/sampledata/pictures/product7/pic2.jpg +0 -0
  220. data/lib/nimbleshop/sampledata/pictures/product7/pic3.jpg +0 -0
  221. data/lib/nimbleshop/sampledata/pictures/product8/pic1.jpg +0 -0
  222. data/lib/nimbleshop/sampledata/pictures/product8/pic2.jpg +0 -0
  223. data/lib/nimbleshop/sampledata/pictures/product8/pic3.jpg +0 -0
  224. data/lib/nimbleshop/sampledata/pictures/product8/pic4.jpg +0 -0
  225. data/lib/nimbleshop/sampledata/pictures/product8/pic5.jpg +0 -0
  226. data/lib/nimbleshop/sampledata/pictures/product8/pic6.jpg +0 -0
  227. data/lib/nimbleshop/sampledata/pictures/product8/pic7.jpg +0 -0
  228. data/lib/nimbleshop/sampledata/pictures/product8/pic8.jpg +0 -0
  229. data/lib/nimbleshop/sampledata/pictures/product9/pic1.jpg +0 -0
  230. data/lib/nimbleshop/sampledata/pictures/product9/pic2.jpg +0 -0
  231. data/lib/nimbleshop/util.rb +60 -0
  232. data/lib/nimbleshop/version.rb +18 -0
  233. data/lib/nimbleshop_core.rb +23 -0
  234. data/lib/tasks/localhost2public.rake +8 -0
  235. data/lib/tasks/setup.rake +26 -0
  236. data/test/factories/address_factory.rb +31 -0
  237. data/test/factories/creditcard_factory.rb +30 -0
  238. data/test/factories/custom_field_answer_factory.rb +6 -0
  239. data/test/factories/custom_field_factory.rb +21 -0
  240. data/test/factories/line_item_factory.rb +7 -0
  241. data/test/factories/link_factory.rb +6 -0
  242. data/test/factories/link_group_factory.rb +5 -0
  243. data/test/factories/navigation_factory.rb +6 -0
  244. data/test/factories/order_factory.rb +49 -0
  245. data/test/factories/payment_method_factory.rb +6 -0
  246. data/test/factories/payment_transaction_factory.rb +42 -0
  247. data/test/factories/picture_factory.rb +11 -0
  248. data/test/factories/product_group_condition_factory.rb +40 -0
  249. data/test/factories/product_group_factory.rb +5 -0
  250. data/test/factories/products_factory.rb +11 -0
  251. data/test/factories/shipment_carrier_factory.rb +6 -0
  252. data/test/factories/shipment_factory.rb +6 -0
  253. data/test/factories/shipping_method_factory.rb +15 -0
  254. data/test/factories/shipping_zone_factory.rb +5 -0
  255. data/test/factories/shop_factory.rb +8 -0
  256. data/test/fixtures/files/avatar.png +0 -0
  257. data/test/fixtures/link_groups.yml +13 -0
  258. data/test/fixtures/payment_methods.yml +39 -0
  259. data/test/fixtures/shops.yml +15 -0
  260. data/test/helpers/admin_helper_test.rb +37 -0
  261. data/test/helpers/nimbleshop_helper_test.rb +17 -0
  262. data/test/integration/admin/link_groups_acceptance_test.rb +39 -0
  263. data/test/integration/admin/orders_acceptance_test.rb +63 -0
  264. data/test/integration/admin/payment_methods_acceptance_test.rb +13 -0
  265. data/test/integration/admin/product_groups_acceptance_test.rb +89 -0
  266. data/test/integration/admin/products_acceptance_test.rb +105 -0
  267. data/test/integration/admin/shipping_methods_acceptance_test.rb +63 -0
  268. data/test/integration/admin/shipping_zones_acceptance_test.rb +16 -0
  269. data/test/integration/admin/shops_acceptance_test.rb +44 -0
  270. data/test/integration/checkout/cart_acceptance_test.rb +113 -0
  271. data/test/integration/checkout/payment_confirmation_acceptance_test.rb +24 -0
  272. data/test/integration/checkout/paypal_acceptance_test.rb +34 -0
  273. data/test/integration/checkout/shipping_address_acceptance_test.rb +91 -0
  274. data/test/integration/checkout/shipping_method_acceptance_test.rb +51 -0
  275. data/test/integration/homepage_acceptance_test.rb +24 -0
  276. data/test/integration/products_acceptance_test.rb +12 -0
  277. data/test/integration/static_pages_acceptance_test.rb +13 -0
  278. data/test/mailers/mailer_test.rb +25 -0
  279. data/test/rails_app/Gemfile +27 -0
  280. data/test/rails_app/Gemfile.lock +218 -0
  281. data/test/rails_app/Rakefile +10 -0
  282. data/test/rails_app/app/controllers/application_controller.rb +6 -0
  283. data/test/rails_app/app/helpers/application_helper.rb +3 -0
  284. data/test/rails_app/app/views/layouts/application.html.erb +10 -0
  285. data/test/rails_app/config/application.rb +25 -0
  286. data/test/rails_app/config/application.yml +61 -0
  287. data/test/rails_app/config/boot.rb +5 -0
  288. data/test/rails_app/config/database.yml +18 -0
  289. data/test/rails_app/config/environment.rb +5 -0
  290. data/test/rails_app/config/environments/development.rb +18 -0
  291. data/test/rails_app/config/environments/production.rb +33 -0
  292. data/test/rails_app/config/environments/test.rb +33 -0
  293. data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
  294. data/test/rails_app/config/initializers/inflections.rb +2 -0
  295. data/test/rails_app/config/initializers/secret_token.rb +2 -0
  296. data/test/rails_app/config/routes.rb +10 -0
  297. data/test/rails_app/config.ru +4 -0
  298. data/test/rails_app/db/development.sqlite3 +0 -0
  299. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +74 -0
  300. data/test/rails_app/db/schema.rb +52 -0
  301. data/test/rails_app/log/development.log +94 -0
  302. data/test/rails_app/log/test.log +0 -0
  303. data/test/rails_app/public/404.html +26 -0
  304. data/test/rails_app/public/422.html +26 -0
  305. data/test/rails_app/public/500.html +26 -0
  306. data/test/rails_app/public/favicon.ico +0 -0
  307. data/test/rails_app/script/rails +10 -0
  308. data/test/support/address_test_helper.rb +24 -0
  309. data/test/support/checkout_test_helper.rb +40 -0
  310. data/test/support/dbify_sql_helper.rb +12 -0
  311. data/test/support/images/cookware.jpg +0 -0
  312. data/test/support/must_be_like.rb +24 -0
  313. data/test/support/shipping_method_test_helper.rb +5 -0
  314. data/test/support/wait_for_ajax.rb +4 -0
  315. data/test/test_helper.rb +65 -0
  316. data/test/unit/address_test.rb +33 -0
  317. data/test/unit/country_shipping_zone_test.rb +17 -0
  318. data/test/unit/creditcard_test.rb +33 -0
  319. data/test/unit/custom_field_answer/field_test.rb +93 -0
  320. data/test/unit/order_test.rb +70 -0
  321. data/test/unit/payment_method/authorizedotnet_test.rb +21 -0
  322. data/test/unit/payment_method/paypalwp_test.rb +17 -0
  323. data/test/unit/payment_method/splitable_test.rb +18 -0
  324. data/test/unit/picture_test.rb +24 -0
  325. data/test/unit/processor/authorize_net_test.rb +236 -0
  326. data/test/unit/processor/paypal_test.rb +40 -0
  327. data/test/unit/processor/splitable_test.rb +123 -0
  328. data/test/unit/product_group_condition_test.rb +188 -0
  329. data/test/unit/product_group_test.rb +109 -0
  330. data/test/unit/product_test.rb +60 -0
  331. data/test/unit/shipping_cost_calculator_test.rb +19 -0
  332. data/test/unit/shipping_method_test.rb +197 -0
  333. data/test/unit/shop_test.rb +11 -0
  334. data/test/unit/tax_calculator_test.rb +13 -0
  335. data/test/vcr_cassettes/authorize_net/authorize-failure.yml +38 -0
  336. data/test/vcr_cassettes/authorize_net/authorize-success.yml +38 -0
  337. data/test/vcr_cassettes/authorize_net/capture-failure.yml +38 -0
  338. data/test/vcr_cassettes/authorize_net/capture-success.yml +38 -0
  339. data/test/vcr_cassettes/authorize_net/purchase-failure.yml +38 -0
  340. data/test/vcr_cassettes/authorize_net/purchase-success.yml +38 -0
  341. data/test/vcr_cassettes/authorize_net/refund-failure.yml +38 -0
  342. data/test/vcr_cassettes/authorize_net/refund-success.yml +38 -0
  343. data/test/vcr_cassettes/authorize_net/void-authorize.yml +38 -0
  344. data/test/vcr_cassettes/authorize_net/void-failure.yml +38 -0
  345. data/test/vcr_cassettes/authorize_net/void-success.yml +38 -0
  346. data/test/vcr_cassettes/splitable/split-create-failure.yml +48 -0
  347. data/test/vcr_cassettes/splitable/split-create-success.yml +50 -0
  348. data/test/vcr_cassettes/splitable/split-draft-create-failure.yml +50 -0
  349. data/test/vcr_cassettes/splitable/split-draft-create-success.yml +50 -0
  350. data/vendor/assets/javascripts/accounting.js +406 -0
  351. data/vendor/assets/javascripts/autoresize.js +275 -0
  352. data/vendor/assets/javascripts/jquery-1.7.1.js +9267 -0
  353. data/vendor/assets/javascripts/jquery-form.js +980 -0
  354. data/vendor/assets/javascripts/jquery-json.js +193 -0
  355. data/vendor/assets/javascripts/jquery-ui-1.8.16.js +11768 -0
  356. data/vendor/assets/javascripts/jquery-ujs.js +374 -0
  357. data/vendor/assets/javascripts/mustache.js +436 -0
  358. data/vendor/assets/javascripts/nested_form.js +51 -0
  359. metadata +740 -0
@@ -0,0 +1,16 @@
1
+ class CreateProducts < ActiveRecord::Migration
2
+ def change
3
+ create_table :products do |t|
4
+ t.string :name, null: false
5
+ t.string :status, null: false, default: 'active'
6
+ t.text :description
7
+ t.decimal :price, null: false, precision: 8, scale: 2
8
+ t.boolean :new, null: false, default: false
9
+ t.string :permalink, null: false
10
+
11
+ t.timestamps
12
+ end
13
+ add_index :products, :permalink, unique: true
14
+ end
15
+
16
+ end
@@ -0,0 +1,21 @@
1
+ class CreateOrders < ActiveRecord::Migration
2
+ def change
3
+ create_table :orders do |t|
4
+ t.string :number, null: false
5
+ t.belongs_to :shipping_method, null: true
6
+ t.belongs_to :payment_method, null: true
7
+ t.string :email, null: true
8
+ t.string :status, null: false, default: 'open'
9
+ t.string :payment_status, null: false, default: 'abandoned'
10
+ t.string :shipping_status, null: false, default: 'nothing_to_ship'
11
+ t.string :checkout_status, null: false, default: 'items_added_to_cart'
12
+ t.datetime :shipped_at, null: true
13
+ t.datetime :purchased_at, null: true
14
+ t.text :metadata
15
+
16
+ t.timestamps
17
+ end
18
+ add_index :orders, :number, unique: true
19
+ end
20
+
21
+ end
@@ -0,0 +1,15 @@
1
+ class CreateLineItems < ActiveRecord::Migration
2
+ def change
3
+ create_table :line_items do |t|
4
+ t.belongs_to :order, null: false
5
+ t.belongs_to :product, null: false
6
+ t.integer :quantity, null: false
7
+ t.string :product_name, null: false
8
+ t.text :product_description
9
+ t.decimal :product_price, null: false, precision: 8, scale: 2
10
+ t.text :metadata
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ class CreateShops < ActiveRecord::Migration
2
+ def change
3
+ create_table :shops do |t|
4
+ t.string :name, null: false
5
+ t.string :author_name, null: true
6
+ t.string :description, null: true
7
+ t.string :theme, null: false, default: 'simply'
8
+ t.string :time_zone, null: false, default: 'UTC'
9
+ t.string :from_email, null: false
10
+ t.string :default_creditcard_action, null: false, default: 'authorize'
11
+ t.string :phone_number
12
+ t.string :twitter_handle
13
+ t.string :facebook_url
14
+ t.string :google_analytics_tracking_id
15
+ t.decimal :tax_percentage, precision: 4, scale: 2, null: false, default: 0
16
+
17
+ t.timestamps
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,12 @@
1
+ class CreateLinkGroups < ActiveRecord::Migration
2
+ def change
3
+ create_table :link_groups do |t|
4
+ t.string :name, null: false
5
+ t.string :permalink, null: false
6
+
7
+ t.timestamps
8
+ end
9
+ add_index :link_groups, :name, unique: true
10
+ add_index :link_groups, :permalink, unique: true
11
+ end
12
+ end
@@ -0,0 +1,10 @@
1
+ class CreateNavigations < ActiveRecord::Migration
2
+ def change
3
+ create_table :navigations do |t|
4
+ t.belongs_to :link_group, null: false
5
+ t.belongs_to :product_group, null: false
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class CreateLinks < ActiveRecord::Migration
2
+ def change
3
+ create_table :links do |t|
4
+ t.string :name, null: false
5
+ t.string :url, null: false
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class CreateCustomFields < ActiveRecord::Migration
2
+ def change
3
+ create_table :custom_fields do |t|
4
+ t.string :name, null: false
5
+ t.string :field_type, null: false
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,14 @@
1
+ class CreateCustomFieldAnswers < ActiveRecord::Migration
2
+ def change
3
+ create_table :custom_field_answers do |t|
4
+ t.belongs_to :product
5
+ t.belongs_to :custom_field
6
+ t.string :value
7
+ t.string :text_value
8
+ t.integer :number_value
9
+ t.datetime :datetime_value
10
+
11
+ t.timestamps
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ class CreateProductGroupConditions < ActiveRecord::Migration
2
+ def change
3
+ create_table :product_group_conditions do |t|
4
+ t.belongs_to :product_group
5
+ t.string :name, null: false
6
+ t.string :operator, null: false
7
+ t.string :value
8
+
9
+ t.timestamps
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ class CreateCreditcardTransactions < ActiveRecord::Migration
2
+ def change
3
+ create_table :payment_transactions do |t|
4
+ t.belongs_to :order, null: false
5
+ t.string :transaction_gid, null: false
6
+ t.text :params, null: false
7
+ t.boolean :success, null: false
8
+ t.string :operation, null: false
9
+ t.integer :amount
10
+ t.text :metadata
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,24 @@
1
+ class CreateAddresses < ActiveRecord::Migration
2
+ def change
3
+ create_table :addresses do |t|
4
+ t.string :type
5
+ t.belongs_to :order
6
+ t.string :first_name, null: false
7
+ t.string :last_name
8
+ t.string :company
9
+ t.string :address1, null: false
10
+ t.string :address2
11
+ t.string :city, null: false
12
+ t.string :zipcode
13
+ t.string :country_name, null: false
14
+ t.string :country_code, null: false
15
+ t.string :state_name, null: false
16
+ t.string :state_code
17
+ t.string :phone
18
+ t.string :fax
19
+ t.boolean :use_for_billing, null: false, default: true
20
+
21
+ t.timestamps
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ class CreatePictures < ActiveRecord::Migration
2
+
3
+ def change
4
+ create_table :pictures do |t|
5
+ t.belongs_to :product
6
+ t.string :picture
7
+ t.string :file_name
8
+ t.string :content_type
9
+ t.string :file_size
10
+ t.integer :position, default: 0
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,16 @@
1
+ class CreateShippingMethods < ActiveRecord::Migration
2
+ def change
3
+ create_table :shipping_methods do |t|
4
+ t.belongs_to :shipping_zone, null: false
5
+ t.string :name, null: false
6
+ t.decimal :minimum_order_amount, precision: 8, scale: 2
7
+ t.decimal :maximum_order_amount, precision: 8, scale: 2
8
+ t.decimal :base_price, precision: 8, scale: 2
9
+ t.decimal :offset, precision: 8, scale: 2, default: 0
10
+ t.boolean :active, null: false, default: true
11
+ t.integer :parent_id
12
+
13
+ t.timestamps
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ class CreateShippingZones < ActiveRecord::Migration
2
+
3
+ def change
4
+ create_table :shipping_zones do |t|
5
+ t.string :name
6
+ t.string :permalink, null: false
7
+ t.string :country_code
8
+ t.string :state_code
9
+ t.string :type, null: true
10
+ t.integer :country_shipping_zone_id
11
+ t.timestamps
12
+ end
13
+
14
+ add_index :shipping_zones, :permalink, unique: true
15
+ end
16
+
17
+ end
@@ -0,0 +1,14 @@
1
+ class CreatePaymentMethods < ActiveRecord::Migration
2
+ def change
3
+ create_table :payment_methods do |t|
4
+ t.string :name
5
+ t.text :description
6
+ t.string :type
7
+ t.string :permalink, null: false
8
+ t.text :metadata
9
+
10
+ t.timestamps
11
+ end
12
+ add_index :payment_methods, :permalink, unique: true
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ class CreatePreferences < ActiveRecord::Migration
2
+ def change
3
+ create_table :preferences do |t|
4
+ t.string :name, null: false
5
+ t.references :owner, polymorphic: true, null: false
6
+ t.references :group, polymorphic: true
7
+ t.string :value
8
+ t.timestamps
9
+ end
10
+
11
+ add_index :preferences, [:owner_id, :owner_type, :name, :group_id, :group_type], :unique => true, :name => 'index_preferences_on_owner_and_name_and_preference'
12
+
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ class CreateShipments < ActiveRecord::Migration
2
+ def change
3
+ create_table :shipments do |t|
4
+ t.string :tracking_number, null: true
5
+ t.belongs_to :shipment_carrier, null: false
6
+ t.belongs_to :order, null: false
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ class CreateShipmentCarriers < ActiveRecord::Migration
2
+ def change
3
+ create_table :shipment_carriers do |t|
4
+ t.string :name, null: false
5
+ t.string :permalink, null: false
6
+
7
+ t.timestamps
8
+ end
9
+ add_index :shipment_carriers, :permalink, unique: true
10
+ end
11
+ end
@@ -0,0 +1,22 @@
1
+ class CreateDelayedJobs < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :delayed_jobs, :force => true do |table|
4
+ table.integer :priority, :default => 0 # Allows some jobs to jump to the front of the queue
5
+ table.integer :attempts, :default => 0 # Provides for retries, but still fail eventually.
6
+ table.text :handler # YAML-encoded string of the object that will do work
7
+ table.text :last_error # reason for last failure (See Note below)
8
+ table.datetime :run_at # When to run. Could be Time.zone.now for immediately, or sometime in the future.
9
+ table.datetime :locked_at # Set when a client is working on this object
10
+ table.datetime :failed_at # Set when all retries have failed (actually, by default, the record is deleted instead)
11
+ table.string :locked_by # Who is working on this object (if locked)
12
+ table.string :queue # The name of the queue this job is in
13
+ table.timestamps
14
+ end
15
+
16
+ add_index :delayed_jobs, [:priority, :run_at], :name => 'delayed_jobs_priority'
17
+ end
18
+
19
+ def self.down
20
+ drop_table :delayed_jobs
21
+ end
22
+ end
Binary file
data/db/schema.rb ADDED
@@ -0,0 +1,265 @@
1
+ # encoding: UTF-8
2
+ # This file is auto-generated from the current state of the database. Instead
3
+ # of editing this file, please use the migrations feature of Active Record to
4
+ # incrementally modify your database, and then regenerate this schema definition.
5
+ #
6
+ # Note that this schema.rb definition is the authoritative source for your
7
+ # database schema. If you need to create the application database on another
8
+ # system, you should be using db:schema:load, not running all the migrations
9
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
10
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
11
+ #
12
+ # It's strongly recommended to check this file into your version control system.
13
+
14
+ ActiveRecord::Schema.define(:version => 20120606165355) do
15
+
16
+ create_table "addresses", :force => true do |t|
17
+ t.string "type"
18
+ t.integer "order_id"
19
+ t.string "first_name", :null => false
20
+ t.string "last_name"
21
+ t.string "company"
22
+ t.string "address1", :null => false
23
+ t.string "address2"
24
+ t.string "city", :null => false
25
+ t.string "zipcode"
26
+ t.string "country_name", :null => false
27
+ t.string "country_code", :null => false
28
+ t.string "state_name", :null => false
29
+ t.string "state_code"
30
+ t.string "phone"
31
+ t.string "fax"
32
+ t.boolean "use_for_billing", :default => true, :null => false
33
+ t.datetime "created_at", :null => false
34
+ t.datetime "updated_at", :null => false
35
+ end
36
+
37
+ create_table "custom_field_answers", :force => true do |t|
38
+ t.integer "product_id"
39
+ t.integer "custom_field_id"
40
+ t.string "value"
41
+ t.string "text_value"
42
+ t.integer "number_value"
43
+ t.datetime "datetime_value"
44
+ t.datetime "created_at", :null => false
45
+ t.datetime "updated_at", :null => false
46
+ end
47
+
48
+ create_table "custom_fields", :force => true do |t|
49
+ t.string "name", :null => false
50
+ t.string "field_type", :null => false
51
+ t.datetime "created_at", :null => false
52
+ t.datetime "updated_at", :null => false
53
+ end
54
+
55
+ create_table "delayed_jobs", :force => true do |t|
56
+ t.integer "priority", :default => 0
57
+ t.integer "attempts", :default => 0
58
+ t.text "handler"
59
+ t.text "last_error"
60
+ t.datetime "run_at"
61
+ t.datetime "locked_at"
62
+ t.datetime "failed_at"
63
+ t.string "locked_by"
64
+ t.string "queue"
65
+ t.datetime "created_at", :null => false
66
+ t.datetime "updated_at", :null => false
67
+ end
68
+
69
+ add_index "delayed_jobs", ["priority", "run_at"], :name => "delayed_jobs_priority"
70
+
71
+ create_table "line_items", :force => true do |t|
72
+ t.integer "order_id", :null => false
73
+ t.integer "product_id", :null => false
74
+ t.integer "quantity", :null => false
75
+ t.string "product_name", :null => false
76
+ t.text "product_description"
77
+ t.decimal "product_price", :precision => 8, :scale => 2, :null => false
78
+ t.text "metadata"
79
+ t.datetime "created_at", :null => false
80
+ t.datetime "updated_at", :null => false
81
+ end
82
+
83
+ create_table "link_groups", :force => true do |t|
84
+ t.string "name", :null => false
85
+ t.string "permalink", :null => false
86
+ t.datetime "created_at", :null => false
87
+ t.datetime "updated_at", :null => false
88
+ end
89
+
90
+ add_index "link_groups", ["name"], :name => "index_link_groups_on_name", :unique => true
91
+ add_index "link_groups", ["permalink"], :name => "index_link_groups_on_permalink", :unique => true
92
+
93
+ create_table "links", :force => true do |t|
94
+ t.string "name", :null => false
95
+ t.string "url", :null => false
96
+ t.datetime "created_at", :null => false
97
+ t.datetime "updated_at", :null => false
98
+ end
99
+
100
+ create_table "navigations", :force => true do |t|
101
+ t.integer "link_group_id", :null => false
102
+ t.integer "product_group_id", :null => false
103
+ t.datetime "created_at", :null => false
104
+ t.datetime "updated_at", :null => false
105
+ end
106
+
107
+ create_table "orders", :force => true do |t|
108
+ t.string "number", :null => false
109
+ t.integer "shipping_method_id"
110
+ t.integer "payment_method_id"
111
+ t.string "email"
112
+ t.string "status", :default => "open", :null => false
113
+ t.string "payment_status", :default => "abandoned", :null => false
114
+ t.string "shipping_status", :default => "nothing_to_ship", :null => false
115
+ t.string "checkout_status", :default => "items_added_to_cart", :null => false
116
+ t.datetime "shipped_at"
117
+ t.datetime "purchased_at"
118
+ t.text "metadata"
119
+ t.datetime "created_at", :null => false
120
+ t.datetime "updated_at", :null => false
121
+ end
122
+
123
+ add_index "orders", ["number"], :name => "index_orders_on_number", :unique => true
124
+
125
+ create_table "payment_methods", :force => true do |t|
126
+ t.string "name"
127
+ t.text "description"
128
+ t.string "type"
129
+ t.string "permalink", :null => false
130
+ t.text "metadata"
131
+ t.datetime "created_at", :null => false
132
+ t.datetime "updated_at", :null => false
133
+ end
134
+
135
+ add_index "payment_methods", ["permalink"], :name => "index_payment_methods_on_permalink", :unique => true
136
+
137
+ create_table "payment_transactions", :force => true do |t|
138
+ t.integer "order_id", :null => false
139
+ t.string "transaction_gid", :null => false
140
+ t.text "params", :null => false
141
+ t.boolean "success", :null => false
142
+ t.string "operation", :null => false
143
+ t.integer "amount"
144
+ t.text "metadata"
145
+ t.datetime "created_at", :null => false
146
+ t.datetime "updated_at", :null => false
147
+ end
148
+
149
+ create_table "pictures", :force => true do |t|
150
+ t.integer "product_id"
151
+ t.string "picture"
152
+ t.string "file_name"
153
+ t.string "content_type"
154
+ t.string "file_size"
155
+ t.integer "position", :default => 0
156
+ t.datetime "created_at", :null => false
157
+ t.datetime "updated_at", :null => false
158
+ end
159
+
160
+ create_table "preferences", :force => true do |t|
161
+ t.string "name", :null => false
162
+ t.integer "owner_id", :null => false
163
+ t.string "owner_type", :null => false
164
+ t.integer "group_id"
165
+ t.string "group_type"
166
+ t.string "value"
167
+ t.datetime "created_at", :null => false
168
+ t.datetime "updated_at", :null => false
169
+ end
170
+
171
+ add_index "preferences", ["owner_id", "owner_type", "name", "group_id", "group_type"], :name => "index_preferences_on_owner_and_name_and_preference", :unique => true
172
+
173
+ create_table "product_group_conditions", :force => true do |t|
174
+ t.integer "product_group_id"
175
+ t.string "name", :null => false
176
+ t.string "operator", :null => false
177
+ t.string "value"
178
+ t.datetime "created_at", :null => false
179
+ t.datetime "updated_at", :null => false
180
+ end
181
+
182
+ create_table "product_groups", :force => true do |t|
183
+ t.string "name", :null => false
184
+ t.string "permalink", :null => false
185
+ t.datetime "created_at", :null => false
186
+ t.datetime "updated_at", :null => false
187
+ end
188
+
189
+ add_index "product_groups", ["name"], :name => "index_product_groups_on_name", :unique => true
190
+ add_index "product_groups", ["permalink"], :name => "index_product_groups_on_permalink", :unique => true
191
+
192
+ create_table "products", :force => true do |t|
193
+ t.string "name", :null => false
194
+ t.string "status", :default => "active", :null => false
195
+ t.text "description"
196
+ t.decimal "price", :precision => 8, :scale => 2, :null => false
197
+ t.boolean "new", :default => false, :null => false
198
+ t.string "permalink", :null => false
199
+ t.datetime "created_at", :null => false
200
+ t.datetime "updated_at", :null => false
201
+ end
202
+
203
+ add_index "products", ["permalink"], :name => "index_products_on_permalink", :unique => true
204
+
205
+ create_table "shipment_carriers", :force => true do |t|
206
+ t.string "name", :null => false
207
+ t.string "permalink", :null => false
208
+ t.datetime "created_at", :null => false
209
+ t.datetime "updated_at", :null => false
210
+ end
211
+
212
+ add_index "shipment_carriers", ["permalink"], :name => "index_shipment_carriers_on_permalink", :unique => true
213
+
214
+ create_table "shipments", :force => true do |t|
215
+ t.string "tracking_number"
216
+ t.integer "shipment_carrier_id", :null => false
217
+ t.integer "order_id", :null => false
218
+ t.datetime "created_at", :null => false
219
+ t.datetime "updated_at", :null => false
220
+ end
221
+
222
+ create_table "shipping_methods", :force => true do |t|
223
+ t.integer "shipping_zone_id", :null => false
224
+ t.string "name", :null => false
225
+ t.decimal "minimum_order_amount", :precision => 8, :scale => 2
226
+ t.decimal "maximum_order_amount", :precision => 8, :scale => 2
227
+ t.decimal "base_price", :precision => 8, :scale => 2
228
+ t.decimal "offset", :precision => 8, :scale => 2, :default => 0.0
229
+ t.boolean "active", :default => true, :null => false
230
+ t.integer "parent_id"
231
+ t.datetime "created_at", :null => false
232
+ t.datetime "updated_at", :null => false
233
+ end
234
+
235
+ create_table "shipping_zones", :force => true do |t|
236
+ t.string "name"
237
+ t.string "permalink", :null => false
238
+ t.string "country_code"
239
+ t.string "state_code"
240
+ t.string "type"
241
+ t.integer "country_shipping_zone_id"
242
+ t.datetime "created_at", :null => false
243
+ t.datetime "updated_at", :null => false
244
+ end
245
+
246
+ add_index "shipping_zones", ["permalink"], :name => "index_shipping_zones_on_permalink", :unique => true
247
+
248
+ create_table "shops", :force => true do |t|
249
+ t.string "name", :null => false
250
+ t.string "author_name"
251
+ t.string "description"
252
+ t.string "theme", :default => "simply", :null => false
253
+ t.string "time_zone", :default => "UTC", :null => false
254
+ t.string "from_email", :null => false
255
+ t.string "default_creditcard_action", :default => "authorize", :null => false
256
+ t.string "phone_number"
257
+ t.string "twitter_handle"
258
+ t.string "facebook_url"
259
+ t.string "google_analytics_tracking_id"
260
+ t.decimal "tax_percentage", :precision => 4, :scale => 2, :default => 0.0, :null => false
261
+ t.datetime "created_at", :null => false
262
+ t.datetime "updated_at", :null => false
263
+ end
264
+
265
+ end
data/db/seeds.rb ADDED
@@ -0,0 +1 @@
1
+
data/db/test.sqlite3 ADDED
Binary file
@@ -0,0 +1,3 @@
1
+ $ ->
2
+ $("[data-loading-text]").click (evt)->
3
+ $(this).button 'loading'
@@ -0,0 +1,2 @@
1
+ $ ->
2
+ $("[data-original-title]").popover()
@@ -0,0 +1,3 @@
1
+ $ ->
2
+ $(".autoresize").autoResize maxHeight: 300
3
+
@@ -0,0 +1,3 @@
1
+ $ ->
2
+ $("input.focus:first").focus()
3
+
@@ -0,0 +1,25 @@
1
+ #= require accounting.js
2
+
3
+ # This utility function formats a value to a meaningful number.
4
+ #
5
+ # Usage:
6
+ # <%= f.text_field :tax_percentage, class: 'span8', 'data-behavior' => 'number-formatted', 'data-behavior-precision' => 2 %>
7
+ #
8
+ # Value in the tax field | After tabbing away the value becomes
9
+ # 1.2 | 1.20
10
+ # 1 | 1.00
11
+ # 1.2111 | 1.21
12
+ # abcd | 0.00
13
+ #
14
+
15
+ $ ->
16
+ $('[data-behavior~=number-formatted]').on 'focus blur paste change', ()->
17
+
18
+ precision = $(this).data('behavior-precision')
19
+ if precision is undefined
20
+ precision = accounting.settings.number.precision
21
+
22
+ result = accounting.formatNumber($(this).val(), precision)
23
+ $(this).val(result)
24
+
25
+ $('[data-behavior~=number-formatted]').trigger('change')