foxycart 0.0.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.
- data/.gitignore +3 -0
- data/Gemfile +3 -0
- data/Guardfile +6 -0
- data/LICENSE +21 -0
- data/README.md +67 -0
- data/foxycart.gemspec +34 -0
- data/lib/foxycart.rb +78 -0
- data/lib/foxycart/api_operations/create.rb +16 -0
- data/lib/foxycart/api_operations/delete.rb +0 -0
- data/lib/foxycart/api_operations/list.rb +0 -0
- data/lib/foxycart/api_operations/update.rb +0 -0
- data/lib/foxycart/errors/authentication_error.rb +3 -0
- data/lib/foxycart/errors/foxycart_error.rb +13 -0
- data/lib/foxycart/store.rb +32 -0
- data/lib/foxycart/util.rb +36 -0
- data/lib/foxycart/version.rb +3 -0
- data/spec/foxycart/store_spec.rb +21 -0
- data/spec/spec_helper.rb +6 -0
- metadata +151 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2013 Dana Woodman, Teleporter.io
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# FoxyCart Ruby Library
|
2
|
+
|
3
|
+
**THIS IS A WORK IN PROGRESS, COME BACK SOON!**
|
4
|
+
|
5
|
+
A Ruby wrapper for the new FoxyCart Hypermedia REST API.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
```bash
|
10
|
+
gem install foxycart
|
11
|
+
```
|
12
|
+
|
13
|
+
...or...
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem 'foxycart'
|
17
|
+
```
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
Below is an example of how to create a store using the FoxyCart gem:
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
require 'foxycart'
|
25
|
+
|
26
|
+
FoxyCart.api_key = '<YOUR-KEY-HERE>'
|
27
|
+
FoxyCart::Store.create(
|
28
|
+
:store_name => 'My Test Store',
|
29
|
+
:store_domain => 'some-subdomain',
|
30
|
+
:store_url => 'http://example.com',
|
31
|
+
:store_email => 'test@example.com',
|
32
|
+
:postal_code => '98765',
|
33
|
+
:country => 'US',
|
34
|
+
:region => 'CA',
|
35
|
+
)
|
36
|
+
```
|
37
|
+
|
38
|
+
Check out the list of available interfaces below.
|
39
|
+
|
40
|
+
## Reference
|
41
|
+
|
42
|
+
**This is a work in progress, many features are still missing. The FoxyCart API itself is not finalized so this may change at any time!**
|
43
|
+
|
44
|
+
### FoxyCart::Store
|
45
|
+
|
46
|
+
[FoxyCart Store API Reference](http://api.foxycart.com/rels/store)
|
47
|
+
|
48
|
+
Supported Methods:
|
49
|
+
|
50
|
+
- `create`
|
51
|
+
|
52
|
+
|
53
|
+
## Development
|
54
|
+
|
55
|
+
1. Fork
|
56
|
+
2. Make changes (and add tests/docs!)
|
57
|
+
3. Submit pull request
|
58
|
+
4. ???
|
59
|
+
5. Profit!
|
60
|
+
|
61
|
+
## License
|
62
|
+
|
63
|
+
Released under the MIT license. See the `LICENSE` file for more details.
|
64
|
+
|
65
|
+
## Credit
|
66
|
+
|
67
|
+
Written by [Dana Woodman](http://danawoodman.com) and of [Teleporter.io](http://teleporter.io), based heavily on the [Stripe Ruby gem](https://github.com/stripe/stripe-ruby).
|
data/foxycart.gemspec
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path('../lib', __FILE__)
|
3
|
+
|
4
|
+
require 'foxycart/version'
|
5
|
+
require 'date'
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.required_ruby_version = '>= 1.9.3'
|
9
|
+
s.authors = ['danawoodman', 'teleporter']
|
10
|
+
s.date = Date.today.strftime('%Y-%m-%d')
|
11
|
+
s.description = <<-HERE
|
12
|
+
A Ruby interface FoxyCart Hypermedia RESTful API.
|
13
|
+
HERE
|
14
|
+
s.email = 'hire@teleporter.io'
|
15
|
+
s.extra_rdoc_files = %w[README.md LICENSE]
|
16
|
+
s.homepage = 'http://github.com/teleporter/foxycart'
|
17
|
+
s.license = 'MIT'
|
18
|
+
s.name = 'foxycart'
|
19
|
+
s.rdoc_options = ['--charset=UTF-8']
|
20
|
+
s.require_paths = ['lib']
|
21
|
+
s.summary = "Ruby interface to FoxyCart's Hypermedia RESTful API."
|
22
|
+
s.version = FoxyCart::VERSION
|
23
|
+
|
24
|
+
s.add_dependency 'bundler', '~> 1.3'
|
25
|
+
s.add_dependency 'rest-client', '~> 1.6'
|
26
|
+
|
27
|
+
s.add_development_dependency 'rspec', '~> 2.14'
|
28
|
+
s.add_development_dependency 'guard', '~> 2.2'
|
29
|
+
s.add_development_dependency 'guard-rspec', '~> 4.0'
|
30
|
+
|
31
|
+
s.files = `git ls-files`.split("\n")
|
32
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
33
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map { |file| File.basename(file) }
|
34
|
+
end
|
data/lib/foxycart.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'rest_client'
|
2
|
+
|
3
|
+
# Version
|
4
|
+
require 'foxycart/version'
|
5
|
+
|
6
|
+
# API operations
|
7
|
+
require 'foxycart/api_operations/create'
|
8
|
+
# require 'foxycart/api_operations/update'
|
9
|
+
# require 'foxycart/api_operations/delete'
|
10
|
+
# require 'foxycart/api_operations/list'
|
11
|
+
|
12
|
+
# Resources
|
13
|
+
require 'foxycart/store'
|
14
|
+
|
15
|
+
# Errors
|
16
|
+
require 'foxycart/errors/foxycart_error'
|
17
|
+
require 'foxycart/errors/authentication_error'
|
18
|
+
|
19
|
+
module FoxyCart
|
20
|
+
@api_base = 'https://api-sandbox.foxycart.com'
|
21
|
+
|
22
|
+
class << self
|
23
|
+
attr_accessor :api_key
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.api_url(url='')
|
27
|
+
@api_base + url
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.request_headers(api_key)
|
31
|
+
{
|
32
|
+
'FOXYCART-API-VERSION' => '1',
|
33
|
+
'Authorization' => "Bearer #{api_key}",
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def self.request(method, url, api_key, params={}, headers={})
|
38
|
+
unless api_key ||= @api_key
|
39
|
+
raise AuthenticationError.new('No API key provided. ' +
|
40
|
+
'Set your API key using "FoxyCart.api_key = <API-KEY>".')
|
41
|
+
end
|
42
|
+
|
43
|
+
url = api_url(url)
|
44
|
+
|
45
|
+
case method.to_s.downcase.to_sym
|
46
|
+
when :get, :head, :delete
|
47
|
+
# Make params into GET parameters
|
48
|
+
url += "#{URI.parse(url).query ? '&' : '?'}#{uri_encode(params)}" if params && params.any?
|
49
|
+
payload = nil
|
50
|
+
else
|
51
|
+
payload = uri_encode(params)
|
52
|
+
end
|
53
|
+
|
54
|
+
# post(url, data: post_data, headers: FoxyCart.headers)
|
55
|
+
request_opts = {
|
56
|
+
:headers => request_headers(api_key).update(headers),
|
57
|
+
:method => method,
|
58
|
+
:open_timeout => 30,
|
59
|
+
:payload => payload,
|
60
|
+
:url => url,
|
61
|
+
:timeout => 80
|
62
|
+
}
|
63
|
+
|
64
|
+
execute_request(request_opts)
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def self.uri_encode(params)
|
70
|
+
Util.flatten_params(params).
|
71
|
+
map { |k,v| "#{k}=#{Util.url_encode(v)}" }.join('&')
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.execute_request(opts)
|
75
|
+
RestClient::Request.execute(opts)
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module FoxyCart
|
2
|
+
module APIOperations
|
3
|
+
module Create
|
4
|
+
module ClassMethods
|
5
|
+
def create(params={})
|
6
|
+
response = FoxyCart.request(:post, self.url, params)
|
7
|
+
Util.convert_to_stripe_object(response, api_key)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.included(base)
|
12
|
+
base.extend(ClassMethods)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module FoxyCart
|
2
|
+
class Store
|
3
|
+
include FoxyCart::APIOperations::Create
|
4
|
+
|
5
|
+
@store_version = 'https://admin.foxycart.com/v/0.7.2/'
|
6
|
+
@country = 'US'
|
7
|
+
|
8
|
+
def url
|
9
|
+
"/users/#{@user_id}/stores"
|
10
|
+
end
|
11
|
+
|
12
|
+
# def create(params={})
|
13
|
+
# @user_id = params['user_id']
|
14
|
+
# @name = params['name']
|
15
|
+
# @domain = @name.parameterize
|
16
|
+
# @url = params['url']
|
17
|
+
# @email = params['email']
|
18
|
+
# @zip = params['zip']
|
19
|
+
# @state = params['state']
|
20
|
+
# end
|
21
|
+
# {
|
22
|
+
# :store_version_uri => @store_version,
|
23
|
+
# :store_name => @name,
|
24
|
+
# :store_domain => @domain,
|
25
|
+
# :store_url => @url,
|
26
|
+
# :store_email => @email,
|
27
|
+
# :postal_code => @zip,
|
28
|
+
# :country => @country,
|
29
|
+
# :region => @state,
|
30
|
+
# }
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module FoxyCart
|
2
|
+
class Util
|
3
|
+
def self.url_encode(key)
|
4
|
+
URI.escape(key.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.flatten_params(params, parent_key=nil)
|
8
|
+
result = []
|
9
|
+
params.each do |key, value|
|
10
|
+
calculated_key = parent_key ? "#{parent_key}[#{url_encode(key)}]" : url_encode(key)
|
11
|
+
if value.is_a?(Hash)
|
12
|
+
result += flatten_params(value, calculated_key)
|
13
|
+
elsif value.is_a?(Array)
|
14
|
+
result += flatten_params_array(value, calculated_key)
|
15
|
+
else
|
16
|
+
result << [calculated_key, value]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
result
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.flatten_params_array(value, calculated_key)
|
23
|
+
result = []
|
24
|
+
value.each do |elem|
|
25
|
+
if elem.is_a?(Hash)
|
26
|
+
result += flatten_params(elem, calculated_key)
|
27
|
+
elsif elem.is_a?(Array)
|
28
|
+
result += flatten_params_array(elem, calculated_key)
|
29
|
+
else
|
30
|
+
result << ["#{calculated_key}[]", elem]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
result
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'foxycart'
|
3
|
+
|
4
|
+
describe "Store" do
|
5
|
+
before :each do
|
6
|
+
FoxyCart.api_key = 'asdf'
|
7
|
+
end
|
8
|
+
|
9
|
+
it "does stuff" do
|
10
|
+
puts FoxyCart.api_key
|
11
|
+
# FoxyCart::Store.create(
|
12
|
+
# :store_name => 'My Test Store',
|
13
|
+
# :store_domain => 'some-subdomain',
|
14
|
+
# :store_url => 'http://example.com',
|
15
|
+
# :store_email => 'test@example.com',
|
16
|
+
# :postal_code => '98765',
|
17
|
+
# :country => 'US',
|
18
|
+
# :region => 'CA',
|
19
|
+
# )
|
20
|
+
end
|
21
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: foxycart
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- danawoodman
|
9
|
+
- teleporter
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2013-11-08 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: bundler
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ~>
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.3'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
none: false
|
27
|
+
requirements:
|
28
|
+
- - ~>
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: '1.3'
|
31
|
+
- !ruby/object:Gem::Dependency
|
32
|
+
name: rest-client
|
33
|
+
requirement: !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - ~>
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '1.6'
|
39
|
+
type: :runtime
|
40
|
+
prerelease: false
|
41
|
+
version_requirements: !ruby/object:Gem::Requirement
|
42
|
+
none: false
|
43
|
+
requirements:
|
44
|
+
- - ~>
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '1.6'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rspec
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.14'
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
58
|
+
none: false
|
59
|
+
requirements:
|
60
|
+
- - ~>
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '2.14'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: guard
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ~>
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '2.2'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ~>
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '2.2'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: guard-rspec
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ~>
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '4.0'
|
87
|
+
type: :development
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ~>
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '4.0'
|
95
|
+
description: ! 'A Ruby interface FoxyCart Hypermedia RESTful API.
|
96
|
+
|
97
|
+
'
|
98
|
+
email: hire@teleporter.io
|
99
|
+
executables: []
|
100
|
+
extensions: []
|
101
|
+
extra_rdoc_files:
|
102
|
+
- README.md
|
103
|
+
- LICENSE
|
104
|
+
files:
|
105
|
+
- .gitignore
|
106
|
+
- Gemfile
|
107
|
+
- Guardfile
|
108
|
+
- LICENSE
|
109
|
+
- README.md
|
110
|
+
- foxycart.gemspec
|
111
|
+
- lib/foxycart.rb
|
112
|
+
- lib/foxycart/api_operations/create.rb
|
113
|
+
- lib/foxycart/api_operations/delete.rb
|
114
|
+
- lib/foxycart/api_operations/list.rb
|
115
|
+
- lib/foxycart/api_operations/update.rb
|
116
|
+
- lib/foxycart/errors/authentication_error.rb
|
117
|
+
- lib/foxycart/errors/foxycart_error.rb
|
118
|
+
- lib/foxycart/store.rb
|
119
|
+
- lib/foxycart/util.rb
|
120
|
+
- lib/foxycart/version.rb
|
121
|
+
- spec/foxycart/store_spec.rb
|
122
|
+
- spec/spec_helper.rb
|
123
|
+
homepage: http://github.com/teleporter/foxycart
|
124
|
+
licenses:
|
125
|
+
- MIT
|
126
|
+
post_install_message:
|
127
|
+
rdoc_options:
|
128
|
+
- --charset=UTF-8
|
129
|
+
require_paths:
|
130
|
+
- lib
|
131
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
132
|
+
none: false
|
133
|
+
requirements:
|
134
|
+
- - ! '>='
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: 1.9.3
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
none: false
|
139
|
+
requirements:
|
140
|
+
- - ! '>='
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
version: '0'
|
143
|
+
requirements: []
|
144
|
+
rubyforge_project:
|
145
|
+
rubygems_version: 1.8.23
|
146
|
+
signing_key:
|
147
|
+
specification_version: 3
|
148
|
+
summary: Ruby interface to FoxyCart's Hypermedia RESTful API.
|
149
|
+
test_files:
|
150
|
+
- spec/foxycart/store_spec.rb
|
151
|
+
- spec/spec_helper.rb
|