spree_api 1.0.7 → 1.1.0.rc1

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/.gitignore +17 -0
  2. data/Gemfile +6 -0
  3. data/LICENSE +19 -23
  4. data/README.md +22 -10
  5. data/Rakefile +30 -0
  6. data/app/controllers/spree/api/v1/base_controller.rb +71 -0
  7. data/app/controllers/spree/api/v1/images_controller.rb +46 -0
  8. data/app/controllers/spree/api/v1/line_items_controller.rb +40 -0
  9. data/app/controllers/spree/api/v1/orders_controller.rb +53 -0
  10. data/app/controllers/spree/api/v1/products_controller.rb +46 -0
  11. data/app/controllers/spree/api/v1/variants_controller.rb +56 -0
  12. data/app/helpers/spree/api/api_helpers.rb +44 -0
  13. data/app/models/spree/line_item_decorator.rb +3 -0
  14. data/app/models/spree/option_value_decorator.rb +5 -0
  15. data/app/models/spree/order_decorator.rb +12 -0
  16. data/app/models/spree/user_decorator.rb +11 -0
  17. data/app/views/spree/api/v1/errors/invalid_api_key.rabl +2 -0
  18. data/app/views/spree/api/v1/errors/invalid_resource.rabl +3 -0
  19. data/app/views/spree/api/v1/errors/must_specify_api_key.rabl +2 -0
  20. data/app/views/spree/api/v1/errors/not_found.rabl +2 -0
  21. data/app/views/spree/api/v1/errors/unauthorized.rabl +2 -0
  22. data/app/views/spree/api/v1/images/show.rabl +2 -0
  23. data/app/views/spree/api/v1/line_items/new.rabl +3 -0
  24. data/app/views/spree/api/v1/line_items/show.rabl +5 -0
  25. data/app/views/spree/api/v1/orders/address.rabl +0 -0
  26. data/app/views/spree/api/v1/orders/cart.rabl +0 -0
  27. data/app/views/spree/api/v1/orders/complete.rabl +0 -0
  28. data/app/views/spree/api/v1/orders/could_not_transition.rabl +3 -0
  29. data/app/views/spree/api/v1/orders/delivery.rabl +3 -0
  30. data/app/views/spree/api/v1/orders/index.rabl +7 -0
  31. data/app/views/spree/api/v1/orders/invalid_shipping_method.rabl +2 -0
  32. data/app/views/spree/api/v1/orders/payment.rabl +0 -0
  33. data/app/views/spree/api/v1/orders/show.rabl +3 -0
  34. data/app/views/spree/api/v1/products/index.rabl +8 -0
  35. data/app/views/spree/api/v1/products/new.rabl +3 -0
  36. data/app/views/spree/api/v1/products/product.rabl +1 -0
  37. data/app/views/spree/api/v1/products/show.rabl +21 -0
  38. data/app/views/spree/api/v1/variants/index.rabl +3 -0
  39. data/app/views/spree/api/v1/variants/new.rabl +2 -0
  40. data/app/views/spree/api/v1/variants/show.rabl +3 -0
  41. data/app/views/spree/api/v1/variants/variant.rabl +1 -0
  42. data/config/locales/en.yml +11 -15
  43. data/config/routes.rb +14 -28
  44. data/db/migrate/{20100107141738_add_api_key_to_users.rb → 20100107141738_add_api_key_to_spree_users.rb} +1 -1
  45. data/lib/spree/api.rb +7 -4
  46. data/lib/spree/api/controller_setup.rb +27 -0
  47. data/lib/spree/api/engine.rb +3 -13
  48. data/lib/spree/api/version.rb +5 -0
  49. data/lib/spree_api.rb +0 -2
  50. data/script/rails +5 -0
  51. data/spec/controllers/spree/api/v1/base_controller_spec.rb +29 -0
  52. data/spec/controllers/spree/api/v1/images_controller_spec.rb +50 -0
  53. data/spec/controllers/spree/api/v1/line_items_controller_spec.rb +77 -0
  54. data/spec/controllers/spree/api/v1/orders_controller_spec.rb +148 -0
  55. data/spec/controllers/spree/api/v1/products_controller_spec.rb +159 -0
  56. data/spec/controllers/spree/api/v1/variants_controller_spec.rb +90 -0
  57. data/spec/fixtures/thinking-cat.jpg +0 -0
  58. data/spec/models/spree/order_spec.rb +18 -0
  59. data/spec/models/spree/user_spec.rb +19 -0
  60. data/spec/spec_helper.rb +28 -0
  61. data/spec/support/api_helpers.rb +68 -0
  62. data/spec/support/controller_hacks.rb +27 -0
  63. data/spree_api.gemspec +24 -0
  64. metadata +123 -56
  65. data/app/assets/javascripts/admin/spree.js +0 -4
  66. data/app/assets/javascripts/admin/spree_api.js +0 -2
  67. data/app/assets/javascripts/store/spree.js +0 -4
  68. data/app/assets/javascripts/store/spree_api.js +0 -2
  69. data/app/assets/stylesheets/admin/spree.css +0 -6
  70. data/app/assets/stylesheets/admin/spree_api.css +0 -4
  71. data/app/assets/stylesheets/store/spree.css +0 -6
  72. data/app/assets/stylesheets/store/spree_api.css +0 -4
  73. data/app/controllers/spree/admin/users_controller_decorator.rb +0 -17
  74. data/app/controllers/spree/api/base_controller.rb +0 -172
  75. data/app/controllers/spree/api/countries_controller.rb +0 -3
  76. data/app/controllers/spree/api/inventory_units_controller.rb +0 -18
  77. data/app/controllers/spree/api/line_items_controller.rb +0 -20
  78. data/app/controllers/spree/api/orders_controller.rb +0 -19
  79. data/app/controllers/spree/api/products_controller.rb +0 -14
  80. data/app/controllers/spree/api/shipments_controller.rb +0 -35
  81. data/app/controllers/spree/api/states_controller.rb +0 -8
  82. data/app/models/line_item_decorator.rb +0 -7
  83. data/app/models/order_decorator.rb +0 -9
  84. data/app/models/shipment_decorator.rb +0 -9
  85. data/app/models/user_decorator.rb +0 -19
  86. data/app/overrides/api_admin_user_edit_form.rb +0 -6
  87. data/app/views/spree/admin/users/_api_fields.html.erb +0 -16
Binary file
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ describe Order do
5
+ let(:user) { stub_model(User) }
6
+
7
+ it 'can build an order from API parameters' do
8
+
9
+ Spree::Variant.should_receive(:find).and_return(stub_model(Variant, :id => 1))
10
+ order = Order.build_from_api(user, { :line_items => { 1 => 5 }})
11
+
12
+ order.user.should == user
13
+ line_item = order.line_items.first
14
+ line_item.quantity.should == 5
15
+ line_item.variant_id.should == 1
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,19 @@
1
+ require 'spec_helper'
2
+
3
+ module Spree
4
+ describe User do
5
+ let(:user) { User.new }
6
+
7
+ it "can generate an API key" do
8
+ user.should_receive(:save!)
9
+ user.generate_api_key!
10
+ user.api_key.should_not be_blank
11
+ end
12
+
13
+ it "can clear an API key" do
14
+ user.should_receive(:save!)
15
+ user.clear_api_key!
16
+ user.api_key.should be_blank
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,28 @@
1
+ # This file is copied to spec/ when you run 'rails generate rspec:install'
2
+ ENV["RAILS_ENV"] ||= 'test'
3
+ require File.expand_path("../dummy/config/environment", __FILE__)
4
+ require 'rspec/rails'
5
+ require 'rspec/autorun'
6
+
7
+ # Requires supporting ruby files with custom matchers and macros, etc,
8
+ # in spec/support/ and its subdirectories.
9
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f}
10
+
11
+ require 'spree/core/testing_support/factories'
12
+
13
+ RSpec.configure do |config|
14
+ config.backtrace_clean_patterns = [/gems\/activesupport/, /gems\/actionpack/, /gems\/rspec/]
15
+
16
+ config.before(:suite) do
17
+ DatabaseCleaner.strategy = :transaction
18
+ DatabaseCleaner.clean_with(:truncation)
19
+ end
20
+
21
+ config.before(:each) do
22
+ DatabaseCleaner.start
23
+ end
24
+
25
+ config.after(:each) do
26
+ DatabaseCleaner.clean
27
+ end
28
+ end
@@ -0,0 +1,68 @@
1
+ module ApiHelpers
2
+ def json_response
3
+ JSON.parse(response.body)
4
+ end
5
+
6
+ def assert_unauthorized!
7
+ json_response.should == { "error" => "You are not authorized to perform that action." }
8
+ response.status.should == 401
9
+ end
10
+
11
+ def stub_authentication!
12
+ controller.stub :check_for_api_key
13
+ Spree::User.stub :find_by_api_key => current_api_user
14
+ end
15
+
16
+ # This method can be overriden (with a let block) inside a context
17
+ # For instance, if you wanted to have an admin user instead.
18
+ def current_api_user
19
+ @current_api_user ||= stub_model(Spree::User, :email => "spree@example.com")
20
+ end
21
+
22
+ def image(filename)
23
+ path = Pathname.new(__FILE__) + "../../../spec/fixtures" + filename
24
+ File.open(path)
25
+ end
26
+
27
+ def upload_image(filename)
28
+ fixture_file_upload(image(filename).path)
29
+ end
30
+ end
31
+
32
+ module ApiTestSetup
33
+ def sign_in_as_admin!
34
+ let!(:current_api_user) do
35
+ user = stub_model(Spree::User)
36
+ user.should_receive(:has_role?).any_number_of_times.with("admin").and_return(true)
37
+ user
38
+ end
39
+ end
40
+
41
+ # Default kaminari's pagination to a certain range
42
+ # Means that you don't need to create 25 objects to test pagination
43
+ def default_per_page(count)
44
+ before do
45
+ @current_default_per_page = Kaminari.config.default_per_page
46
+ Kaminari.config.default_per_page = 1
47
+ end
48
+
49
+ after do
50
+ Kaminari.config.default_per_page = @current_default_per_page
51
+ end
52
+ end
53
+ end
54
+
55
+ RSpec.configure do |config|
56
+ config.include ApiHelpers, :type => :controller
57
+ config.extend ApiTestSetup, :type => :controller
58
+ end
59
+
60
+ RSpec::Matchers.define :have_attributes do |expected_attributes|
61
+ match do |actual|
62
+ # actual is a Hash object representing an object, like this:
63
+ # { "product" => { "name" => "Product #1" } }
64
+ actual_attributes = actual.values.first.keys.map(&:to_sym)
65
+ expected_attributes.map(&:to_sym).all? { |attr| actual_attributes.include?(attr) }
66
+ end
67
+ end
68
+
@@ -0,0 +1,27 @@
1
+ require 'active_support/all'
2
+ module ControllerHacks
3
+ def api_get(action, params={}, session=nil, flash=nil)
4
+ api_process(action, params, session, flash, "GET")
5
+ end
6
+
7
+ def api_post(action, params={}, session=nil, flash=nil)
8
+ api_process(action, params, session, flash, "POST")
9
+ end
10
+
11
+ def api_put(action, params={}, session=nil, flash=nil)
12
+ api_process(action, params, session, flash, "PUT")
13
+ end
14
+
15
+ def api_delete(action, params={}, session=nil, flash=nil)
16
+ api_process(action, params, session, flash, "DELETE")
17
+ end
18
+
19
+ def api_process(action, params={}, session=nil, flash=nil, method="get")
20
+ scoping = respond_to?(:resource_scoping) ? resource_scoping : {}
21
+ process(action, params.merge(scoping).reverse_merge!(:use_route => :spree, :format => :json), session, { :foo => "bar" }, method)
22
+ end
23
+ end
24
+
25
+ RSpec.configure do |config|
26
+ config.include ControllerHacks, :type => :controller
27
+ end
data/spree_api.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ version = File.read(File.expand_path("../../SPREE_VERSION", __FILE__)).strip
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Ryan Bigg"]
6
+ gem.email = ["ryan@spreecommerce.com"]
7
+ gem.description = %q{Spree's API}
8
+ gem.summary = %q{Spree's API}
9
+ gem.homepage = ""
10
+
11
+ gem.files = `git ls-files`.split($\)
12
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
13
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
+ gem.name = "spree_api"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = version
17
+
18
+ gem.add_dependency 'spree_core', version
19
+ gem.add_dependency 'spree_auth', version
20
+ gem.add_dependency 'rabl', '0.6.5'
21
+
22
+ gem.add_development_dependency 'rspec-rails', '2.9.0'
23
+ gem.add_development_dependency 'database_cleaner'
24
+ end
metadata CHANGED
@@ -1,86 +1,142 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.7
5
- prerelease:
4
+ version: 1.1.0.rc1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
- - David North
8
+ - Ryan Bigg
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-04 00:00:00.000000000 Z
12
+ date: 2012-04-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: spree_core
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &70247364495880 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - '='
19
+ - - =
20
20
  - !ruby/object:Gem::Version
21
- version: 1.0.7
21
+ version: 1.1.0.rc1
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
24
+ version_requirements: *70247364495880
25
+ - !ruby/object:Gem::Dependency
26
+ name: spree_auth
27
+ requirement: &70247364495000 !ruby/object:Gem::Requirement
25
28
  none: false
26
29
  requirements:
27
- - - '='
30
+ - - =
28
31
  - !ruby/object:Gem::Version
29
- version: 1.0.7
32
+ version: 1.1.0.rc1
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70247364495000
30
36
  - !ruby/object:Gem::Dependency
31
- name: spree_auth
32
- requirement: !ruby/object:Gem::Requirement
37
+ name: rabl
38
+ requirement: &70247364494060 !ruby/object:Gem::Requirement
33
39
  none: false
34
40
  requirements:
35
- - - '='
41
+ - - =
36
42
  - !ruby/object:Gem::Version
37
- version: 1.0.7
43
+ version: 0.6.5
38
44
  type: :runtime
39
45
  prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
46
+ version_requirements: *70247364494060
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec-rails
49
+ requirement: &70247364509720 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - =
53
+ - !ruby/object:Gem::Version
54
+ version: 2.9.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70247364509720
58
+ - !ruby/object:Gem::Dependency
59
+ name: database_cleaner
60
+ requirement: &70247364509000 !ruby/object:Gem::Requirement
41
61
  none: false
42
62
  requirements:
43
- - - '='
63
+ - - ! '>='
44
64
  - !ruby/object:Gem::Version
45
- version: 1.0.7
46
- description: Required dependency for Spree
47
- email: david@spreecommerce.com
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70247364509000
69
+ description: Spree's API
70
+ email:
71
+ - ryan@spreecommerce.com
48
72
  executables: []
49
73
  extensions: []
50
74
  extra_rdoc_files: []
51
75
  files:
76
+ - .gitignore
77
+ - Gemfile
52
78
  - LICENSE
53
79
  - README.md
54
- - app/assets/javascripts/admin/spree.js
55
- - app/assets/javascripts/admin/spree_api.js
56
- - app/assets/javascripts/store/spree.js
57
- - app/assets/javascripts/store/spree_api.js
58
- - app/assets/stylesheets/admin/spree.css
59
- - app/assets/stylesheets/admin/spree_api.css
60
- - app/assets/stylesheets/store/spree.css
61
- - app/assets/stylesheets/store/spree_api.css
62
- - app/controllers/spree/admin/users_controller_decorator.rb
63
- - app/controllers/spree/api/base_controller.rb
64
- - app/controllers/spree/api/countries_controller.rb
65
- - app/controllers/spree/api/inventory_units_controller.rb
66
- - app/controllers/spree/api/line_items_controller.rb
67
- - app/controllers/spree/api/orders_controller.rb
68
- - app/controllers/spree/api/products_controller.rb
69
- - app/controllers/spree/api/shipments_controller.rb
70
- - app/controllers/spree/api/states_controller.rb
71
- - app/models/line_item_decorator.rb
72
- - app/models/order_decorator.rb
73
- - app/models/shipment_decorator.rb
74
- - app/models/user_decorator.rb
75
- - app/overrides/api_admin_user_edit_form.rb
76
- - app/views/spree/admin/users/_api_fields.html.erb
80
+ - Rakefile
81
+ - app/controllers/spree/api/v1/base_controller.rb
82
+ - app/controllers/spree/api/v1/images_controller.rb
83
+ - app/controllers/spree/api/v1/line_items_controller.rb
84
+ - app/controllers/spree/api/v1/orders_controller.rb
85
+ - app/controllers/spree/api/v1/products_controller.rb
86
+ - app/controllers/spree/api/v1/variants_controller.rb
87
+ - app/helpers/spree/api/api_helpers.rb
88
+ - app/models/spree/line_item_decorator.rb
89
+ - app/models/spree/option_value_decorator.rb
90
+ - app/models/spree/order_decorator.rb
91
+ - app/models/spree/user_decorator.rb
92
+ - app/views/spree/api/v1/errors/invalid_api_key.rabl
93
+ - app/views/spree/api/v1/errors/invalid_resource.rabl
94
+ - app/views/spree/api/v1/errors/must_specify_api_key.rabl
95
+ - app/views/spree/api/v1/errors/not_found.rabl
96
+ - app/views/spree/api/v1/errors/unauthorized.rabl
97
+ - app/views/spree/api/v1/images/show.rabl
98
+ - app/views/spree/api/v1/line_items/new.rabl
99
+ - app/views/spree/api/v1/line_items/show.rabl
100
+ - app/views/spree/api/v1/orders/address.rabl
101
+ - app/views/spree/api/v1/orders/cart.rabl
102
+ - app/views/spree/api/v1/orders/complete.rabl
103
+ - app/views/spree/api/v1/orders/could_not_transition.rabl
104
+ - app/views/spree/api/v1/orders/delivery.rabl
105
+ - app/views/spree/api/v1/orders/index.rabl
106
+ - app/views/spree/api/v1/orders/invalid_shipping_method.rabl
107
+ - app/views/spree/api/v1/orders/payment.rabl
108
+ - app/views/spree/api/v1/orders/show.rabl
109
+ - app/views/spree/api/v1/products/index.rabl
110
+ - app/views/spree/api/v1/products/new.rabl
111
+ - app/views/spree/api/v1/products/product.rabl
112
+ - app/views/spree/api/v1/products/show.rabl
113
+ - app/views/spree/api/v1/variants/index.rabl
114
+ - app/views/spree/api/v1/variants/new.rabl
115
+ - app/views/spree/api/v1/variants/show.rabl
116
+ - app/views/spree/api/v1/variants/variant.rabl
77
117
  - config/locales/en.yml
78
118
  - config/routes.rb
79
- - lib/spree/api/engine.rb
119
+ - db/migrate/20100107141738_add_api_key_to_spree_users.rb
80
120
  - lib/spree/api.rb
121
+ - lib/spree/api/controller_setup.rb
122
+ - lib/spree/api/engine.rb
123
+ - lib/spree/api/version.rb
81
124
  - lib/spree_api.rb
82
- - db/migrate/20100107141738_add_api_key_to_users.rb
83
- homepage: http://spreecommerce.com
125
+ - script/rails
126
+ - spec/controllers/spree/api/v1/base_controller_spec.rb
127
+ - spec/controllers/spree/api/v1/images_controller_spec.rb
128
+ - spec/controllers/spree/api/v1/line_items_controller_spec.rb
129
+ - spec/controllers/spree/api/v1/orders_controller_spec.rb
130
+ - spec/controllers/spree/api/v1/products_controller_spec.rb
131
+ - spec/controllers/spree/api/v1/variants_controller_spec.rb
132
+ - spec/fixtures/thinking-cat.jpg
133
+ - spec/models/spree/order_spec.rb
134
+ - spec/models/spree/user_spec.rb
135
+ - spec/spec_helper.rb
136
+ - spec/support/api_helpers.rb
137
+ - spec/support/controller_hacks.rb
138
+ - spree_api.gemspec
139
+ homepage: ''
84
140
  licenses: []
85
141
  post_install_message:
86
142
  rdoc_options: []
@@ -91,21 +147,32 @@ required_ruby_version: !ruby/object:Gem::Requirement
91
147
  requirements:
92
148
  - - ! '>='
93
149
  - !ruby/object:Gem::Version
94
- version: 1.8.7
150
+ version: '0'
151
+ segments:
152
+ - 0
153
+ hash: -3641673168610111779
95
154
  required_rubygems_version: !ruby/object:Gem::Requirement
96
155
  none: false
97
156
  requirements:
98
- - - ! '>='
157
+ - - ! '>'
99
158
  - !ruby/object:Gem::Version
100
- version: '0'
101
- segments:
102
- - 0
103
- hash: 343655292556891042
104
- requirements:
105
- - none
159
+ version: 1.3.1
160
+ requirements: []
106
161
  rubyforge_project:
107
- rubygems_version: 1.8.23
162
+ rubygems_version: 1.8.10
108
163
  signing_key:
109
164
  specification_version: 3
110
- summary: Provides RESTful access for Spree.
111
- test_files: []
165
+ summary: Spree's API
166
+ test_files:
167
+ - spec/controllers/spree/api/v1/base_controller_spec.rb
168
+ - spec/controllers/spree/api/v1/images_controller_spec.rb
169
+ - spec/controllers/spree/api/v1/line_items_controller_spec.rb
170
+ - spec/controllers/spree/api/v1/orders_controller_spec.rb
171
+ - spec/controllers/spree/api/v1/products_controller_spec.rb
172
+ - spec/controllers/spree/api/v1/variants_controller_spec.rb
173
+ - spec/fixtures/thinking-cat.jpg
174
+ - spec/models/spree/order_spec.rb
175
+ - spec/models/spree/user_spec.rb
176
+ - spec/spec_helper.rb
177
+ - spec/support/api_helpers.rb
178
+ - spec/support/controller_hacks.rb
@@ -1,4 +0,0 @@
1
- //= require admin/spree_core
2
- //= require admin/spree_auth
3
- //= require admin/spree_api
4
- //= require admin/spree_promo
@@ -1,2 +0,0 @@
1
- //= require admin/spree_core
2
- //= require admin/spree_auth
@@ -1,4 +0,0 @@
1
- //= require store/spree_core
2
- //= require store/spree_auth
3
- //= require store/spree_api
4
- //= require store/spree_promo
@@ -1,2 +0,0 @@
1
- //= require store/spree_core
2
- //= require store/spree_auth