spree_core 1.3.1 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
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