spree_core 1.3.1 → 1.3.2

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 (87) hide show
  1. data/LICENSE +1 -1
  2. data/app/assets/javascripts/admin/admin.js.erb +1 -1
  3. data/app/assets/javascripts/admin/shipping_methods.js.coffee +1 -1
  4. data/app/assets/javascripts/admin/spree_core.js +1 -0
  5. data/app/assets/javascripts/admin/variant_autocomplete.js.erb +1 -1
  6. data/app/assets/stylesheets/admin/globals/_variables.scss +7 -7
  7. data/app/assets/stylesheets/admin/plugins/font-awesome.scss +2 -2
  8. data/app/assets/stylesheets/admin/shared/_forms.scss +19 -16
  9. data/app/assets/stylesheets/admin/shared/_layout.scss +1 -1
  10. data/app/assets/stylesheets/admin/shared/_typography.scss +10 -10
  11. data/app/assets/stylesheets/store/screen.css.scss +50 -50
  12. data/app/controllers/spree/admin/base_controller.rb +0 -1
  13. data/app/controllers/spree/admin/images_controller.rb +1 -1
  14. data/app/controllers/spree/admin/line_items_controller.rb +1 -0
  15. data/app/controllers/spree/admin/orders_controller.rb +5 -1
  16. data/app/controllers/spree/admin/payments_controller.rb +2 -1
  17. data/app/controllers/spree/admin/products_controller.rb +3 -1
  18. data/app/controllers/spree/admin/resource_controller.rb +15 -4
  19. data/app/controllers/spree/admin/shipments_controller.rb +6 -1
  20. data/app/controllers/spree/admin/taxons_controller.rb +0 -6
  21. data/app/controllers/spree/checkout_controller.rb +0 -4
  22. data/app/controllers/spree/locale_controller.rb +2 -2
  23. data/app/controllers/spree/orders_controller.rb +1 -1
  24. data/app/helpers/spree/admin/base_helper.rb +9 -1
  25. data/app/helpers/spree/admin/images_helper.rb +14 -0
  26. data/app/helpers/spree/admin/products_helper.rb +1 -1
  27. data/app/helpers/spree/base_helper.rb +3 -3
  28. data/app/models/spree/ability.rb +2 -6
  29. data/app/models/spree/address.rb +6 -1
  30. data/app/models/spree/legacy_user.rb +11 -0
  31. data/app/models/spree/log_entry.rb +11 -0
  32. data/app/models/spree/order.rb +11 -5
  33. data/app/models/spree/order_populator.rb +2 -2
  34. data/app/models/spree/order_updater.rb +11 -11
  35. data/app/models/spree/payment/processing.rb +2 -2
  36. data/app/models/spree/payment.rb +20 -1
  37. data/app/models/spree/payment_method.rb +10 -3
  38. data/app/models/spree/preference.rb +0 -29
  39. data/app/models/spree/preferences/store.rb +4 -10
  40. data/app/models/spree/product/scopes.rb +2 -2
  41. data/app/models/spree/product.rb +2 -5
  42. data/app/models/spree/product_property.rb +3 -1
  43. data/app/models/spree/property.rb +0 -2
  44. data/app/models/spree/return_authorization.rb +1 -1
  45. data/app/models/spree/shipment.rb +1 -1
  46. data/app/models/spree/variant.rb +1 -1
  47. data/app/views/spree/admin/general_settings/edit.html.erb +2 -2
  48. data/app/views/spree/admin/images/index.html.erb +6 -33
  49. data/app/views/spree/admin/orders/_form.html.erb +1 -1
  50. data/app/views/spree/admin/payment_methods/_form.html.erb +4 -0
  51. data/app/views/spree/admin/payment_methods/index.html.erb +3 -1
  52. data/app/views/spree/admin/product_properties/_product_property_fields.html.erb +5 -1
  53. data/app/views/spree/admin/product_properties/index.html.erb +2 -2
  54. data/app/views/spree/admin/products/_form.html.erb +1 -6
  55. data/app/views/spree/admin/products/edit.html.erb +4 -1
  56. data/app/views/spree/admin/prototypes/_form.html.erb +1 -1
  57. data/app/views/spree/admin/prototypes/select.js.erb +2 -2
  58. data/app/views/spree/admin/return_authorizations/index.html.erb +1 -1
  59. data/app/views/spree/admin/shared/_tabs.html.erb +1 -1
  60. data/app/views/spree/admin/shared/_translations.html.erb +1 -1
  61. data/app/views/spree/admin/shipments/_form.html.erb +1 -1
  62. data/app/views/spree/admin/shipping_methods/_form.html.erb +3 -3
  63. data/app/views/spree/admin/taxonomies/get_children.json.erb +1 -1
  64. data/app/views/spree/admin/variants/_autocomplete.js.erb +1 -1
  65. data/app/views/spree/shared/_order_details.html.erb +1 -1
  66. data/config/routes.rb +5 -1
  67. data/db/migrate/20121031162139_split_prices_from_variants.rb +1 -1
  68. data/db/migrate/20130114053446_add_display_on_to_spree_payment_methods.rb +9 -0
  69. data/db/migrate/20130120201805_add_position_to_product_properties.spree.rb +6 -0
  70. data/db/migrate/20130203232234_add_identifier_to_spree_payments.rb +5 -0
  71. data/lib/generators/spree/install/install_generator.rb +4 -1
  72. data/lib/spree/core/controller_helpers/common.rb +3 -3
  73. data/lib/spree/core/controller_helpers.rb +13 -0
  74. data/lib/spree/core/engine.rb +7 -4
  75. data/lib/spree/core/permalinks.rb +1 -1
  76. data/lib/spree/core/ssl_requirement.rb +1 -1
  77. data/lib/spree/core/testing_support/authorization_helpers.rb +5 -2
  78. data/lib/spree/core/testing_support/bar_ability.rb +17 -0
  79. data/lib/spree/core/testing_support/factories/product_factory.rb +4 -2
  80. data/lib/spree/core/testing_support/factories/variant_factory.rb +9 -3
  81. data/lib/spree/core/testing_support/preferences.rb +12 -6
  82. data/lib/spree/core/version.rb +1 -1
  83. data/lib/spree/core.rb +1 -1
  84. data/lib/spree/scopes/dynamic.rb +1 -1
  85. data/lib/tasks/core.rake +3 -3
  86. data/vendor/assets/javascripts/jquery-migrate-1.0.0.js +498 -0
  87. metadata +14 -7
@@ -90,7 +90,7 @@ module Spree
90
90
 
91
91
  def line_items
92
92
  if order.complete? and Spree::Config[:track_inventory_levels]
93
- order.line_items.select { |li| inventory_units.map(&:variant_id).include?(li.variant_id) }
93
+ order.line_items.select { |li| inventory_units.pluck(:variant_id).include?(li.variant_id) }
94
94
  else
95
95
  order.line_items
96
96
  end
@@ -87,7 +87,7 @@ module Spree
87
87
  end
88
88
 
89
89
  def options_text
90
- values = self.option_values.sort_by(&:position)
90
+ values = self.option_values.joins(:option_type).order("#{Spree::OptionType.table_name}.position asc")
91
91
 
92
92
  values.map! do |ov|
93
93
  "#{ov.option_type.presentation}: #{ov.presentation}"
@@ -55,7 +55,7 @@
55
55
  <%= radio_button_tag :currency_symbol_position, "before" %>
56
56
  <%= label_tag :currency_symbol_position_before, Spree::Money.new(10, :symbol_position => "before") %>
57
57
  </li>
58
- <li>
58
+ <li class="white-space-nowrap">
59
59
  <%= radio_button_tag :currency_symbol_position, "after" %>
60
60
  <%= label_tag :currency_symbol_position_after, Spree::Money.new(10, :symbol_position => "after") %>
61
61
  </li>
@@ -69,7 +69,7 @@
69
69
  <div class="form-buttons filter-actions actions" data-hook="buttons">
70
70
  <%= button t(:update), 'icon-refresh' %>
71
71
  <span class="or"><%= t(:or) %></span>
72
- <%= link_to_with_icon 'icon-remove', t(:cancel), admin_general_settings_url, :class => 'button' %>
72
+ <%= link_to_with_icon 'icon-remove', t(:cancel), edit_admin_general_settings_url, :class => 'button' %>
73
73
  </div>
74
74
 
75
75
  </fieldset>
@@ -8,7 +8,7 @@
8
8
 
9
9
  <div id="images" data-hook></div>
10
10
 
11
- <% unless @product.images.any? %>
11
+ <% unless @product.images.any? || @product.variant_images.any? %>
12
12
  <div class="no-objects-found">
13
13
  <%= t(:no_images_found) %>.
14
14
  </div>
@@ -17,10 +17,8 @@
17
17
  <colgroup>
18
18
  <col style="width: 5%">
19
19
  <col style="width: 10%">
20
- <% if @product.has_variants? %>
21
- <col style="width: 25%">
22
- <% end %>
23
- <col style="width: <% if @product.has_variants? %>45%<% else %>70%<% end %>">
20
+ <col style="width: 25%">
21
+ <col style="width: 45%">
24
22
  <col style="width: 15%">
25
23
  </colgroup>
26
24
  <thead>
@@ -35,7 +33,7 @@
35
33
  </thead>
36
34
 
37
35
  <tbody>
38
- <% @product.images.each do |image| %>
36
+ <% (@product.images + @product.variant_images).each do |image| %>
39
37
  <tr id="<%= spree_dom_id image %>" data-hook="images_row" class="<%= cycle('odd', 'even')%>">
40
38
  <td class="no-border">
41
39
  <span class="handle"></span>
@@ -43,9 +41,7 @@
43
41
  <td>
44
42
  <%= link_to image_tag(image.attachment.url(:mini)), image.attachment.url(:product) %>
45
43
  </td>
46
- <% if @product.has_variants? %>
47
- <td><%= t(:all) %></td>
48
- <% end %>
44
+ <td><%= options_text_for(image) %></td>
49
45
  <td><%= image.alt %></td>
50
46
  <td class="actions">
51
47
  <%= link_to_with_icon 'icon-edit', t(:edit), edit_admin_product_image_url(@product, image), :no_text => true, :data => {:action => 'edit'} %>
@@ -53,29 +49,6 @@
53
49
  </td>
54
50
  </tr>
55
51
  <% end %>
56
-
57
- <% @product.variants.each do |variant| %>
58
- <% variant.images.each do |image| %>
59
- <tr id="<%= spree_dom_id image %>" data-hook="images_row" class="<%= cycle('odd', 'even')%>">
60
- <td class="no-border">
61
- <span class="handle"></span>
62
- </td>
63
- <td>
64
- <%= link_to image_tag(image.attachment.url(:mini)), image.attachment.url(:product) %>
65
- </td>
66
- <% if @product.has_variants? %>
67
- <td><%= variant.options_text %></td>
68
- <% end %>
69
- <td>
70
- <%= image.alt %>
71
- </td>
72
- <td class="actions">
73
- <%= link_to_with_icon 'icon-edit', t(:edit), edit_admin_product_image_url(@product, image), :no_text => true, :data => {:action => 'edit'} %>
74
- <%= link_to_delete image, {:url => admin_product_image_url(@product, image), :no_text => true }%>
75
- </td>
76
- </tr>
77
- <% end %>
78
- <% end %>
79
52
  </tbody>
80
53
  </table>
81
- <% end %>
54
+ <% end %>
@@ -38,7 +38,7 @@
38
38
  <tbody id="order-charges" data-hook="admin_order_form_adjustments" class="no-border-top">
39
39
  <% @order.adjustments.eligible.each do |adjustment| %>
40
40
  <tr>
41
- <td colspan="3"><strong><%= adjustment.label %></strong></td>
41
+ <td colspan="3"><strong><%= adjustment.label %>:</strong></td>
42
42
  <td class="total align-center"><span><%= adjustment.display_amount %></span></td>
43
43
  <td class="actions"></td>
44
44
  </tr>
@@ -21,6 +21,10 @@
21
21
  <%= label_tag nil, t(:environment) %>
22
22
  <%= collection_select(:payment_method, :environment, Rails.configuration.database_configuration.keys.sort, :to_s, :titleize, {}, {:id => 'gtwy-env', :class => 'select2 fullwidth'}) %>
23
23
  </div>
24
+ <div data-hook="display" class="field">
25
+ <%= label_tag nil, t(:display) %>
26
+ <%= select(:payment_method, :display_on, Spree::PaymentMethod::DISPLAY.collect { |display| [t(display), display == :both ? nil : display.to_s] }, {}, {:class => 'select2 fullwidth'}) %>
27
+ </div>
24
28
  <div data-hook="active" class="field">
25
29
  <%= label_tag nil, t(:active) %>
26
30
  <ul>
@@ -24,6 +24,7 @@
24
24
  <th><%= t(:name) %></th>
25
25
  <th><%= t(:provider) %></th>
26
26
  <th><%= t(:environment) %></th>
27
+ <th><%= t(:display) %></th>
27
28
  <th><%= t(:active) %></th>
28
29
  <th data-hook="admin_payment_methods_index_header_actions" class="actions"></th>
29
30
  </tr>
@@ -34,6 +35,7 @@
34
35
  <td class="align-center"><%= method.name %></td>
35
36
  <td><%= method.type %></td>
36
37
  <td class="align-center"><%= method.environment.to_s.titleize %></td>
38
+ <td class="align-center"><%= method.display_on.blank? ? t(:both) : t(method.display_on) %></td>
37
39
  <td class="align-center"><%= method.active ? t(:yes) : t(:no) %></td>
38
40
  <td data-hook="admin_payment_methods_index_row_actions" class="actions">
39
41
  <%= link_to_edit method, :no_text => true %>
@@ -42,4 +44,4 @@
42
44
  </tr>
43
45
  <% end %>
44
46
  </tbody>
45
- </table>
47
+ </table>
@@ -1,4 +1,8 @@
1
- <tr class="product_property fields" data-hook="product_property">
1
+ <tr class="product_property fields" id="spree_<%= dom_id(f.object) %>" data-hook="product_property">
2
+ <td class="no-border">
3
+ <span class="handle"></span>
4
+ <%= f.hidden_field :id %>
5
+ </td>
2
6
  <td class='property_name'>
3
7
  <%= f.text_field :property_name, :class => 'autocomplete' %>
4
8
  </td>
@@ -24,10 +24,10 @@
24
24
  <div id="prototypes" data-hook></div>
25
25
  <%= image_tag 'spinner.gif', :plugin => 'spree', :style => 'display:none;', :id => 'busy_indicator' %>
26
26
 
27
- <table class="index">
27
+ <table class="index sortable" data-hook data-sortable-link="<%= update_positions_admin_product_product_properties_url %>">
28
28
  <thead>
29
29
  <tr data-hook="product_properties_header">
30
- <th><%= t(:property) %></th>
30
+ <th colspan="2"><%= t(:property) %></th>
31
31
  <th><%= t(:value) %></th>
32
32
  <th class="actions"></th>
33
33
  </tr>
@@ -47,12 +47,7 @@
47
47
  <%= f.field_container :available_on do %>
48
48
  <%= f.label :available_on, t(:available_on) %>
49
49
  <%= f.error_message_on :available_on %>
50
- <% if @product.available_on? %>
51
- <% available_on = l(@product.available_on, :format => t('spree.date_picker.format')) %>
52
- <% else %>
53
- <% available_on = nil %>
54
- <% end %>
55
- <%= f.text_field :available_on, :value => available_on, :class => 'datepicker' %>
50
+ <%= f.text_field :available_on, :value => datepicker_field_value(@product.available_on), :class => 'datepicker' %>
56
51
  <% end %>
57
52
 
58
53
  <% unless @product.has_variants? %>
@@ -1,5 +1,8 @@
1
1
  <% content_for :page_actions do %>
2
- <li><%= button_link_to t(:back_to_products_list), admin_products_url, :icon => 'icon-arrow-left' %></li>
2
+ <li><%= button_link_to t(:back_to_products_list), session[:return_to] || admin_products_url, :icon => 'icon-arrow-left' %></li>
3
+ <li id="new_product_link">
4
+ <%= button_link_to t(:new_product), new_object_url, { :remote => true, :icon => 'icon-plus', :id => 'admin_new_product' } %>
5
+ </li>
3
6
  <% end %>
4
7
 
5
8
  <%= render :partial => 'spree/admin/shared/product_sub_menu' %>
@@ -11,7 +11,7 @@
11
11
  <div id='properties' data-hook>
12
12
  <%= f.field_container :property_ids do %>
13
13
  <%= f.label :property_ids, t(:properties) %><br>
14
- <%= f.select :property_ids, Spree::Property.sorted.map { |p| [p.presentation, p.id] }, {}, { :multiple => true, :class => "select2 fullwidth" } %>
14
+ <%= f.select :property_ids, Spree::Property.all.map { |p| [p.presentation, p.id] }, {}, { :multiple => true, :class => "select2 fullwidth" } %>
15
15
  <% end %>
16
16
  </div>
17
17
  </div>
@@ -1,4 +1,4 @@
1
- <% @prototype_properties.each do |prop| %>
1
+ <% @prototype_properties.sort_by{ |prop| -prop[:id] }.each do |prop| %>
2
2
  $("a.add_fields").click();
3
- $(".product_property.fields:last input:first").val("<%= prop.name %>");
3
+ $(".product_property.fields:first input:first").val("<%= prop.name %>");
4
4
  <% end %>
@@ -13,7 +13,7 @@
13
13
  <i class="icon-arrow-right"></i> <%= t(:return_authorizations) %>
14
14
  <% end %>
15
15
 
16
- <% if @order.inventory_units.any? &:shipped? %>
16
+ <% if @order.inventory_units.any?(&:shipped?) || @order.return_authorizations.any? %>
17
17
  <table class="index">
18
18
  <thead data-hook="rma_header">
19
19
  <tr>
@@ -2,4 +2,4 @@
2
2
  <%= tab :orders, :payments, :creditcard_payments, :shipments, :credit_cards, :return_authorizations, :icon => 'icon-shopping-cart' %>
3
3
  <%= tab :products , :option_types, :properties, :prototypes, :variants, :product_properties, :taxons, :icon => 'icon-th-large' %>
4
4
  <%= tab :reports, :icon => 'icon-file' %>
5
- <%= tab :configurations, :general_settings, :mail_methods, :tax_categories, :zones, :states, :payment_methods, :inventory_settings, :taxonomies, :shipping_methods, :trackers, :label => 'configuration', :icon => 'icon-wrench', :url => edit_admin_general_settings_path %>
5
+ <%= tab :configurations, :general_settings, :mail_methods, :tax_categories, :zones, :states, :payment_methods, :inventory_settings, :taxonomies, :shipping_methods, :trackers, :label => 'configuration', :icon => 'icon-wrench', :url => spree.edit_admin_general_settings_path %>
@@ -13,7 +13,7 @@
13
13
  :destroy => I18n.t(:destroy),
14
14
  :edit => I18n.t(:edit),
15
15
  :loading => I18n.t(:loading),
16
- :month_names => I18n.t(:month_names, :scope => :date).delete_if(&:blank?),
16
+ :month_names => I18n.t(:month_names, :scope => :date).reject(&:blank?),
17
17
  :more => I18n.t(:more),
18
18
  :name => I18n.t(:name),
19
19
  :next => I18n.t(:next),
@@ -17,7 +17,7 @@
17
17
  <%= check_box_tag "inventory_units[#{inventory_unit.id}]",
18
18
  :true,
19
19
  (inventory_unit.shipment == @shipment),
20
- { :disabled => %w(shipped backordered returned).include?(inventory_unit.state),
20
+ { :disabled => %w(shipped backordered).include?(inventory_unit.state),
21
21
  :class => 'inventory_unit'} %>
22
22
  </td>
23
23
  <td style="vertical-align:top; width:120px;"><%= inventory_unit.variant.sku %></td>
@@ -1,4 +1,4 @@
1
- <div data-hook="admin_shipping_method_form_fields">
1
+ <div data-hook="admin_shipping_method_form_fields" class="alpha twelve columns">
2
2
  <div class="alpha four columns">
3
3
  <%= f.field_container :name do %>
4
4
  <%= f.label :name, t(:name) %><br />
@@ -34,14 +34,14 @@
34
34
  <% end %>
35
35
 
36
36
  <div class="field">
37
- <%= label_tag t(:match_rule) %>
37
+ <%= label_tag t(:match_rule) %>
38
38
  <ul>
39
39
  <li><%= f.check_box :match_none %> <%= f.label :match_none, t('match_choices.none') %></li>
40
40
  <li><%= f.check_box :match_one %> <%= f.label :match_one, t('match_choices.one') %></li>
41
41
  <li><%= f.check_box :match_all %> <%= f.label :match_all, t('match_choices.all') %></li>
42
42
  </ul>
43
43
  </div>
44
-
44
+
45
45
  </fieldset>
46
46
  </div>
47
47
 
@@ -1,7 +1,7 @@
1
1
  [<% @taxons.each_with_index do |t,i| %>
2
2
  { "attr" :
3
3
  { "id" : "<%= t.id %>" },
4
- "data" : "<%= escape_javascript(raw(t.name)) %>"
4
+ "data" : "<%= raw(t.name.gsub('"','\"')) %>"
5
5
  <% unless t.children.empty? %>
6
6
  ,"state" : "closed"
7
7
  <% end %>
@@ -20,7 +20,7 @@
20
20
  {{#if variant.option_values}}
21
21
  <ul class='variant-options'>
22
22
  {{#each variant.option_values}}
23
- <li><strong>{{option_value.option_type.presentation}}:</strong> {{option_value.presentation}}</li>
23
+ <li><strong>{{this.option_type.presentation}}:</strong> {{this.presentation}}</li>
24
24
  {{/each}}
25
25
  </ul>
26
26
  {{/if}}
@@ -78,7 +78,7 @@
78
78
  </td>
79
79
  <td data-hook="order_item_description">
80
80
  <h4><%= item.variant.product.name %></h4>
81
- <%= truncate(item.variant.product.description, :length => 100, :omission => "...") %>
81
+ <%= truncate(raw(item.variant.product.description), :length => 100, :omission => "...") %>
82
82
  <%= "(" + item.variant.options_text + ")" unless item.variant.option_values.empty? %>
83
83
  </td>
84
84
  <td data-hook="order_item_price" class="price"><span><%= item.variant.display_amount %></span></td>
data/config/routes.rb CHANGED
@@ -53,7 +53,11 @@ Spree::Core::Engine.routes.draw do
53
53
  get :search
54
54
  end
55
55
 
56
- resources :product_properties
56
+ resources :product_properties do
57
+ collection do
58
+ post :update_positions
59
+ end
60
+ end
57
61
  resources :images do
58
62
  collection do
59
63
  post :update_positions
@@ -9,7 +9,7 @@ class SplitPricesFromVariants < ActiveRecord::Migration
9
9
  Spree::Variant.all.each do |variant|
10
10
  Spree::Price.create!(
11
11
  :variant_id => variant.id,
12
- :amount => variant.price,
12
+ :amount => variant[:price],
13
13
  :currency => Spree::Config[:currency]
14
14
  )
15
15
  end
@@ -0,0 +1,9 @@
1
+ class AddDisplayOnToSpreePaymentMethods < ActiveRecord::Migration
2
+ def self.up
3
+ add_column :spree_payment_methods, :display_on, :string
4
+ end
5
+
6
+ def self.down
7
+ remove_column :spree_payment_methods, :display_on
8
+ end
9
+ end
@@ -0,0 +1,6 @@
1
+ class AddPositionToProductProperties < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_product_properties, :position, :integer, :default => 0
4
+ end
5
+ end
6
+
@@ -0,0 +1,5 @@
1
+ class AddIdentifierToSpreePayments < ActiveRecord::Migration
2
+ def change
3
+ add_column :spree_payments, :identifier, :string
4
+ end
5
+ end
@@ -53,14 +53,17 @@ module Spree
53
53
  return unless File.exists? 'public/robots.txt'
54
54
  append_file "public/robots.txt", <<-ROBOTS
55
55
  User-agent: *
56
- Disallow: /checkouts
56
+ Disallow: /checkout
57
+ Disallow: /cart
57
58
  Disallow: /orders
58
59
  Disallow: /countries
59
60
  Disallow: /line_items
60
61
  Disallow: /password_resets
61
62
  Disallow: /states
62
63
  Disallow: /user_sessions
64
+ Disallow: /user_registrations
63
65
  Disallow: /users
66
+ Disallow: /account
64
67
  ROBOTS
65
68
  end
66
69
 
@@ -38,7 +38,7 @@ module Spree
38
38
  title_string = @title.present? ? @title : accurate_title
39
39
  if title_string.present?
40
40
  if Spree::Config[:always_put_site_name_in_title]
41
- [default_title, title_string].join(' - ')
41
+ [title_string, default_title].join(' - ')
42
42
  else
43
43
  title_string
44
44
  end
@@ -76,8 +76,8 @@ module Spree
76
76
  def set_user_language
77
77
  locale = session[:locale]
78
78
  locale ||= Rails.application.config.i18n.default_locale
79
- locale ||= I18n.default_locale unless I18n.available_locales.include?(locale.try(:to_sym))
80
- I18n.locale = locale.to_sym
79
+ locale ||= I18n.default_locale unless I18n.available_locales.map(&:to_s).include?(locale)
80
+ I18n.locale = locale
81
81
  end
82
82
 
83
83
  # Returns which layout to render.
@@ -0,0 +1,13 @@
1
+ module Spree
2
+ module Core
3
+ module ControllerHelpers
4
+ def self.included(base)
5
+ base.class_eval do
6
+ include Spree::Core::ControllerHelpers::Common
7
+ include Spree::Core::ControllerHelpers::Auth
8
+ include Spree::Core::ControllerHelpers::Order
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,5 @@
1
+ require 'rabl'
2
+
1
3
  module Spree
2
4
  module Core
3
5
  class Engine < ::Rails::Engine
@@ -14,12 +16,13 @@ module Spree
14
16
 
15
17
  config.to_prepare &method(:activate).to_proc
16
18
 
17
- Rabl.configure do |config|
18
- config.include_json_root = false
19
- config.include_child_root = false
20
- end
21
19
 
22
20
  config.after_initialize do
21
+ Rabl.configure do |config|
22
+ config.include_json_root = false
23
+ config.include_child_root = false
24
+ end
25
+
23
26
  ActiveSupport::Notifications.subscribe(/^spree\./) do |*args|
24
27
  event_name, start_time, end_time, id, payload = args
25
28
  Activator.active.event_name_starts_with(event_name).each do |activator|
@@ -42,7 +42,7 @@ module Spree
42
42
  def save_permalink(permalink_value=self.to_param)
43
43
  field = self.class.permalink_field
44
44
  # Do other links exist with this permalink?
45
- other = self.class.where("#{field} LIKE ?", "#{permalink_value}%")
45
+ other = self.class.where("#{self.class.table_name}.#{field} LIKE ?", "#{permalink_value}%")
46
46
  if other.any?
47
47
  # Find the existing permalink with the highest number, and increment that number.
48
48
  # (If none of the existing permalinks have a number, this will evaluate to 1.)
@@ -1,5 +1,5 @@
1
1
  # ++
2
- # Copyright (c) 2007-2012, Spree Commerce, Inc. and other contributors
2
+ # Copyright (c) 2007-2013, Spree Commerce, Inc. and other contributors
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without modification,
@@ -1,8 +1,11 @@
1
1
  module AuthorizationHelpers
2
2
  module Controller
3
3
  def stub_authorization!
4
+ let(:ability_user) { stub_model(Spree::LegacyUser) }
5
+
4
6
  before do
5
- controller.should_receive(:authorize!).twice.and_return(true)
7
+ controller.stub(:try_spree_current_user => ability_user)
8
+ controller.should_receive(:authorize!).and_return(true)
6
9
  end
7
10
  end
8
11
  end
@@ -27,4 +30,4 @@ end
27
30
  RSpec.configure do |config|
28
31
  config.extend AuthorizationHelpers::Controller, :type => :controller
29
32
  config.extend AuthorizationHelpers::Request, :type => :request
30
- end
33
+ end
@@ -0,0 +1,17 @@
1
+ # Fake ability for testing administration
2
+ class BarAbility
3
+ include CanCan::Ability
4
+
5
+ def initialize(user)
6
+ user ||= Spree::User.new
7
+ if user.has_spree_role? 'bar'
8
+ # allow dispatch to :index and :show orders on the admin
9
+ can :index, Spree::Order
10
+ can :show, Spree::Order
11
+ can :admin, Spree::Order
12
+ # allow dispatch to :index, :show, :create and :update shipments on the admin
13
+ can :manage, Spree::Shipment
14
+ can :admin, Spree::Shipment
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  FactoryGirl.define do
2
- factory :simple_product, :class => Spree::Product do
2
+ factory :base_product, :class => Spree::Product do
3
3
  sequence(:name) { |n| "Product ##{n} - #{Kernel.rand(9999)}" }
4
4
  description { Faker::Lorem.paragraphs(1 + Kernel.rand(5)).join("\n") }
5
5
  price 19.99
@@ -7,13 +7,15 @@ FactoryGirl.define do
7
7
  sku 'ABC'
8
8
  available_on 1.year.ago
9
9
  deleted_at nil
10
+ end
11
+
12
+ factory :simple_product, :parent => :base_product do
10
13
  on_hand 5
11
14
  end
12
15
 
13
16
  factory :product, :parent => :simple_product do
14
17
  tax_category { |r| Spree::TaxCategory.first || r.association(:tax_category) }
15
18
  shipping_category { |r| Spree::ShippingCategory.first || r.association(:shipping_category) }
16
- on_hand 5
17
19
  end
18
20
 
19
21
  factory :product_with_option_types, :parent => :product do
@@ -1,5 +1,5 @@
1
1
  FactoryGirl.define do
2
- factory :variant, :class => Spree::Variant do
2
+ factory :base_variant, :class => Spree::Variant do
3
3
  price 19.99
4
4
  cost_price 17.00
5
5
  sku { Faker::Lorem.sentence }
@@ -7,10 +7,16 @@ FactoryGirl.define do
7
7
  height { BigDecimal.new("#{rand(200)}.#{rand(99)}") }
8
8
  width { BigDecimal.new("#{rand(200)}.#{rand(99)}") }
9
9
  depth { BigDecimal.new("#{rand(200)}.#{rand(99)}") }
10
- on_hand 5
11
10
 
12
11
  # associations:
13
- product { |p| p.association(:product) }
12
+ product { |p| p.association(:base_product) }
14
13
  option_values { [FactoryGirl.create(:option_value)] }
15
14
  end
15
+
16
+ factory :variant, :parent => :base_variant do
17
+ on_hand 5
18
+
19
+ # associations:
20
+ product { |p| p.association(:product) }
21
+ end
16
22
  end
@@ -2,17 +2,23 @@ module Spree
2
2
  module Core
3
3
  module TestingSupport
4
4
  module Preferences
5
- # Resets all preferences to default values, you can
6
- # pass a block to override the defaults with a block
5
+ def reset_spree_preferences(&config_block)
6
+ Spree::Preferences::Store.instance.persistence = false
7
+ Spree::Preferences::Store.instance.clear_cache
8
+
9
+ configure_spree_preferences &config_block if block_given?
10
+ end
11
+
12
+ # The preference cache is cleared before each test, so the
13
+ # default values will be used. You can define preferences
14
+ # for your spec with:
7
15
  #
8
- # reset_spree_preferences do |config|
16
+ # configure_spree_preferences do |config|
9
17
  # config.site_name = "my fancy pants store"
10
18
  # end
11
19
  #
12
- def reset_spree_preferences
13
- Spree::Preferences::Store.instance.persistence = false
20
+ def configure_spree_preferences
14
21
  config = Rails.application.config.spree.preferences
15
- config.reset
16
22
  yield(config) if block_given?
17
23
  end
18
24
 
@@ -1,5 +1,5 @@
1
1
  module Spree
2
2
  def self.version
3
- "1.3.1"
3
+ "1.3.2"
4
4
  end
5
5
  end
data/lib/spree/core.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #++
2
- # Copyright (c) 2007-2012, Spree Commerce, Inc. and other contributors
2
+ # Copyright (c) 2007-2013, Spree Commerce, Inc. and other contributors
3
3
  # All rights reserved.
4
4
  #
5
5
  # Redistribution and use in source and binary forms, with or without modification,
@@ -11,7 +11,7 @@ module Spree
11
11
  scopes = []
12
12
 
13
13
  # Price based scopes
14
- all_prices = products.map(&:price).sort
14
+ all_prices = products.pluck(:price).sort
15
15
 
16
16
  ranges = [Math.log(products.length).floor, scope_limit].max
17
17
 
data/lib/tasks/core.rake CHANGED
@@ -3,13 +3,13 @@ require 'spree/core/custom_fixtures'
3
3
 
4
4
  namespace :db do
5
5
  desc %q{Loads a specified fixture file:
6
- For .yml/.csv use rake db:load_file[spree/filename.yml,/absolute/path/to/parent/]
6
+ For .yml use rake db:load_file[spree/filename.yml,/absolute/path/to/parent/]
7
7
  For .rb use rake db:load_file[/absolute/path/to/sample/filename.rb]}
8
8
 
9
9
  task :load_file , [:file, :dir] => :environment do |t, args|
10
10
  file = Pathname.new(args.file)
11
11
 
12
- if %w{.csv .yml}.include? file.extname
12
+ if %w{.yml}.include? file.extname
13
13
  puts "loading fixture #{Pathname.new(args.dir).join(file)}"
14
14
  Spree::Core::Fixtures.create_fixtures(args.dir, file.to_s.sub(file.extname, ""))
15
15
  elsif file.exist?
@@ -25,7 +25,7 @@ For .rb use rake db:load_file[/absolute/path/to/sample/filename.rb]}
25
25
 
26
26
  fixtures = ActiveSupport::OrderedHash.new
27
27
  ruby_files = ActiveSupport::OrderedHash.new
28
- Dir.glob(File.join(dir , '**/*.{yml,csv,rb}')).each do |fixture_file|
28
+ Dir.glob(File.join(dir , '**/*.{yml,rb}')).each do |fixture_file|
29
29
  ext = File.extname fixture_file
30
30
  if ext == ".rb"
31
31
  ruby_files[File.basename(fixture_file, '.*')] = fixture_file