bigcommerce 0.0.5 → 0.0.6

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.
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
- BigCommerce API V2 - Ruby Client
1
+ Bigcommerce API V2 - Ruby Client
2
2
  ================================
3
3
 
4
- This library provides a wrapper around the BigCommerce REST API for use within
4
+ This library provides a wrapper around the Bigcommerce REST API for use within
5
5
  Ruby apps or via the console.
6
6
 
7
7
  Note
@@ -19,7 +19,7 @@ Requirements
19
19
 
20
20
  To connect to the API, you need the following credentials:
21
21
 
22
- - Secure URL pointing to a BigCommerce store
22
+ - Secure URL pointing to a Bigcommerce store
23
23
  - Username of an authorized admin user of the store
24
24
  - API key for the user
25
25
 
@@ -46,7 +46,7 @@ follows:
46
46
  ```
47
47
  require 'bigcommerce'
48
48
 
49
- api = BigCommerce::Api.new({
49
+ api = Bigcommerce::Api.new({
50
50
  :store_url => "https://store.mybigcommerce.com",
51
51
  :username => "admin",
52
52
  :api_key => "d81aada4c19c34d913e18f07fd7f36ca"
@@ -71,7 +71,7 @@ The API object acts as a gateway to all top level resources in the V2 API.
71
71
  ```
72
72
  $ irb
73
73
  >
74
- > api = BigCommerce::Api.new(...)
74
+ > api = Bigcommerce::Api.new(...)
75
75
  >
76
76
  > api.get_products.each { |product| puts product.name }
77
77
  >
@@ -83,7 +83,7 @@ $ irb
83
83
  > category.name = "Laptops"
84
84
  > category.update
85
85
  >
86
- > brand = BigCommerce::Api::Brand.new
86
+ > brand = Bigcommerce::Api::Brand.new
87
87
  > brand.name = "Samsung"
88
88
  > brand.create
89
89
  >
data/Rakefile CHANGED
@@ -1,16 +1,9 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'ci/reporter/rake/rspec'
3
+ require 'rspec/core/rake_task'
1
4
 
2
- require 'lib/bigcommerce'
3
-
4
- task :build do
5
- sh "gem build bigcommerce.gemspec"
6
- end
7
-
8
- task :publish => :build do
9
- sh "gem push bigcommerce-#{BigCommerce::VERSION}.gem"
10
- end
11
-
12
- task :clean do
13
- sh "rm *.gem"
5
+ RSpec::Core::RakeTask.new(:spec) do |spec|
6
+ spec.pattern = 'spec/**/*_spec.rb'
14
7
  end
15
8
 
16
- task :release => [:publish, :clean]
9
+ task :default => ['ci:setup:rspec', :spec]
data/bigcommerce.gemspec CHANGED
@@ -1,16 +1,23 @@
1
-
2
- require 'lib/bigcommerce'
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/bigcommerce/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
- s.name = "bigcommerce"
6
- s.version = BigCommerce::VERSION
5
+ s.add_dependency('activesupport')
6
+ s.add_dependency('json')
7
+ s.add_development_dependency("ci_reporter")
8
+ s.add_development_dependency("fakeweb")
9
+ s.add_development_dependency("mocha")
10
+ s.add_development_dependency("rake")
11
+ s.add_development_dependency("rspec", '~> 2.11')
12
+ s.authors = ["Bigcommerce"]
7
13
  s.date = Time.now.strftime("%Y-%m-%d")
8
- s.summary = "Enables Ruby applications to communicate with the BigCommerce API"
14
+ s.description = "Enables Ruby applications to communicate with the Bigcommerce API V2."
9
15
  s.email = "dev-accounts@bigcommerce.com"
10
- s.homepage = "http://github.com/bigcommerce/bigcommerce-api-ruby"
11
- s.description = "Enables Ruby applications to communicate with the BigCommerce API V2 (currently in beta trial)."
16
+ s.files = ["LICENSE", "Rakefile", "README.md", "bigcommerce.gemspec"] + Dir['./**/*.rb'] + Dir['./**/*.crt']
12
17
  s.has_rdoc = false
13
- s.authors = ["BigCommerce"]
14
- s.files = ["LICENSE", "Rakefile", "README.md", "bigcommerce.gemspec"] + Dir['**/*.rb'] + Dir['**/*.crt']
15
- s.add_dependency('json')
16
- end
18
+ s.homepage = "http://github.com/bigcommerce/bigcommerce-api-ruby"
19
+ s.name = "bigcommerce"
20
+ s.summary = "Enables Ruby applications to communicate with the Bigcommerce API"
21
+ s.test_files = Dir.glob('spec/**/*_spec.rb')
22
+ s.version = Bigcommerce::VERSION
23
+ end
@@ -0,0 +1,2 @@
1
+ # Support legacy naming
2
+ require 'bigcommerce'
data/lib/bigcommerce.rb CHANGED
@@ -1,13 +1,7 @@
1
1
  require "cgi"
2
- require "uri"
3
- require "net/https"
4
-
5
- require "rubygems"
6
2
  require "json"
7
-
8
- require File.join(File.dirname(__FILE__), 'bigcommerce', 'api')
9
- require File.join(File.dirname(__FILE__), 'bigcommerce', 'connection')
10
-
11
- module BigCommerce
12
- VERSION = "0.0.5"
13
- end
3
+ require "net/https"
4
+ require "uri"
5
+ require 'bigcommerce/api'
6
+ require 'bigcommerce/connection'
7
+ require 'bigcommerce/version'
@@ -1,91 +1,135 @@
1
- module BigCommerce
2
- class Api
3
-
4
- def initialize(configuration={})
5
- @connection = Connection.new(configuration)
6
- end
7
-
8
- def store_url=(store_url)
9
- @connection.store_url = store_url
10
- end
11
-
12
- def username=(username)
13
- @connection.username = username
14
- end
15
-
16
- def api_key=(api_key)
17
- @connection.api_key = api_key
18
- end
19
-
20
- def verify_peer=(verify)
21
- @connection.verify_peer = verify
22
- end
23
-
24
- def ca_file=(path)
25
- @connection.ca_file = path
26
- end
27
-
28
- def get_time
29
- @connection.get '/time'
30
- end
31
-
32
- def get_products
33
- @connection.get '/products'
34
- end
35
-
36
- def get_product(id)
37
- @connection.get '/products/' + id
38
- end
39
-
40
- def get_categories
41
- @connection.get '/categories'
42
- end
43
-
44
- def get_category(id)
45
- @connection.get '/categories/' + id
46
- end
47
-
48
- def get_orders
49
- @connection.get('/orders')
50
- end
51
-
52
- def get_orders_by_date(date)
53
- @connection.get '/orders?min_date_created=' + CGI::escape(date)
54
- end
55
-
56
- def get_orders_count
57
- get_count @connection.get '/orders/count'
58
- end
59
-
60
- def get_order(id)
61
- @connection.get '/orders/' + id
62
- end
63
-
64
- def get_order_products(id)
65
- @connection.get '/orders/' + id + '/products'
66
- end
67
-
68
- def get_customers
69
- @connection.get '/customers'
70
- end
71
-
72
- def get_customer(id)
73
- @connection.get '/customers/' + id
74
- end
75
-
76
- private
77
-
78
- def get_count(result)
79
- result["count"]
80
- end
81
-
82
- def get_resource(result)
83
-
84
- end
85
-
86
- def get_collection(result)
87
-
1
+ module Bigcommerce
2
+ class Api
3
+
4
+ def initialize(configuration={})
5
+ @connection = Connection.new(configuration)
6
+ end
7
+
8
+ # Added getter to ensure configuration is correct
9
+ def connection
10
+ @connection
11
+ end
12
+
13
+ def store_url=(store_url)
14
+ @connection.store_url = store_url
15
+ end
16
+
17
+ def username=(username)
18
+ @connection.username = username
19
+ end
20
+
21
+ def api_key=(api_key)
22
+ @connection.api_key = api_key
23
+ end
24
+
25
+ def verify_peer=(verify)
26
+ @connection.verify_peer = verify
27
+ end
28
+
29
+ def ca_file=(path)
30
+ @connection.ca_file = path
31
+ end
32
+
33
+ # Returns the date formatted as
34
+ # RFC 2822 string
35
+ def to_rfc2822(datetime)
36
+ datetime.strftime("%a, %d %b %Y %H:%M:%S %z")
37
+ end
38
+
39
+ def get_time
40
+ @connection.get '/time'
41
+ end
42
+
43
+ def get_products(params={})
44
+ @connection.get '/products'
45
+ end
46
+
47
+ def get_products_count
48
+ @connection.get '/products/count/'
49
+ end
50
+
51
+ def get_brands
52
+ @connection.get '/brands'
53
+ end
54
+
55
+ def get_product(id)
56
+ @connection.get '/products/' + id.to_s
57
+ end
58
+
59
+ def get_categories
60
+ @connection.get '/categories'
61
+ end
62
+
63
+ def get_categories_count
64
+ @connection.get '/categories/count/'
65
+ end
66
+
67
+ def get_category(id)
68
+ @connection.get '/categories/' + id.to_s
69
+ end
70
+
71
+ def get_orders(params={})
72
+ @connection.get('/orders', :params => params)
73
+ end
74
+
75
+ def get_orders_by_date(date, params={})
76
+ if date.is_a?(String)
77
+ date = DateTime.parse(date)
88
78
  end
79
+ date = to_rfc2822(date)
80
+ @connection.get('/orders', :params => params.merge!(:min_date_created => CGI::escape(date)))
81
+ end
89
82
 
90
- end
91
- end
83
+ def get_orders_count
84
+ get_count @connection.get '/orders/count'
85
+ end
86
+
87
+ def get_order(id)
88
+ @connection.get '/orders/' + id.to_s
89
+ end
90
+
91
+ def get_order_products(id)
92
+ @connection.get '/orders/' + id.to_s + '/products'
93
+ end
94
+
95
+ def get_orders_modified_since(datetime)
96
+ @connection.get('/orders', :headers => {'If-Modified-Since' => CGI::escape(to_rfc2822(datetime))})
97
+ end
98
+
99
+ def get_customers(_filters = {})
100
+ url_filters = _filters.map{|k,v| "#{k}=#{v}"}.join("&")
101
+ @connection.get "/customers#{url_filters.present? ? ("?" + url_filters) : ""}"
102
+ end
103
+
104
+ def get_customer(id)
105
+ @connection.get '/customers/' + id.to_s
106
+ end
107
+
108
+ def get_customer_count
109
+ @connection.get '/customers/count'
110
+ end
111
+
112
+ def create_product(attributes)
113
+ @connection.post('/products', :body => attributes.to_xml(:root => 'product'))
114
+ end
115
+
116
+ def update_product(id, attributes)
117
+ @connection.put("/products/#{id}", :body => attributes.to_xml(:root => 'product'))
118
+ end
119
+
120
+ private
121
+
122
+ def get_count(result)
123
+ result["count"]
124
+ end
125
+
126
+ def get_resource(result)
127
+
128
+ end
129
+
130
+ def get_collection(result)
131
+
132
+ end
133
+
134
+ end
135
+ end
@@ -1,86 +1,107 @@
1
- module BigCommerce
2
- class Connection
3
-
4
- def initialize(configuration)
5
- @configuration = configuration
6
- end
7
-
8
- def store_url=(store_url)
9
- @configuration[:store_url] = store_url
10
- end
11
-
12
- def username=(username)
13
- @configuration[:username] = username
14
- end
15
-
16
- def api_key=(api_key)
17
- @configuration[:api_key] = api_key
18
- end
19
-
20
- def verify_peer=(verify)
21
- @configuration[:verify_peer] = verify
22
- end
23
-
24
- def ca_file=(path)
25
- @configuration.ca_file = path
26
- end
27
-
28
- def get(path)
29
- request(:get, path)
30
- end
31
-
32
- def post(path)
33
- request(:post, path)
34
- end
35
-
36
- def put(path)
37
- request(:put, path)
38
- end
39
-
40
- def delete(path)
41
- request(:delete, path)
42
- end
43
-
44
- def request(method, path, body = nil, params = {})
45
-
46
- url = @configuration[:store_url] + '/api/v2' + path
47
-
48
- uri = URI.parse(url)
49
-
50
- http = Net::HTTP.new(uri.host, uri.port)
1
+ module Bigcommerce
2
+ class Connection
3
+
4
+ def initialize(configuration)
5
+ @configuration = configuration
6
+ end
7
+
8
+ def store_url=(store_url)
9
+ @configuration[:store_url] = store_url
10
+ end
11
+
12
+ def username=(username)
13
+ @configuration[:username] = username
14
+ end
15
+
16
+ def api_key=(api_key)
17
+ @configuration[:api_key] = api_key
18
+ end
19
+
20
+ def verify_peer=(verify)
21
+ @configuration[:verify_peer] = verify
22
+ end
23
+
24
+ def ca_file=(path)
25
+ @configuration.ca_file = path
26
+ end
27
+
28
+ def get(path, options = {})
29
+ request(:get, path, options)
30
+ end
31
+
32
+ def post(path, options = {})
33
+ request(:post, path, options)
34
+ end
35
+
36
+ def put(path, options = {})
37
+ request(:put, path, options)
38
+ end
39
+
40
+ def delete(path, options = {})
41
+ request(:delete, path, options)
42
+ end
43
+
44
+ def request(method, path, options = {})
45
+ body, params = options.values_at(:body, :params)
46
+ headers = options[:headers] || {}
47
+ url = @configuration[:store_url] + '/api/v2' + path
48
+ param_string = hash_to_params(params) unless params.nil? || params.empty?
49
+
50
+ unless (param_string.nil? || param_string.empty?)
51
+ uri = URI.parse("#{url}?#{param_string}")
52
+ else
53
+ uri = URI.parse(url)
54
+ end
55
+
56
+ http = Net::HTTP.new(uri.host, uri.port)
51
57
  http.use_ssl = true
52
-
58
+
53
59
  if @configuration.has_key?(:verify_peer) && @configuration[:verify_peer]
54
- http.verify_mode = OpenSSL::SSL::VERIFY_PEER
60
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
55
61
  else
56
62
  http.verify_mode = OpenSSL::SSL::VERIFY_NONE
57
63
  end
58
-
64
+
59
65
  http.ca_file = @configuration[:ca_path] if @configuration.has_key?(:ca_path)
60
66
 
61
- request = case method
62
- when :get then Net::HTTP::Get.new(uri.request_uri)
63
- when :post then Net::HTTP::Post.new(uri.request_uri)
64
- when :put then Net::HTTP::Put.new(uri.request_uri)
65
- when :delete then Net::HTTP::Delete.new(uri.request_uri)
66
- end
67
+ request = case method
68
+ when :get then
69
+ Net::HTTP::Get.new(uri.request_uri)
70
+ when :post then
71
+ Net::HTTP::Post.new(uri.request_uri)
72
+ when :put then
73
+ Net::HTTP::Put.new(uri.request_uri)
74
+ when :delete then
75
+ Net::HTTP::Delete.new(uri.request_uri)
76
+ end
77
+
78
+ request.basic_auth(@configuration[:username], @configuration[:api_key])
79
+ request.add_field 'Accept', 'application/json'
80
+ request.add_field 'Content-Type', 'application/json'
81
+ headers.each { |k,v| request.add_field(k, v) }
82
+
83
+ response = http.request(request)
84
+
85
+ return case response
86
+ when Net::HTTPSuccess, Net::HTTPRedirection
87
+ JSON.parse(response.body || "{}")
88
+ else
89
+ false
90
+ end
91
+ end
92
+
93
+ def hash_to_params(hash)
94
+ return nil if hash.nil? || hash.empty?
67
95
 
68
- request.basic_auth(@configuration[:username], @configuration[:api_key])
69
- request.add_field 'Accept', 'application/json'
70
- request.add_field 'Content-Type', 'application/json'
96
+ # convert the hash to URL params
97
+ return hash.map {|pair| pair.join("=")}.join("&")
71
98
 
72
- response = http.request(request)
73
99
 
74
- return case response
75
- when Net::HTTPSuccess, Net::HTTPRedirection
76
- JSON.parse(response.body || "{}")
77
- else false
78
- end
79
- end
100
+ end
101
+ end
80
102
 
81
- end
82
103
 
83
- class HttpError < Exception
104
+ class HttpError < Exception
84
105
 
85
- end
86
- end
106
+ end
107
+ end
@@ -0,0 +1,6 @@
1
+ module Bigcommerce
2
+ major = 0
3
+ minor = 0
4
+ patch = 6
5
+ VERSION = [major, minor, patch].join('.') unless defined? Bigcommerce::VERSION
6
+ end
@@ -0,0 +1,112 @@
1
+ require 'spec_helper'
2
+
3
+ describe Bigcommerce::Api do
4
+ before do
5
+ FakeWeb.allow_net_connect = false
6
+ FakeWeb.register_uri(:get, %r|https://test:12345@store-12345.mybigcommerce.com/api/v2/orders|, :body => load_json_fixture('order'), :status => 200, :content_type => "text/json")
7
+ FakeWeb.register_uri(:get, %r|https://test:12345@store-12345.mybigcommerce.com/api/v2/time|, :body => load_json_fixture('time'), :status => 200, :content_type => "text/json")
8
+ end
9
+ after do
10
+ FakeWeb.clean_registry
11
+ end
12
+
13
+ let(:api) do
14
+ Bigcommerce::Api.new({
15
+ :store_url => "https://store-12345.mybigcommerce.com",
16
+ :username => "test", :api_key => "12345"
17
+ })
18
+ end
19
+
20
+ let(:rfc2822_datetime) { "Tue, 13 Mar 2012 12:45:26 +0000" }
21
+ let(:rfc2822_date) { "Mon, 12 Mar 2012 00:00:00 +0000" }
22
+
23
+ describe "Time" do
24
+ it "converts times to RFC 2822 format" do
25
+ api.to_rfc2822(DateTime.parse('2012-03-13 12:45:26 +0000')).should eql rfc2822_datetime
26
+ end
27
+ it "converts dates to RFC 2822 format" do
28
+ api.to_rfc2822(DateTime.parse('2012-03-12 00:00:00 +0000')).should eql rfc2822_date
29
+ end
30
+ it "retrieves the current time from the store" do
31
+ api.connection.should_receive(:get).once.with("/time")
32
+ api.get_time
33
+ end
34
+ end
35
+
36
+ describe "Orders" do
37
+ it "retrieves an order by ID" do
38
+ api.connection.should_receive(:get).once.with("/orders/100")
39
+ api.get_order(100)
40
+ end
41
+
42
+ it "retrieves orders" do
43
+ api.connection.should_receive(:get).once.with("/orders", :params => {})
44
+ api.get_orders
45
+ end
46
+
47
+ it "retrieves orders with pagination" do
48
+ api.connection.should_receive(:get).once.with("/orders", :params => {:page => 2})
49
+ api.get_orders(:page => 2)
50
+ end
51
+
52
+ it "retrieves orders with limit" do
53
+ api.connection.should_receive(:get).once.with("/orders", :params => {:limit => 10})
54
+ api.get_orders(:limit => 10)
55
+ end
56
+
57
+ it "retrieves orders with pagination and limit" do
58
+ api.connection.should_receive(:get).once.with("/orders", :params => {:limit => 10, :page => 2})
59
+ api.get_orders(:limit => 10, :page => 2)
60
+ end
61
+
62
+ it "converts from DateTime when retrieving orders by date" do
63
+ api.connection.should_receive(:get).once.with("/orders", :params => {:min_date_created => CGI::escape(rfc2822_datetime)})
64
+ api.get_orders_by_date(DateTime.parse('2012-03-13 12:45:26 GMT'))
65
+ end
66
+
67
+ it "converts from DateTime when retrieving orders by date with pagination" do
68
+ api.connection.should_receive(:get).once.with("/orders", :params => {:min_date_created => CGI::escape(rfc2822_datetime), :page => 2})
69
+ api.get_orders_by_date(DateTime.parse('2012-03-13 12:45:26 GMT'), :page => 2)
70
+ end
71
+
72
+ it "converts from Date when retrieving orders by date" do
73
+ api.connection.should_receive(:get).once.with("/orders", :params => {:min_date_created => CGI::escape(rfc2822_date)})
74
+ api.get_orders_by_date(Date.parse("2012-03-12"))
75
+ end
76
+
77
+ it "converts from a datetime string when retrieving orders by date" do
78
+ api.connection.should_receive(:get).once.with("/orders", :params => {:min_date_created=> CGI::escape(rfc2822_datetime)})
79
+ api.connection.should_receive(:get).once.with("/orders", :params => {:min_date_created=> CGI::escape(rfc2822_date)})
80
+
81
+ api.get_orders_by_date('2012-03-13 12:45:26 GMT')
82
+ api.get_orders_by_date('2012-03-12')
83
+ end
84
+
85
+ describe '#get_orders_modified_since' do
86
+ it "retrieves orders modified since date-time" do
87
+ api.connection.should_receive(:get).with('/orders', :headers => {'If-Modified-Since' => CGI::escape(rfc2822_datetime)})
88
+ api.get_orders_modified_since(DateTime.parse(rfc2822_datetime))
89
+ end
90
+ end
91
+
92
+ describe "Products" do
93
+ describe '#create_product' do
94
+ before { attributes.stub(:to_xml).with(:root => 'product') { 'product_xml' } }
95
+ let(:attributes) { stub(:attributes) }
96
+ it "creates product with passed attributes" do
97
+ api.connection.should_receive(:post).with('/products', :body => 'product_xml')
98
+ api.create_product(attributes)
99
+ end
100
+ end
101
+
102
+ describe '#update_product' do
103
+ before { attributes.stub(:to_xml).with(:root => 'product') { 'product_xml' } }
104
+ let(:attributes) { stub(:attributes) }
105
+ it "updates product with passed attributes" do
106
+ api.connection.should_receive(:put).with('/products/123', :body => 'product_xml')
107
+ api.update_product(123, attributes)
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,91 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for "request method accepting optional params and headers" do
4
+ it "sends request with no params" do
5
+ connection.should_receive(:request).once.with(http_method, path, {})
6
+ connection.send(http_method, path)
7
+ end
8
+
9
+ it "sends request with params" do
10
+ connection.should_receive(:request).once.with(http_method, path, :params => {:page => 3})
11
+ connection.send(http_method, path, :params => {:page => 3})
12
+ end
13
+
14
+ it "sends request with headers" do
15
+ connection.should_receive(:request).once.with(http_method, "/orders", :headers => {'Some-Header' => 'abc'})
16
+ connection.send(http_method, path, :headers => {'Some-Header' => 'abc'})
17
+ end
18
+ end
19
+
20
+ describe Bigcommerce::Connection do
21
+ before { FakeWeb.allow_net_connect = false }
22
+ after { FakeWeb.clean_registry }
23
+ subject(:connection) do
24
+ Bigcommerce::Connection.new(
25
+ :store_url => "https://store-12345.mybigcommerce.com",
26
+ :username => "test",
27
+ :api_key => "12345"
28
+ )
29
+ end
30
+
31
+ [:get, :post, :put, :delete].each do |http_method|
32
+ let(:path) { '/orders' }
33
+ describe "##{http_method}" do
34
+ eval "let(:http_method) { :#{http_method} }"
35
+ it_behaves_like "request method accepting optional params and headers"
36
+ end
37
+
38
+ describe '#request' do
39
+ context "when #{http_method.to_s.upcase} request" do
40
+ before do
41
+ http_class.stub(:new) { request }
42
+ Net::HTTP.stub(:new) { stub.as_null_object }
43
+ end
44
+ let(:http_class) { eval "Net::HTTP::#{http_method.to_s.gsub(/^(.)/) { $1.upcase }}" }
45
+ let(:args) { [http_method, path, options] }
46
+ let(:body) { nil }
47
+ let(:params) { {} }
48
+ let(:headers) { {} }
49
+ let(:options) { {:body => body, :params => params, :headers => headers}.reject { |k,v| v.nil? } }
50
+ let(:request) { stub.as_null_object }
51
+
52
+ it "requests path with API prefix" do
53
+ http_class.should_receive(:new).with("/api/v2#{path}")
54
+ connection.request(*args)
55
+ end
56
+
57
+ context "with querystring" do
58
+ let(:params) { {:foo => 'bar'} }
59
+
60
+ it "includes querystring" do
61
+ http_class.should_receive(:new).with("/api/v2#{path}?foo=bar")
62
+ connection.request(*args)
63
+ end
64
+ end
65
+
66
+ context "with custom header" do
67
+ let(:headers) { {'Some-Header' => 'abc'} }
68
+
69
+ it "includes custom header" do
70
+ request.should_receive(:add_field).with('Some-Header', 'abc')
71
+ request.stub(:add_field) # ignoring other headers
72
+ connection.request(*args)
73
+ end
74
+ end
75
+ end
76
+ end
77
+ end
78
+
79
+ describe "#hash_to_params" do
80
+ # TODO: Consider using addressable gem; see <http://stackoverflow.com/a/803067/3528> for examples.
81
+ it "converts flat hashes to query strings" do
82
+ connection.hash_to_params({:a => 1, :b => 2}).should eql "a=1&b=2"
83
+ end
84
+ it "converts empty hashes to nil" do
85
+ connection.hash_to_params({}).should be_nil
86
+ end
87
+ it "leaves nil as nil" do
88
+ connection.hash_to_params(nil).should be_nil
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,8 @@
1
+ require 'bigcommerce'
2
+ require 'date'
3
+ require 'fakeweb'
4
+
5
+ # Requires supporting ruby files with custom matchers and macros, etc,
6
+ # in spec/support/ and its subdirectories.
7
+ Dir[File.dirname(__FILE__) + "/support/**/*.rb"].each {|f| require f }
8
+
@@ -0,0 +1,9 @@
1
+ module FixtureHelpers
2
+ def load_json_fixture(name)
3
+ File.read(File.expand_path("../fixtures/#{name}.json", File.dirname(__FILE__)))
4
+ end
5
+ end
6
+
7
+ RSpec.configure do |c|
8
+ c.include FixtureHelpers
9
+ end
metadata CHANGED
@@ -1,84 +1,174 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: bigcommerce
3
- version: !ruby/object:Gem::Version
4
- hash: 21
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.6
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 5
10
- version: 0.0.5
11
6
  platform: ruby
12
- authors:
13
- - BigCommerce
7
+ authors:
8
+ - Bigcommerce
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-10-15 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- name: json
12
+ date: 2013-01-14 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
22
23
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
24
25
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 0
31
- version: "0"
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
32
38
  type: :runtime
33
- version_requirements: *id001
34
- description: Enables Ruby applications to communicate with the BigCommerce API V2 (currently in beta trial).
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: ci_reporter
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: fakeweb
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: mocha
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: rake
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: rspec
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: '2.11'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: '2.11'
126
+ description: Enables Ruby applications to communicate with the Bigcommerce API V2.
35
127
  email: dev-accounts@bigcommerce.com
36
128
  executables: []
37
-
38
129
  extensions: []
39
-
40
130
  extra_rdoc_files: []
41
-
42
- files:
131
+ files:
43
132
  - LICENSE
44
133
  - Rakefile
45
134
  - README.md
46
135
  - bigcommerce.gemspec
47
- - lib/bigcommerce/api.rb
48
- - lib/bigcommerce/connection.rb
49
- - lib/bigcommerce.rb
136
+ - ./lib/big_commerce.rb
137
+ - ./lib/bigcommerce/api.rb
138
+ - ./lib/bigcommerce/connection.rb
139
+ - ./lib/bigcommerce/version.rb
140
+ - ./lib/bigcommerce.rb
141
+ - ./spec/models/api_spec.rb
142
+ - ./spec/models/connection_spec.rb
143
+ - ./spec/spec_helper.rb
144
+ - ./spec/support/fixture_helpers.rb
145
+ - spec/models/api_spec.rb
146
+ - spec/models/connection_spec.rb
50
147
  homepage: http://github.com/bigcommerce/bigcommerce-api-ruby
51
148
  licenses: []
52
-
53
149
  post_install_message:
54
150
  rdoc_options: []
55
-
56
- require_paths:
151
+ require_paths:
57
152
  - lib
58
- required_ruby_version: !ruby/object:Gem::Requirement
153
+ required_ruby_version: !ruby/object:Gem::Requirement
59
154
  none: false
60
- requirements:
61
- - - ">="
62
- - !ruby/object:Gem::Version
63
- hash: 3
64
- segments:
65
- - 0
66
- version: "0"
67
- required_rubygems_version: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
160
  none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- hash: 3
73
- segments:
74
- - 0
75
- version: "0"
161
+ requirements:
162
+ - - ! '>='
163
+ - !ruby/object:Gem::Version
164
+ version: '0'
76
165
  requirements: []
77
-
78
166
  rubyforge_project:
79
- rubygems_version: 1.8.11
167
+ rubygems_version: 1.8.24
80
168
  signing_key:
81
169
  specification_version: 3
82
- summary: Enables Ruby applications to communicate with the BigCommerce API
83
- test_files: []
84
-
170
+ summary: Enables Ruby applications to communicate with the Bigcommerce API
171
+ test_files:
172
+ - spec/models/api_spec.rb
173
+ - spec/models/connection_spec.rb
174
+ has_rdoc: false