spree_api 2.4.0 → 2.4.1

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: 2bebe4795d7751605292a86a15274c44a7c09ffc
4
- data.tar.gz: b062e7c4ab428d02d25ffdfaf5f18b25d046ddf1
3
+ metadata.gz: 3736aa7fa433082c6e7771f2e1850ff8f7e14a76
4
+ data.tar.gz: 51e229c7ed5a6d30f00ad17aa48ec58d8dc8a5b8
5
5
  SHA512:
6
- metadata.gz: 4f5db8d5263f27997792eb1e719df569caaa66cbb92f9a315df7fe545ffaffad417b1398d9f0051e2697dbe07f32edd1912fd16db16a3ed7e2ee7a992afb032c
7
- data.tar.gz: 7570289fbe966a629e81c814e18c0a27205c25176e74df4b54794b2217041118d6cc3162f3d3e37797007ce4a72458f85464a72166666dd9eb1cacdc84d7df3e
6
+ metadata.gz: e9d188802236b8f7c836f98df8183b028dc4de465080f0382b5119f1017bf11dd1735b43b9048773f10aea96bb95f3474ce86c93f12a736ccbb0068e597d47e2
7
+ data.tar.gz: a2e7952731ee46c9896bc562d74926abeb370a80adb8f58f446a8ebfdd7d5d4dd9300e60eda4e536c22db35f844126c0921f716a5b83e0d76594c0b97d1ce165
@@ -0,0 +1,55 @@
1
+ module Spree
2
+ module Api
3
+ class StoresController < Spree::Api::BaseController
4
+
5
+ before_filter :get_store, except: [:index, :create]
6
+
7
+ def index
8
+ authorize! :read, Store
9
+ @stores = Store.accessible_by(current_ability, :read).all
10
+ respond_with(@stores)
11
+ end
12
+
13
+ def create
14
+ authorize! :create, Store
15
+ @store = Store.new(store_params)
16
+ @store.code = params[:store][:code]
17
+ if @store.save
18
+ respond_with(@store, status: 201, default_template: :show)
19
+ else
20
+ invalid_resource!(@store)
21
+ end
22
+ end
23
+
24
+ def update
25
+ authorize! :update, @store
26
+ if @store.update_attributes(store_params)
27
+ respond_with(@store, status: 200, default_template: :show)
28
+ else
29
+ invalid_resource!(@store)
30
+ end
31
+ end
32
+
33
+ def show
34
+ authorize! :read, @store
35
+ respond_with(@store)
36
+ end
37
+
38
+ def destroy
39
+ authorize! :destroy, @store
40
+ @store.destroy
41
+ respond_with(@store, status: 204)
42
+ end
43
+
44
+ private
45
+
46
+ def get_store
47
+ @store = Store.find(params[:id])
48
+ end
49
+
50
+ def store_params
51
+ params.require(:store).permit(permitted_store_attributes)
52
+ end
53
+ end
54
+ end
55
+ end
@@ -28,7 +28,8 @@ module Spree
28
28
  :stock_location_attributes,
29
29
  :stock_movement_attributes,
30
30
  :stock_item_attributes,
31
- :promotion_attributes
31
+ :promotion_attributes,
32
+ :store_attributes
32
33
  ]
33
34
 
34
35
  mattr_reader *ATTRIBUTES
@@ -150,7 +151,13 @@ module Spree
150
151
  ]
151
152
 
152
153
  @@promotion_attributes = [
153
- :id, :name, :description, :expires_at, :starts_at, :type, :usage_limit, :match_policy, :code, :advertise, :path
154
+ :id, :name, :description, :expires_at, :starts_at, :type, :usage_limit,
155
+ :match_policy, :code, :advertise, :path
156
+ ]
157
+
158
+ @@store_attributes = [
159
+ :id, :name, :url, :meta_description, :meta_keywords, :seo_title,
160
+ :mail_from_address, :default_currency, :code, :default
154
161
  ]
155
162
 
156
163
  def variant_attributes
@@ -0,0 +1,4 @@
1
+ object false
2
+ child(@stores => :stores) do
3
+ attributes *store_attributes
4
+ end
@@ -0,0 +1,2 @@
1
+ object @store
2
+ attributes *store_attributes
data/config/routes.rb CHANGED
@@ -112,6 +112,8 @@ Spree::Core::Engine.add_routes do
112
112
  resources :stock_items
113
113
  end
114
114
 
115
+ resources :stores
116
+
115
117
  get '/config/money', to: 'config#money'
116
118
  get '/config', to: 'config#show'
117
119
 
@@ -0,0 +1,133 @@
1
+ require "spec_helper"
2
+
3
+ module Spree
4
+ describe Api::StoresController, type: :controller do
5
+ render_views
6
+
7
+ let!(:store) do
8
+ create(:store, name: "My Spree Store", url: "spreestore.example.com")
9
+ end
10
+
11
+ before do
12
+ stub_authentication!
13
+ end
14
+
15
+ context "as an admin" do
16
+ sign_in_as_admin!
17
+
18
+ let!(:non_default_store) do
19
+ create(:store,
20
+ name: "Extra Store",
21
+ url: "spreestore-5.example.com",
22
+ default: false
23
+ )
24
+ end
25
+
26
+ it "I can list the available stores" do
27
+ api_get :index
28
+ expect(json_response["stores"]).to eq([
29
+ {
30
+ "id" => store.id,
31
+ "name" => "My Spree Store",
32
+ "url" => "spreestore.example.com",
33
+ "meta_description" => nil,
34
+ "meta_keywords" => nil,
35
+ "seo_title" => nil,
36
+ "mail_from_address" => "spree@example.org",
37
+ "default_currency" => nil,
38
+ "code" => "spree_1",
39
+ "default" => true
40
+ },
41
+ {
42
+ "id" => non_default_store.id,
43
+ "name" => "Extra Store",
44
+ "url" => "spreestore-5.example.com",
45
+ "meta_description" => nil,
46
+ "meta_keywords" => nil,
47
+ "seo_title" => nil,
48
+ "mail_from_address" => "spree@example.org",
49
+ "default_currency" => nil,
50
+ "code" => "spree_2",
51
+ "default" => false
52
+ }
53
+ ])
54
+ end
55
+
56
+ it "I can get the store details" do
57
+ api_get :show, id: store.id
58
+ expect(json_response).to eq(
59
+ "id" => store.id,
60
+ "name" => "My Spree Store",
61
+ "url" => "spreestore.example.com",
62
+ "meta_description" => nil,
63
+ "meta_keywords" => nil,
64
+ "seo_title" => nil,
65
+ "mail_from_address" => "spree@example.org",
66
+ "default_currency" => nil,
67
+ "code" => store.code,
68
+ "default" => true
69
+ )
70
+ end
71
+
72
+ it "I can create a new store" do
73
+ store_hash = {
74
+ code: "spree123",
75
+ name: "Hack0rz",
76
+ url: "spree123.example.com",
77
+ mail_from_address: "me@example.com"
78
+ }
79
+ api_post :create, store: store_hash
80
+ expect(response.status).to eq(201)
81
+ end
82
+
83
+ it "I can update an existing store" do
84
+ store_hash = {
85
+ url: "spree123.example.com",
86
+ mail_from_address: "me@example.com"
87
+ }
88
+ api_put :update, id: store.id, store: store_hash
89
+ expect(response.status).to eq(200)
90
+ expect(store.reload.url).to eql "spree123.example.com"
91
+ expect(store.reload.mail_from_address).to eql "me@example.com"
92
+ end
93
+
94
+ context "deleting a store" do
95
+ it "will fail if it's the default Store" do
96
+ api_delete :destroy, id: store.id
97
+ expect(response.status).to eq(422)
98
+ expect(json_response["errors"]["base"]).to eql(
99
+ ["Cannot destroy the default Store."]
100
+ )
101
+ end
102
+
103
+ it "will destroy the store" do
104
+ api_delete :destroy, id: non_default_store.id
105
+ expect(response.status).to eq(204)
106
+ end
107
+ end
108
+ end
109
+
110
+ context "as an user" do
111
+
112
+ it "I cannot list all the stores" do
113
+ api_get :index
114
+ expect(response.status).to eq(401)
115
+ end
116
+
117
+ it "I cannot get the store details" do
118
+ api_get :show, id: store.id
119
+ expect(response.status).to eq(401)
120
+ end
121
+
122
+ it "I cannot create a new store" do
123
+ api_post :create, store: {}
124
+ expect(response.status).to eq(401)
125
+ end
126
+
127
+ it "I cannot update an existing store" do
128
+ api_put :update, id: store.id, store: {}
129
+ expect(response.status).to eq(401)
130
+ end
131
+ end
132
+ end
133
+ end
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.4.0
4
+ version: 2.4.1
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-11-20 00:00:00.000000000 Z
11
+ date: 2014-11-22 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.4.0
19
+ version: 2.4.1
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.4.0
26
+ version: 2.4.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rabl
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -88,6 +88,7 @@ files:
88
88
  - app/controllers/spree/api/stock_items_controller.rb
89
89
  - app/controllers/spree/api/stock_locations_controller.rb
90
90
  - app/controllers/spree/api/stock_movements_controller.rb
91
+ - app/controllers/spree/api/stores_controller.rb
91
92
  - app/controllers/spree/api/taxonomies_controller.rb
92
93
  - app/controllers/spree/api/taxons_controller.rb
93
94
  - app/controllers/spree/api/users_controller.rb
@@ -166,6 +167,8 @@ files:
166
167
  - app/views/spree/api/stock_locations/show.v1.rabl
167
168
  - app/views/spree/api/stock_movements/index.v1.rabl
168
169
  - app/views/spree/api/stock_movements/show.v1.rabl
170
+ - app/views/spree/api/stores/index.v1.rabl
171
+ - app/views/spree/api/stores/show.v1.rabl
169
172
  - app/views/spree/api/taxonomies/index.v1.rabl
170
173
  - app/views/spree/api/taxonomies/jstree.rabl
171
174
  - app/views/spree/api/taxonomies/nested.v1.rabl
@@ -228,6 +231,7 @@ files:
228
231
  - spec/controllers/spree/api/stock_items_controller_spec.rb
229
232
  - spec/controllers/spree/api/stock_locations_controller_spec.rb
230
233
  - spec/controllers/spree/api/stock_movements_controller_spec.rb
234
+ - spec/controllers/spree/api/stores_controller_spec.rb
231
235
  - spec/controllers/spree/api/taxonomies_controller_spec.rb
232
236
  - spec/controllers/spree/api/taxons_controller_spec.rb
233
237
  - spec/controllers/spree/api/unauthenticated_products_controller_spec.rb
@@ -292,6 +296,7 @@ test_files:
292
296
  - spec/controllers/spree/api/stock_items_controller_spec.rb
293
297
  - spec/controllers/spree/api/stock_locations_controller_spec.rb
294
298
  - spec/controllers/spree/api/stock_movements_controller_spec.rb
299
+ - spec/controllers/spree/api/stores_controller_spec.rb
295
300
  - spec/controllers/spree/api/taxonomies_controller_spec.rb
296
301
  - spec/controllers/spree/api/taxons_controller_spec.rb
297
302
  - spec/controllers/spree/api/unauthenticated_products_controller_spec.rb