spree_core 1.1.0.rc2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,4 @@
1
+ <%# encoding: utf-8 %>
1
2
  //= require_self
2
3
 
3
4
  /**
@@ -206,7 +207,12 @@ $(".observe_field").live('change', function() {
206
207
 
207
208
  handle_date_picker_fields = function(){
208
209
  $('.datepicker').datepicker({
209
- dateFormat: 'yy/mm/dd',
210
+ dateFormat: "<%= ::I18n.t(:format, :scope => 'spree.date_picker', :default => 'yy/mm/dd') %>",
211
+ dayNames: ["<%= ::I18n.t(:day_names, :scope => :date).join('","') %>"],
212
+ dayNamesMin: ["<%= ::I18n.t(:abbr_day_names, :scope => :date).join('","') %>"],
213
+ monthNames: ["<%= ::I18n.t(:month_names, :scope => :date).join('","') %>"],
214
+ prevText: '<%= ::I18n.t(:previous) %>',
215
+ nextText: '<%= ::I18n.t(:next) %>',
210
216
  showOn: "button",
211
217
  buttonImage: "<%= asset_path 'datepicker/cal.gif' %>",
212
218
  buttonImageOnly: true
@@ -1,3 +1,5 @@
1
+ //= require jquery
2
+ //= require jquery_ujs
1
3
  //= require jquery-ui
2
4
  //= require jquery.cookie
3
5
  //= require jquery.tokeninput
@@ -52,6 +52,9 @@ module Spree
52
52
 
53
53
  def fire
54
54
  return unless event = params[:e] and @payment.payment_source
55
+
56
+ # Because we have a transition method also called void, we do this to avoid conflicts.
57
+ event = "void_transaction" if event == "void"
55
58
  if @payment.send("#{event}!")
56
59
  flash.notice = t(:payment_updated)
57
60
  else
@@ -41,7 +41,7 @@ module Spree
41
41
 
42
42
  params[:products].each do |product_id,variant_id|
43
43
  quantity = params[:quantity].to_i if !params[:quantity].is_a?(Hash)
44
- quantity = params[:quantity][variant_id.to_i].to_i if params[:quantity].is_a?(Hash)
44
+ quantity = params[:quantity][variant_id].to_i if params[:quantity].is_a?(Hash)
45
45
  @order.add_variant(Variant.find(variant_id), quantity) if quantity > 0
46
46
  end if params[:products]
47
47
 
@@ -106,7 +106,7 @@ module Spree
106
106
 
107
107
  def flash_messages
108
108
  flash.each do |msg_type, text|
109
- concat(content_tag :div, text, :class => "flash #{msg_type}")
109
+ concat(content_tag :div, text, :class => "flash #{msg_type}") unless msg_type == :commerce_tracking
110
110
  end
111
111
  nil
112
112
  end
@@ -142,7 +142,7 @@ module Spree
142
142
  def available_countries
143
143
  countries = Zone.find_by_name(Spree::Config[:checkout_zone]).try(:country_list) || Country.all
144
144
  countries.collect do |c|
145
- c.name = I18n.t(c.name, :scope => 'countries', :default => c.name)
145
+ c.name = I18n.t(c.iso, :scope => 'countries', :default => c.name)
146
146
  c
147
147
  end.sort{ |a,b| a.name <=> b.name }
148
148
  end
@@ -4,7 +4,7 @@ module Spree
4
4
  preference :additional_item, :decimal, :default => 0.0
5
5
  preference :max_items, :integer, :default => 0
6
6
 
7
- attr_accessible :preferred_first_item, :preferred_additional_tiem, :preferred_max_items
7
+ attr_accessible :preferred_first_item, :preferred_additional_item, :preferred_max_items
8
8
 
9
9
  def self.description
10
10
  I18n.t(:flexible_rate)
@@ -71,7 +71,7 @@ module Spree
71
71
 
72
72
  # Indicates whether its possible to capture the payment
73
73
  def can_capture?(payment)
74
- payment.state == 'pending'
74
+ payment.state == 'pending' || payment.state == 'checkout'
75
75
  end
76
76
 
77
77
  # Indicates whether its possible to void the payment.
@@ -9,6 +9,8 @@ module Spree
9
9
 
10
10
  attr_accessible :preferred_server, :preferred_test_mode
11
11
 
12
+ attr_accessible :preferred_server, :preferred_test_mode
13
+
12
14
  def payment_source_class
13
15
  Creditcard
14
16
  end
@@ -67,6 +67,10 @@ module Spree
67
67
  true
68
68
  end
69
69
 
70
+ def actions
71
+ %w(capture void credit)
72
+ end
73
+
70
74
  private
71
75
  def generate_profile_id(success)
72
76
  record = true
@@ -3,7 +3,7 @@ module Spree
3
3
  validates_attachment_presence :attachment
4
4
  validate :no_attachment_errors
5
5
 
6
- attr_accessible :attachment, :alt, :viewable_id
6
+ attr_accessible :alt, :attachment, :position, :viewable_id
7
7
 
8
8
  has_attached_file :attachment,
9
9
  :styles => { :mini => '48x48>', :small => '100x100>', :product => '240x240>', :large => '600x600>' },
@@ -14,8 +14,6 @@ module Spree
14
14
  # we need to look at the write-queue for images which have not been saved yet
15
15
  after_post_process :find_dimensions
16
16
 
17
- attr_accessible :attachment, :position
18
-
19
17
  # Load user defined paperclip settings
20
18
  if Spree::Config[:use_s3]
21
19
  s3_creds = { :access_key_id => Spree::Config[:s3_access_key], :secret_access_key => Spree::Config[:s3_secret], :bucket => Spree::Config[:s3_bucket] }
@@ -36,14 +36,14 @@ module Spree
36
36
  end
37
37
  # With card payments this represents authorizing the payment
38
38
  event :pend do
39
- transition :from => 'processing', :to => 'pending'
39
+ transition :from => ['checkout', 'processing'], :to => 'pending'
40
40
  end
41
41
  # With card payments this represents completing a purchase or capture transaction
42
42
  event :complete do
43
- transition :from => ['processing', 'pending'], :to => 'completed'
43
+ transition :from => ['processing', 'pending', 'checkout'], :to => 'completed'
44
44
  end
45
45
  event :void do
46
- transition :from => ['pending', 'completed'], :to => 'void'
46
+ transition :from => ['pending', 'completed', 'checkout'], :to => 'void'
47
47
  end
48
48
  end
49
49
 
@@ -28,7 +28,6 @@ module Spree
28
28
  end
29
29
 
30
30
  def capture!
31
- return unless pending?
32
31
  protect_from_connection_error do
33
32
  check_environment
34
33
 
@@ -117,7 +116,7 @@ module Spree
117
116
  if response.success?
118
117
  self.response_code = response.authorization
119
118
  self.avs_response = response.avs_result['code']
120
- self.send(success_state)
119
+ self.send("#{success_state}!")
121
120
  else
122
121
  self.send("#{failure_state}!")
123
122
  gateway_error(response)
@@ -59,7 +59,7 @@ module Spree
59
59
  accepts_nested_attributes_for :variants, :allow_destroy => true
60
60
 
61
61
  def variant_images
62
- Image.find_by_sql("SELECT #{Asset.quoted_table_name}.* FROM #{Asset.quoted_table_name} LEFT JOIN #{Variant.quoted_table_name} ON (#{Variant.quoted_table_name}.id = #{Asset.quoted_table_name}.viewable_id) WHERE (#{Variant.quoted_table_name}.product_id = #{self.id})")
62
+ Image.find_by_sql("SELECT #{Asset.quoted_table_name}.* FROM #{Asset.quoted_table_name} LEFT JOIN #{Variant.quoted_table_name} ON (#{Variant.quoted_table_name}.id = #{Asset.quoted_table_name}.viewable_id) WHERE (#{Variant.quoted_table_name}.product_id = #{self.id}) ORDER BY #{Asset.quoted_table_name}.position")
63
63
  end
64
64
 
65
65
  alias_method :images, :variant_images
@@ -159,7 +159,7 @@ module Spree
159
159
 
160
160
  # don't dup the actual variants, just the characterising types
161
161
  p.option_types = option_types if has_variants?
162
-
162
+
163
163
  # allow site to do some customization
164
164
  p.send(:duplicate_extra, self) if p.respond_to?(:duplicate_extra)
165
165
  p.save!
@@ -199,6 +199,22 @@ module Spree
199
199
  end
200
200
  end
201
201
 
202
+ def property(property_name)
203
+ return nil unless prop = properties.find_by_name(property_name)
204
+ product_properties.find_by_property_id(prop.id).try(:value)
205
+ end
206
+
207
+ def set_property(property_name, property_value)
208
+ prop = Spree::Property.find_or_initialize_by_name(property_name) do |p|
209
+ p.presentation = property_name
210
+ p.save!
211
+ end
212
+
213
+ prod_prop = Spree::ProductProperty.find_or_initialize_by_product_id_and_property_id(self.id, prop.id)
214
+ prod_prop.value = property_value
215
+ prod_prop.save!
216
+ end
217
+
202
218
  private
203
219
 
204
220
  # Builds variants from a hash of option types & values
@@ -3,5 +3,7 @@ module Spree
3
3
  validates :name, :presence => true
4
4
  has_many :products
5
5
  has_many :shipping_methods
6
+
7
+ attr_accessible :name
6
8
  end
7
9
  end
@@ -7,6 +7,8 @@ module Spree
7
7
 
8
8
  validates :country, :name, :presence => true
9
9
 
10
+ attr_accessible :name, :abbr
11
+
10
12
  def self.find_all_by_name_or_abbr(name_or_abbr)
11
13
  where('name = ? OR abbr = ?', name_or_abbr, name_or_abbr)
12
14
  end
@@ -6,7 +6,7 @@ module Spree
6
6
  has_and_belongs_to_many :products, :join_table => 'spree_products_taxons'
7
7
  before_create :set_permalink
8
8
 
9
- attr_accessible :name, :parent_id, :position, :description, :permalink
9
+ attr_accessible :name, :parent_id, :position, :icon, :description, :permalink
10
10
 
11
11
  validates :name, :presence => true
12
12
  has_attached_file :icon,
@@ -23,7 +23,7 @@
23
23
  <% @collection.each do |product| %>
24
24
  <tr <%= "style='color: red;'" if product.deleted? %> id="<%= spree_dom_id product %>" data-hook="admin_products_index_rows">
25
25
  <td><%= product.sku rescue '' %></td>
26
- <td><%= product.name rescue '' %></td>
26
+ <td><%= link_to product.try(:name), edit_admin_product_path(product) %></td>
27
27
  <td><%= number_to_currency product.price rescue '' %></td>
28
28
  <td class="actions" data-hook="admin_products_index_row_actions">
29
29
  <%= link_to_edit product, :class => 'edit' unless product.deleted? %>
@@ -1,3 +1,5 @@
1
+ <%= render :partial => 'spree/admin/shared/configuration_menu' %>
2
+
1
3
  <div class="toolbar" data-hook="toolbar">
2
4
  <ul class="actions">
3
5
  <li>
@@ -1,3 +1,13 @@
1
+ <div id="new_state" data-hook></div>
2
+ <div class="toolbar" data-hook="toolbar">
3
+ <ul class="actions">
4
+ <li id="new_state_link">
5
+ <%= button_link_to t(:new_state), new_admin_country_state_url(@country), {:remote => true, :icon => 'add', :id => 'new_state_link'} %>
6
+ </li>
7
+ </ul>
8
+ <br class="clear" />
9
+ </div>
10
+
1
11
  <table class="index" id='listing_states' data-hook>
2
12
  <thead>
3
13
  <tr data-hook="states_header">
@@ -7,10 +17,7 @@
7
17
  </tr>
8
18
  </thead>
9
19
  <tbody>
10
- <% @states.each do |state|
11
- @edit_url = admin_country_state_path(@country, state)
12
- @delete_url = admin_country_state_path(@country, state)
13
- %>
20
+ <% @states.each do |state| %>
14
21
  <tr id="<%= spree_dom_id state %>" data-hook="states_row">
15
22
  <td><%= state.name %></td>
16
23
  <td><%= state.abbr %></td>
@@ -26,7 +33,3 @@
26
33
  <% end %>
27
34
  </tbody>
28
35
  </table>
29
- <div id="new_state" data-hook></div>
30
- <p data-hook="buttons">
31
- <%= button_link_to t(:new_state), new_admin_country_state_url(@country), {:remote => true, :icon => 'add', :id => 'new_state_link'} %>
32
- </p>
@@ -2,6 +2,7 @@
2
2
 
3
3
  <%= render :partial => 'spree/shared/error_messages', :locals => { :target => @state } %>
4
4
 
5
+ <h3><%= t(:new_state) %></h3>
5
6
  <%= form_for [:admin, @country, @state] do |f| %>
6
7
  <%= render :partial => 'form', :locals => { :f => f } %>
7
8
  <%= render :partial => 'spree/admin/shared/new_resource_links' %>
@@ -10,6 +10,7 @@
10
10
 
11
11
  <% if products.any? %>
12
12
  <ul id="products" class="inline product-listing" data-hook>
13
+ <% reset_cycle('default') %>
13
14
  <% products.each do |product| %>
14
15
  <% if Spree::Config[:show_zero_stock_products] || product.has_stock? %>
15
16
  <li id="product_<%= product.id %>" class="columns three <%= cycle("alpha", "secondary", "", "omega secondary") %>" data-hook="products_list_item" itemscope itemtype="http://schema.org/Product">
@@ -16,6 +16,7 @@ en:
16
16
  new: New
17
17
  update: Update
18
18
  active: "Active"
19
+ activate: "Activate"
19
20
  activerecord:
20
21
  attributes:
21
22
  spree/address:
@@ -942,6 +943,8 @@ en:
942
943
  special_instructions: "Special Instructions"
943
944
  spree:
944
945
  date: Date
946
+ date_picker:
947
+ format: 'yy/mm/dd'
945
948
  time: Time
946
949
  spree_gateway_error_flash_for_checkout: "There was a problem with your payment information. Please check your information and try again."
947
950
  spree_inventory_error_flash_for_insufficient_quantity: "An item in your cart has become unavailable."
@@ -4,8 +4,6 @@
4
4
  // It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
5
5
  // the compiled file.
6
6
  //
7
- //= require jquery
8
- //= require jquery_ujs
9
7
  <% if options[:lib_name] == 'spree' %>
10
8
  //= require admin/spree_core
11
9
  //= require admin/spree_auth
@@ -1,5 +1,5 @@
1
1
  module Spree
2
2
  def self.version
3
- "1.1.0.rc2"
3
+ "1.1.0"
4
4
  end
5
5
  end
@@ -129,21 +129,19 @@ module Spree
129
129
  # The brand-finding code can be simplified if a few more named scopes were added to
130
130
  # the product properties model.
131
131
  if Spree::Property.table_exists? && @@brand_property
132
- Spree::Product.scope :selective_brand_any, lambda {|opts| Spree::Product.brand_any(opts) }
132
+ Spree::Product.scope :selective_brand_any, lambda {|*opts| Spree::Product.brand_any(*opts) }
133
133
 
134
134
  def ProductFilters.selective_brand_filter(taxon = nil)
135
135
  if taxon.nil?
136
136
  taxon = Spree::Taxonomy.first.root
137
137
  end
138
- all_brands = Spree::ProductProperty.where(:property_id => @@brand_property).map(&:value).uniq
139
138
  scope = Spree::ProductProperty.scoped(:conditions => ["property_id = ?", @@brand_property]).
140
139
  scoped(:joins => {:product => :taxons},
141
140
  :conditions => ["#{Spree::Taxon.table_name}.id in (?)", [taxon] + taxon.descendants])
142
- brands = scope.map {|p| p.value}
141
+ brands = scope.map {|p| p.value}.uniq
143
142
 
144
143
  { :name => "Applicable Brands",
145
144
  :scope => :selective_brand_any,
146
- :conds => Hash[*all_brands.map {|m| [m, "p_colour.value like '%#{m}%'"]}.flatten],
147
145
  :labels => brands.sort.map {|k| [k,k]}
148
146
  }
149
147
  end
metadata CHANGED
@@ -1,19 +1,19 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0.rc2
5
- prerelease: 6
4
+ version: 1.1.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Sean Schofield
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-20 00:00:00.000000000 Z
12
+ date: 2012-04-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: acts_as_list
16
- requirement: &70210733556780 !ruby/object:Gem::Requirement
16
+ requirement: &70132425348640 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - =
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.1.4
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70210733556780
24
+ version_requirements: *70132425348640
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nested_set
27
- requirement: &70210733555720 !ruby/object:Gem::Requirement
27
+ requirement: &70132425347980 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - =
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.7.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70210733555720
35
+ version_requirements: *70132425347980
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: jquery-rails
38
- requirement: &70210733554680 !ruby/object:Gem::Requirement
38
+ requirement: &70132425347340 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 2.0.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70210733554680
46
+ version_requirements: *70132425347340
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: highline
49
- requirement: &70210733553740 !ruby/object:Gem::Requirement
49
+ requirement: &70132425346420 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - =
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.6.11
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70210733553740
57
+ version_requirements: *70132425346420
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: state_machine
60
- requirement: &70210733569000 !ruby/object:Gem::Requirement
60
+ requirement: &70132425345560 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - =
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: 1.1.2
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70210733569000
68
+ version_requirements: *70132425345560
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: ffaker
71
- requirement: &70210733568120 !ruby/object:Gem::Requirement
71
+ requirement: &70132425360140 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: 1.12.0
77
77
  type: :runtime
78
78
  prerelease: false
79
- version_requirements: *70210733568120
79
+ version_requirements: *70132425360140
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: paperclip
82
- requirement: &70210733567180 !ruby/object:Gem::Requirement
82
+ requirement: &70132425357460 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ~>
@@ -87,10 +87,10 @@ dependencies:
87
87
  version: '2.7'
88
88
  type: :runtime
89
89
  prerelease: false
90
- version_requirements: *70210733567180
90
+ version_requirements: *70132425357460
91
91
  - !ruby/object:Gem::Dependency
92
92
  name: aws-sdk
93
- requirement: &70210733565980 !ruby/object:Gem::Requirement
93
+ requirement: &70132425354260 !ruby/object:Gem::Requirement
94
94
  none: false
95
95
  requirements:
96
96
  - - ~>
@@ -98,10 +98,10 @@ dependencies:
98
98
  version: 1.3.4
99
99
  type: :runtime
100
100
  prerelease: false
101
- version_requirements: *70210733565980
101
+ version_requirements: *70132425354260
102
102
  - !ruby/object:Gem::Dependency
103
103
  name: ransack
104
- requirement: &70210733564060 !ruby/object:Gem::Requirement
104
+ requirement: &70132425384220 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ~>
@@ -109,10 +109,10 @@ dependencies:
109
109
  version: 0.6.0
110
110
  type: :runtime
111
111
  prerelease: false
112
- version_requirements: *70210733564060
112
+ version_requirements: *70132425384220
113
113
  - !ruby/object:Gem::Dependency
114
114
  name: activemerchant
115
- requirement: &70210733562620 !ruby/object:Gem::Requirement
115
+ requirement: &70132425382540 !ruby/object:Gem::Requirement
116
116
  none: false
117
117
  requirements:
118
118
  - - =
@@ -120,10 +120,10 @@ dependencies:
120
120
  version: 1.20.4
121
121
  type: :runtime
122
122
  prerelease: false
123
- version_requirements: *70210733562620
123
+ version_requirements: *70132425382540
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: rails
126
- requirement: &70210733576920 !ruby/object:Gem::Requirement
126
+ requirement: &70132425381100 !ruby/object:Gem::Requirement
127
127
  none: false
128
128
  requirements:
129
129
  - - ! '>='
@@ -134,10 +134,10 @@ dependencies:
134
134
  version: 3.2.3
135
135
  type: :runtime
136
136
  prerelease: false
137
- version_requirements: *70210733576920
137
+ version_requirements: *70132425381100
138
138
  - !ruby/object:Gem::Dependency
139
139
  name: kaminari
140
- requirement: &70210733575300 !ruby/object:Gem::Requirement
140
+ requirement: &70132425392620 !ruby/object:Gem::Requirement
141
141
  none: false
142
142
  requirements:
143
143
  - - ! '>='
@@ -145,10 +145,10 @@ dependencies:
145
145
  version: 0.13.0
146
146
  type: :runtime
147
147
  prerelease: false
148
- version_requirements: *70210733575300
148
+ version_requirements: *70132425392620
149
149
  - !ruby/object:Gem::Dependency
150
150
  name: deface
151
- requirement: &70210733573900 !ruby/object:Gem::Requirement
151
+ requirement: &70132425387500 !ruby/object:Gem::Requirement
152
152
  none: false
153
153
  requirements:
154
154
  - - ! '>='
@@ -156,10 +156,10 @@ dependencies:
156
156
  version: 0.8.0
157
157
  type: :runtime
158
158
  prerelease: false
159
- version_requirements: *70210733573900
159
+ version_requirements: *70132425387500
160
160
  - !ruby/object:Gem::Dependency
161
161
  name: stringex
162
- requirement: &70210733572420 !ruby/object:Gem::Requirement
162
+ requirement: &70132425385100 !ruby/object:Gem::Requirement
163
163
  none: false
164
164
  requirements:
165
165
  - - ~>
@@ -167,7 +167,7 @@ dependencies:
167
167
  version: 1.3.2
168
168
  type: :runtime
169
169
  prerelease: false
170
- version_requirements: *70210733572420
170
+ version_requirements: *70132425385100
171
171
  description: Required dependency for Spree
172
172
  email: sean@spreecommerce.com
173
173
  executables: []
@@ -963,9 +963,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
963
963
  required_rubygems_version: !ruby/object:Gem::Requirement
964
964
  none: false
965
965
  requirements:
966
- - - ! '>'
966
+ - - ! '>='
967
967
  - !ruby/object:Gem::Version
968
- version: 1.3.1
968
+ version: '0'
969
+ segments:
970
+ - 0
971
+ hash: -2250496839152331982
969
972
  requirements:
970
973
  - none
971
974
  rubyforge_project: spree_core