spree_core 1.0.7 → 1.1.0.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. data/app/assets/javascripts/admin/admin.js.erb +9 -18
  2. data/app/assets/javascripts/admin/calculator.js +7 -6
  3. data/app/assets/javascripts/admin/checkouts/edit.js +2 -2
  4. data/app/assets/javascripts/admin/image_settings.js +49 -0
  5. data/app/assets/javascripts/admin/orders/edit_form.js +14 -14
  6. data/app/assets/stylesheets/admin/admin.css.erb +36 -54
  7. data/app/assets/stylesheets/store/screen.css.scss +25 -12
  8. data/app/controllers/spree/admin/base_controller.rb +3 -3
  9. data/app/controllers/spree/admin/image_settings_controller.rb +71 -0
  10. data/app/controllers/spree/admin/images_controller.rb +22 -21
  11. data/app/controllers/spree/admin/mail_methods_controller.rb +1 -1
  12. data/app/controllers/spree/admin/orders/customer_details_controller.rb +2 -2
  13. data/app/controllers/spree/admin/orders_controller.rb +13 -13
  14. data/app/controllers/spree/admin/payment_methods_controller.rb +1 -1
  15. data/app/controllers/spree/admin/payments_controller.rb +1 -1
  16. data/app/controllers/spree/admin/product_properties_controller.rb +3 -4
  17. data/app/controllers/spree/admin/products_controller.rb +49 -47
  18. data/app/controllers/spree/admin/properties_controller.rb +1 -1
  19. data/app/controllers/spree/admin/prototypes_controller.rb +12 -6
  20. data/app/controllers/spree/admin/reports_controller.rb +15 -16
  21. data/app/controllers/spree/admin/resource_controller.rb +1 -1
  22. data/app/controllers/spree/admin/return_authorizations_controller.rb +1 -1
  23. data/app/controllers/spree/admin/shipments_controller.rb +0 -3
  24. data/app/controllers/spree/admin/states_controller.rb +9 -9
  25. data/app/controllers/spree/admin/users_controller.rb +18 -42
  26. data/app/controllers/spree/admin/variants_controller.rb +22 -21
  27. data/app/controllers/spree/admin/zones_controller.rb +11 -11
  28. data/app/controllers/spree/content_controller.rb +1 -1
  29. data/app/controllers/spree/locale_controller.rb +2 -2
  30. data/app/controllers/spree/orders_controller.rb +4 -6
  31. data/app/controllers/spree/products_controller.rb +1 -1
  32. data/app/controllers/spree/states_controller.rb +4 -7
  33. data/app/helpers/spree/admin/base_helper.rb +4 -0
  34. data/app/helpers/spree/admin/navigation_helper.rb +4 -16
  35. data/app/helpers/spree/base_helper.rb +22 -3
  36. data/app/models/spree/activator.rb +4 -1
  37. data/app/models/spree/address.rb +45 -45
  38. data/app/models/spree/adjustment.rb +4 -4
  39. data/app/models/spree/app_configuration.rb +12 -0
  40. data/app/models/spree/calculator/default_tax.rb +1 -3
  41. data/app/models/spree/calculator/flat_percent_item_total.rb +0 -2
  42. data/app/models/spree/calculator/flat_rate.rb +0 -3
  43. data/app/models/spree/calculator/flexi_rate.rb +1 -3
  44. data/app/models/spree/calculator/per_item.rb +1 -6
  45. data/app/models/spree/calculator/price_sack.rb +0 -2
  46. data/app/models/spree/country.rb +1 -1
  47. data/app/models/spree/creditcard.rb +9 -10
  48. data/app/models/spree/gateway.rb +0 -2
  49. data/app/models/spree/image.rb +18 -2
  50. data/app/models/spree/inventory_unit.rb +4 -2
  51. data/app/models/spree/mail_method.rb +1 -6
  52. data/app/models/spree/option_type.rb +3 -1
  53. data/app/models/spree/order.rb +68 -62
  54. data/app/models/spree/payment.rb +1 -1
  55. data/app/models/spree/payment_method.rb +0 -6
  56. data/app/models/spree/product/scopes.rb +44 -44
  57. data/app/models/spree/product.rb +44 -26
  58. data/app/models/spree/product_property.rb +0 -2
  59. data/app/models/spree/property.rb +0 -16
  60. data/app/models/spree/prototype.rb +0 -1
  61. data/app/models/spree/return_authorization.rb +0 -2
  62. data/app/models/spree/shipment.rb +2 -3
  63. data/app/models/spree/shipping_category.rb +0 -2
  64. data/app/models/spree/shipping_method.rb +1 -2
  65. data/app/models/spree/shipping_rate.rb +9 -0
  66. data/app/models/spree/state.rb +10 -2
  67. data/app/models/spree/{state_event.rb → state_change.rb} +1 -4
  68. data/app/models/spree/tax_rate.rb +3 -3
  69. data/app/models/spree/taxon.rb +1 -6
  70. data/app/models/spree/taxonomy.rb +3 -6
  71. data/app/models/spree/user.rb +1 -0
  72. data/app/models/spree/variant.rb +3 -4
  73. data/app/models/spree/zone.rb +0 -10
  74. data/app/views/spree/admin/adjustments/_adjustments_table.html.erb +1 -1
  75. data/app/views/spree/admin/configurations/index.html.erb +4 -0
  76. data/app/views/spree/admin/image_settings/edit.html.erb +91 -0
  77. data/app/views/spree/admin/image_settings/show.html.erb +11 -0
  78. data/app/views/spree/admin/images/index.html.erb +3 -3
  79. data/app/views/spree/admin/mail_methods/_form.html.erb +1 -1
  80. data/app/views/spree/admin/mail_methods/index.html.erb +1 -1
  81. data/app/views/spree/admin/option_types/_option_value_fields.html.erb +1 -1
  82. data/app/views/spree/admin/option_types/index.html.erb +1 -1
  83. data/app/views/spree/admin/option_types/new.js.erb +1 -1
  84. data/app/views/spree/admin/orders/_form.html.erb +3 -5
  85. data/app/views/spree/admin/orders/_line_item.html.erb +1 -1
  86. data/app/views/spree/admin/orders/customer_details/_form.html.erb +1 -1
  87. data/app/views/spree/admin/orders/history.html.erb +2 -2
  88. data/app/views/spree/admin/orders/index.html.erb +19 -19
  89. data/app/views/spree/admin/payment_methods/_form.html.erb +1 -1
  90. data/app/views/spree/admin/payment_methods/index.html.erb +1 -3
  91. data/app/views/spree/admin/payments/_list.html.erb +1 -1
  92. data/app/views/spree/admin/product_properties/index.html.erb +1 -1
  93. data/app/views/spree/admin/products/_form.html.erb +30 -27
  94. data/app/views/spree/admin/products/index.html.erb +9 -9
  95. data/app/views/spree/admin/products/new.html.erb +28 -4
  96. data/app/views/spree/admin/products/new.js.erb +1 -1
  97. data/app/views/spree/admin/properties/index.html.erb +1 -1
  98. data/app/views/spree/admin/properties/new.js.erb +1 -1
  99. data/app/views/spree/admin/prototypes/index.html.erb +1 -1
  100. data/app/views/spree/admin/prototypes/new.js.erb +1 -1
  101. data/app/views/spree/admin/prototypes/show.html.erb +42 -0
  102. data/app/views/spree/admin/return_authorizations/index.html.erb +1 -1
  103. data/app/views/spree/admin/shared/_address_form.html.erb +1 -1
  104. data/app/views/spree/admin/shared/_calculator_fields.html.erb +2 -2
  105. data/app/views/spree/admin/shared/_head.html.erb +3 -3
  106. data/app/views/spree/admin/shared/_order_details.html.erb +1 -1
  107. data/app/views/spree/admin/shared/_order_tabs.html.erb +6 -6
  108. data/app/views/spree/admin/shared/_product_sub_menu.html.erb +0 -1
  109. data/app/views/spree/admin/shared/_report_criteria.html.erb +3 -3
  110. data/app/views/spree/admin/shared/_tabs.html.erb +1 -1
  111. data/app/views/spree/admin/shared/_update_order_state.js +5 -4
  112. data/app/views/spree/admin/shipments/index.html.erb +1 -1
  113. data/app/views/spree/admin/shipping_categories/index.html.erb +1 -1
  114. data/app/views/spree/admin/shipping_methods/index.html.erb +1 -1
  115. data/app/views/spree/admin/states/_state_list.html.erb +1 -1
  116. data/app/views/spree/admin/states/new.js.erb +1 -1
  117. data/app/views/spree/admin/tax_categories/index.html.erb +2 -2
  118. data/app/views/spree/admin/tax_rates/index.html.erb +2 -2
  119. data/app/views/spree/admin/taxonomies/_list.html.erb +1 -1
  120. data/app/views/spree/admin/trackers/_form.html.erb +1 -1
  121. data/app/views/spree/admin/trackers/index.html.erb +1 -1
  122. data/app/views/spree/admin/users/_form.html.erb +1 -16
  123. data/app/views/spree/admin/users/index.html.erb +3 -4
  124. data/app/views/spree/admin/variants/index.html.erb +2 -2
  125. data/app/views/spree/admin/variants/new.js.erb +1 -1
  126. data/app/views/spree/admin/zones/index.html.erb +1 -1
  127. data/app/views/spree/checkout/_address.html.erb +1 -1
  128. data/app/views/spree/checkout/edit.html.erb +1 -1
  129. data/app/views/spree/checkout/registration.html.erb +2 -2
  130. data/app/views/spree/order_mailer/confirm_email.text.erb +3 -3
  131. data/app/views/spree/orders/show.html.erb +2 -2
  132. data/app/views/spree/products/_cart_form.html.erb +1 -2
  133. data/app/views/spree/products/_image.html.erb +1 -1
  134. data/app/views/spree/products/show.html.erb +3 -3
  135. data/app/views/spree/shared/_filters.html.erb +26 -24
  136. data/app/views/spree/shared/_google_analytics.html.erb +26 -26
  137. data/app/views/spree/shared/_products.html.erb +2 -2
  138. data/app/views/spree/shared/_search.html.erb +1 -1
  139. data/app/views/spree/shared/_store_menu.html.erb +1 -1
  140. data/app/views/spree/states/index.js.erb +1 -1
  141. data/config/initializers/rails_3_1.rb +3 -3
  142. data/config/locales/en.yml +40 -35
  143. data/config/routes.rb +5 -13
  144. data/db/migrate/20101026184714_migrate_transactions_to_payment_state.rb +4 -4
  145. data/db/migrate/20111007143030_namespace_top_level_models.rb +0 -3
  146. data/db/migrate/20120203001428_rename_state_events_to_state_changes.rb +9 -0
  147. data/db/migrate/20120315064358_migrate_images_from_products_to_variants.rb +35 -0
  148. data/lib/generators/spree/dummy/templates/rails/database.yml +48 -20
  149. data/lib/generators/spree/install/install_generator.rb +17 -1
  150. data/lib/generators/spree/install/templates/app/assets/javascripts/admin/all.js +0 -1
  151. data/lib/generators/spree/install/templates/app/assets/javascripts/store/all.js +0 -1
  152. data/lib/generators/spree/install/templates/app/assets/stylesheets/admin/all.css +0 -1
  153. data/lib/generators/spree/install/templates/app/assets/stylesheets/store/all.css +0 -1
  154. data/lib/generators/spree/sandbox/sandbox_generator.rb +9 -2
  155. data/lib/spree/core/calculated_adjustments.rb +29 -34
  156. data/lib/spree/core/controller_helpers.rb +36 -34
  157. data/lib/spree/core/custom_fixtures.rb +1 -1
  158. data/lib/spree/core/delegate_belongs_to.rb +22 -24
  159. data/lib/spree/core/engine.rb +3 -3
  160. data/lib/spree/core/environment_extension.rb +12 -15
  161. data/lib/spree/core/mail_settings.rb +1 -1
  162. data/lib/spree/core/permalinks.rb +24 -16
  163. data/lib/spree/core/preference_rescue.rb +1 -1
  164. data/lib/spree/core/respond_with.rb +13 -8
  165. data/lib/spree/core/responder.rb +1 -2
  166. data/lib/spree/core/search/base.rb +36 -19
  167. data/lib/spree/core/ssl_requirement.rb +18 -10
  168. data/lib/spree/core/testing_support/common_rake.rb +1 -1
  169. data/lib/spree/core/testing_support/factories/product_factory.rb +9 -9
  170. data/lib/spree/core/testing_support/factories/role_factory.rb +1 -1
  171. data/lib/spree/core/testing_support/factories/shipping_category_factory.rb +1 -1
  172. data/lib/spree/core/testing_support/factories/shipping_method_factory.rb +3 -3
  173. data/lib/spree/core/testing_support/factories/user_factory.rb +1 -1
  174. data/lib/spree/core/testing_support/factories/zone_factory.rb +4 -2
  175. data/lib/spree/core/validators/email.rb +23 -0
  176. data/lib/spree/core/version.rb +1 -1
  177. data/lib/spree/core.rb +2 -2
  178. data/lib/spree/product_filters.rb +10 -19
  179. data/lib/tasks/core.rake +1 -1
  180. data/vendor/assets/javascripts/jquery.alerts/jquery.alerts.css.erb +5 -5
  181. data/vendor/assets/stylesheets/jquery-ui.datepicker.css.erb +1 -1
  182. metadata +68 -140
  183. data/app/assets/images/noimage/large.png +0 -0
  184. data/app/controllers/spree/admin/product_groups_controller.rb +0 -49
  185. data/app/controllers/spree/admin/product_scopes_controller.rb +0 -39
  186. data/app/helpers/spree/admin/product_groups_helper.rb +0 -14
  187. data/app/helpers/spree/admin/product_properties_helper.rb +0 -24
  188. data/app/models/spree/product_group.rb +0 -200
  189. data/app/models/spree/product_scope.rb +0 -79
  190. data/app/views/spree/admin/banners/_gateway.html.erb +0 -14
  191. data/app/views/spree/admin/product_groups/_preview.html.erb +0 -33
  192. data/app/views/spree/admin/product_groups/_product_scope.html.erb +0 -24
  193. data/app/views/spree/admin/product_groups/edit.html.erb +0 -59
  194. data/app/views/spree/admin/product_groups/index.html.erb +0 -37
  195. data/app/views/spree/admin/product_groups/new.html.erb +0 -12
  196. data/app/views/spree/admin/product_groups/show.html.erb +0 -32
  197. data/app/views/spree/admin/product_scopes/create.js.erb +0 -6
  198. data/app/views/spree/admin/product_scopes/destroy.js.erb +0 -3
  199. data/app/views/spree/admin/product_scopes/new.html.erb +0 -1
  200. data/app/views/spree/admin/shared/_group_from_products_form.html.erb +0 -12
  201. data/db/migrate/20091012120519_product_groups_and_scopes.rb +0 -18
  202. data/db/migrate/20100126103714_create_products_product_groups.rb +0 -8
  203. data/db/migrate/20100306153445_fix_by_popularity.rb +0 -9
  204. data/db/migrate/20120523061241_convert_sales_tax_to_default_tax.rb +0 -9
  205. data/lib/spree/core/testing_support/factories/product_group_factory.rb +0 -5
  206. data/lib/spree/core/testing_support/factories/product_scope_factory.rb +0 -7
  207. data/lib/spree/core/theme_support/hook_listener.rb +0 -145
  208. data/lib/spree/core/theme_support.rb +0 -1
  209. data/vendor/assets/javascripts/jquery.alerts/jquery.alerts.css +0 -57
@@ -1,26 +1,54 @@
1
- login: &login
2
- <% if database == 'mysql' %>
1
+ <% case ENV['DB']
2
+ when 'sqlite' %>
3
+ development:
4
+ adapter: sqlite3
5
+ database: "db/spree_development.sqlite3"
6
+ test:
7
+ adapter: sqlite3
8
+ database: "db/spree_test.sqlite3"
9
+ production:
10
+ adapter: sqlite3
11
+ database: "db/spree_production.sqlite3"
12
+ <% when 'mysql' %>
13
+ development:
14
+ adapter: mysql2
15
+ database: spree_development
16
+ username:
17
+ encoding: utf8
18
+ test:
19
+ adapter: mysql2
20
+ database: spree_test
21
+ username:
22
+ encoding: utf8
23
+ production:
3
24
  adapter: mysql2
25
+ database: spree_production
26
+ username:
4
27
  encoding: utf8
5
- reconnect: false
6
- pool: 5
7
- username: root
8
- password:
9
- #socket: /tmp/mysql.sock
28
+ <% when 'postgres' %>
29
+ development:
30
+ adapter: postgresql
31
+ database: spree_test
32
+ username: postgres
33
+ min_messages: warning
34
+ test:
35
+ adapter: postgresql
36
+ database: spree_test
37
+ username: postgres
38
+ min_messages: warning
39
+ production:
40
+ adapter: postgresql
41
+ database: spree_production
42
+ username: postgres
43
+ min_messages: warning
10
44
  <% else %>
11
- adapter: sqlite3
12
- pool: 5
13
- timeout: 5000
14
- <% end %>
15
-
16
45
  development:
17
- <<: *login
18
- database: db/dummy_dev
19
-
46
+ adapter: sqlite3
47
+ database: "db/spree_development.sqlite3"
20
48
  test:
21
- <<: *login
22
- database: db/dummy_test
23
-
49
+ adapter: sqlite3
50
+ database: "db/spree_test.sqlite3"
24
51
  production:
25
- <<: *login
26
- database: db/dummy_prod
52
+ adapter: sqlite3
53
+ database: "db/spree_production.sqlite3"
54
+ <% end %>
@@ -114,6 +114,15 @@ Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
114
114
  end
115
115
  end
116
116
 
117
+ def create_database
118
+ say_status :creating, "database"
119
+ silence_stream(STDOUT) do
120
+ silence_stream(STDERR) do
121
+ silence_warnings { rake 'db:create' }
122
+ end
123
+ end
124
+ end
125
+
117
126
  def run_migrations
118
127
  if @run_migrations
119
128
  say_status :running, "migrations"
@@ -153,7 +162,14 @@ Spree::Auth::Engine.load_seed if defined?(Spree::Auth)
153
162
 
154
163
  def notify_about_routes
155
164
  insert_into_file File.join('config', 'routes.rb'), :after => "Application.routes.draw do\n" do
156
- " # Mount Spree's routes\n mount Spree::Core::Engine, :at => '/'\n"
165
+ %Q{
166
+ # This line mounts Spree's routes at the root of your application.
167
+ # This means, any requests to URLs such as /products, will go to Spree::ProductsController.
168
+ # If you would like to change where this engine is mounted, simply change the :at option to something different.
169
+ #
170
+ # We ask that you don't use the :as option here, as Spree relies on it being the default of "spree"
171
+ mount Spree::Core::Engine, :at => '/'
172
+ }
157
173
  end
158
174
 
159
175
  unless options[:quiet]
@@ -7,7 +7,6 @@
7
7
  <% if options[:lib_name] == 'spree' %>
8
8
  //= require admin/spree_core
9
9
  //= require admin/spree_auth
10
- //= require admin/spree_api
11
10
  //= require admin/spree_promo
12
11
  <% else %>
13
12
  //= require admin/<%= options[:lib_name].gsub("/", "_") %>
@@ -7,7 +7,6 @@
7
7
  <% if options[:lib_name] == 'spree' %>
8
8
  //= require store/spree_core
9
9
  //= require store/spree_auth
10
- //= require store/spree_api
11
10
  //= require store/spree_promo
12
11
  <% else %>
13
12
  //= require store/<%= options[:lib_name].gsub("/", "_") %>
@@ -6,7 +6,6 @@
6
6
  <% if options[:lib_name] == 'spree' %>
7
7
  *= require admin/spree_core
8
8
  *= require admin/spree_auth
9
- *= require admin/spree_api
10
9
  *= require admin/spree_promo
11
10
  <% else %>
12
11
  *= require admin/<%= options[:lib_name].gsub("/", "_") %>
@@ -6,7 +6,6 @@
6
6
  <% if options[:lib_name] == 'spree' %>
7
7
  *= require store/spree_core
8
8
  *= require store/spree_auth
9
- *= require store/spree_api
10
9
  *= require store/spree_promo
11
10
  <% else %>
12
11
  *= require store/<%= options[:lib_name].gsub("/", "_") %>
@@ -4,14 +4,21 @@ module Spree
4
4
  class SandboxGenerator < Spree::DummyGenerator
5
5
  desc "Creates blank Rails application, installs Spree and all sample data"
6
6
 
7
- class_option :database, :default => ''
8
-
9
7
  def self.source_paths
10
8
  paths = self.superclass.source_paths
11
9
  paths.unshift File.expand_path('../templates', __FILE__)
12
10
  paths.flatten
13
11
  end
14
12
 
13
+ def drop_database
14
+ say "dropping database"
15
+ inside dummy_path do
16
+ quietly do
17
+ rake 'db:drop -f sandbox/Rakefile'
18
+ end
19
+ end
20
+ end
21
+
15
22
  protected
16
23
  def dummy_path
17
24
  'sandbox'
@@ -5,51 +5,46 @@ module Spree
5
5
  def calculated_adjustments
6
6
  has_one :calculator, :as => :calculable, :dependent => :destroy
7
7
  accepts_nested_attributes_for :calculator
8
- attr_accessible :calculator_attributes
8
+ attr_accessible :calculator_type, :calculator_attributes
9
9
  validates :calculator, :presence => true
10
10
 
11
11
  def self.calculators
12
12
  Rails.application.config.spree.calculators.send(self.to_s.tableize.gsub('/', '_').sub('spree_', ''))
13
13
  end
14
-
15
- include InstanceMethods
16
14
  end
17
15
  end
16
+
17
+ def calculator_type
18
+ calculator.class.to_s if calculator
19
+ end
18
20
 
19
- module InstanceMethods
20
- def calculator_type
21
- calculator.class.to_s if calculator
22
- end
23
-
24
- def calculator_type=(calculator_type)
25
- clazz = calculator_type.constantize if calculator_type
26
- self.calculator = clazz.new if clazz and not self.calculator.is_a? clazz
27
- end
28
-
29
- # Creates a new adjustment for the target object (which is any class that has_many :adjustments) and
30
- # sets amount based on the calculator as applied to the calculable argument (Order, LineItems[], Shipment, etc.)
31
- # By default the adjustment will not be considered mandatory
32
- def create_adjustment(label, target, calculable, mandatory=false)
33
- amount = compute_amount(calculable)
34
- return if amount == 0 && !mandatory
35
- target.adjustments.create({:amount => amount,
36
- :source => calculable,
37
- :originator => self,
38
- :label => label,
39
- :mandatory => mandatory}, :without_protection => true)
40
- end
21
+ def calculator_type=(calculator_type)
22
+ clazz = calculator_type.constantize if calculator_type
23
+ self.calculator = clazz.new if clazz and not self.calculator.is_a? clazz
24
+ end
41
25
 
42
- # Updates the amount of the adjustment using our Calculator and calling the +compute+ method with the +calculable+
43
- # referenced passed to the method.
44
- def update_adjustment(adjustment, calculable)
45
- adjustment.update_attribute_without_callbacks(:amount, compute_amount(calculable))
46
- end
26
+ # Creates a new adjustment for the target object (which is any class that has_many :adjustments) and
27
+ # sets amount based on the calculator as applied to the calculable argument (Order, LineItems[], Shipment, etc.)
28
+ # By default the adjustment will not be considered mandatory
29
+ def create_adjustment(label, target, calculable, mandatory=false)
30
+ amount = compute_amount(calculable)
31
+ return if amount == 0 && !mandatory
32
+ target.adjustments.create({ :amount => amount,
33
+ :source => calculable,
34
+ :originator => self,
35
+ :label => label,
36
+ :mandatory => mandatory}, :without_protection => true)
37
+ end
47
38
 
48
- # Calculate the amount to be used when creating an adjustment
49
- def compute_amount(calculable)
50
- self.calculator.compute(calculable)
51
- end
39
+ # Updates the amount of the adjustment using our Calculator and calling the +compute+ method with the +calculable+
40
+ # referenced passed to the method.
41
+ def update_adjustment(adjustment, calculable)
42
+ adjustment.update_attribute_without_callbacks(:amount, compute_amount(calculable))
43
+ end
52
44
 
45
+ # Calculate the amount to be used when creating an adjustment
46
+ def compute_amount(calculable)
47
+ self.calculator.compute(calculable)
53
48
  end
54
49
 
55
50
  def self.included(receiver)
@@ -2,8 +2,7 @@ module Spree
2
2
  module Core
3
3
  module ControllerHelpers
4
4
  def self.included(receiver)
5
- receiver.send :include, InstanceMethods
6
- receiver.send :layout, '/spree/layouts/spree_application'
5
+ receiver.send :layout, :get_layout
7
6
  receiver.send :helper, 'spree/hook'
8
7
  receiver.send :before_filter, 'instantiate_controller_and_action_names'
9
8
  receiver.send :before_filter, 'set_user_language'
@@ -12,35 +11,33 @@ module Spree
12
11
  receiver.send :helper_method, 'title='
13
12
  receiver.send :helper_method, 'accurate_title'
14
13
  receiver.send :helper_method, 'get_taxonomies'
15
- receiver.send :helper_method, 'current_gateway'
16
14
  receiver.send :helper_method, 'current_order'
17
15
  receiver.send :include, SslRequirement
18
16
  receiver.send :include, Spree::Core::CurrentOrder
19
17
  end
20
18
 
21
- module InstanceMethods
22
- def access_forbidden
23
- render :text => 'Access Forbidden', :layout => true, :status => 401
24
- end
19
+ def access_forbidden
20
+ render :text => 'Access Forbidden', :layout => true, :status => 401
21
+ end
22
+
23
+ # can be used in views as well as controllers.
24
+ # e.g. <% title = 'This is a custom title for this view' %>
25
+ attr_writer :title
25
26
 
26
- # can be used in views as well as controllers.
27
- # e.g. <% title = 'This is a custom title for this view' %>
28
- attr_writer :title
29
-
30
- def title
31
- title_string = @title.present? ? @title : accurate_title
32
- if title_string.present?
33
- if Spree::Config[:always_put_site_name_in_title]
34
- [default_title, title_string].join(' - ')
35
- else
36
- title_string
37
- end
27
+ def title
28
+ title_string = @title.present? ? @title : accurate_title
29
+ if title_string.present?
30
+ if Spree::Config[:always_put_site_name_in_title]
31
+ [default_title, title_string].join(' - ')
38
32
  else
39
- default_title
33
+ title_string
40
34
  end
35
+ else
36
+ default_title
41
37
  end
38
+ end
42
39
 
43
- protected
40
+ protected
44
41
 
45
42
  def default_title
46
43
  Spree::Config[:site_name]
@@ -53,7 +50,7 @@ module Spree
53
50
 
54
51
  def render_404(exception = nil)
55
52
  respond_to do |type|
56
- type.html { render :status => :not_found, :file => "#{::Rails.root}/public/404.html", :layout => nil}
53
+ type.html { render :status => :not_found, :file => "#{::Rails.root}/public/404", :formats => [:html], :layout => nil}
57
54
  type.all { render :status => :not_found, :nothing => true }
58
55
  end
59
56
  end
@@ -67,11 +64,10 @@ module Spree
67
64
  # add additional keys as appropriate. Override this method if you need additional data when
68
65
  # responding to a notification
69
66
  def default_notification_payload
70
- { :user => (respond_to?(:current_user) && current_user),
71
- :order => current_order(true) }
67
+ {:user => (respond_to?(:current_user) && current_user), :order => current_order}
72
68
  end
73
69
 
74
- private
70
+ private
75
71
 
76
72
  def redirect_back_or_default(default)
77
73
  redirect_to(session["user_return_to"] || default)
@@ -87,11 +83,6 @@ module Spree
87
83
  @taxonomies ||= Taxonomy.includes(:root => :children).joins(:root)
88
84
  end
89
85
 
90
- def current_gateway
91
- ActiveSupport::Deprecation.warn "current_gateway is deprecated and will be removed in Spree > 1.0"
92
- @current_gateway ||= Gateway.current
93
- end
94
-
95
86
  def associate_user
96
87
  return unless current_user and current_order
97
88
  current_order.associate_user!(current_user)
@@ -99,11 +90,22 @@ module Spree
99
90
  end
100
91
 
101
92
  def set_user_language
102
- locale = session[:locale] || Spree::Config[:default_locale] || Rails.application.config.i18n.default_locale
103
- locale = I18n.default_locale unless locale && I18n.available_locales.map(&:to_s).include?(locale)
104
- I18n.locale = locale
93
+ locale = session[:locale]
94
+ locale ||= Spree::Config[:default_locale] unless Spree::Config[:default_locale].blank?
95
+ locale ||= Rails.application.config.i18n.default_locale
96
+ locale ||= I18n.default_locale unless I18n.available_locales.include?(locale.to_sym)
97
+ I18n.locale = locale.to_sym
98
+ end
99
+
100
+ # Returns which layout to render.
101
+ #
102
+ # You can set the layout you want to render inside your Spree configuration with the +:layout+ option.
103
+ #
104
+ # Default layout is: +app/views/spree/layouts/spree_application+
105
+ #
106
+ def get_layout
107
+ layout ||= Spree::Config[:layout]
105
108
  end
106
- end
107
109
  end
108
110
  end
109
111
  end
@@ -30,7 +30,7 @@ module Spree
30
30
  connection,
31
31
  table_name,
32
32
  class_names[table_name.to_sym] || table_name.classify,
33
- File.join(fixtures_directory, path))
33
+ ::File.join(fixtures_directory, path))
34
34
  end
35
35
 
36
36
  all_loaded_fixtures.update(fixtures_map)
@@ -52,39 +52,37 @@ module DelegateBelongsTo
52
52
 
53
53
  protected
54
54
 
55
- def get_association_column_names(association, without_default_rejected_delegate_columns=true)
56
- begin
57
- association_klass = reflect_on_association(association).klass
58
- methods = association_klass.column_names
59
- methods.reject!{|x|default_rejected_delegate_columns.include?(x.to_s)} if without_default_rejected_delegate_columns
60
- return methods
61
- rescue
62
- return []
55
+ def get_association_column_names(association, without_default_rejected_delegate_columns=true)
56
+ begin
57
+ association_klass = reflect_on_association(association).klass
58
+ methods = association_klass.column_names
59
+ methods.reject!{|x|default_rejected_delegate_columns.include?(x.to_s)} if without_default_rejected_delegate_columns
60
+ return methods
61
+ rescue
62
+ return []
63
+ end
63
64
  end
64
- end
65
65
 
66
- ##
67
- # initialize_association :belongs_to, :contact
68
- def initialize_association(type, association, opts={})
69
- raise 'Illegal or unimplemented association type.' unless [:belongs_to].include?(type.to_s.to_sym)
70
- send type, association, opts if reflect_on_association(association).nil?
71
- end
66
+ ##
67
+ # initialize_association :belongs_to, :contact
68
+ def initialize_association(type, association, opts={})
69
+ raise 'Illegal or unimplemented association type.' unless [:belongs_to].include?(type.to_s.to_sym)
70
+ send type, association, opts if reflect_on_association(association).nil?
71
+ end
72
72
 
73
73
  private
74
74
 
75
- def class_def(name, method=nil, &blk)
76
- class_eval { method.nil? ? define_method(name, &blk) : define_method(name, method) }
77
- end
75
+ def class_def(name, method=nil, &blk)
76
+ class_eval { method.nil? ? define_method(name, &blk) : define_method(name, method) }
77
+ end
78
78
 
79
79
  end
80
80
 
81
- module InstanceMethods
82
- protected
83
- def delegator_for(association)
84
- send("#{association}=", self.class.reflect_on_association(association).klass.new) if send(association).nil?
85
- send(association)
86
- end
81
+ def delegator_for(association)
82
+ send("#{association}=", self.class.reflect_on_association(association).klass.new) if send(association).nil?
83
+ send(association)
87
84
  end
85
+ protected :delegator_for
88
86
 
89
87
  end
90
88
 
@@ -25,11 +25,11 @@ module Spree
25
25
 
26
26
  end
27
27
 
28
- # We need to reload the routes here due to how Spree sets them up
29
- # The different facets of Spree, (auth, promo, etc.) appends/prepends routes to Core
28
+ # We need to reload the routes here due to how Spree sets them up.
29
+ # The different facets of Spree (auth, promo, etc.) append/prepend routes to Core
30
30
  # *after* Core has been loaded.
31
31
  #
32
- # So we wait until after initialization is complete to do one final reload
32
+ # So we wait until after initialization is complete to do one final reload.
33
33
  # This then makes the appended/prepended routes available to the application.
34
34
  config.after_initialize do
35
35
  Rails.application.routes_reloader.reload!
@@ -3,26 +3,23 @@ module Spree
3
3
  module EnvironmentExtension
4
4
  extend ActiveSupport::Concern
5
5
 
6
- module InstanceMethods
6
+ def add_class(name)
7
+ self.instance_variable_set "@#{name}", Set.new
7
8
 
8
- def add_class(name)
9
- self.instance_variable_set "@#{name}", Set.new
10
- create_method( "#{name}=".to_sym ) { |val|
11
- instance_variable_set( "@" + name, val)
12
- }
9
+ create_method( "#{name}=".to_sym ) { |val|
10
+ instance_variable_set( "@" + name, val)
11
+ }
13
12
 
14
- create_method( name.to_sym ) {
15
- instance_variable_get( "@" + name )
16
- }
13
+ create_method(name.to_sym) do
14
+ instance_variable_get( "@" + name )
17
15
  end
16
+ end
18
17
 
19
- private
20
-
21
- def create_method( name, &block )
22
- self.class.send( :define_method, name, &block )
23
- end
18
+ private
24
19
 
25
- end
20
+ def create_method(name, &block)
21
+ self.class.send(:define_method, name, &block)
22
+ end
26
23
  end
27
24
  end
28
25
  end
@@ -6,6 +6,7 @@ module Spree
6
6
  # This makes it possible to configure the mail settings
7
7
  # through an admin interface instead of requiring changes to the Rails envrionment file.
8
8
  def self.init
9
+ ActionMailer::Base.default_url_options[:host] = Spree::Config[:site_url]
9
10
  return unless mail_method = Spree::MailMethod.current
10
11
  if mail_method.prefers_enable_mail_delivery?
11
12
  mail_server_settings = {
@@ -24,7 +25,6 @@ module Spree
24
25
 
25
26
  ActionMailer::Base.smtp_settings = mail_server_settings
26
27
  ActionMailer::Base.perform_deliveries = true
27
- ActionMailer::Base.default_url_options[:host] = Spree::Config[:site_url]
28
28
  else
29
29
  #logger.warn "NOTICE: Mail not enabled"
30
30
  ActionMailer::Base.perform_deliveries = false
@@ -11,10 +11,10 @@ module Spree
11
11
 
12
12
  module ClassMethods
13
13
  def make_permalink(options={})
14
- options[:field] ||= "permalink"
14
+ options[:field] ||= :permalink
15
15
  self.permalink_options = options
16
16
 
17
- validates_uniqueness_of permalink_options[:field]
17
+ validates permalink_options[:field], :uniqueness => true
18
18
 
19
19
  if self.table_exists? && self.column_names.include?(permalink_options[:field].to_s)
20
20
  before_validation(:on => :create) { save_permalink }
@@ -33,20 +33,29 @@ module Spree
33
33
  permalink_options[:field]
34
34
  end
35
35
 
36
+ def permalink_order
37
+ order = permalink_options[:order]
38
+
39
+ if order
40
+ "#{order} ASC,"
41
+ end
42
+ end
43
+
36
44
  end
37
45
 
38
- module InstanceMethods
39
- def save_permalink
40
- permalink_value = self.to_param
41
- field = self.class.permalink_field
42
- # Do other links exist with this permalink?
43
- other = self.class.first(
44
- :conditions => "#{field} LIKE '#{permalink_value}%'",
45
- :order => "LENGTH(#{field}) DESC, #{field} DESC"
46
- )
47
- if other
48
- # Find the number of that permalink and add one.
49
- if /-(\d+)$/.match(other.send(field))
46
+ def save_permalink
47
+ permalink_value = self.to_param
48
+ field = self.class.permalink_field
49
+ order = self.class.permalink_order
50
+ # Do other links exist with this permalink?
51
+ other = self.class.first(
52
+ :conditions => "#{field} LIKE '#{permalink_value}%'",
53
+ :order => "#{order} LENGTH(#{field}) DESC, #{field} DESC"
54
+ )
55
+ if other
56
+ # Find existence of that permalink or the number of that permalink and add one.
57
+ if ( permalink_value == other.send(field) || /-(\d+)$/.match(other.send(field)) )
58
+ if $1
50
59
  number = $1.to_i + 1
51
60
  # Otherwise default to suffixing it with a 1.
52
61
  else
@@ -55,9 +64,8 @@ module Spree
55
64
 
56
65
  permalink_value += "-#{number.to_s}"
57
66
  end
58
- write_attribute(field, permalink_value)
59
67
  end
60
-
68
+ write_attribute(field, permalink_value)
61
69
  end
62
70
  end
63
71
  end
@@ -1,6 +1,6 @@
1
1
  module Spree
2
2
  class OldPrefs < ActiveRecord::Base
3
- set_table_name "spree_preferences"
3
+ self.table_name = "spree_preferences"
4
4
  belongs_to :owner, :polymorphic => true
5
5
  attr_accessor :owner_klass
6
6
  end
@@ -4,21 +4,26 @@ module ActionController
4
4
  raise "In order to use respond_with, first you need to declare the formats your " <<
5
5
  "controller responds to in the class level" if self.class.mimes_for_respond_to.empty?
6
6
 
7
- if response = retrieve_response_from_mimes(&block)
7
+ if collector = retrieve_collector_from_mimes(&block)
8
8
  options = resources.size == 1 ? {} : resources.extract_options!
9
- options.merge!(:default_response => response)
10
9
 
11
- # following statement is not present in rails code. The action name is needed for processing
12
- options.merge!(:action_name => action_name.to_sym)
13
-
14
- # if responder is not specified then pass in Spree::Responder
15
- (options.delete(:responder) || Spree::Responder).call(self, resources, options)
10
+ if defined_response = collector.response and Spree::BaseController.spree_responders.empty?
11
+ if action = options.delete(:action)
12
+ render :action => action
13
+ else
14
+ defined_response.call
15
+ end
16
+ else
17
+ # The action name is needed for processing
18
+ options.merge!(:action_name => action_name.to_sym)
19
+ # If responder is not specified then pass in Spree::Responder
20
+ (options.delete(:responder) || Spree::Responder).call(self, resources, options)
21
+ end
16
22
  end
17
23
  end
18
24
  end
19
25
  end
20
26
 
21
-
22
27
  module Spree
23
28
  module Core
24
29
  module RespondWith
@@ -9,8 +9,7 @@ module Spree
9
9
  class_name = controller.class.name.to_sym
10
10
  action_name = options.delete(:action_name)
11
11
 
12
- if result = Spree::BaseController.spree_responders[class_name].try(:[],action_name).try(:[], self.format.to_sym)
13
-
12
+ if result = Spree::BaseController.spree_responders[class_name].try(:[], action_name).try(:[], self.format.to_sym)
14
13
  self.on_success = handler(controller, result, :success)
15
14
  self.on_failure = handler(controller, result, :failure)
16
15
  end