spree_api 2.0.9 → 2.0.10

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b4f74781ea0934c3fecc2b6bfabf934360efce72
4
- data.tar.gz: fa04ae4fd788014ba5a0f23abf4ab5120fb04e68
3
+ metadata.gz: aa047ba09ae648902132c95077e64faad8eb1f63
4
+ data.tar.gz: e2fcbef05544ad3fd2f65f79fca38f175365800e
5
5
  SHA512:
6
- metadata.gz: 016441c31d86a96ebc8a362c8c254bcf682aa164a1fb418d961884ad7e92351ae863deca84299ba88b52c5c78f08aad9bfdb66d8b92bb58da82168ad1296c6c3
7
- data.tar.gz: 0f3762b3c07a6089b7055a68d2114234724ab2c0ab450702e40d0a77d66e953ac1596143b02e8d3bd7cd0c5619815df4d8c4b7f7e43af7140dc1ee7deda40a08
6
+ metadata.gz: 936aed8b8100f9f0e754109c74851a632abd2614e3c9a5951edf06aa782e7b00424bbebcb5665f45992a6295b66337dce4c64cc889e657d82656c2ac0a61ac21
7
+ data.tar.gz: f4af5a1402eebf511cb0911d26ff65877708f721682cc1e01452e7fb20cbe81ecb0f4e34741dfafa1c3ca35abe2ffc7f8281abcb27d69b59921c27d3faa989f4
data/CHANGELOG.md CHANGED
@@ -1 +1 @@
1
- ## Spree 2.0.9 (unreleased) ##
1
+ ## Spree 2.0.10 (unreleased) ##
@@ -6,6 +6,8 @@ module Spree
6
6
  include Spree::Api::ControllerSetup
7
7
  include Spree::Core::ControllerHelpers::SSL
8
8
  include ::ActionController::Head
9
+ include ::ActionController::Redirecting
10
+ include Spree::Core::Engine.routes.url_helpers
9
11
 
10
12
  self.responder = Spree::Api::Responders::AppResponder
11
13
 
@@ -15,6 +17,7 @@ module Spree
15
17
 
16
18
  before_filter :set_content_type
17
19
  before_filter :check_for_user_or_api_key, :if => :requires_authentication?
20
+ before_filter :authorize_for_order, :if => Proc.new { order_token.present? }
18
21
  before_filter :authenticate_user
19
22
  after_filter :set_jsonp_format
20
23
 
@@ -58,14 +61,14 @@ module Spree
58
61
  # User is already authenticated with Spree, make request this way instead.
59
62
  return true if @current_api_user = try_spree_current_user || !Spree::Api::Config[:requires_authentication]
60
63
 
61
- if api_key.blank?
64
+ if api_key.blank? && order_token.blank?
62
65
  render "spree/api/errors/must_specify_api_key", :status => 401 and return
63
66
  end
64
67
  end
65
68
 
66
69
  def authenticate_user
67
70
  unless @current_api_user
68
- if requires_authentication? || api_key.present?
71
+ if order_token.blank? && (requires_authentication? || api_key.present?)
69
72
  unless @current_api_user = Spree.user_class.find_by_spree_api_key(api_key.to_s)
70
73
  render "spree/api/errors/invalid_api_key", :status => 401 and return
71
74
  end
@@ -107,6 +110,10 @@ module Spree
107
110
  end
108
111
  helper_method :api_key
109
112
 
113
+ def order_token
114
+ request.headers["X-Spree-Order-Token"] || params[:order_token]
115
+ end
116
+
110
117
  def find_product(id)
111
118
  begin
112
119
  product_scope.find_by_permalink!(id.to_s)
@@ -128,6 +135,12 @@ module Spree
128
135
  scope.includes(:master)
129
136
  end
130
137
 
138
+ def authorize_for_order
139
+ @order = Spree::Order.find_by_number(params[:order_id] || params[:id])
140
+ unless @order.token == order_token
141
+ unauthorized
142
+ end
143
+ end
131
144
  end
132
145
  end
133
146
  end
@@ -32,8 +32,7 @@ module Spree
32
32
  end
33
33
 
34
34
  def show
35
- load_order
36
- respond_with(@order, default_template: 'spree/api/orders/show', status: 200)
35
+ redirect_to(api_order_path(params[:id]), status: 301)
37
36
  end
38
37
 
39
38
  def update
@@ -4,7 +4,7 @@ module Spree
4
4
  respond_to :json
5
5
 
6
6
  def create
7
- authorize! :read, order
7
+ authorize! :update, order, order_token
8
8
  @line_item = order.line_items.build(params[:line_item], :as => :api)
9
9
  if @line_item.save
10
10
  @order.ensure_updated_shipments
@@ -15,7 +15,7 @@ module Spree
15
15
  end
16
16
 
17
17
  def update
18
- authorize! :read, order
18
+ authorize! :update, order, order_token
19
19
  @line_item = order.line_items.find(params[:id])
20
20
  if @line_item.update_attributes(params[:line_item], :as => :api)
21
21
  @order.ensure_updated_shipments
@@ -26,7 +26,7 @@ module Spree
26
26
  end
27
27
 
28
28
  def destroy
29
- authorize! :read, order
29
+ authorize! :update, order, order_token
30
30
  @line_item = order.line_items.find(params[:id])
31
31
  @line_item.destroy
32
32
  respond_with(@line_item, :status => 204)
@@ -95,8 +95,7 @@ module Spree
95
95
  def destroy
96
96
  authorize! :delete, Product
97
97
  @product = find_product(params[:id])
98
- @product.update_attribute(:deleted_at, Time.now)
99
- @product.variants_including_master.update_all(:deleted_at => Time.now)
98
+ @product.destroy
100
99
  respond_with(@product, :status => 204)
101
100
  end
102
101
 
@@ -32,7 +32,7 @@ module Spree
32
32
  end
33
33
 
34
34
  def order_attributes
35
- [:id, :number, :item_total, :total, :ship_total, :state, :adjustment_total, :user_id, :created_at, :updated_at, :completed_at, :payment_total, :shipment_state, :payment_state, :email, :special_instructions, :token, :channel]
35
+ [:id, :number, :item_total, :total, :ship_total, :state, :adjustment_total, :user_id, :created_at, :updated_at, :completed_at, :payment_total, :shipment_state, :payment_state, :email, :special_instructions, :token, :channel, :currency]
36
36
  end
37
37
 
38
38
  def line_item_attributes
@@ -22,6 +22,16 @@ module Spree
22
22
  Spree::Config[:track_inventory_levels] = true
23
23
  end
24
24
 
25
+ context "GET 'show'" do
26
+ let(:order) { create(:order) }
27
+
28
+ it "redirects to Orders#show" do
29
+ api_get :show, :id => order.number
30
+ response.status.should == 301
31
+ response.should redirect_to("/api/orders/#{order.number}")
32
+ end
33
+ end
34
+
25
35
  context "POST 'create'" do
26
36
  it "creates a new order when no parameters are passed" do
27
37
  api_post :create
@@ -10,11 +10,8 @@ module Spree
10
10
  let(:attributes) { [:id, :quantity, :price, :variant] }
11
11
  let(:resource_scoping) { { :order_id => order.to_param } }
12
12
 
13
- before do
14
- stub_authentication!
15
- end
16
-
17
13
  it "can learn how to create a new line item" do
14
+ controller.stub :try_spree_current_user => current_api_user
18
15
  api_get :new
19
16
  json_response["attributes"].should == ["quantity", "price", "variant_id"]
20
17
  required_attributes = json_response["required_attributes"]
@@ -23,6 +20,7 @@ module Spree
23
20
 
24
21
  context "as the order owner" do
25
22
  before do
23
+ controller.stub :try_spree_current_user => current_api_user
26
24
  Order.any_instance.stub :user => current_api_user
27
25
  end
28
26
 
@@ -68,6 +66,11 @@ module Spree
68
66
  end
69
67
 
70
68
  context "as just another user" do
69
+ before do
70
+ user = create(:user)
71
+ controller.stub :try_spree_current_user => user
72
+ end
73
+
71
74
  it "cannot add a new line item to the order" do
72
75
  api_post :create, :line_item => { :variant_id => product.master.to_param, :quantity => 1 }
73
76
  assert_unauthorized!
@@ -11,7 +11,9 @@ module Spree
11
11
  before { stub_authentication! }
12
12
 
13
13
  context "as a normal user" do
14
- before { Spree::LegacyUser.stub :find_by_spree_api_key => user }
14
+ before do
15
+ controller.stub :current_api_user => user
16
+ end
15
17
 
16
18
  it "can get own details" do
17
19
  api_get :show, :id => user.id
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.9
4
+ version: 2.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Bigg
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-18 00:00:00.000000000 Z
11
+ date: 2014-03-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree_core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 2.0.9
19
+ version: 2.0.10
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 2.0.9
26
+ version: 2.0.10
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rabl
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -246,7 +246,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
246
246
  version: '0'
247
247
  requirements: []
248
248
  rubyforge_project:
249
- rubygems_version: 2.2.0
249
+ rubygems_version: 2.2.2
250
250
  signing_key:
251
251
  specification_version: 4
252
252
  summary: Spree's API