spree 0.8.5 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of spree might be problematic. Click here for more details.
- data/CHANGELOG +97 -4
- data/CONTRIBUTORS +62 -29
- data/LICENSE +1 -1
- data/README.markdown +1 -1
- data/app/controllers/admin/base_controller.rb +10 -1
- data/app/controllers/admin/configurations_controller.rb +19 -8
- data/app/controllers/admin/coupons_controller.rb +17 -0
- data/app/controllers/admin/creditcard_payments_controller.rb +4 -8
- data/app/controllers/admin/images_controller.rb +42 -3
- data/app/controllers/admin/orders_controller.rb +12 -12
- data/app/controllers/admin/products_controller.rb +12 -32
- data/app/controllers/admin/prototypes_controller.rb +3 -1
- data/app/controllers/admin/reports_controller.rb +6 -6
- data/app/controllers/admin/shipments_controller.rb +12 -1
- data/app/controllers/admin/shipping_methods_controller.rb +17 -17
- data/app/controllers/admin/shipping_rates_controller.rb +20 -0
- data/app/controllers/admin/tax_rates_controller.rb +28 -0
- data/{vendor/extensions/tax_calculator/app → app}/controllers/admin/tax_settings_controller.rb +1 -1
- data/app/controllers/admin/taxons_controller.rb +18 -72
- data/app/controllers/admin/users_controller.rb +6 -6
- data/app/controllers/admin/zones_controller.rb +4 -4
- data/app/controllers/application.rb +3 -3
- data/app/controllers/checkouts_controller.rb +158 -0
- data/app/controllers/content_controller.rb +1 -8
- data/app/controllers/orders_controller.rb +11 -23
- data/app/controllers/products_controller.rb +24 -23
- data/app/controllers/spree/base_controller.rb +47 -3
- data/app/controllers/states_controller.rb +4 -5
- data/app/controllers/taxons_controller.rb +13 -9
- data/app/controllers/user_sessions_controller.rb +3 -1
- data/app/controllers/users_controller.rb +3 -7
- data/app/helpers/admin/base_helper.rb +74 -6
- data/app/helpers/admin/calculators_helper.rb +2 -0
- data/app/helpers/admin/orders_helper.rb +1 -1
- data/{vendor/extensions/tax_calculator/app → app}/helpers/admin/tax_rates_helper.rb +0 -0
- data/app/helpers/admin/taxonomies_helper.rb +0 -59
- data/app/helpers/application_helper.rb +1 -2
- data/app/helpers/checkouts_helper.rb +7 -0
- data/app/helpers/products_helper.rb +15 -15
- data/app/helpers/spree/base_helper.rb +27 -5
- data/app/helpers/taxons_helper.rb +9 -9
- data/app/metal/create_admin_user.rb +21 -0
- data/app/models/address.rb +42 -2
- data/app/models/adjustment.rb +37 -0
- data/app/models/app_configuration.rb +10 -1
- data/app/models/calculator.rb +41 -0
- data/app/models/calculator/flat_percent_item_total.rb +19 -0
- data/app/models/calculator/flat_rate.rb +18 -0
- data/app/models/calculator/flexi_rate.rb +33 -0
- data/app/models/calculator/per_item.rb +18 -0
- data/app/models/calculator/price_bucket.rb +31 -0
- data/app/models/calculator/sales_tax.rb +48 -0
- data/app/models/calculator/vat.rb +63 -0
- data/app/models/charge.rb +37 -0
- data/app/models/checkout.rb +48 -0
- data/app/models/country.rb +11 -1
- data/app/models/coupon.rb +27 -0
- data/app/models/credit.rb +27 -0
- data/app/models/creditcard.rb +5 -5
- data/app/models/creditcard_payment.rb +13 -5
- data/app/models/image.rb +23 -1
- data/app/models/inventory_unit.rb +4 -3
- data/app/models/line_item.rb +10 -4
- data/app/models/order.rb +125 -65
- data/app/models/order_mailer.rb +1 -1
- data/app/models/order_observer.rb +15 -0
- data/app/models/product.rb +101 -87
- data/app/models/shipment.rb +20 -14
- data/app/models/shipping_category.rb +2 -0
- data/app/models/shipping_method.rb +19 -6
- data/app/models/shipping_rate.rb +6 -0
- data/app/models/state.rb +8 -2
- data/app/models/state_event.rb +7 -0
- data/app/models/tax_category.rb +2 -0
- data/{vendor/extensions/tax_calculator/app → app}/models/tax_rate.rb +9 -3
- data/app/models/taxon.rb +21 -15
- data/app/models/user.rb +17 -18
- data/app/models/user_mailer.rb +1 -1
- data/app/models/variant.rb +51 -60
- data/app/models/zone.rb +38 -23
- data/app/views/admin/configurations/index.html.erb +12 -0
- data/app/views/admin/coupons/_form.html.erb +24 -0
- data/app/views/admin/coupons/edit.html.erb +8 -0
- data/app/views/admin/coupons/index.html.erb +38 -0
- data/app/views/admin/coupons/new.html.erb +9 -0
- data/app/views/admin/creditcard_payments/new.html.erb +1 -1
- data/app/views/admin/general_settings/edit.html.erb +1 -1
- data/app/views/admin/general_settings/show.html.erb +2 -4
- data/app/views/admin/images/_form.html.erb +12 -0
- data/app/views/admin/images/edit.html.erb +19 -0
- data/app/views/admin/images/index.html.erb +63 -0
- data/app/views/admin/images/new.html.erb +20 -8
- data/app/views/admin/inventory_settings/show.html.erb +2 -2
- data/app/views/admin/mail_settings/edit.html.erb +13 -4
- data/app/views/admin/mail_settings/show.html.erb +7 -0
- data/app/views/admin/option_types/index.html.erb +1 -1
- data/app/views/admin/orders/index.html.erb +41 -54
- data/app/views/admin/orders/show.html.erb +19 -2
- data/app/views/admin/products/_form.html.erb +29 -16
- data/app/views/admin/products/index.html.erb +12 -17
- data/app/views/admin/products/new.html.erb +5 -5
- data/app/views/admin/properties/index.html.erb +1 -1
- data/app/views/admin/prototypes/index.html.erb +1 -1
- data/app/views/admin/reports/sales_total.html.erb +4 -4
- data/app/views/admin/shared/_address.html.erb +3 -1
- data/app/views/admin/shared/_calculator_fields.html.erb +15 -0
- data/app/views/admin/shared/_edit_resource_links.html.erb +1 -1
- data/app/views/admin/shared/_form_address.html.erb +8 -2
- data/app/views/admin/shared/_new_resource_links.html.erb +1 -1
- data/app/views/admin/shared/_order_details.html.erb +3 -36
- data/app/views/admin/shared/_order_tabs.html.erb +2 -2
- data/app/views/admin/shared/_product_tabs.html.erb +25 -12
- data/app/views/admin/shared/_report_criteria.html.erb +3 -7
- data/app/views/admin/shipments/_form.html.erb +11 -1
- data/app/views/admin/shipping_categories/index.html.erb +1 -1
- data/app/views/admin/shipping_methods/_form.html.erb +3 -5
- data/app/views/admin/shipping_methods/edit.html.erb +2 -2
- data/app/views/admin/shipping_methods/index.html.erb +3 -3
- data/app/views/admin/shipping_rates/_form.html.erb +12 -0
- data/app/views/admin/shipping_rates/edit.html.erb +8 -0
- data/app/views/admin/shipping_rates/index.html.erb +30 -0
- data/app/views/admin/shipping_rates/new.html.erb +10 -0
- data/app/views/admin/tax_categories/index.html.erb +1 -1
- data/app/views/admin/tax_rates/_form.html.erb +16 -0
- data/{vendor/extensions/tax_calculator/app → app}/views/admin/tax_rates/edit.html.erb +2 -2
- data/{vendor/extensions/tax_calculator/app → app}/views/admin/tax_rates/index.html.erb +4 -4
- data/{vendor/extensions/tax_calculator/app → app}/views/admin/tax_rates/new.html.erb +0 -0
- data/{vendor/extensions/tax_calculator/app → app}/views/admin/tax_settings/edit.html.erb +3 -3
- data/{vendor/extensions/tax_calculator/app → app}/views/admin/tax_settings/show.html.erb +1 -1
- data/app/views/admin/taxonomies/_js_head.html.erb +13 -0
- data/app/views/admin/taxonomies/_list.html.erb +3 -3
- data/app/views/admin/taxonomies/_taxon.html.erb +12 -0
- data/app/views/admin/taxonomies/edit.html.erb +17 -7
- data/app/views/admin/users/index.html.erb +7 -9
- data/app/views/admin/variants/_form.html.erb +1 -1
- data/app/views/admin/variants/index.html.erb +2 -2
- data/app/views/admin/zones/index.html.erb +4 -4
- data/app/views/checkouts/_billing.html.erb +66 -0
- data/app/views/checkouts/_confirmation.html.erb +11 -0
- data/app/views/checkouts/_form.html.erb +20 -0
- data/app/views/checkouts/_payment.html.erb +45 -0
- data/app/views/{orders → checkouts}/_registration.html.erb +4 -4
- data/app/views/checkouts/_shipping.html.erb +68 -0
- data/app/views/checkouts/_shipping_method.html.erb +19 -0
- data/app/views/checkouts/_summary.html.erb +36 -0
- data/app/views/checkouts/edit.html.erb +13 -0
- data/app/views/checkouts/new.html.erb +13 -0
- data/app/views/layouts/admin.html.erb +15 -5
- data/app/views/layouts/application.html.erb +3 -11
- data/{vendor/plugins/resource_controller/test/app/views/layouts/application.rhtml → app/views/layouts/checkouts.html.erb} +2 -2
- data/app/views/order_mailer/cancel.html.erb +4 -3
- data/app/views/order_mailer/confirm.html.erb +5 -4
- data/app/views/orders/_form.html.erb +4 -1
- data/app/views/orders/_google_order.html.erb +2 -2
- data/app/views/orders/_line_item.html.erb +6 -3
- data/app/views/orders/edit.html.erb +3 -3
- data/app/views/orders/new.html.erb +2 -2
- data/app/views/products/_cart_form.html.erb +45 -14
- data/app/views/products/_thumbnails.html.erb +34 -6
- data/app/views/products/index.html.erb +6 -2
- data/app/views/products/show.html.erb +1 -1
- data/app/views/shared/_edit_resource_links.html.erb +1 -1
- data/app/views/shared/_filters.html.erb +52 -0
- data/app/views/shared/_footer.html.erb +1 -1
- data/app/views/shared/_head.html.erb +6 -0
- data/app/views/shared/_login.html.erb +2 -2
- data/app/views/shared/_new_resource_links.html.erb +1 -1
- data/app/views/shared/_order_details.html.erb +46 -36
- data/app/views/shared/_taxonomies.html.erb +5 -6
- data/app/views/states/index.js.erb +1 -1
- data/app/views/taxons/show.html.erb +1 -1
- data/bin/spree +43 -2
- data/config/boot.rb +2 -2
- data/config/environment.rb +13 -5
- data/config/environments/test.rb +6 -2
- data/config/initializers/locales.rb +20 -8
- data/config/initializers/paperclip.rb +20 -0
- data/config/initializers/spree.rb +12 -2
- data/config/locales/da.yml +614 -0
- data/config/locales/da_rails.yml +197 -0
- data/config/locales/de-CH.yml +614 -0
- data/config/locales/de-CH_rails.yml +142 -0
- data/config/locales/de.yml +95 -4
- data/config/locales/en-GB.yml +112 -21
- data/config/locales/en-GB_rails.yml +84 -42
- data/config/locales/en-US.yml +103 -12
- data/config/locales/es.yml +95 -4
- data/config/locales/fi.yml +614 -0
- data/config/locales/fi_rails.yml +143 -0
- data/config/locales/fr-FR.yml +95 -4
- data/config/locales/fr-FR_rails.yml +1 -1
- data/config/locales/il.yml +614 -0
- data/config/locales/il_rails.yml +103 -0
- data/config/locales/it.yml +102 -11
- data/config/locales/jp.yml +614 -0
- data/config/locales/jp_rails.yml +135 -0
- data/config/locales/mx.yml +614 -0
- data/config/locales/mx_rails.yml +181 -0
- data/config/locales/nb-NO.yml +95 -4
- data/config/locales/nl-BE.yml +95 -4
- data/config/locales/nl-NL.yml +614 -0
- data/config/locales/nl-NL_rails.yml +172 -0
- data/config/locales/pl.yml +102 -11
- data/config/locales/pt-BR.yml +101 -10
- data/config/locales/pt-PT.yml +95 -4
- data/config/locales/ru-RU.yml +414 -323
- data/config/locales/ru-RU_rails.yml +1 -1
- data/config/locales/th.yml +614 -0
- data/config/locales/th_rails.yml +195 -0
- data/config/routes.rb +10 -6
- data/config/schedule.rb +27 -0
- data/config/spree_permissions.yml +8 -7
- data/db/default/zone_members.yml +2 -14
- data/{vendor/extensions/tax_calculator/db → db}/migrate/20080620100001_create_tax_rates.rb +0 -0
- data/{vendor/extensions/tax_calculator/db → db}/migrate/20080704192456_update_tax_rates_add_zones_etc.rb +0 -0
- data/db/migrate/20090401223217_create_eu_vat_zone_again.rb +1 -1
- data/db/migrate/20090404192723_add_maestro_fields.rb +12 -0
- data/db/migrate/20090406091357_add_alternative_phone.rb +9 -0
- data/db/migrate/20090525000325_remove_address_orphans.rb +15 -0
- data/db/migrate/20090603153927_create_checkouts.rb +71 -0
- data/db/migrate/20090617181106_change_txn_type_to_int.rb +18 -0
- data/db/migrate/20090618203233_create_charges.rb +61 -0
- data/db/migrate/20090626235303_create_credits.rb +22 -0
- data/db/migrate/20090705101511_add_image_dimensions.rb +12 -0
- data/db/migrate/20090708175306_create_coupons.rb +16 -0
- data/db/migrate/20090708175317_create_discounts.rb +14 -0
- data/db/migrate/20090714094201_add_default_addresses_to_user.rb +11 -0
- data/db/migrate/20090715172345_create_calculators.rb +22 -0
- data/db/migrate/20090731085008_add_charge_source_to_charge.rb +11 -0
- data/db/migrate/20090803072025_create_shipping_rates.rb +12 -0
- data/db/migrate/20090804090559_create_calculators_for_tax_rates.rb +16 -0
- data/db/migrate/20090805131937_drop_credits_and_discounts.rb +9 -0
- data/db/migrate/20090805185015_remove_tax_type.rb +13 -0
- data/db/migrate/20090806063212_rename_charges_to_adjustments.rb +24 -0
- data/db/migrate/20090806160214_rename_base_to_source.rb +11 -0
- data/db/migrate/20090809170304_remove_checkout_shipping_address_and_method.rb +15 -0
- data/db/migrate/20090809193131_add_is_master_to_variants.rb +43 -0
- data/db/migrate/20090809201209_drop_master_price_from_products.rb +13 -0
- data/db/migrate/20090809231957_update_legacy_calculators.rb +9 -0
- data/db/migrate/20090823005402_coupon_starts_at.rb +13 -0
- data/db/migrate/20090828114732_add_queued_mail.rb +12 -0
- data/db/migrate/20090908141056_adjust_percent_calc_settings.rb +9 -0
- data/db/migrate/migrate/20080620100001_create_tax_rates.rb +13 -0
- data/db/migrate/migrate/20080704192456_update_tax_rates_add_zones_etc.rb +17 -0
- data/db/sample/adjustments.yml +20 -0
- data/db/sample/assets.yml +219 -11
- data/db/sample/calculators.yml +16 -0
- data/db/sample/checkouts.yml +8 -0
- data/db/sample/coupons.yml +4 -0
- data/db/sample/creditcards.yml +0 -1
- data/db/sample/orders.yml +0 -7
- data/db/sample/preferences.yml +20 -0
- data/db/sample/products.yml +0 -9
- data/db/sample/shipping_methods.yml +3 -10
- data/db/sample/variants.yml +13 -0
- data/db/schema.rb +73 -23
- data/db/seeds.rb +8 -3
- data/generate +4 -0
- data/lib/generators/extension/extension_generator.rb +1 -1
- data/lib/generators/extension/templates/Rakefile +1 -1
- data/lib/generators/extension/templates/extension.rb +22 -2
- data/lib/generators/extension_migration/extension_migration_generator.rb +3 -3
- data/lib/generators/instance/instance_generator.rb +4 -2
- data/lib/plugins/extension_patches/lib/asset_copy.rb +1 -50
- data/lib/plugins/monkey_patches/lib/monkey_patches.rb +2 -2
- data/lib/product_filters.rb +174 -0
- data/lib/product_scopes.rb +76 -0
- data/lib/spree.rb +2 -2
- data/lib/spree/config.rb +1 -1
- data/lib/spree/extension_loader.rb +10 -1
- data/lib/spree/file_utilz.rb +71 -0
- data/lib/spree/initializer.rb +13 -1
- data/lib/spree/setup.rb +7 -1
- data/lib/tasks/consistency.rake +30 -0
- data/lib/tasks/database.rake +1 -7
- data/lib/tasks/extensions.rake +24 -8
- data/lib/tasks/framework.rake +0 -1
- data/lib/tasks/release.rake +22 -11
- data/lib/tasks/sample/products/1009/large/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1009/mini/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1009/original/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1009/product/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1009/small/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1010/large/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1010/mini/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1010/original/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1010/product/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1010/small/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1011/large/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1011/mini/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1011/original/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1011/product/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1011/small/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1012/large/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1012/mini/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1012/original/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1012/product/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1012/small/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1013/large/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1013/mini/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1013/original/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1013/product/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1013/small/ror_baseball_jersey_green.png +0 -0
- data/lib/tasks/sample/products/1014/large/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1014/mini/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1014/original/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1014/product/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1014/small/ror_baseball_jersey_back_green.png +0 -0
- data/lib/tasks/sample/products/1015/large/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1015/mini/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1015/original/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1015/product/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1015/small/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1016/large/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1016/mini/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1016/original/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1016/product/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1016/small/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1017/large/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1017/mini/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1017/original/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1017/product/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1017/small/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1018/large/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1018/mini/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1018/original/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1018/product/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1018/small/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1019/large/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1019/mini/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1019/original/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1019/product/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1019/small/ror_baseball_jersey_blue.png +0 -0
- data/lib/tasks/sample/products/1020/large/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1020/mini/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1020/original/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1020/product/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1020/small/ror_baseball_jersey_back_blue.png +0 -0
- data/lib/tasks/sample/products/1021/large/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1021/mini/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1021/original/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1021/product/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1021/small/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1022/large/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1022/mini/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1022/original/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1022/product/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1022/small/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1023/large/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1023/mini/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1023/original/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1023/product/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1023/small/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1024/large/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1024/mini/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1024/original/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1024/product/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1024/small/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1025/large/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1025/mini/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1025/original/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1025/product/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1025/small/ror_baseball_jersey_red.png +0 -0
- data/lib/tasks/sample/products/1026/large/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1026/mini/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1026/original/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1026/product/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/sample/products/1026/small/ror_baseball_jersey_back_red.png +0 -0
- data/lib/tasks/translation.rake +1 -1
- data/lib/tasks/upgrade.rake +2 -9
- data/public/images/menu-current.png +0 -0
- data/public/images/progress.gif +0 -0
- data/public/javascripts/calculator.js +13 -0
- data/public/javascripts/checkout.js +163 -34
- data/public/javascripts/jquery.alerts/images/help.gif +0 -0
- data/public/javascripts/jquery.alerts/images/important.gif +0 -0
- data/public/javascripts/jquery.alerts/images/info.gif +0 -0
- data/public/javascripts/jquery.alerts/images/title.gif +0 -0
- data/public/javascripts/jquery.alerts/jquery.alerts.css +57 -0
- data/public/javascripts/jquery.alerts/jquery.alerts.js +235 -0
- data/public/javascripts/jquery.alerts/jquery.alerts.spree.css +30 -0
- data/public/javascripts/jquery.validate.min.js +16 -0
- data/public/javascripts/jsTree/source/_lib.js +126 -0
- data/public/javascripts/jsTree/source/themes/default/context.gif +0 -0
- data/public/javascripts/jsTree/source/themes/default/create.png +0 -0
- data/public/javascripts/jsTree/source/themes/default/dot.gif +0 -0
- data/public/javascripts/jsTree/source/themes/default/f.png +0 -0
- data/public/javascripts/jsTree/source/themes/default/fminus.gif +0 -0
- data/public/javascripts/jsTree/source/themes/default/fminus_rtl.gif +0 -0
- data/public/javascripts/jsTree/source/themes/default/fplus.gif +0 -0
- data/public/javascripts/jsTree/source/themes/default/fplus_rtl.gif +0 -0
- data/public/javascripts/jsTree/source/themes/default/lastli.gif +0 -0
- data/public/javascripts/jsTree/source/themes/default/lastli_rtl.gif +0 -0
- data/public/javascripts/jsTree/source/themes/default/li.gif +0 -0
- data/public/javascripts/jsTree/source/themes/default/remove.png +0 -0
- data/public/javascripts/jsTree/source/themes/default/rename.png +0 -0
- data/public/javascripts/jsTree/source/themes/default/style.css +44 -0
- data/public/javascripts/jsTree/source/themes/default/throbber.gif +0 -0
- data/public/javascripts/jsTree/source/themes/marker.gif +0 -0
- data/public/javascripts/jsTree/source/themes/marker_rtl.gif +0 -0
- data/public/javascripts/jsTree/source/themes/plus.gif +0 -0
- data/public/javascripts/jsTree/source/themes/remove.png +0 -0
- data/public/javascripts/jsTree/source/themes/spree/context.gif +0 -0
- data/public/javascripts/jsTree/source/themes/spree/create.png +0 -0
- data/public/javascripts/jsTree/source/themes/spree/dot.gif +0 -0
- data/public/javascripts/jsTree/source/themes/spree/f.png +0 -0
- data/public/javascripts/jsTree/source/themes/spree/fminus.gif +0 -0
- data/public/javascripts/jsTree/source/themes/spree/fminus_rtl.gif +0 -0
- data/public/javascripts/jsTree/source/themes/spree/fplus.gif +0 -0
- data/public/javascripts/jsTree/source/themes/spree/fplus_rtl.gif +0 -0
- data/public/javascripts/jsTree/source/themes/spree/lastli.gif +0 -0
- data/public/javascripts/jsTree/source/themes/spree/li.gif +0 -0
- data/public/javascripts/jsTree/source/themes/spree/remove.png +0 -0
- data/public/javascripts/jsTree/source/themes/spree/rename.png +0 -0
- data/public/javascripts/jsTree/source/themes/spree/style.css +39 -0
- data/public/javascripts/jsTree/source/themes/spree/throbber.gif +0 -0
- data/public/javascripts/jsTree/source/tree_component.css +62 -0
- data/public/javascripts/jsTree/source/tree_component.js +2315 -0
- data/public/javascripts/jsTree/source/tree_component.min.js +14 -0
- data/public/javascripts/spree.js +9 -0
- data/public/javascripts/taxonomy.js +202 -0
- data/public/stylesheets/admin/admin.css +36 -3
- data/public/stylesheets/compiled/screen.css +393 -306
- data/public/stylesheets/sass/_buttons.sass +59 -0
- data/public/stylesheets/sass/_cart.sass +21 -0
- data/public/stylesheets/sass/_checkout.sass +173 -0
- data/public/stylesheets/sass/_colors.sass +11 -0
- data/public/stylesheets/sass/_layout.sass +63 -0
- data/public/stylesheets/sass/_messages.sass +28 -0
- data/public/stylesheets/sass/_mixins.sass +17 -0
- data/public/stylesheets/sass/_navigation.sass +97 -0
- data/public/stylesheets/sass/_prices.sass +13 -0
- data/public/stylesheets/sass/_product_detail.sass +27 -0
- data/public/stylesheets/sass/_product_thumbnail.sass +58 -0
- data/public/stylesheets/sass/_registration.sass +9 -0
- data/public/stylesheets/sass/screen.sass +12 -555
- data/public/stylesheets/scaffold.css +54 -0
- data/spec/controllers/orders_controller_spec.rb +3 -2
- data/spec/models/address_spec.rb +2 -1
- data/spec/models/shipping_order_spec.rb +8 -6
- data/spec/models/zone_spec.rb +1 -1
- data/spec/preference_factory.rb +1 -1
- data/test/factories/address_factory.rb +20 -0
- data/test/factories/adjustments_factory.rb +53 -0
- data/test/factories/checkout_factory.rb +15 -0
- data/test/factories/country_factory.rb +5 -0
- data/test/factories/coupon_factory.rb +5 -0
- data/test/factories/creditcard_factory.rb +12 -0
- data/test/factories/creditcard_payment_factory.rb +11 -0
- data/test/factories/inventory_unit_factory.rb +2 -0
- data/test/factories/line_item_factory.rb +8 -0
- data/test/factories/options_factory.rb +10 -0
- data/test/factories/order_factory.rb +6 -0
- data/test/factories/preference_factory.rb +5 -0
- data/test/factories/product_factory.rb +13 -0
- data/test/factories/role_factory.rb +5 -0
- data/test/factories/shipment_factory.rb +6 -0
- data/test/factories/shipping_category_factory.rb +5 -0
- data/test/factories/shipping_method_factory.rb +13 -0
- data/test/factories/tax_category_factory.rb +8 -0
- data/test/factories/tax_rate_factory.rb +4 -0
- data/test/factories/taxon_factory.rb +16 -0
- data/test/factories/taxonomy_factory.rb +5 -0
- data/test/factories/user_factory.rb +11 -0
- data/test/factories/variant_factory.rb +13 -0
- data/test/factories/zone_factory.rb +10 -0
- data/test/fixtures/countries.yml +4 -0
- data/test/fixtures/gateway_configurations.yml +2 -0
- data/test/fixtures/gateways.yml +4 -0
- data/test/fixtures/states.yml +204 -0
- data/test/functional/calculators_controller_test.rb +8 -0
- data/test/functional/checkouts_controller_test.rb +77 -0
- data/test/functional/products_controller_test.rb +12 -0
- data/test/functional/users_controller_test.rb +25 -0
- data/test/test_helper.rb +66 -0
- data/test/unit/address_test.rb +39 -0
- data/test/unit/charge_test.rb +90 -0
- data/test/unit/checkout_test.rb +10 -0
- data/test/unit/country_test.rb +6 -0
- data/test/unit/coupon_test.rb +56 -0
- data/test/unit/credit_test.rb +61 -0
- data/test/unit/creditcard_payment_test.rb +28 -0
- data/test/unit/creditcard_test.rb +44 -0
- data/test/unit/factories_test.rb +29 -0
- data/test/unit/flat_percent_item_total_test.rb +28 -0
- data/test/unit/flat_rate_calculators_test.rb +13 -0
- data/test/unit/has_calculator_test.rb +22 -0
- data/test/unit/helpers/calculators_helper_test.rb +4 -0
- data/test/unit/helpers/checkouts_helper_test.rb +26 -0
- data/test/unit/helpers/products_helper_test.rb +32 -0
- data/test/unit/helpers/spree/base_helper_test.rb +43 -0
- data/test/unit/incomplete_checkout_test.rb +68 -0
- data/test/unit/inventory_unit_test.rb +20 -0
- data/test/unit/line_item_test.rb +73 -0
- data/test/unit/order_test.rb +80 -0
- data/test/unit/per_item_calculator_test.rb +14 -0
- data/test/unit/preference_test.rb +148 -0
- data/test/unit/product_test.rb +279 -0
- data/test/unit/sales_tax_calculator_test.rb +46 -0
- data/test/unit/shipping_method_test.rb +21 -0
- data/test/unit/state_event_test.rb +40 -0
- data/test/unit/state_test.rb +7 -0
- data/test/unit/tax_rate_test.rb +9 -0
- data/test/unit/variant_test.rb +128 -0
- data/test/unit/vat_calculator_test.rb +60 -0
- data/vendor/extensions/calculators/README.markdown +4 -0
- data/vendor/extensions/calculators/calculators_extension.rb +31 -0
- data/vendor/extensions/localization/public/images/flags/{dk.png → da.png} +0 -0
- data/vendor/extensions/localization/public/images/flags/de_CH.png +0 -0
- data/vendor/extensions/payment_gateway/README_PAYPAL.markdown +1 -1
- data/vendor/extensions/payment_gateway/db/migrate/20090517173727_add_currency_code_option_to_paypal_gateway.rb +13 -0
- data/vendor/extensions/payment_gateway/lib/spree/payment_gateway.rb +22 -12
- data/vendor/plugins/acts_as_adjacency_list/lib/active_record/acts/adjacency_list.rb +13 -20
- data/vendor/plugins/delegate_belongs_to/README +1 -0
- data/vendor/plugins/delegate_belongs_to/Rakefile +21 -0
- data/vendor/plugins/delegate_belongs_to/init.rb +2 -0
- data/vendor/plugins/delegate_belongs_to/lib/delegate_belongs_to.rb +95 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/app/controllers/application.rb +2 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/app/models/contact.rb +5 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/app/models/user_default.rb +2 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/app/models/user_mixed.rb +2 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/app/models/user_no_default.rb +2 -0
- data/vendor/plugins/{resource_controller/test → delegate_belongs_to/spec/app_root}/config/boot.rb +14 -9
- data/vendor/plugins/delegate_belongs_to/spec/app_root/config/database.yml +21 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/config/environment.rb +13 -0
- data/{public/favicon.ico → vendor/plugins/delegate_belongs_to/spec/app_root/config/environments/in_memory.rb} +0 -0
- data/vendor/plugins/{resource_controller/test/app/views/tags/index.rjs → delegate_belongs_to/spec/app_root/config/environments/mysql.rb} +0 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/config/environments/postgresql.rb +0 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/config/environments/sqlite.rb +0 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/config/environments/sqlite3.rb +0 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/config/routes.rb +4 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/db/migrate/01_create_users.rb +22 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/db/migrate/02_create_contacts.rb +12 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/lib/console_with_fixtures.rb +4 -0
- data/vendor/plugins/delegate_belongs_to/spec/app_root/script/console +7 -0
- data/vendor/plugins/delegate_belongs_to/spec/model/with_defaults_spec.rb +30 -0
- data/vendor/plugins/delegate_belongs_to/spec/model/with_mixed_spec.rb +29 -0
- data/vendor/plugins/delegate_belongs_to/spec/model/with_no_defaults_spec.rb +30 -0
- data/vendor/plugins/delegate_belongs_to/spec/spec_helper.rb +68 -0
- data/vendor/plugins/has_calculator/README +7 -0
- data/vendor/plugins/has_calculator/init.rb +2 -0
- data/vendor/plugins/has_calculator/lib/has_calculator.rb +52 -0
- data/vendor/plugins/mail_queue/README +40 -0
- data/vendor/plugins/mail_queue/Rakefile +22 -0
- data/vendor/plugins/mail_queue/init.rb +1 -0
- data/vendor/plugins/mail_queue/install.rb +1 -0
- data/vendor/plugins/mail_queue/lib/mail_queue.rb +48 -0
- data/vendor/plugins/mail_queue/lib/queued_mail.rb +5 -0
- data/vendor/plugins/mail_queue/lib/test_mail_queue_mailer.rb +19 -0
- data/vendor/plugins/mail_queue/lib/test_mail_queue_mailer/notify.rhtml +1 -0
- data/vendor/plugins/mail_queue/tasks/mailer_queue_tasks.rake +4 -0
- data/vendor/plugins/mail_queue/test/mailer_queue_test.rb +29 -0
- data/vendor/plugins/paperclip/README.rdoc +126 -11
- data/vendor/plugins/paperclip/Rakefile +35 -24
- data/vendor/plugins/paperclip/lib/paperclip.rb +141 -67
- data/vendor/plugins/paperclip/lib/paperclip/attachment.rb +233 -117
- data/vendor/plugins/paperclip/lib/paperclip/callback_compatability.rb +33 -0
- data/vendor/plugins/paperclip/lib/paperclip/geometry.rb +4 -3
- data/vendor/plugins/paperclip/lib/paperclip/interpolations.rb +105 -0
- data/vendor/plugins/paperclip/lib/paperclip/iostream.rb +16 -1
- data/vendor/plugins/paperclip/lib/paperclip/matchers.rb +4 -0
- data/vendor/plugins/paperclip/lib/paperclip/matchers/have_attached_file_matcher.rb +49 -0
- data/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +66 -0
- data/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_presence_matcher.rb +48 -0
- data/vendor/plugins/paperclip/lib/paperclip/matchers/validate_attachment_size_matcher.rb +83 -0
- data/vendor/plugins/paperclip/lib/paperclip/processor.rb +49 -0
- data/vendor/plugins/paperclip/lib/paperclip/storage.rb +54 -25
- data/vendor/plugins/paperclip/lib/paperclip/thumbnail.rb +13 -31
- data/vendor/plugins/paperclip/lib/paperclip/upfile.rb +11 -0
- data/vendor/plugins/paperclip/paperclip.gemspec +37 -0
- data/vendor/plugins/paperclip/shoulda_macros/paperclip.rb +58 -22
- data/vendor/plugins/paperclip/tasks/paperclip_tasks.rake +1 -1
- data/vendor/plugins/paperclip/test/attachment_test.rb +460 -54
- data/vendor/plugins/paperclip/test/database.yml +0 -1
- data/vendor/plugins/paperclip/test/fixtures/s3.yml +4 -0
- data/vendor/plugins/paperclip/test/fixtures/twopage.pdf +0 -0
- data/vendor/plugins/paperclip/test/geometry_test.rb +22 -13
- data/vendor/plugins/paperclip/test/helper.rb +46 -3
- data/vendor/plugins/paperclip/test/integration_test.rb +140 -52
- data/vendor/plugins/paperclip/test/interpolations_test.rb +120 -0
- data/vendor/plugins/paperclip/test/iostream_test.rb +32 -21
- data/vendor/plugins/paperclip/test/matchers/have_attached_file_matcher_test.rb +21 -0
- data/vendor/plugins/paperclip/test/matchers/validate_attachment_content_type_matcher_test.rb +30 -0
- data/vendor/plugins/paperclip/test/matchers/validate_attachment_presence_matcher_test.rb +21 -0
- data/vendor/plugins/paperclip/test/matchers/validate_attachment_size_matcher_test.rb +50 -0
- data/vendor/plugins/paperclip/test/paperclip_test.rb +148 -36
- data/vendor/plugins/paperclip/test/processor_test.rb +10 -0
- data/vendor/plugins/paperclip/test/storage_test.rb +126 -16
- data/vendor/plugins/paperclip/test/thumbnail_test.rb +51 -19
- metadata +586 -622
- data/app/views/admin/products/_images.html.erb +0 -42
- data/app/views/admin/taxonomies/_yui_head.html.erb +0 -17
- data/app/views/orders/_billing.html.erb +0 -53
- data/app/views/orders/_checkout_form.html.erb +0 -14
- data/app/views/orders/_confirmation.html.erb +0 -11
- data/app/views/orders/_payment.html.erb +0 -30
- data/app/views/orders/_shipping.html.erb +0 -54
- data/app/views/orders/_shipping_method.html.erb +0 -10
- data/app/views/orders/checkout.html.erb +0 -15
- data/config/initializers/searchlogic.rb +0 -6
- data/db/sample/images/ror_bag.jpg +0 -0
- data/db/sample/images/ror_baseball_jersey.jpg +0 -0
- data/db/sample/images/ror_jr_spaghetti.jpg +0 -0
- data/db/sample/images/ror_mug.jpg +0 -0
- data/db/sample/images/ror_ringer_tshirt.jpg +0 -0
- data/db/sample/images/ror_stein.jpg +0 -0
- data/db/sample/images/ror_tote.jpg +0 -0
- data/db/sample/zone_members.yml +0 -16
- data/db/sample/zones.yml +0 -6
- data/lib/flat_rate.rb +0 -10
- data/lib/spree/checkout.rb +0 -74
- data/public/assets/products/1/mini/ror_tote.jpeg +0 -0
- data/public/assets/products/1/original/ror_tote.jpeg +0 -0
- data/public/assets/products/1/product/ror_tote.jpeg +0 -0
- data/public/assets/products/1/small/ror_tote.jpeg +0 -0
- data/public/assets/products/10/mini/ror_ringer_back.jpeg +0 -0
- data/public/assets/products/10/original/ror_ringer_back.jpeg +0 -0
- data/public/assets/products/10/product/ror_ringer_back.jpeg +0 -0
- data/public/assets/products/10/small/ror_ringer_back.jpeg +0 -0
- data/public/assets/products/1004/mini/apache_baseball.png +0 -0
- data/public/assets/products/1004/original/apache_baseball.png +0 -0
- data/public/assets/products/1004/product/apache_baseball.png +0 -0
- data/public/assets/products/1004/small/apache_baseball.png +0 -0
- data/public/assets/products/1008/mini/ruby_baseball.png +0 -0
- data/public/assets/products/1008/original/ruby_baseball.png +0 -0
- data/public/assets/products/1008/product/ruby_baseball.png +0 -0
- data/public/assets/products/1008/small/ruby_baseball.png +0 -0
- data/public/assets/products/11/mini/ror_stein.jpeg +0 -0
- data/public/assets/products/11/original/ror_stein.jpeg +0 -0
- data/public/assets/products/11/product/ror_stein.jpeg +0 -0
- data/public/assets/products/11/small/ror_stein.jpeg +0 -0
- data/public/assets/products/12/mini/ror_stein_back.jpeg +0 -0
- data/public/assets/products/12/original/ror_stein_back.jpeg +0 -0
- data/public/assets/products/12/product/ror_stein_back.jpeg +0 -0
- data/public/assets/products/12/small/ror_stein_back.jpeg +0 -0
- data/public/assets/products/2/mini/ror_tote_back.jpeg +0 -0
- data/public/assets/products/2/original/ror_tote_back.jpeg +0 -0
- data/public/assets/products/2/product/ror_tote_back.jpeg +0 -0
- data/public/assets/products/2/small/ror_tote_back.jpeg +0 -0
- data/public/assets/products/3/mini/ror_bag.jpeg +0 -0
- data/public/assets/products/3/original/ror_bag.jpeg +0 -0
- data/public/assets/products/3/product/ror_bag.jpeg +0 -0
- data/public/assets/products/3/small/ror_bag.jpeg +0 -0
- data/public/assets/products/4/mini/ror_baseball.jpeg +0 -0
- data/public/assets/products/4/original/ror_baseball.jpeg +0 -0
- data/public/assets/products/4/product/ror_baseball.jpeg +0 -0
- data/public/assets/products/4/small/ror_baseball.jpeg +0 -0
- data/public/assets/products/5/mini/ror_baseball_back.jpeg +0 -0
- data/public/assets/products/5/original/ror_baseball_back.jpeg +0 -0
- data/public/assets/products/5/product/ror_baseball_back.jpeg +0 -0
- data/public/assets/products/5/small/ror_baseball_back.jpeg +0 -0
- data/public/assets/products/6/mini/ror_jr_spaghetti.jpeg +0 -0
- data/public/assets/products/6/original/ror_jr_spaghetti.jpeg +0 -0
- data/public/assets/products/6/product/ror_jr_spaghetti.jpeg +0 -0
- data/public/assets/products/6/small/ror_jr_spaghetti.jpeg +0 -0
- data/public/assets/products/7/mini/ror_mug.jpeg +0 -0
- data/public/assets/products/7/original/ror_mug.jpeg +0 -0
- data/public/assets/products/7/product/ror_mug.jpeg +0 -0
- data/public/assets/products/7/small/ror_mug.jpeg +0 -0
- data/public/assets/products/8/mini/ror_mug_back.jpeg +0 -0
- data/public/assets/products/8/original/ror_mug_back.jpeg +0 -0
- data/public/assets/products/8/product/ror_mug_back.jpeg +0 -0
- data/public/assets/products/8/small/ror_mug_back.jpeg +0 -0
- data/public/assets/products/9/mini/ror_ringer.jpeg +0 -0
- data/public/assets/products/9/original/ror_ringer.jpeg +0 -0
- data/public/assets/products/9/product/ror_ringer.jpeg +0 -0
- data/public/assets/products/9/small/ror_ringer.jpeg +0 -0
- data/public/javascripts/jquery.validate.pack.js +0 -15
- data/public/javascripts/spree-yui.js +0 -693
- data/public/javascripts/yui-includes.js +0 -57
- data/public/stylesheets/admin/david-admin.css +0 -210
- data/spec/controllers/admin/shipments_controller_spec.rb +0 -30
- data/spec/helpers/admin/configurations_helper_spec.rb +0 -11
- data/spec/helpers/admin/mail_settings_helper_spec.rb +0 -11
- data/spec/helpers/products_helper_spec.rb +0 -12
- data/spec/helpers/spree/base_helper_spec.rb +0 -30
- data/spec/models/country_spec.rb +0 -29
- data/spec/models/line_item_spec.rb +0 -78
- data/spec/models/preference_spec.rb +0 -185
- data/spec/models/product_spec.rb +0 -207
- data/spec/models/shipping_method_spec.rb +0 -59
- data/spec/models/state_event_spec.rb +0 -12
- data/spec/models/state_spec.rb +0 -28
- data/spec/models/variant_spec.rb +0 -98
- data/vendor/extensions/flat_rate_shipping/README.markdown +0 -3
- data/vendor/extensions/flat_rate_shipping/Rakefile +0 -120
- data/vendor/extensions/flat_rate_shipping/flat_rate_shipping_extension.rb +0 -11
- data/vendor/extensions/flat_rate_shipping/lib/flat_rate_shipping_configuration.rb +0 -7
- data/vendor/extensions/flat_rate_shipping/lib/spree/flat_rate_shipping/calculator.rb +0 -9
- data/vendor/extensions/flat_rate_shipping/lib/spree/flat_rate_shipping/config.rb +0 -22
- data/vendor/extensions/flat_rate_shipping/lib/tasks/flat_rate_shipping_extension_tasks.rake +0 -29
- data/vendor/extensions/flat_rate_shipping/spec/spec.opts +0 -6
- data/vendor/extensions/flat_rate_shipping/spec/spec_helper.rb +0 -37
- data/vendor/extensions/tax_calculator/README.markdown +0 -8
- data/vendor/extensions/tax_calculator/Rakefile +0 -120
- data/vendor/extensions/tax_calculator/app/controllers/admin/tax_rates_controller.rb +0 -27
- data/vendor/extensions/tax_calculator/app/views/admin/tax_rates/_form.html.erb +0 -20
- data/vendor/extensions/tax_calculator/config/locales/de.yml +0 -30
- data/vendor/extensions/tax_calculator/config/locales/en-GB.yml +0 -30
- data/vendor/extensions/tax_calculator/config/locales/en-US.yml +0 -32
- data/vendor/extensions/tax_calculator/config/locales/es.yml +0 -30
- data/vendor/extensions/tax_calculator/config/locales/it.yml +0 -30
- data/vendor/extensions/tax_calculator/config/locales/nb-NO.yml +0 -30
- data/vendor/extensions/tax_calculator/config/locales/pl.yml +0 -30
- data/vendor/extensions/tax_calculator/config/locales/pt-BR.yml +0 -30
- data/vendor/extensions/tax_calculator/config/routes.rb +0 -4
- data/vendor/extensions/tax_calculator/lib/spree/sales_tax_calculator.rb +0 -31
- data/vendor/extensions/tax_calculator/lib/spree/tax/config.rb +0 -22
- data/vendor/extensions/tax_calculator/lib/spree/tax_calculator.rb +0 -18
- data/vendor/extensions/tax_calculator/lib/spree/vat_calculator.rb +0 -42
- data/vendor/extensions/tax_calculator/lib/tasks/tax_calculator_extension_tasks.rake +0 -18
- data/vendor/extensions/tax_calculator/lib/tax_configuration.rb +0 -7
- data/vendor/extensions/tax_calculator/spec/controllers/tax_calculator_spec.rb +0 -12
- data/vendor/extensions/tax_calculator/spec/helpers/admin/tax_rates_helper_spec.rb +0 -6
- data/vendor/extensions/tax_calculator/spec/helpers/products_helper_spec.rb +0 -88
- data/vendor/extensions/tax_calculator/spec/models/sales_tax_calculator_spec.rb +0 -53
- data/vendor/extensions/tax_calculator/spec/models/tax_calculator_spec.rb +0 -58
- data/vendor/extensions/tax_calculator/spec/models/tax_rate_spec.rb +0 -17
- data/vendor/extensions/tax_calculator/spec/models/vat_calculator_spec.rb +0 -56
- data/vendor/extensions/tax_calculator/spec/spec.opts +0 -6
- data/vendor/extensions/tax_calculator/spec/spec_helper.rb +0 -42
- data/vendor/extensions/tax_calculator/tax_calculator_extension.rb +0 -41
- data/vendor/plugins/resource_controller/test/Rakefile +0 -10
- data/vendor/plugins/resource_controller/test/app/controllers/accounts_controller.rb +0 -6
- data/vendor/plugins/resource_controller/test/app/controllers/application.rb +0 -7
- data/vendor/plugins/resource_controller/test/app/controllers/cms/options_controller.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/controllers/cms/personnel_controller.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/controllers/cms/photos_controller.rb +0 -6
- data/vendor/plugins/resource_controller/test/app/controllers/cms/products_controller.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/controllers/comments_controller.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/controllers/images_controller.rb +0 -4
- data/vendor/plugins/resource_controller/test/app/controllers/options_controller.rb +0 -8
- data/vendor/plugins/resource_controller/test/app/controllers/people_controller.rb +0 -9
- data/vendor/plugins/resource_controller/test/app/controllers/photos_controller.rb +0 -11
- data/vendor/plugins/resource_controller/test/app/controllers/posts_controller.rb +0 -10
- data/vendor/plugins/resource_controller/test/app/controllers/projects_controller.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/controllers/somethings_controller.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/controllers/tags_controller.rb +0 -13
- data/vendor/plugins/resource_controller/test/app/controllers/users_controller.rb +0 -12
- data/vendor/plugins/resource_controller/test/app/helpers/accounts_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/application_helper.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/helpers/cms/products_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/comments_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/images_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/options_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/people_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/photos_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/posts_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/projects_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/somethings_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/tags_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/helpers/users_helper.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/models/account.rb +0 -4
- data/vendor/plugins/resource_controller/test/app/models/comment.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/models/image.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/models/option.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/models/personnel.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/models/photo.rb +0 -5
- data/vendor/plugins/resource_controller/test/app/models/post.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/models/product.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/models/project.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/models/something.rb +0 -2
- data/vendor/plugins/resource_controller/test/app/models/tag.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/models/user.rb +0 -3
- data/vendor/plugins/resource_controller/test/app/views/accounts/_form.html.erb +0 -4
- data/vendor/plugins/resource_controller/test/app/views/accounts/edit.html.erb +0 -14
- data/vendor/plugins/resource_controller/test/app/views/accounts/new.html.erb +0 -12
- data/vendor/plugins/resource_controller/test/app/views/accounts/show.html.erb +0 -5
- data/vendor/plugins/resource_controller/test/app/views/cms/options/edit.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/cms/options/index.rhtml +0 -20
- data/vendor/plugins/resource_controller/test/app/views/cms/options/new.rhtml +0 -16
- data/vendor/plugins/resource_controller/test/app/views/cms/options/show.rhtml +0 -8
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/edit.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/index.rhtml +0 -20
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/new.rhtml +0 -16
- data/vendor/plugins/resource_controller/test/app/views/cms/photos/show.rhtml +0 -8
- data/vendor/plugins/resource_controller/test/app/views/cms/products/edit.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/cms/products/index.rhtml +0 -20
- data/vendor/plugins/resource_controller/test/app/views/cms/products/new.rhtml +0 -16
- data/vendor/plugins/resource_controller/test/app/views/cms/products/show.rhtml +0 -8
- data/vendor/plugins/resource_controller/test/app/views/comments/edit.rhtml +0 -27
- data/vendor/plugins/resource_controller/test/app/views/comments/index.rhtml +0 -24
- data/vendor/plugins/resource_controller/test/app/views/comments/new.rhtml +0 -26
- data/vendor/plugins/resource_controller/test/app/views/comments/show.rhtml +0 -18
- data/vendor/plugins/resource_controller/test/app/views/images/_form.html.erb +0 -4
- data/vendor/plugins/resource_controller/test/app/views/images/edit.html.erb +0 -14
- data/vendor/plugins/resource_controller/test/app/views/images/new.html.erb +0 -12
- data/vendor/plugins/resource_controller/test/app/views/layouts/comments.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/layouts/options.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/layouts/people.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/layouts/photos.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/layouts/projects.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/layouts/somethings.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/layouts/tags.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/options/_form.html.erb +0 -8
- data/vendor/plugins/resource_controller/test/app/views/options/edit.html.erb +0 -16
- data/vendor/plugins/resource_controller/test/app/views/options/index.html.erb +0 -21
- data/vendor/plugins/resource_controller/test/app/views/options/new.html.erb +0 -12
- data/vendor/plugins/resource_controller/test/app/views/options/show.html.erb +0 -10
- data/vendor/plugins/resource_controller/test/app/views/people/edit.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/people/index.rhtml +0 -20
- data/vendor/plugins/resource_controller/test/app/views/people/new.rhtml +0 -16
- data/vendor/plugins/resource_controller/test/app/views/people/show.rhtml +0 -8
- data/vendor/plugins/resource_controller/test/app/views/photos/edit.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/photos/index.rhtml +0 -20
- data/vendor/plugins/resource_controller/test/app/views/photos/new.rhtml +0 -16
- data/vendor/plugins/resource_controller/test/app/views/photos/show.rhtml +0 -8
- data/vendor/plugins/resource_controller/test/app/views/posts/edit.rhtml +0 -22
- data/vendor/plugins/resource_controller/test/app/views/posts/index.rhtml +0 -22
- data/vendor/plugins/resource_controller/test/app/views/posts/new.rhtml +0 -21
- data/vendor/plugins/resource_controller/test/app/views/posts/show.rhtml +0 -13
- data/vendor/plugins/resource_controller/test/app/views/projects/edit.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/projects/index.rhtml +0 -20
- data/vendor/plugins/resource_controller/test/app/views/projects/new.rhtml +0 -16
- data/vendor/plugins/resource_controller/test/app/views/projects/show.rhtml +0 -8
- data/vendor/plugins/resource_controller/test/app/views/somethings/edit.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/somethings/index.rhtml +0 -20
- data/vendor/plugins/resource_controller/test/app/views/somethings/new.rhtml +0 -16
- data/vendor/plugins/resource_controller/test/app/views/somethings/show.rhtml +0 -8
- data/vendor/plugins/resource_controller/test/app/views/tags/edit.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/tags/index.rhtml +0 -20
- data/vendor/plugins/resource_controller/test/app/views/tags/new.rhtml +0 -16
- data/vendor/plugins/resource_controller/test/app/views/tags/show.rhtml +0 -8
- data/vendor/plugins/resource_controller/test/app/views/users/edit.rhtml +0 -17
- data/vendor/plugins/resource_controller/test/app/views/users/index.rhtml +0 -20
- data/vendor/plugins/resource_controller/test/app/views/users/new.rhtml +0 -16
- data/vendor/plugins/resource_controller/test/app/views/users/show.rhtml +0 -8
- data/vendor/plugins/resource_controller/test/config/database.yml +0 -9
- data/vendor/plugins/resource_controller/test/config/environment.rb +0 -47
- data/vendor/plugins/resource_controller/test/config/environments/development.rb +0 -21
- data/vendor/plugins/resource_controller/test/config/environments/test.rb +0 -19
- data/vendor/plugins/resource_controller/test/config/initializers/inflections.rb +0 -14
- data/vendor/plugins/resource_controller/test/config/routes.rb +0 -61
- data/vendor/plugins/resource_controller/test/db/migrate/001_create_posts.rb +0 -12
- data/vendor/plugins/resource_controller/test/db/migrate/002_create_products.rb +0 -11
- data/vendor/plugins/resource_controller/test/db/migrate/003_create_comments.rb +0 -13
- data/vendor/plugins/resource_controller/test/db/migrate/004_create_options.rb +0 -13
- data/vendor/plugins/resource_controller/test/db/migrate/005_create_photos.rb +0 -11
- data/vendor/plugins/resource_controller/test/db/migrate/006_create_tags.rb +0 -17
- data/vendor/plugins/resource_controller/test/db/migrate/007_create_somethings.rb +0 -11
- data/vendor/plugins/resource_controller/test/db/migrate/008_create_accounts.rb +0 -11
- data/vendor/plugins/resource_controller/test/db/migrate/009_add_account_id_to_photos.rb +0 -9
- data/vendor/plugins/resource_controller/test/db/migrate/010_create_projects.rb +0 -11
- data/vendor/plugins/resource_controller/test/db/migrate/011_create_images.rb +0 -12
- data/vendor/plugins/resource_controller/test/db/migrate/012_create_users.rb +0 -11
- data/vendor/plugins/resource_controller/test/db/migrate/013_create_personnel.rb +0 -11
- data/vendor/plugins/resource_controller/test/db/migrate/014_add_personnel_id_to_photos.rb +0 -9
- data/vendor/plugins/resource_controller/test/db/schema.rb +0 -78
- data/vendor/plugins/resource_controller/test/script/console +0 -3
- data/vendor/plugins/resource_controller/test/script/destroy +0 -3
- data/vendor/plugins/resource_controller/test/script/generate +0 -3
- data/vendor/plugins/resource_controller/test/script/server +0 -3
- data/vendor/plugins/resource_controller/test/test/fixtures/accounts.yml +0 -7
- data/vendor/plugins/resource_controller/test/test/fixtures/comments.yml +0 -11
- data/vendor/plugins/resource_controller/test/test/fixtures/images.yml +0 -6
- data/vendor/plugins/resource_controller/test/test/fixtures/options.yml +0 -9
- data/vendor/plugins/resource_controller/test/test/fixtures/personnel.yml +0 -5
- data/vendor/plugins/resource_controller/test/test/fixtures/photos.yml +0 -9
- data/vendor/plugins/resource_controller/test/test/fixtures/photos_tags.yml +0 -3
- data/vendor/plugins/resource_controller/test/test/fixtures/posts.yml +0 -9
- data/vendor/plugins/resource_controller/test/test/fixtures/products.yml +0 -7
- data/vendor/plugins/resource_controller/test/test/fixtures/projects.yml +0 -7
- data/vendor/plugins/resource_controller/test/test/fixtures/somethings.yml +0 -7
- data/vendor/plugins/resource_controller/test/test/fixtures/tags.yml +0 -7
- data/vendor/plugins/resource_controller/test/test/fixtures/users.yml +0 -5
- data/vendor/plugins/resource_controller/test/test/functional/cms/options_controller_test.rb +0 -23
- data/vendor/plugins/resource_controller/test/test/functional/cms/photos_controller_test.rb +0 -43
- data/vendor/plugins/resource_controller/test/test/functional/cms/products_controller_test.rb +0 -23
- data/vendor/plugins/resource_controller/test/test/functional/comments_controller_test.rb +0 -26
- data/vendor/plugins/resource_controller/test/test/functional/images_controller_test.rb +0 -37
- data/vendor/plugins/resource_controller/test/test/functional/people_controller_test.rb +0 -34
- data/vendor/plugins/resource_controller/test/test/functional/photos_controller_test.rb +0 -130
- data/vendor/plugins/resource_controller/test/test/functional/posts_controller_test.rb +0 -34
- data/vendor/plugins/resource_controller/test/test/functional/projects_controller_test.rb +0 -18
- data/vendor/plugins/resource_controller/test/test/functional/somethings_controller_test.rb +0 -28
- data/vendor/plugins/resource_controller/test/test/functional/tags_controller_test.rb +0 -64
- data/vendor/plugins/resource_controller/test/test/functional/users_controller_test.rb +0 -24
- data/vendor/plugins/resource_controller/test/test/test_helper.rb +0 -12
- data/vendor/plugins/resource_controller/test/test/unit/accessors_test.rb +0 -110
- data/vendor/plugins/resource_controller/test/test/unit/account_test.rb +0 -7
- data/vendor/plugins/resource_controller/test/test/unit/action_options_test.rb +0 -109
- data/vendor/plugins/resource_controller/test/test/unit/base_test.rb +0 -11
- data/vendor/plugins/resource_controller/test/test/unit/comment_test.rb +0 -10
- data/vendor/plugins/resource_controller/test/test/unit/failable_action_options_test.rb +0 -77
- data/vendor/plugins/resource_controller/test/test/unit/helpers/current_objects_test.rb +0 -133
- data/vendor/plugins/resource_controller/test/test/unit/helpers/internal_test.rb +0 -106
- data/vendor/plugins/resource_controller/test/test/unit/helpers/nested_test.rb +0 -86
- data/vendor/plugins/resource_controller/test/test/unit/helpers/singleton_current_objects_test.rb +0 -68
- data/vendor/plugins/resource_controller/test/test/unit/helpers/singleton_nested_test.rb +0 -77
- data/vendor/plugins/resource_controller/test/test/unit/helpers/singleton_urls_test.rb +0 -67
- data/vendor/plugins/resource_controller/test/test/unit/helpers/urls_test.rb +0 -75
- data/vendor/plugins/resource_controller/test/test/unit/helpers_test.rb +0 -25
- data/vendor/plugins/resource_controller/test/test/unit/image_test.rb +0 -7
- data/vendor/plugins/resource_controller/test/test/unit/option_test.rb +0 -10
- data/vendor/plugins/resource_controller/test/test/unit/photo_test.rb +0 -10
- data/vendor/plugins/resource_controller/test/test/unit/post_test.rb +0 -10
- data/vendor/plugins/resource_controller/test/test/unit/project_test.rb +0 -10
- data/vendor/plugins/resource_controller/test/test/unit/response_collector_test.rb +0 -49
- data/vendor/plugins/resource_controller/test/test/unit/something_test.rb +0 -10
- data/vendor/plugins/resource_controller/test/test/unit/tag_test.rb +0 -10
- data/vendor/plugins/resource_controller/test/test/unit/urligence_test.rb +0 -203
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/Rakefile +0 -32
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/bin/convert_to_should_syntax +0 -40
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/init.rb +0 -3
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/lib/shoulda.rb +0 -43
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/lib/shoulda/active_record_helpers.rb +0 -580
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/lib/shoulda/color.rb +0 -77
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/controller_tests.rb +0 -467
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/html.rb +0 -201
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/xml.rb +0 -170
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/lib/shoulda/gem/proc_extensions.rb +0 -14
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/lib/shoulda/gem/shoulda.rb +0 -239
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/lib/shoulda/general.rb +0 -118
- data/vendor/plugins/resource_controller/test/vendor/plugins/shoulda/lib/shoulda/private_helpers.rb +0 -22
@@ -0,0 +1,19 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
class TestMailQueueMailer < ActionMailer::QueueMailer
|
4
|
+
|
5
|
+
def notify(sent_at = Time.now)
|
6
|
+
@subject = 'TestMailerClass#notify'
|
7
|
+
@recipients = ['nate@mailinator.com']
|
8
|
+
@from = 'from@mailinator.com'
|
9
|
+
@sent_on = sent_at
|
10
|
+
@headers = {}
|
11
|
+
@body = {}
|
12
|
+
|
13
|
+
Net::HTTP.start("www.google.com") { |http|
|
14
|
+
resp = http.get("/intl/en_ALL/images/logo.gif")
|
15
|
+
attachment :content_type => "image/gif",
|
16
|
+
:body => resp.body
|
17
|
+
}
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
test
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../../../test/test_helper'
|
2
|
+
require 'test_mail_queue_mailer'
|
3
|
+
Spree::Config.set(:use_mail_queue => true)
|
4
|
+
|
5
|
+
class MailQueueTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_should_queue_and_then_send
|
8
|
+
|
9
|
+
queue_count = QueuedMail.count
|
10
|
+
|
11
|
+
TestMailQueueMailer.template_root = "lib"
|
12
|
+
TestMailQueueMailer.deliver_notify()
|
13
|
+
|
14
|
+
assert QueuedMail.count > queue_count
|
15
|
+
|
16
|
+
MailQueue.process
|
17
|
+
|
18
|
+
assert QueuedMail.count == 0
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_should_send_without_queue
|
22
|
+
|
23
|
+
TestMailQueueMailer.template_root = "lib"
|
24
|
+
TestMailQueueMailer.deliver_notify!()
|
25
|
+
|
26
|
+
assert QueuedMail.count == 0
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
@@ -1,10 +1,21 @@
|
|
1
1
|
=Paperclip
|
2
2
|
|
3
|
-
Paperclip is intended as an easy file attachment library for ActiveRecord. The
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
Paperclip is intended as an easy file attachment library for ActiveRecord. The
|
4
|
+
intent behind it was to keep setup as easy as possible and to treat files as
|
5
|
+
much like other attributes as possible. This means they aren't saved to their
|
6
|
+
final locations on disk, nor are they deleted if set to nil, until
|
7
|
+
ActiveRecord::Base#save is called. It manages validations based on size and
|
8
|
+
presence, if required. It can transform its assigned image into thumbnails if
|
9
|
+
needed, and the prerequisites are as simple as installing ImageMagick (which,
|
10
|
+
for most modern Unix-based systems, is as easy as installing the right
|
11
|
+
packages). Attached files are saved to the filesystem and referenced in the
|
12
|
+
browser by an easily understandable specification, which has sensible and
|
13
|
+
useful defaults.
|
14
|
+
|
15
|
+
See the documentation for +has_attached_file+ in Paperclip::ClassMethods for
|
16
|
+
more detailed options.
|
17
|
+
|
18
|
+
==Quick Start
|
8
19
|
|
9
20
|
In your model:
|
10
21
|
|
@@ -48,12 +59,116 @@ In your show view:
|
|
48
59
|
<%= image_tag @user.avatar.url(:medium) %>
|
49
60
|
<%= image_tag @user.avatar.url(:thumb) %>
|
50
61
|
|
62
|
+
==Usage
|
63
|
+
|
64
|
+
The basics of paperclip are quite simple: Declare that your model has an
|
65
|
+
attachment with the has_attached_file method, and give it a name. Paperclip
|
66
|
+
will wrap up up to four attributes (all prefixed with that attachment's name,
|
67
|
+
so you can have multiple attachments per model if you wish) and give the a
|
68
|
+
friendly front end. The attributes are <attachment>_file_name,
|
69
|
+
<attachment>_file_size, <attachment>_content_type, and <attachment>_updated_at.
|
70
|
+
Only <attachment>_file_name is required for paperclip to operate. More
|
71
|
+
information about the options to has_attached_file is available in the
|
72
|
+
documentation of Paperclip::ClassMethods.
|
73
|
+
|
74
|
+
Attachments can be validated with Paperclip's validation methods,
|
75
|
+
validates_attachment_presence, validates_attachment_content_type, and
|
76
|
+
validates_attachment_size.
|
77
|
+
|
78
|
+
==Storage
|
79
|
+
|
80
|
+
The files that are assigned as attachments are, by default, placed in the
|
81
|
+
directory specified by the :path option to has_attached_file. By default, this
|
82
|
+
location is ":rails_root/public/system/:attachment/:id/:style/:filename". This
|
83
|
+
location was chosen because on standard Capistrano deployments, the
|
84
|
+
public/system directory is symlinked to the app's shared directory, meaning it
|
85
|
+
will survive between deployments. For example, using that :path, you may have a
|
86
|
+
file at
|
87
|
+
|
88
|
+
/data/myapp/releases/20081229172410/public/system/avatars/13/small/my_pic.png
|
89
|
+
|
90
|
+
NOTE: This is a change from previous versions of Paperclip, but is overall a
|
91
|
+
safer choice for the default file store.
|
92
|
+
|
93
|
+
You may also choose to store your files using Amazon's S3 service. You can find
|
94
|
+
more information about S3 storage at the description for
|
95
|
+
Paperclip::Storage::S3.
|
96
|
+
|
97
|
+
Files on the local filesystem (and in the Rails app's public directory) will be
|
98
|
+
available to the internet at large. If you require access control, it's
|
99
|
+
possible to place your files in a different location. You will need to change
|
100
|
+
both the :path and :url options in order to make sure the files are unavailable
|
101
|
+
to the public. Both :path and :url allow the same set of interpolated
|
102
|
+
variables.
|
103
|
+
|
104
|
+
==Post Processing
|
105
|
+
|
106
|
+
Paperclip supports an extensible selection of post-processors. When you define
|
107
|
+
a set of styles for an attachment, by default it is expected that those
|
108
|
+
"styles" are actually "thumbnails". However, you can do much more than just
|
109
|
+
thumbnail images. By defining a subclass of Paperclip::Processor, you can
|
110
|
+
perform any processing you want on the files that are attached. Any file in
|
111
|
+
your Rails app's lib/paperclip_processors directory is automatically loaded by
|
112
|
+
paperclip, allowing you to easily define custom processors. You can specify a
|
113
|
+
processor with the :processors option to has_attached_file:
|
114
|
+
|
115
|
+
has_attached_file :scan, :styles => { :text => { :quality => :better } },
|
116
|
+
:processors => [:ocr]
|
117
|
+
|
118
|
+
This would load the hypothetical class Paperclip::Ocr, which would have the
|
119
|
+
hash "{ :quality => :better }" passed to it along with the uploaded file. For
|
120
|
+
more information about defining processors, see Paperclip::Processor.
|
121
|
+
|
122
|
+
The default processor is Paperclip::Thumbnail. For backwards compatability
|
123
|
+
reasons, you can pass a single geometry string or an array containing a
|
124
|
+
geometry and a format, which the file will be converted to, like so:
|
125
|
+
|
126
|
+
has_attached_file :avatar, :styles => { :thumb => ["32x32#", :png] }
|
127
|
+
|
128
|
+
This will convert the "thumb" style to a 32x32 square in png format, regardless
|
129
|
+
of what was uploaded. If the format is not specified, it is kept the same (i.e.
|
130
|
+
jpgs will remain jpgs).
|
131
|
+
|
132
|
+
Multiple processors can be specified, and they will be invoked in the order
|
133
|
+
they are defined in the :processors array. Each successive processor will
|
134
|
+
be given the result of the previous processor's execution. All processors will
|
135
|
+
receive the same parameters, which are what you define in the :styles hash.
|
136
|
+
For example, assuming we had this definition:
|
137
|
+
|
138
|
+
has_attached_file :scan, :styles => { :text => { :quality => :better } },
|
139
|
+
:processors => [:rotator, :ocr]
|
140
|
+
|
141
|
+
then both the :rotator processor and the :ocr processor would receive the
|
142
|
+
options "{ :quality => :better }". This parameter may not mean anything to one
|
143
|
+
or more or the processors, and they are expected to ignore it.
|
144
|
+
|
145
|
+
NOTE: Because processors operate by turning the original attachment into the
|
146
|
+
styles, no processors will be run if there are no styles defined.
|
147
|
+
|
148
|
+
==Events
|
149
|
+
|
150
|
+
Before and after the Post Processing step, Paperclip calls back to the model
|
151
|
+
with a few callbacks, allowing the model to change or cancel the processing
|
152
|
+
step. The callbacks are "before_post_process" and "after_post_process" (which
|
153
|
+
are called before and after the processing of each attachment), and the
|
154
|
+
attachment-specific "before_<attachment>_post_process" and
|
155
|
+
"after_<attachment>_post_process". The callbacks are intended to be as close to
|
156
|
+
normal ActiveRecord callbacks as possible, so if you return false (specifically
|
157
|
+
- returning nil is not the same) in a before_ filter, the post processing step
|
158
|
+
will halt. Returning false in an after_ filter will not halt anything, but you
|
159
|
+
can access the model and the attachment if necessary.
|
160
|
+
|
161
|
+
NOTE: Post processing will not even *start* if the attachment is not valid
|
162
|
+
according to the validations. Your callbacks and processors will *only* be
|
163
|
+
called with valid attachments.
|
164
|
+
|
51
165
|
==Contributing
|
52
166
|
|
53
|
-
If you'd like to contribute a feature or bugfix
|
54
|
-
has a high chance of being
|
167
|
+
If you'd like to contribute a feature or bugfix: Thanks! To make sure your
|
168
|
+
fix/feature has a high chance of being included, please read the following
|
169
|
+
guidelines:
|
55
170
|
|
56
|
-
1. Ask on the mailing list, or post a
|
57
|
-
2. Make sure there are tests!
|
58
|
-
It's a rare time when explicit tests aren't needed. If you have questions
|
59
|
-
writing tests for paperclip, please ask the mailing list.
|
171
|
+
1. Ask on the mailing list, or post a new GitHub Issue.
|
172
|
+
2. Make sure there are tests! We will not accept any patch that is not tested.
|
173
|
+
It's a rare time when explicit tests aren't needed. If you have questions
|
174
|
+
about writing tests for paperclip, please ask the mailing list.
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/testtask'
|
3
3
|
require 'rake/rdoctask'
|
4
|
-
require 'rake/gempackagetask'
|
5
4
|
|
6
5
|
$LOAD_PATH << File.join(File.dirname(__FILE__), 'lib')
|
7
6
|
require 'paperclip'
|
@@ -27,7 +26,7 @@ Rake::RDocTask.new(:rdoc) do |rdoc|
|
|
27
26
|
rdoc.rdoc_dir = 'doc'
|
28
27
|
rdoc.title = 'Paperclip'
|
29
28
|
rdoc.options << '--line-numbers' << '--inline-source'
|
30
|
-
rdoc.rdoc_files.include('README')
|
29
|
+
rdoc.rdoc_files.include('README*')
|
31
30
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
32
31
|
end
|
33
32
|
|
@@ -43,46 +42,58 @@ task :clean do |t|
|
|
43
42
|
FileUtils.rm_rf "pkg"
|
44
43
|
FileUtils.rm "test/debug.log" rescue nil
|
45
44
|
FileUtils.rm "test/paperclip.db" rescue nil
|
45
|
+
Dir.glob("paperclip-*.gem").each{|f| FileUtils.rm f }
|
46
46
|
end
|
47
47
|
|
48
|
+
include_file_globs = ["README*",
|
49
|
+
"LICENSE",
|
50
|
+
"Rakefile",
|
51
|
+
"init.rb",
|
52
|
+
"{generators,lib,tasks,test,shoulda_macros}/**/*"]
|
53
|
+
exclude_file_globs = ["test/s3.yml",
|
54
|
+
"test/debug.log",
|
55
|
+
"test/paperclip.db",
|
56
|
+
"test/doc",
|
57
|
+
"test/doc/*",
|
58
|
+
"test/pkg",
|
59
|
+
"test/pkg/*",
|
60
|
+
"test/tmp",
|
61
|
+
"test/tmp/*"]
|
48
62
|
spec = Gem::Specification.new do |s|
|
49
|
-
s.rubygems_version = "1.2.0"
|
50
63
|
s.name = "paperclip"
|
51
64
|
s.version = Paperclip::VERSION
|
52
65
|
s.author = "Jon Yurek"
|
53
66
|
s.email = "jyurek@thoughtbot.com"
|
54
|
-
s.homepage = "http://www.thoughtbot.com/"
|
67
|
+
s.homepage = "http://www.thoughtbot.com/projects/paperclip"
|
55
68
|
s.platform = Gem::Platform::RUBY
|
56
69
|
s.summary = "File attachments as attributes for ActiveRecord"
|
57
|
-
s.files = FileList[
|
58
|
-
"LICENSE",
|
59
|
-
"Rakefile",
|
60
|
-
"init.rb",
|
61
|
-
"{generators,lib,tasks,test}/**/*"].to_a
|
70
|
+
s.files = FileList[include_file_globs].to_a - FileList[exclude_file_globs].to_a
|
62
71
|
s.require_path = "lib"
|
63
72
|
s.test_files = FileList["test/**/test_*.rb"].to_a
|
64
73
|
s.rubyforge_project = "paperclip"
|
65
74
|
s.has_rdoc = true
|
66
|
-
s.extra_rdoc_files = ["README"]
|
75
|
+
s.extra_rdoc_files = FileList["README*"].to_a
|
67
76
|
s.rdoc_options << '--line-numbers' << '--inline-source'
|
68
77
|
s.requirements << "ImageMagick"
|
69
|
-
s.
|
70
|
-
s.add_development_dependency 'Shoulda'
|
78
|
+
s.add_development_dependency 'thoughtbot-shoulda'
|
71
79
|
s.add_development_dependency 'mocha'
|
72
80
|
end
|
81
|
+
|
82
|
+
desc "Print a list of the files to be put into the gem"
|
83
|
+
task :manifest => :clean do
|
84
|
+
spec.files.each do |file|
|
85
|
+
puts file
|
86
|
+
end
|
87
|
+
end
|
73
88
|
|
74
|
-
|
75
|
-
|
89
|
+
desc "Generate a gemspec file for GitHub"
|
90
|
+
task :gemspec => :clean do
|
91
|
+
File.open("#{spec.name}.gemspec", 'w') do |f|
|
92
|
+
f.write spec.to_ruby
|
93
|
+
end
|
76
94
|
end
|
77
95
|
|
78
|
-
desc "
|
79
|
-
task :
|
80
|
-
|
81
|
-
require 'rubyforge'
|
82
|
-
r = RubyForge.new
|
83
|
-
r.login
|
84
|
-
r.add_release spec.rubyforge_project,
|
85
|
-
spec.name,
|
86
|
-
spec.version,
|
87
|
-
File.join("pkg", "#{spec.name}-#{spec.version}.gem")
|
96
|
+
desc "Build the gem into the current directory"
|
97
|
+
task :gem => :gemspec do
|
98
|
+
`gem build #{spec.name}.gemspec`
|
88
99
|
end
|
@@ -5,7 +5,7 @@
|
|
5
5
|
# columns to your table.
|
6
6
|
#
|
7
7
|
# Author:: Jon Yurek
|
8
|
-
# Copyright:: Copyright (c) 2008 thoughtbot, inc.
|
8
|
+
# Copyright:: Copyright (c) 2008-2009 thoughtbot, inc.
|
9
9
|
# License:: MIT License (http://www.opensource.org/licenses/mit-license.php)
|
10
10
|
#
|
11
11
|
# Paperclip defines an attachment as any file, though it makes special considerations
|
@@ -29,49 +29,112 @@ require 'tempfile'
|
|
29
29
|
require 'paperclip/upfile'
|
30
30
|
require 'paperclip/iostream'
|
31
31
|
require 'paperclip/geometry'
|
32
|
+
require 'paperclip/processor'
|
32
33
|
require 'paperclip/thumbnail'
|
33
34
|
require 'paperclip/storage'
|
35
|
+
require 'paperclip/interpolations'
|
34
36
|
require 'paperclip/attachment'
|
37
|
+
if defined? RAILS_ROOT
|
38
|
+
Dir.glob(File.join(File.expand_path(RAILS_ROOT), "lib", "paperclip_processors", "*.rb")).each do |processor|
|
39
|
+
require processor
|
40
|
+
end
|
41
|
+
end
|
35
42
|
|
36
43
|
# The base module that gets included in ActiveRecord::Base. See the
|
37
44
|
# documentation for Paperclip::ClassMethods for more useful information.
|
38
45
|
module Paperclip
|
39
46
|
|
40
|
-
VERSION = "2.
|
47
|
+
VERSION = "2.2.9.2"
|
41
48
|
|
42
49
|
class << self
|
43
50
|
# Provides configurability to Paperclip. There are a number of options available, such as:
|
44
|
-
# *
|
51
|
+
# * whiny: Will raise an error if Paperclip cannot process thumbnails of
|
45
52
|
# an uploaded image. Defaults to true.
|
46
|
-
# *
|
53
|
+
# * log: Logs progress to the Rails log. Uses ActiveRecord's logger, so honors
|
54
|
+
# log levels, etc. Defaults to true.
|
55
|
+
# * command_path: Defines the path at which to find the command line
|
47
56
|
# programs if they are not visible to Rails the system's search path. Defaults to
|
48
|
-
# nil, which uses the first executable found in the search path.
|
57
|
+
# nil, which uses the first executable found in the user's search path.
|
58
|
+
# * image_magick_path: Deprecated alias of command_path.
|
49
59
|
def options
|
50
60
|
@options ||= {
|
51
|
-
:
|
52
|
-
:image_magick_path => nil
|
61
|
+
:whiny => true,
|
62
|
+
:image_magick_path => nil,
|
63
|
+
:command_path => nil,
|
64
|
+
:log => true,
|
65
|
+
:log_command => false,
|
66
|
+
:swallow_stderr => true
|
53
67
|
}
|
54
68
|
end
|
55
69
|
|
56
70
|
def path_for_command command #:nodoc:
|
57
|
-
|
71
|
+
if options[:image_magick_path]
|
72
|
+
warn("[DEPRECATION] :image_magick_path is deprecated and will be removed. Use :command_path instead")
|
73
|
+
end
|
74
|
+
path = [options[:command_path] || options[:image_magick_path], command].compact
|
58
75
|
File.join(*path)
|
59
76
|
end
|
60
77
|
|
78
|
+
def interpolates key, &block
|
79
|
+
Paperclip::Interpolations[key] = block
|
80
|
+
end
|
81
|
+
|
82
|
+
# The run method takes a command to execute and a string of parameters
|
83
|
+
# that get passed to it. The command is prefixed with the :command_path
|
84
|
+
# option from Paperclip.options. If you have many commands to run and
|
85
|
+
# they are in different paths, the suggested course of action is to
|
86
|
+
# symlink them so they are all in the same directory.
|
87
|
+
#
|
88
|
+
# If the command returns with a result code that is not one of the
|
89
|
+
# expected_outcodes, a PaperclipCommandLineError will be raised. Generally
|
90
|
+
# a code of 0 is expected, but a list of codes may be passed if necessary.
|
91
|
+
#
|
92
|
+
# This method can log the command being run when
|
93
|
+
# Paperclip.options[:log_command] is set to true (defaults to false). This
|
94
|
+
# will only log if logging in general is set to true as well.
|
61
95
|
def run cmd, params = "", expected_outcodes = 0
|
62
|
-
|
96
|
+
command = %Q<#{%Q[#{path_for_command(cmd)} #{params}].gsub(/\s+/, " ")}>
|
97
|
+
command = "#{command} 2>#{bit_bucket}" if Paperclip.options[:swallow_stderr]
|
98
|
+
Paperclip.log(command) if Paperclip.options[:log_command]
|
99
|
+
output = `#{command}`
|
63
100
|
unless [expected_outcodes].flatten.include?($?.exitstatus)
|
64
101
|
raise PaperclipCommandLineError, "Error while running #{cmd}"
|
65
102
|
end
|
66
103
|
output
|
67
104
|
end
|
68
105
|
|
69
|
-
def bit_bucket
|
106
|
+
def bit_bucket #:nodoc:
|
70
107
|
File.exists?("/dev/null") ? "/dev/null" : "NUL"
|
71
108
|
end
|
72
109
|
|
73
110
|
def included base #:nodoc:
|
74
111
|
base.extend ClassMethods
|
112
|
+
unless base.respond_to?(:define_callbacks)
|
113
|
+
base.send(:include, Paperclip::CallbackCompatability)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def processor name #:nodoc:
|
118
|
+
name = name.to_s.camelize
|
119
|
+
processor = Paperclip.const_get(name)
|
120
|
+
unless processor.ancestors.include?(Paperclip::Processor)
|
121
|
+
raise PaperclipError.new("Processor #{name} was not found")
|
122
|
+
end
|
123
|
+
processor
|
124
|
+
end
|
125
|
+
|
126
|
+
# Log a paperclip-specific line. Uses ActiveRecord::Base.logger
|
127
|
+
# by default. Set Paperclip.options[:log] to false to turn off.
|
128
|
+
def log message
|
129
|
+
logger.info("[paperclip] #{message}") if logging?
|
130
|
+
end
|
131
|
+
|
132
|
+
def logger #:nodoc:
|
133
|
+
ActiveRecord::Base.logger
|
134
|
+
end
|
135
|
+
|
136
|
+
def logging? #:nodoc:
|
137
|
+
options[:log]
|
75
138
|
end
|
76
139
|
end
|
77
140
|
|
@@ -83,6 +146,9 @@ module Paperclip
|
|
83
146
|
|
84
147
|
class NotIdentifiedByImageMagickError < PaperclipError #:nodoc:
|
85
148
|
end
|
149
|
+
|
150
|
+
class InfiniteInterpolationError < PaperclipError #:nodoc:
|
151
|
+
end
|
86
152
|
|
87
153
|
module ClassMethods
|
88
154
|
# +has_attached_file+ gives the class it is called on an attribute that maps to a file. This
|
@@ -97,14 +163,15 @@ module Paperclip
|
|
97
163
|
# * +url+: The full URL of where the attachment is publically accessible. This can just
|
98
164
|
# as easily point to a directory served directly through Apache as it can to an action
|
99
165
|
# that can control permissions. You can specify the full domain and path, but usually
|
100
|
-
# just an absolute path is sufficient. The leading slash must be included manually for
|
101
|
-
# absolute paths. The default value is
|
166
|
+
# just an absolute path is sufficient. The leading slash *must* be included manually for
|
167
|
+
# absolute paths. The default value is
|
168
|
+
# "/system/:attachment/:id/:style/:filename". See
|
102
169
|
# Paperclip::Attachment#interpolate for more information on variable interpolaton.
|
103
|
-
# :url => "/:attachment/:id/:style_:
|
170
|
+
# :url => "/:class/:attachment/:id/:style_:filename"
|
104
171
|
# :url => "http://some.other.host/stuff/:class/:id_:extension"
|
105
172
|
# * +default_url+: The URL that will be returned if there is no attachment assigned.
|
106
173
|
# This field is interpolated just as the url is. The default value is
|
107
|
-
# "/:
|
174
|
+
# "/:attachment/:style/missing.png"
|
108
175
|
# has_attached_file :avatar, :default_url => "/images/default_:style_avatar.png"
|
109
176
|
# User.new.avatar_url(:small) # => "/images/default_small_avatar.png"
|
110
177
|
# * +styles+: A hash of thumbnail styles and their geometries. You can find more about
|
@@ -118,9 +185,10 @@ module Paperclip
|
|
118
185
|
# has_attached_file :avatar, :styles => { :normal => "100x100#" },
|
119
186
|
# :default_style => :normal
|
120
187
|
# user.avatar.url # => "/avatars/23/normal_me.png"
|
121
|
-
# * +
|
122
|
-
#
|
123
|
-
# Defaults to true.
|
188
|
+
# * +whiny+: Will raise an error if Paperclip cannot post_process an uploaded file due
|
189
|
+
# to a command line error. This will override the global setting for this attachment.
|
190
|
+
# Defaults to true. This option used to be called :whiny_thumbanils, but this is
|
191
|
+
# deprecated.
|
124
192
|
# * +convert_options+: When creating thumbnails, use this free-form options
|
125
193
|
# field to pass in various convert command options. Typical options are "-strip" to
|
126
194
|
# remove all Exif data from the image (save space for thumbnails and avatars) or
|
@@ -130,12 +198,15 @@ module Paperclip
|
|
130
198
|
# of thumbnail being generated. You can also specify :all as a key, which will apply
|
131
199
|
# to all of the thumbnails being generated. If you specify options for the :original,
|
132
200
|
# it would be best if you did not specify destructive options, as the intent of keeping
|
133
|
-
# the original around is to regenerate all the thumbnails
|
201
|
+
# the original around is to regenerate all the thumbnails when requirements change.
|
134
202
|
# has_attached_file :avatar, :styles => { :large => "300x300", :negative => "100x100" }
|
135
203
|
# :convert_options => {
|
136
204
|
# :all => "-strip",
|
137
205
|
# :negative => "-negate"
|
138
206
|
# }
|
207
|
+
# NOTE: While not deprecated yet, it is not recommended to specify options this way.
|
208
|
+
# It is recommended that :convert_options option be included in the hash passed to each
|
209
|
+
# :styles for compatability with future versions.
|
139
210
|
# * +storage+: Chooses the storage backend where the files will be stored. The current
|
140
211
|
# choices are :filesystem and :s3. The default is :filesystem. Make sure you read the
|
141
212
|
# documentation for Paperclip::Storage::Filesystem and Paperclip::Storage::S3
|
@@ -149,6 +220,9 @@ module Paperclip
|
|
149
220
|
after_save :save_attached_files
|
150
221
|
before_destroy :destroy_attached_files
|
151
222
|
|
223
|
+
define_callbacks :before_post_process, :after_post_process
|
224
|
+
define_callbacks :"before_#{name}_post_process", :"after_#{name}_post_process"
|
225
|
+
|
152
226
|
define_method name do |*args|
|
153
227
|
a = attachment_for(name)
|
154
228
|
(args.length > 0) ? a.to_s(args.first) : a
|
@@ -163,7 +237,8 @@ module Paperclip
|
|
163
237
|
end
|
164
238
|
|
165
239
|
validates_each(name) do |record, attr, value|
|
166
|
-
|
240
|
+
attachment = record.attachment_for(name)
|
241
|
+
attachment.send(:flush_errors) unless attachment.valid?
|
167
242
|
end
|
168
243
|
end
|
169
244
|
|
@@ -173,76 +248,75 @@ module Paperclip
|
|
173
248
|
# * +less_than+: equivalent to :in => 0..options[:less_than]
|
174
249
|
# * +greater_than+: equivalent to :in => options[:greater_than]..Infinity
|
175
250
|
# * +message+: error message to display, use :min and :max as replacements
|
251
|
+
# * +if+: A lambda or name of a method on the instance. Validation will only
|
252
|
+
# be run is this lambda or method returns true.
|
253
|
+
# * +unless+: Same as +if+ but validates if lambda or method returns false.
|
176
254
|
def validates_attachment_size name, options = {}
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
min = options[:in].first
|
187
|
-
max = options[:in].last
|
188
|
-
|
189
|
-
if options[:message]
|
190
|
-
options[:message].gsub(/:min/, min.to_s).gsub(/:max/, max.to_s)
|
191
|
-
else
|
192
|
-
"file size is not between #{min} and #{max} bytes."
|
193
|
-
end
|
194
|
-
end
|
195
|
-
end
|
255
|
+
min = options[:greater_than] || (options[:in] && options[:in].first) || 0
|
256
|
+
max = options[:less_than] || (options[:in] && options[:in].last) || (1.0/0)
|
257
|
+
range = (min..max)
|
258
|
+
message = options[:message] || "file size must be between :min and :max bytes."
|
259
|
+
|
260
|
+
attachment_definitions[name][:validations] << [:size, {:range => range,
|
261
|
+
:message => message,
|
262
|
+
:if => options[:if],
|
263
|
+
:unless => options[:unless]}]
|
196
264
|
end
|
197
265
|
|
198
266
|
# Adds errors if thumbnail creation fails. The same as specifying :whiny_thumbnails => true.
|
199
267
|
def validates_attachment_thumbnails name, options = {}
|
268
|
+
warn('[DEPRECATION] validates_attachment_thumbnail is deprecated. ' +
|
269
|
+
'This validation is on by default and will be removed from future versions. ' +
|
270
|
+
'If you wish to turn it off, supply :whiny => false in your definition.')
|
200
271
|
attachment_definitions[name][:whiny_thumbnails] = true
|
201
272
|
end
|
202
273
|
|
203
274
|
# Places ActiveRecord-style validations on the presence of a file.
|
275
|
+
# Options:
|
276
|
+
# * +if+: A lambda or name of a method on the instance. Validation will only
|
277
|
+
# be run is this lambda or method returns true.
|
278
|
+
# * +unless+: Same as +if+ but validates if lambda or method returns false.
|
204
279
|
def validates_attachment_presence name, options = {}
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
end
|
280
|
+
message = options[:message] || "must be set."
|
281
|
+
attachment_definitions[name][:validations] << [:presence, {:message => message,
|
282
|
+
:if => options[:if],
|
283
|
+
:unless => options[:unless]}]
|
210
284
|
end
|
211
285
|
|
212
|
-
# Places ActiveRecord-style validations on the content type of the file
|
213
|
-
# possible options are:
|
214
|
-
# * +content_type+: Allowed content types. Can be a single content type
|
215
|
-
# Each type can be a String or a Regexp. It should be
|
216
|
-
#
|
217
|
-
#
|
218
|
-
#
|
219
|
-
#
|
286
|
+
# Places ActiveRecord-style validations on the content type of the file
|
287
|
+
# assigned. The possible options are:
|
288
|
+
# * +content_type+: Allowed content types. Can be a single content type
|
289
|
+
# or an array. Each type can be a String or a Regexp. It should be
|
290
|
+
# noted that Internet Explorer upload files with content_types that you
|
291
|
+
# may not expect. For example, JPEG images are given image/pjpeg and
|
292
|
+
# PNGs are image/x-png, so keep that in mind when determining how you
|
293
|
+
# match. Allows all by default.
|
294
|
+
# * +message+: The message to display when the uploaded file has an invalid
|
295
|
+
# content type.
|
296
|
+
# * +if+: A lambda or name of a method on the instance. Validation will only
|
297
|
+
# be run is this lambda or method returns true.
|
298
|
+
# * +unless+: Same as +if+ but validates if lambda or method returns false.
|
299
|
+
# NOTE: If you do not specify an [attachment]_content_type field on your
|
300
|
+
# model, content_type validation will work _ONLY upon assignment_ and
|
301
|
+
# re-validation after the instance has been reloaded will always succeed.
|
220
302
|
def validates_attachment_content_type name, options = {}
|
221
|
-
attachment_definitions[name][:validations] <<
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
unless options[:content_type].blank?
|
226
|
-
content_type = instance[:"#{name}_content_type"]
|
227
|
-
unless valid_types.any?{|t| t === content_type }
|
228
|
-
options[:message] || "is not one of the allowed file types."
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
232
|
-
end
|
303
|
+
attachment_definitions[name][:validations] << [:content_type, {:content_type => options[:content_type],
|
304
|
+
:message => options[:message],
|
305
|
+
:if => options[:if],
|
306
|
+
:unless => options[:unless]}]
|
233
307
|
end
|
234
308
|
|
235
|
-
# Returns the attachment definitions defined by each call to
|
309
|
+
# Returns the attachment definitions defined by each call to
|
310
|
+
# has_attached_file.
|
236
311
|
def attachment_definitions
|
237
312
|
read_inheritable_attribute(:attachment_definitions)
|
238
313
|
end
|
239
|
-
|
240
314
|
end
|
241
315
|
|
242
316
|
module InstanceMethods #:nodoc:
|
243
317
|
def attachment_for name
|
244
|
-
@
|
245
|
-
@
|
318
|
+
@_paperclip_attachments ||= {}
|
319
|
+
@_paperclip_attachments[name] ||= Attachment.new(name, self, self.class.attachment_definitions[name])
|
246
320
|
end
|
247
321
|
|
248
322
|
def each_attachment
|