nimbleshop_core 0.0.1.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +13 -0
- data/Rakefile +15 -0
- data/app/assets/images/engines/nimbleshop_authorizedotnet/american_express.png +0 -0
- data/app/assets/images/engines/nimbleshop_authorizedotnet/authorize_net_big.png +0 -0
- data/app/assets/images/engines/nimbleshop_authorizedotnet/authorizedotnet_big.png +0 -0
- data/app/assets/images/engines/nimbleshop_authorizedotnet/discover.png +0 -0
- data/app/assets/images/engines/nimbleshop_authorizedotnet/mastercard.png +0 -0
- data/app/assets/images/engines/nimbleshop_authorizedotnet/visa.png +0 -0
- data/app/assets/images/engines/nimbleshop_cod/cod_small.png +0 -0
- data/app/assets/images/engines/nimbleshop_paypalwp/paypal_big.png +0 -0
- data/app/assets/images/engines/nimbleshop_paypalwp/paypal_small.png +0 -0
- data/app/assets/images/engines/nimbleshop_splitable/splitable.png +0 -0
- data/app/assets/images/engines/nimbleshop_splitable/splitable_big.png +0 -0
- data/app/assets/images/engines/nimbleshop_splitable/splitable_small.png +0 -0
- data/app/assets/javascripts/admin/products/edit.js.coffee +19 -0
- data/app/assets/javascripts/admin/shipping_methods/edit.js.coffee +6 -0
- data/app/assets/javascripts/admin.js +25 -0
- data/app/assets/javascripts/fadeout_success.js.coffee +2 -0
- data/app/assets/javascripts/payment_method.js.coffee +19 -0
- data/app/assets/javascripts/product-group-condition.js.coffee +33 -0
- data/app/assets/javascripts/remove_deletion_of_product_pictures.js.coffee +5 -0
- data/app/assets/javascripts/shipit.js.coffee +10 -0
- data/app/assets/javascripts/twitter_bootstrap.js.coffee +4 -0
- data/app/assets/stylesheets/admin.css +9 -0
- data/app/assets/stylesheets/admin_bootstrap_and_overrides.css.less +38 -0
- data/app/assets/stylesheets/admin_custom.css +104 -0
- data/app/assets/twitter/bootstrap/glyphicons-halflings-white.png +0 -0
- data/app/assets/twitter/bootstrap/glyphicons-halflings.png +0 -0
- data/app/controllers/admin/custom_fields_controller.rb +56 -0
- data/app/controllers/admin/link_groups_controller.rb +76 -0
- data/app/controllers/admin/main_controller.rb +9 -0
- data/app/controllers/admin/navigations_controller.rb +49 -0
- data/app/controllers/admin/orders_controller.rb +47 -0
- data/app/controllers/admin/payment_methods_controller.rb +26 -0
- data/app/controllers/admin/product_groups_controller.rb +70 -0
- data/app/controllers/admin/products_controller.rb +71 -0
- data/app/controllers/admin/shipments_controller.rb +19 -0
- data/app/controllers/admin/shipping_methods_controller.rb +93 -0
- data/app/controllers/admin/shipping_zones_controller.rb +62 -0
- data/app/controllers/admin/shops_controller.rb +33 -0
- data/app/controllers/admin_controller.rb +38 -0
- data/app/helpers/admin_helper.rb +83 -0
- data/app/helpers/nimbleshop_helper.rb +43 -0
- data/app/helpers/payment_method_helper.rb +52 -0
- data/app/mailers/admin_mailer.rb +22 -0
- data/app/mailers/mailer.rb +31 -0
- data/app/models/address.rb +69 -0
- data/app/models/country_shipping_zone.rb +36 -0
- data/app/models/creditcard.rb +95 -0
- data/app/models/custom_field.rb +8 -0
- data/app/models/custom_field_answer/field.rb +101 -0
- data/app/models/custom_field_answer.rb +17 -0
- data/app/models/line_item.rb +48 -0
- data/app/models/link.rb +3 -0
- data/app/models/link_group.rb +8 -0
- data/app/models/navigation.rb +7 -0
- data/app/models/order.rb +158 -0
- data/app/models/payment_method.rb +20 -0
- data/app/models/payment_transaction.rb +11 -0
- data/app/models/picture.rb +30 -0
- data/app/models/product.rb +76 -0
- data/app/models/product_group.rb +65 -0
- data/app/models/product_group_condition.rb +8 -0
- data/app/models/regional_shipping_zone.rb +25 -0
- data/app/models/shipment.rb +19 -0
- data/app/models/shipment_carrier.rb +3 -0
- data/app/models/shipping_cost_calculator.rb +9 -0
- data/app/models/shipping_method.rb +103 -0
- data/app/models/shipping_zone.rb +9 -0
- data/app/models/shop.rb +26 -0
- data/app/models/tax_calculator.rb +18 -0
- data/app/observers/order_observer.rb +53 -0
- data/app/uploaders/picture_uploader.rb +65 -0
- data/app/views/admin/custom_fields/_form.html.erb +45 -0
- data/app/views/admin/custom_fields/edit.html.erb +7 -0
- data/app/views/admin/custom_fields/index.html.erb +31 -0
- data/app/views/admin/custom_fields/new.html.erb +7 -0
- data/app/views/admin/link_groups/_form.html.erb +31 -0
- data/app/views/admin/link_groups/_link_group.html.erb +50 -0
- data/app/views/admin/link_groups/_link_group_title.html.erb +5 -0
- data/app/views/admin/link_groups/edit.html.erb +8 -0
- data/app/views/admin/link_groups/index.html.erb +29 -0
- data/app/views/admin/link_groups/new.html.erb +9 -0
- data/app/views/admin/mailer/new_order_notification.text.erb +31 -0
- data/app/views/admin/main/index.html.erb +5 -0
- data/app/views/admin/navigations/new.html.erb +29 -0
- data/app/views/admin/orders/_line_item.html.erb +11 -0
- data/app/views/admin/orders/_line_items.html.erb +39 -0
- data/app/views/admin/orders/_payment_info.html.erb +20 -0
- data/app/views/admin/orders/_shipping_info.html.erb +40 -0
- data/app/views/admin/orders/index.html.erb +33 -0
- data/app/views/admin/orders/show.html.erb +40 -0
- data/app/views/admin/payment_methods/index.html.erb +6 -0
- data/app/views/admin/product_groups/_condition.html.mustache +20 -0
- data/app/views/admin/product_groups/_form.html.erb +72 -0
- data/app/views/admin/product_groups/edit.html.erb +7 -0
- data/app/views/admin/product_groups/index.html.erb +30 -0
- data/app/views/admin/product_groups/new.html.erb +7 -0
- data/app/views/admin/product_groups/show.html.erb +9 -0
- data/app/views/admin/products/_custom_field_answer.html.erb +9 -0
- data/app/views/admin/products/_form.html.erb +69 -0
- data/app/views/admin/products/_handle_pictures.html.erb +32 -0
- data/app/views/admin/products/_pictures.html.erb +33 -0
- data/app/views/admin/products/edit.html.erb +26 -0
- data/app/views/admin/products/index.html.erb +34 -0
- data/app/views/admin/products/new.html.erb +9 -0
- data/app/views/admin/shipping_methods/_form.html.erb +58 -0
- data/app/views/admin/shipping_methods/_shipping_method.html.erb +31 -0
- data/app/views/admin/shipping_methods/edit.html.erb +18 -0
- data/app/views/admin/shipping_methods/new.html.erb +7 -0
- data/app/views/admin/shipping_zones/_form.html.erb +31 -0
- data/app/views/admin/shipping_zones/_shipping_method.html.erb +13 -0
- data/app/views/admin/shipping_zones/_shipping_zone.html.erb +47 -0
- data/app/views/admin/shipping_zones/edit.html.erb +8 -0
- data/app/views/admin/shipping_zones/index.html.erb +16 -0
- data/app/views/admin/shipping_zones/new.html.erb +8 -0
- data/app/views/admin/shops/edit.html.erb +119 -0
- data/app/views/layouts/_admin_footer.html.erb +23 -0
- data/app/views/layouts/_admin_sidebar.html.erb +0 -0
- data/app/views/layouts/_container.html.erb +33 -0
- data/app/views/layouts/_top_nav_bar.html.erb +30 -0
- data/app/views/layouts/admin.html.erb +35 -0
- data/app/views/layouts/payment_method.html.erb +12 -0
- data/app/views/mailer/order_notification_to_buyer.text.erb +31 -0
- data/app/views/mailer/shipment_notification_to_buyer.text.erb +34 -0
- data/config/initializers/001_settings_application.rb +10 -0
- data/config/initializers/002_load_core_extensions.rb +8 -0
- data/config/initializers/field_with_error.rb +2 -0
- data/config/initializers/strip_and_nullify.rb +13 -0
- data/config/initializers/time_formats.rb +1 -0
- data/config/locales/en.yml +61 -0
- data/config/routes.rb +56 -0
- data/db/development.sqlite3 +0 -0
- data/db/migrate/20111022144421_create_product_groups.rb +12 -0
- data/db/migrate/20111022144426_create_products.rb +16 -0
- data/db/migrate/20111022144653_create_orders.rb +21 -0
- data/db/migrate/20111022144725_create_line_items.rb +15 -0
- data/db/migrate/20111022234951_create_shops.rb +20 -0
- data/db/migrate/20111026193227_create_link_groups.rb +12 -0
- data/db/migrate/20111026193435_create_navigations.rb +10 -0
- data/db/migrate/20111031135810_create_links.rb +10 -0
- data/db/migrate/20111106193938_create_custom_fields.rb +10 -0
- data/db/migrate/20111106195112_create_custom_field_answers.rb +14 -0
- data/db/migrate/20111106201548_create_product_group_conditions.rb +12 -0
- data/db/migrate/20111107035350_create_creditcard_transactions.rb +15 -0
- data/db/migrate/20111109190754_create_addresses.rb +24 -0
- data/db/migrate/20111125173344_create_pictures.rb +16 -0
- data/db/migrate/20111201024408_create_shipping_methods.rb +16 -0
- data/db/migrate/20111202143154_create_shipping_zones.rb +17 -0
- data/db/migrate/20111203034020_create_payment_methods.rb +14 -0
- data/db/migrate/20111221190000_create_preferences.rb +14 -0
- data/db/migrate/20120105234047_create_shipments.rb +11 -0
- data/db/migrate/20120105234553_create_shipment_carriers.rb +11 -0
- data/db/migrate/20120606165355_create_delayed_jobs.rb +22 -0
- data/db/production.sqlite3 +0 -0
- data/db/schema.rb +265 -0
- data/db/seeds.rb +1 -0
- data/db/test.sqlite3 +0 -0
- data/lib/assets/javascripts/loading_state_for_buttons.js.coffee +3 -0
- data/lib/assets/javascripts/show_help_on_hover.js.coffee +2 -0
- data/lib/assets/javascripts/utils/autoresize.js.coffee +3 -0
- data/lib/assets/javascripts/utils/focus.js.coffee +3 -0
- data/lib/assets/javascripts/utils/formatNumber.js.coffee +25 -0
- data/lib/assets/javascripts/utils/formatPrice.js.coffee +24 -0
- data/lib/generators/nimbleshop/app/app_generator.rb +84 -0
- data/lib/generators/nimbleshop/app/templates/config/application.yml +61 -0
- data/lib/generators/nimbleshop/app/templates/config/initializers/airbrake.rb +3 -0
- data/lib/generators/nimbleshop/app/templates/config/initializers/cache_images.rb +4 -0
- data/lib/generators/nimbleshop/app/templates/config/initializers/carrierwave.rb +36 -0
- data/lib/generators/nimbleshop/app/templates/config/initializers/delayed_job.rb +15 -0
- data/lib/generators/nimbleshop/app/templates/config/initializers/setup_email.rb +24 -0
- data/lib/nimbleshop/core_ext/activerecord_base.rb +18 -0
- data/lib/nimbleshop/core_ext/filelessio.rb +4 -0
- data/lib/nimbleshop/core_ext/force_ssl.rb +26 -0
- data/lib/nimbleshop/core_ext/mustache_templater_handler.rb +10 -0
- data/lib/nimbleshop/engine.rb +23 -0
- data/lib/nimbleshop/permalink/builder.rb +46 -0
- data/lib/nimbleshop/processor/base.rb +51 -0
- data/lib/nimbleshop/processor.rb +3 -0
- data/lib/nimbleshop/product_group_search/base_field.rb +19 -0
- data/lib/nimbleshop/product_group_search/core_field_strategy.rb +31 -0
- data/lib/nimbleshop/product_group_search/custom_field_strategy.rb +39 -0
- data/lib/nimbleshop/product_group_search/date_field.rb +16 -0
- data/lib/nimbleshop/product_group_search/extension.rb +46 -0
- data/lib/nimbleshop/product_group_search/number_field.rb +17 -0
- data/lib/nimbleshop/product_group_search/text_field.rb +33 -0
- data/lib/nimbleshop/product_group_search.rb +74 -0
- data/lib/nimbleshop/sampledata/data.rb +246 -0
- data/lib/nimbleshop/sampledata/pictures/product1/pic1.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product2/pic1.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product2/pic2.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product3/pic1.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product3/pic2.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product3/pic3.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product3/pic4.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product3/pic5.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product4/pic1.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product4/pic2.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product5/pic1.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product5/pic2.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic1.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic10.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic11.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic12.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic13.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic14.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic15.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic16.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic17.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic2.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic3.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic4.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic5.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic6.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic7.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic8.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product6/pic9.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product7/pic1.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product7/pic2.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product7/pic3.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product8/pic1.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product8/pic2.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product8/pic3.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product8/pic4.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product8/pic5.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product8/pic6.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product8/pic7.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product8/pic8.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product9/pic1.jpg +0 -0
- data/lib/nimbleshop/sampledata/pictures/product9/pic2.jpg +0 -0
- data/lib/nimbleshop/util.rb +60 -0
- data/lib/nimbleshop/version.rb +18 -0
- data/lib/nimbleshop_core.rb +23 -0
- data/lib/tasks/localhost2public.rake +8 -0
- data/lib/tasks/setup.rake +26 -0
- data/test/factories/address_factory.rb +31 -0
- data/test/factories/creditcard_factory.rb +30 -0
- data/test/factories/custom_field_answer_factory.rb +6 -0
- data/test/factories/custom_field_factory.rb +21 -0
- data/test/factories/line_item_factory.rb +7 -0
- data/test/factories/link_factory.rb +6 -0
- data/test/factories/link_group_factory.rb +5 -0
- data/test/factories/navigation_factory.rb +6 -0
- data/test/factories/order_factory.rb +49 -0
- data/test/factories/payment_method_factory.rb +6 -0
- data/test/factories/payment_transaction_factory.rb +42 -0
- data/test/factories/picture_factory.rb +11 -0
- data/test/factories/product_group_condition_factory.rb +40 -0
- data/test/factories/product_group_factory.rb +5 -0
- data/test/factories/products_factory.rb +11 -0
- data/test/factories/shipment_carrier_factory.rb +6 -0
- data/test/factories/shipment_factory.rb +6 -0
- data/test/factories/shipping_method_factory.rb +15 -0
- data/test/factories/shipping_zone_factory.rb +5 -0
- data/test/factories/shop_factory.rb +8 -0
- data/test/fixtures/files/avatar.png +0 -0
- data/test/fixtures/link_groups.yml +13 -0
- data/test/fixtures/payment_methods.yml +39 -0
- data/test/fixtures/shops.yml +15 -0
- data/test/helpers/admin_helper_test.rb +37 -0
- data/test/helpers/nimbleshop_helper_test.rb +17 -0
- data/test/integration/admin/link_groups_acceptance_test.rb +39 -0
- data/test/integration/admin/orders_acceptance_test.rb +63 -0
- data/test/integration/admin/payment_methods_acceptance_test.rb +13 -0
- data/test/integration/admin/product_groups_acceptance_test.rb +89 -0
- data/test/integration/admin/products_acceptance_test.rb +105 -0
- data/test/integration/admin/shipping_methods_acceptance_test.rb +63 -0
- data/test/integration/admin/shipping_zones_acceptance_test.rb +16 -0
- data/test/integration/admin/shops_acceptance_test.rb +44 -0
- data/test/integration/checkout/cart_acceptance_test.rb +113 -0
- data/test/integration/checkout/payment_confirmation_acceptance_test.rb +24 -0
- data/test/integration/checkout/paypal_acceptance_test.rb +34 -0
- data/test/integration/checkout/shipping_address_acceptance_test.rb +91 -0
- data/test/integration/checkout/shipping_method_acceptance_test.rb +51 -0
- data/test/integration/homepage_acceptance_test.rb +24 -0
- data/test/integration/products_acceptance_test.rb +12 -0
- data/test/integration/static_pages_acceptance_test.rb +13 -0
- data/test/mailers/mailer_test.rb +25 -0
- data/test/rails_app/Gemfile +27 -0
- data/test/rails_app/Gemfile.lock +218 -0
- data/test/rails_app/Rakefile +10 -0
- data/test/rails_app/app/controllers/application_controller.rb +6 -0
- data/test/rails_app/app/helpers/application_helper.rb +3 -0
- data/test/rails_app/app/views/layouts/application.html.erb +10 -0
- data/test/rails_app/config/application.rb +25 -0
- data/test/rails_app/config/application.yml +61 -0
- data/test/rails_app/config/boot.rb +5 -0
- data/test/rails_app/config/database.yml +18 -0
- data/test/rails_app/config/environment.rb +5 -0
- data/test/rails_app/config/environments/development.rb +18 -0
- data/test/rails_app/config/environments/production.rb +33 -0
- data/test/rails_app/config/environments/test.rb +33 -0
- data/test/rails_app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/rails_app/config/initializers/inflections.rb +2 -0
- data/test/rails_app/config/initializers/secret_token.rb +2 -0
- data/test/rails_app/config/routes.rb +10 -0
- data/test/rails_app/config.ru +4 -0
- data/test/rails_app/db/development.sqlite3 +0 -0
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +74 -0
- data/test/rails_app/db/schema.rb +52 -0
- data/test/rails_app/log/development.log +94 -0
- data/test/rails_app/log/test.log +0 -0
- data/test/rails_app/public/404.html +26 -0
- data/test/rails_app/public/422.html +26 -0
- data/test/rails_app/public/500.html +26 -0
- data/test/rails_app/public/favicon.ico +0 -0
- data/test/rails_app/script/rails +10 -0
- data/test/support/address_test_helper.rb +24 -0
- data/test/support/checkout_test_helper.rb +40 -0
- data/test/support/dbify_sql_helper.rb +12 -0
- data/test/support/images/cookware.jpg +0 -0
- data/test/support/must_be_like.rb +24 -0
- data/test/support/shipping_method_test_helper.rb +5 -0
- data/test/support/wait_for_ajax.rb +4 -0
- data/test/test_helper.rb +65 -0
- data/test/unit/address_test.rb +33 -0
- data/test/unit/country_shipping_zone_test.rb +17 -0
- data/test/unit/creditcard_test.rb +33 -0
- data/test/unit/custom_field_answer/field_test.rb +93 -0
- data/test/unit/order_test.rb +70 -0
- data/test/unit/payment_method/authorizedotnet_test.rb +21 -0
- data/test/unit/payment_method/paypalwp_test.rb +17 -0
- data/test/unit/payment_method/splitable_test.rb +18 -0
- data/test/unit/picture_test.rb +24 -0
- data/test/unit/processor/authorize_net_test.rb +236 -0
- data/test/unit/processor/paypal_test.rb +40 -0
- data/test/unit/processor/splitable_test.rb +123 -0
- data/test/unit/product_group_condition_test.rb +188 -0
- data/test/unit/product_group_test.rb +109 -0
- data/test/unit/product_test.rb +60 -0
- data/test/unit/shipping_cost_calculator_test.rb +19 -0
- data/test/unit/shipping_method_test.rb +197 -0
- data/test/unit/shop_test.rb +11 -0
- data/test/unit/tax_calculator_test.rb +13 -0
- data/test/vcr_cassettes/authorize_net/authorize-failure.yml +38 -0
- data/test/vcr_cassettes/authorize_net/authorize-success.yml +38 -0
- data/test/vcr_cassettes/authorize_net/capture-failure.yml +38 -0
- data/test/vcr_cassettes/authorize_net/capture-success.yml +38 -0
- data/test/vcr_cassettes/authorize_net/purchase-failure.yml +38 -0
- data/test/vcr_cassettes/authorize_net/purchase-success.yml +38 -0
- data/test/vcr_cassettes/authorize_net/refund-failure.yml +38 -0
- data/test/vcr_cassettes/authorize_net/refund-success.yml +38 -0
- data/test/vcr_cassettes/authorize_net/void-authorize.yml +38 -0
- data/test/vcr_cassettes/authorize_net/void-failure.yml +38 -0
- data/test/vcr_cassettes/authorize_net/void-success.yml +38 -0
- data/test/vcr_cassettes/splitable/split-create-failure.yml +48 -0
- data/test/vcr_cassettes/splitable/split-create-success.yml +50 -0
- data/test/vcr_cassettes/splitable/split-draft-create-failure.yml +50 -0
- data/test/vcr_cassettes/splitable/split-draft-create-success.yml +50 -0
- data/vendor/assets/javascripts/accounting.js +406 -0
- data/vendor/assets/javascripts/autoresize.js +275 -0
- data/vendor/assets/javascripts/jquery-1.7.1.js +9267 -0
- data/vendor/assets/javascripts/jquery-form.js +980 -0
- data/vendor/assets/javascripts/jquery-json.js +193 -0
- data/vendor/assets/javascripts/jquery-ui-1.8.16.js +11768 -0
- data/vendor/assets/javascripts/jquery-ujs.js +374 -0
- data/vendor/assets/javascripts/mustache.js +436 -0
- data/vendor/assets/javascripts/nested_form.js +51 -0
- metadata +740 -0
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'product_group_search/core_field_strategy'
|
2
|
+
require 'product_group_search/custom_field_strategy'
|
3
|
+
require 'product_group_search/base_field'
|
4
|
+
require 'product_group_search/text_field'
|
5
|
+
require 'product_group_search/number_field'
|
6
|
+
require 'product_group_search/date_field'
|
7
|
+
|
8
|
+
module ProductGroupSearch
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
|
13
|
+
# query_column is the value of name column in product_group_condition for core fields.
|
14
|
+
# For custom fields this value will be overridden
|
15
|
+
attr_reader :query_column
|
16
|
+
|
17
|
+
# field_handler could be TextField, NumberField or any other field handler.
|
18
|
+
attr_reader :field_handler
|
19
|
+
|
20
|
+
# index is used by custom_field_strategy
|
21
|
+
attr_accessor :index
|
22
|
+
|
23
|
+
delegate :where, :valid_value_data_type?, :valid_operator?, to: :field_handler
|
24
|
+
|
25
|
+
validate :validate_value_data_type
|
26
|
+
validate :validate_operator
|
27
|
+
|
28
|
+
after_initialize :prepare_instance
|
29
|
+
end
|
30
|
+
|
31
|
+
def name=(val)
|
32
|
+
val = val.try(:to_s)
|
33
|
+
if super(val)
|
34
|
+
prepare_instance
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def summary
|
39
|
+
I18n.t(self.operator.to_sym, { field: localized_name, value: self.value })
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def validate_operator
|
45
|
+
self.errors.add(:operator, :invalid) unless valid_operator?(operator)
|
46
|
+
end
|
47
|
+
|
48
|
+
def validate_value_data_type
|
49
|
+
self.errors.add(:value, :invalid) unless valid_value_data_type?
|
50
|
+
end
|
51
|
+
|
52
|
+
def prepare_instance
|
53
|
+
set_strategy
|
54
|
+
set_field_handler
|
55
|
+
end
|
56
|
+
|
57
|
+
def set_strategy
|
58
|
+
extend(custom_field? ? CustomFieldStrategy : CoreFieldStrategy)
|
59
|
+
end
|
60
|
+
|
61
|
+
def set_field_handler
|
62
|
+
klass = ProductGroupSearch.const_get("#{field_type.classify}Field")
|
63
|
+
@field_handler = klass.new(self)
|
64
|
+
end
|
65
|
+
|
66
|
+
def query_field
|
67
|
+
target_table.send(:[], query_column)
|
68
|
+
end
|
69
|
+
|
70
|
+
def custom_field?
|
71
|
+
# for a custom field the name column contains the primary key of the custom_fields table
|
72
|
+
name.try(:match, /\A\d+?\Z/).present?
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,246 @@
|
|
1
|
+
module Sampledata
|
2
|
+
class Data
|
3
|
+
|
4
|
+
attr_accessor :products
|
5
|
+
|
6
|
+
def populate
|
7
|
+
load_shipment_carriers
|
8
|
+
load_shop
|
9
|
+
load_shipping_methods
|
10
|
+
load_product_group_for_price
|
11
|
+
load_product_group_for_category
|
12
|
+
|
13
|
+
load_tag_watch
|
14
|
+
load_iphone_cover
|
15
|
+
load_turquoise_bracelet
|
16
|
+
load_bag
|
17
|
+
load_tajmahal
|
18
|
+
load_chronograph_watch
|
19
|
+
load_mangoes
|
20
|
+
load_bangles
|
21
|
+
load_shoes
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def load_shipment_carriers
|
27
|
+
%w(UPS USPS Fedex).each { |carrier| ShipmentCarrier.create!(name: carrier) }
|
28
|
+
end
|
29
|
+
|
30
|
+
def load_shop
|
31
|
+
Shop.create!( name: 'nimbleShop',
|
32
|
+
phone_number: '800-456-7890',
|
33
|
+
twitter_handle: '@nimbleshop',
|
34
|
+
from_email: 'support@nimbleshop.com',
|
35
|
+
tax_percentage: 1.23,
|
36
|
+
google_analytics_tracking_id: Nimbleshop.config.google_analytics_tracking_id,
|
37
|
+
facebook_url: 'http://www.facebook.com/pages/NimbleSHOP/119319381517845')
|
38
|
+
end
|
39
|
+
|
40
|
+
def handle_pictures_for_product(product, dirname)
|
41
|
+
p = Pathname.new(File.expand_path('../pictures', __FILE__))
|
42
|
+
pictures = Dir.glob(p.join(dirname, '*'))
|
43
|
+
|
44
|
+
pictures.sort.each do |filename|
|
45
|
+
attach_picture( filename, product)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def attach_picture(filename_with_extension, product)
|
50
|
+
path = Rails.root.join('lib', 'sampledata', 'pictures', filename_with_extension)
|
51
|
+
product.attach_picture(filename_with_extension, path)
|
52
|
+
end
|
53
|
+
|
54
|
+
def load_product_group_for_price
|
55
|
+
pg_lt_50 = ProductGroup.create!(name: '< $50')
|
56
|
+
pg_lt_50.product_group_conditions.create(name: 'price', operator: 'lt', value: 50)
|
57
|
+
pg_between_50_100 = ProductGroup.create!(name: '$50 - $100')
|
58
|
+
pg_between_50_100.product_group_conditions.create(name: 'price', operator: 'gteq', value: 50)
|
59
|
+
pg_between_50_100.product_group_conditions.create(name: 'price', operator: 'lteq', value: 100)
|
60
|
+
pg_gt_100 = ProductGroup.create!(name: '> $100')
|
61
|
+
pg_gt_100.product_group_conditions.create(name: 'price', operator: 'gt', value: 100)
|
62
|
+
|
63
|
+
link_group = LinkGroup.create!(name: 'Shop by price')
|
64
|
+
Navigation.create!(link_group: link_group, product_group: pg_lt_50)
|
65
|
+
Navigation.create!(link_group: link_group, product_group: pg_between_50_100)
|
66
|
+
Navigation.create!(link_group: link_group, product_group: pg_gt_100)
|
67
|
+
end
|
68
|
+
|
69
|
+
def load_product_group_for_category
|
70
|
+
cf = CustomField.create!(name: 'category', field_type: 'text')
|
71
|
+
|
72
|
+
pg_food = ProductGroup.create!(name: 'Food')
|
73
|
+
pg_food.product_group_conditions.create(name: cf.id, operator: 'eq', value: 'food')
|
74
|
+
|
75
|
+
pg_toy = ProductGroup.create!(name: 'Toy')
|
76
|
+
pg_toy.product_group_conditions.create(name: cf.id, operator: 'eq', value: 'toy')
|
77
|
+
|
78
|
+
pg_art = ProductGroup.create!(name: 'Art')
|
79
|
+
pg_art.product_group_conditions.create(name: cf.id, operator: 'eq', value: 'art')
|
80
|
+
|
81
|
+
pg_fashion = ProductGroup.create!(name: 'Fashion')
|
82
|
+
pg_fashion.product_group_conditions.create(name: cf.id, operator: 'eq', value: 'fashion')
|
83
|
+
|
84
|
+
link_group = LinkGroup.create!(name: 'Shop by category')
|
85
|
+
link_group.navigations.create(product_group: pg_art)
|
86
|
+
link_group.navigations.create(product_group: pg_food)
|
87
|
+
link_group.navigations.create(product_group: pg_fashion)
|
88
|
+
end
|
89
|
+
|
90
|
+
def load_shipping_methods
|
91
|
+
sz = CountryShippingZone.create!(country_code: 'US')
|
92
|
+
ShippingMethod.create!(name: 'Ground shipping', base_price: 10, shipping_zone_id: sz.id,
|
93
|
+
minimum_order_amount: 0, maximum_order_amount: 999999)
|
94
|
+
|
95
|
+
ShippingMethod.create!(name: 'Express shipping', base_price: 30, shipping_zone_id: sz.id,
|
96
|
+
minimum_order_amount: 10, maximum_order_amount: 999999)
|
97
|
+
end
|
98
|
+
|
99
|
+
def load_tajmahal
|
100
|
+
print '.'
|
101
|
+
desc = %q{
|
102
|
+
Year of construction: 1631
|
103
|
+
Completed in: 1653
|
104
|
+
Time taken: 22 years
|
105
|
+
Built by: Shah Jahan
|
106
|
+
Dedicated to: Mumtaz Mahal (Arjumand Bano Begum), the wife of Shah Jahan
|
107
|
+
Location: Agra (Uttar Pradesh), India
|
108
|
+
Building type: Islamic tomb
|
109
|
+
Architecture: Mughal (Combination of Persian, Islamic and Indian architecture style)
|
110
|
+
Architect: Ustad Ahmad Lahauri
|
111
|
+
Cost of construction: 32 crore rupees
|
112
|
+
Number of workers: 20,000
|
113
|
+
Highlights: One of the Seven Wonders of the World; A UNESCO World Heritage Site
|
114
|
+
|
115
|
+
Facts do not capture what Tajmahal is.
|
116
|
+
}
|
117
|
+
product = Product.create!( title: "Beautiful portrait of Tajmahal", price: 19, description: desc)
|
118
|
+
handle_pictures_for_product(product, "product1")
|
119
|
+
product.custom_field_answers.create(custom_field: CustomField.first, value: 'art')
|
120
|
+
end
|
121
|
+
|
122
|
+
def load_chronograph_watch
|
123
|
+
print '.'
|
124
|
+
desc = %q{
|
125
|
+
Chronograph sport watch from Guess
|
126
|
+
|
127
|
+
Chronograph: Stopwatch function, 24 Hour/Intl. time
|
128
|
+
43/43/13
|
129
|
+
Brushed + Polished Ionic Black case
|
130
|
+
Red + Black dial
|
131
|
+
Brushed + Polished Ionic Black Steel bracelet
|
132
|
+
100 M/330 FT Water resistant
|
133
|
+
}
|
134
|
+
product = Product.create!( title: "chronograph sport watch from Guess", price: 219, description: desc)
|
135
|
+
handle_pictures_for_product(product, "product2")
|
136
|
+
product.custom_field_answers.create(custom_field: CustomField.first, value: 'fashion')
|
137
|
+
end
|
138
|
+
|
139
|
+
def load_turquoise_bracelet
|
140
|
+
print '.'
|
141
|
+
desc = %q{
|
142
|
+
Simple, modern, stylish, easy to wear bracelet !
|
143
|
+
|
144
|
+
For a scale reference please see the photos with the bracelet worn.
|
145
|
+
|
146
|
+
For a custom color bracelet send me a message and I will see what colors are available for your bracelet.
|
147
|
+
|
148
|
+
The strap of the bracelet can also be customized in any color you would like.
|
149
|
+
|
150
|
+
All items come to you beautifully packaged and ready for gift giving.
|
151
|
+
|
152
|
+
Note that real colors may slightly differ from their appearance on your display.
|
153
|
+
}
|
154
|
+
product = Product.create!( title: "Turquoise bracelet", price: 89, description: desc)
|
155
|
+
handle_pictures_for_product(product, "product3")
|
156
|
+
product.custom_field_answers.create(custom_field: CustomField.first, value: 'fashion')
|
157
|
+
end
|
158
|
+
|
159
|
+
def load_mangoes
|
160
|
+
print '.'
|
161
|
+
desc = %q{
|
162
|
+
The mango is the national fruit of India and Pakistan. It is also the national fruit in the Philippines. The mango tree is the national tree of Bangladesh.
|
163
|
+
|
164
|
+
Mango leaves are used to decorate archways and doors in Indian houses and during weddings and celebrations.
|
165
|
+
}
|
166
|
+
product = Product.create!( title: "A basket of Indian mangoes", price: 17, description: desc)
|
167
|
+
handle_pictures_for_product(product, "product4")
|
168
|
+
product.custom_field_answers.create(custom_field: CustomField.first, value: 'food')
|
169
|
+
end
|
170
|
+
|
171
|
+
def load_bag
|
172
|
+
print '.'
|
173
|
+
desc = %q{
|
174
|
+
Stylish bag in indigo color. How could you say no to this.
|
175
|
+
|
176
|
+
It is just the perfect size also. It has enough space to carry ipad, magazine, cosmetic stuff and othe accessories.
|
177
|
+
|
178
|
+
Length: 32cm(12.60 inches)
|
179
|
+
Width: 19cm(7.48 inches)
|
180
|
+
}
|
181
|
+
product = Product.create!( title: "A simple and elegant bag", price: 107, description: desc)
|
182
|
+
handle_pictures_for_product(product, "product5")
|
183
|
+
product.custom_field_answers.create(custom_field: CustomField.first, value: 'fashion')
|
184
|
+
end
|
185
|
+
|
186
|
+
def load_bangles
|
187
|
+
print '.'
|
188
|
+
desc = %q{
|
189
|
+
Bangles are part of traditional Indian jewelry. They are usually worn in pairs by women, one or more on each arm. Most Indian women prefer wearing either gold or glass bangles or combination of both. Inexpensive bangles made from plastic are slowly replacing those made by glass, but the ones made of glass are still preferred at traditional occasions such as marriages and on festivals.
|
190
|
+
|
191
|
+
The designs range from simple to intricate handmade designs, often studded with precious and semi-precious stones such as diamonds, gems and pearls. Sets of expensive bangles made of gold and silver make a jingling sound. The imitation jewelry, tend to make a tinny sound when jingled.
|
192
|
+
|
193
|
+
It is tradition that the bride will try to wear as many small glass bangles as possible at her wedding and the honeymoon will end when the last bangle breaks.
|
194
|
+
}
|
195
|
+
product = Product.create!( title: "Handmade bangles", price: 11, description: desc)
|
196
|
+
handle_pictures_for_product(product, "product6")
|
197
|
+
product.custom_field_answers.create(custom_field: CustomField.first, value: 'fashion')
|
198
|
+
end
|
199
|
+
|
200
|
+
def load_shoes
|
201
|
+
print '.'
|
202
|
+
desc = %q{
|
203
|
+
People of India love color. Everything they use from top to bottom is colorful.
|
204
|
+
|
205
|
+
Lets talk about shoes. Making good looking shoes is an art they have perfected over centuries. Making a shoe takes the whole village. And the whole village participates in the business of making and selling quality colorful shoes.
|
206
|
+
}
|
207
|
+
product = Product.create!( title: "Colorful shoes", price: 191, description: desc)
|
208
|
+
handle_pictures_for_product(product, "product7")
|
209
|
+
product.custom_field_answers.create(custom_field: CustomField.first, value: 'fashion')
|
210
|
+
end
|
211
|
+
|
212
|
+
def load_tag_watch
|
213
|
+
print '.'
|
214
|
+
desc = %q{
|
215
|
+
Swiss label, TAG Heuer's Aquaracer 500M Ceramic watch embodies perfection, style and clean look.
|
216
|
+
|
217
|
+
It has ceramic bezel and has the case is 41mm, significantly smaller than the 43mm out-going model. The case has been given softer curvier lines to
|
218
|
+
create a more classic look.
|
219
|
+
|
220
|
+
Following models are available:
|
221
|
+
|
222
|
+
- Blue dial, blue ceramic bezel, steel
|
223
|
+
- Black dial, black ceramic bezel, steel
|
224
|
+
- Blue & gold, steel
|
225
|
+
- full black, ceramic bezel, titanium carbide case
|
226
|
+
}
|
227
|
+
product = Product.create!( title: "TAG Heuer Aquaracer 500M Ceramic Watch", price: 3000, description: desc)
|
228
|
+
handle_pictures_for_product(product, "product8")
|
229
|
+
product.custom_field_answers.create(custom_field: CustomField.first, value: 'fashion')
|
230
|
+
end
|
231
|
+
|
232
|
+
def load_iphone_cover
|
233
|
+
print '.'
|
234
|
+
desc = %q{
|
235
|
+
This is a hard case is for your iPhone 4. Fits both AT&T & Verizon models of the iPhone 4. The case has a wood like appearance.
|
236
|
+
It is not actual wood. It will protect it from scractches while also bringing it to life with some color!
|
237
|
+
|
238
|
+
It does not interfere with any buttons. It is available in many different colors. If you have a specific color in my then contact me.
|
239
|
+
}
|
240
|
+
product = Product.create!( title: "Hard wood case for iphone", price: 7.95, description: desc)
|
241
|
+
handle_pictures_for_product(product, "product9")
|
242
|
+
product.custom_field_answers.create(custom_field: CustomField.first, value: 'fashion')
|
243
|
+
end
|
244
|
+
|
245
|
+
end
|
246
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,60 @@
|
|
1
|
+
class Util
|
2
|
+
|
3
|
+
# loads a yaml based configuration file and returns hash
|
4
|
+
def self.config2hash(file)
|
5
|
+
hash = YAML.load(ERB.new(File.read(file)).result)
|
6
|
+
|
7
|
+
common_hash = hash['common'] || {}
|
8
|
+
env_hash = hash[Rails.env.to_s] || {}
|
9
|
+
|
10
|
+
final_hash = common_hash.deep_merge(env_hash)
|
11
|
+
Hashr.new(final_hash)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Converts the amount in cents and returns an integer.
|
15
|
+
def self.in_cents(amount)
|
16
|
+
(BigDecimal(amount.to_s) * 100).round(0).to_i
|
17
|
+
end
|
18
|
+
|
19
|
+
# returns public url for a given localhost url
|
20
|
+
#
|
21
|
+
# Usage: localhost2public_url ( '/nimbleshop_paypal/notify', 'http' )
|
22
|
+
#
|
23
|
+
def self.localhost2public_url(url, protocol)
|
24
|
+
return url unless Nimbleshop.config.use_localhost2public_url
|
25
|
+
|
26
|
+
tunnel = Rails.root.join('config', '.tunnel')
|
27
|
+
return Nimbleshop.config.default_localhost2public_url unless File.exists?(tunnel)
|
28
|
+
|
29
|
+
path = []
|
30
|
+
|
31
|
+
host = File.open(tunnel, "r").gets.sub("\n", "")
|
32
|
+
path << "#{protocol}://#{host}"
|
33
|
+
|
34
|
+
path << url
|
35
|
+
path.join('')
|
36
|
+
end
|
37
|
+
|
38
|
+
# The output is something like
|
39
|
+
# ["Timor-Leste", "TL"], ["Turkmenistan", "TM"], ["Tunisia", "TN"], ["Tonga", "TO"], .......
|
40
|
+
def self.countries_list_with_name_and_code
|
41
|
+
Carmen::Country.all.map { |t| [t.name, t.alpha_2_code] }
|
42
|
+
end
|
43
|
+
|
44
|
+
def self.countries_without_shipping_zone
|
45
|
+
Util.countries_list_with_name_and_code.reject { |_, t| CountryShippingZone.all_country_codes.include?(t) }
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.disabled_shipping_zone_countries
|
49
|
+
countries_with_shipping_zone.reduce([]) { |result, element| result << [element[0], element[1], {disabled: :disabled}]}
|
50
|
+
end
|
51
|
+
|
52
|
+
def self.unconfigured_shipping_zone_countries
|
53
|
+
(Util.disabled_shipping_zone_countries + Util.countries_without_shipping_zone).sort
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.countries_with_shipping_zone
|
57
|
+
Util.countries_list_with_name_and_code.select { |_, t| CountryShippingZone.all_country_codes.include?(t)}
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Nimbleshop
|
2
|
+
class Version
|
3
|
+
@major = 0
|
4
|
+
@minor = 0
|
5
|
+
@tiny = 1
|
6
|
+
@build = 'rc1'
|
7
|
+
|
8
|
+
class << self
|
9
|
+
attr_reader :major, :minor, :tiny, :build
|
10
|
+
|
11
|
+
def to_s
|
12
|
+
[@major, @minor, @tiny, @build].compact.join('.')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
RailsVersion = '= 3.2.6'
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'nimbleshop/engine'
|
2
|
+
require 'generators/nimbleshop/app/app_generator'
|
3
|
+
|
4
|
+
# Why do we need to require all the gems individually ?
|
5
|
+
#
|
6
|
+
# When bundler loads a gem and also requires it unless you say require false.
|
7
|
+
# nimbleshop_core gem is loaded using gemspec and unlke bundler gemspe does not
|
8
|
+
# autoload all the required gems.
|
9
|
+
|
10
|
+
require 'rails/all'
|
11
|
+
require 'hashr'
|
12
|
+
require 'carrierwave'
|
13
|
+
require 'delayed_job_active_record'
|
14
|
+
require 'carmen'
|
15
|
+
require 'nested_form'
|
16
|
+
require 'twitter-bootstrap-rails'
|
17
|
+
require 'state_machine'
|
18
|
+
require 'mini_magick'
|
19
|
+
require 'active_merchant'
|
20
|
+
require 'strong_parameters'
|
21
|
+
require 'valid_email'
|
22
|
+
require 'custom_error_message'
|
23
|
+
require 'american_date'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
namespace :nimbleshop do
|
2
|
+
|
3
|
+
desc "sets up database for nimbleshop application"
|
4
|
+
task :setup => :environment do
|
5
|
+
|
6
|
+
#raise "this task should not be run in production" if Rails.env.production?
|
7
|
+
|
8
|
+
Rake::Task["db:reset"].invoke if Rails.env.development? || Rails.env.test?
|
9
|
+
|
10
|
+
Sampledata::Data.new.populate
|
11
|
+
|
12
|
+
Rake::Task["nimbleshop_splitable:load_record"].invoke
|
13
|
+
Rake::Task["nimbleshop_paypalwp:load_record"].invoke
|
14
|
+
Rake::Task["nimbleshop_authorizedotnet:load_record"].invoke
|
15
|
+
Rake::Task["nimbleshop_cod:load_record"].invoke
|
16
|
+
|
17
|
+
Rake::Task["nimbleshop_splitable:copy_images"].invoke
|
18
|
+
Rake::Task["nimbleshop_paypalwp:copy_images"].invoke
|
19
|
+
Rake::Task["nimbleshop_authorizedotnet:copy_images"].invoke
|
20
|
+
Rake::Task["nimbleshop_cod:copy_images"].invoke
|
21
|
+
|
22
|
+
puts ""
|
23
|
+
puts '**** shop is ready with sample data ****'
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :base_address do
|
3
|
+
country_code 'US'
|
4
|
+
state_code 'FL'
|
5
|
+
state_name 'Florida'
|
6
|
+
|
7
|
+
trait :good do
|
8
|
+
city { Faker::Address.city }
|
9
|
+
first_name { Faker::Name.first_name }
|
10
|
+
last_name { Faker::Name.last_name }
|
11
|
+
address1 { Faker::Address.street_address }
|
12
|
+
end
|
13
|
+
|
14
|
+
trait :bad do
|
15
|
+
city nil
|
16
|
+
first_name nil
|
17
|
+
last_name nil
|
18
|
+
address1 nil
|
19
|
+
end
|
20
|
+
|
21
|
+
zipcode { Faker::Address.zip_code }
|
22
|
+
|
23
|
+
factory :address, class: Address, parent: :base_address, traits: [:good]
|
24
|
+
factory :shipping_address, class: ShippingAddress, parent: :base_address, traits: [:good], aliases: [:good_shipping_address]
|
25
|
+
|
26
|
+
factory :billing_address, class: BillingAddress, parent: :base_address, traits: [:good], aliases: [:good_billing_address]
|
27
|
+
|
28
|
+
factory :bad_shipping_address, class: ShippingAddress, parent: :base_address, traits: [:bad]
|
29
|
+
factory :bad_billing_address, class: BillingAddress, parent: :base_address, traits: [:bad]
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :creditcard do |f|
|
3
|
+
cvv '123'
|
4
|
+
number '4007000000027'
|
5
|
+
cardtype 'visa'
|
6
|
+
|
7
|
+
first_name { Faker::Name.first_name }
|
8
|
+
last_name { Faker::Name.last_name }
|
9
|
+
address1 { Faker::Address.street_address }
|
10
|
+
zipcode { Faker::Address.zip_code }
|
11
|
+
month 5
|
12
|
+
year 2015
|
13
|
+
state 'Florida'
|
14
|
+
|
15
|
+
trait :visa do
|
16
|
+
cardtype 'visa'
|
17
|
+
number '4007000000027'
|
18
|
+
cvv '123'
|
19
|
+
end
|
20
|
+
|
21
|
+
trait :american_express do
|
22
|
+
cvv '1123'
|
23
|
+
cardtype 'american_express'
|
24
|
+
number '370000000000002'
|
25
|
+
end
|
26
|
+
|
27
|
+
factory :visa_creditcard, traits: [:visa]
|
28
|
+
factory :american_express_creditcard, traits: [:american_express]
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
FactoryGirl.define do
|
2
|
+
factory :custom_field do
|
3
|
+
sequence(:name) { |t| "name#{t}" }
|
4
|
+
|
5
|
+
trait :number do
|
6
|
+
field_type 'number'
|
7
|
+
end
|
8
|
+
|
9
|
+
trait :date do
|
10
|
+
field_type 'date'
|
11
|
+
end
|
12
|
+
|
13
|
+
trait :text do
|
14
|
+
field_type 'text'
|
15
|
+
end
|
16
|
+
|
17
|
+
factory :number_custom_field, traits: [:number]
|
18
|
+
factory :date_custom_field, traits: [:date ]
|
19
|
+
factory :text_custom_field, traits: [:text]
|
20
|
+
end
|
21
|
+
end
|