squarespace 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: dd1f06c3ed79a3dfab23b4c5457efa992f47fa1e
4
+ data.tar.gz: 1e883c51f91e47e2ad0ea99ed8e436c6be9f04a9
5
+ SHA512:
6
+ metadata.gz: cfc1f3653130d3621ca580c6dcc17d02d1b9ccc5467b26c13a622b74cdec9da44eceb618141810f36d835a8dc857ca89665c2eba4f20476cf79726ea498ee0cf
7
+ data.tar.gz: 0ed4054566485d9aae747f56cc48e2a2d39618c7e67f4330a505d73ac74d928fd64b2e880daf9d00fd00f5d9733a80eb75ba4ff4a71b1e5f6c2ae5a183c9bbda
data/.gitignore ADDED
@@ -0,0 +1,2 @@
1
+ coverage
2
+ .rspec
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,68 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ squarespace (0.0.1)
5
+ faraday
6
+ json
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ addressable (2.5.1)
12
+ public_suffix (~> 2.0, >= 2.0.2)
13
+ coderay (1.1.1)
14
+ crack (0.4.3)
15
+ safe_yaml (~> 1.0.0)
16
+ diff-lcs (1.3)
17
+ docile (1.1.5)
18
+ faraday (0.12.1)
19
+ multipart-post (>= 1.2, < 3)
20
+ hashdiff (0.3.4)
21
+ json (2.1.0)
22
+ method_source (0.8.2)
23
+ multipart-post (2.0.0)
24
+ pry (0.10.4)
25
+ coderay (~> 1.1.0)
26
+ method_source (~> 0.8.1)
27
+ slop (~> 3.4)
28
+ public_suffix (2.0.5)
29
+ rspec (3.6.0)
30
+ rspec-core (~> 3.6.0)
31
+ rspec-expectations (~> 3.6.0)
32
+ rspec-mocks (~> 3.6.0)
33
+ rspec-core (3.6.0)
34
+ rspec-support (~> 3.6.0)
35
+ rspec-expectations (3.6.0)
36
+ diff-lcs (>= 1.2.0, < 2.0)
37
+ rspec-support (~> 3.6.0)
38
+ rspec-mocks (3.6.0)
39
+ diff-lcs (>= 1.2.0, < 2.0)
40
+ rspec-support (~> 3.6.0)
41
+ rspec-support (3.6.0)
42
+ safe_yaml (1.0.4)
43
+ simplecov (0.14.1)
44
+ docile (~> 1.1.0)
45
+ json (>= 1.8, < 3)
46
+ simplecov-html (~> 0.10.0)
47
+ simplecov-html (0.10.1)
48
+ slop (3.6.0)
49
+ timecop (0.9.1)
50
+ webmock (3.0.1)
51
+ addressable (>= 2.3.6)
52
+ crack (>= 0.3.2)
53
+ hashdiff
54
+
55
+ PLATFORMS
56
+ ruby
57
+
58
+ DEPENDENCIES
59
+ bundler (~> 1.5)
60
+ pry
61
+ rspec
62
+ simplecov
63
+ squarespace!
64
+ timecop
65
+ webmock
66
+
67
+ BUNDLED WITH
68
+ 1.16.1
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2017 Gabe Ochoa
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 all
13
+ 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 THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,70 @@
1
+ # SquareSpace Commerce API
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/squarespace.svg)](https://badge.fury.io/rb/squarespace)
4
+
5
+ Ruby gem for interacting with the Squarespace API.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ gem 'squarespace'
12
+
13
+ And then execute:
14
+
15
+ $ bundle install
16
+
17
+ Or install it yourself as:
18
+
19
+ $ gem install squarespace
20
+
21
+
22
+ # Example usage
23
+
24
+ ## Initializing the client
25
+ ```
26
+ client = Squarespace::Client.new(
27
+ app_name: 'YOUR_APP_NAME'
28
+ app_secret: 'YOUR_CLIENT_SECRET'
29
+ )
30
+ ```
31
+ ## Get an order
32
+ ```
33
+ client.get_order(order_id)
34
+ ```
35
+ ## Get all orders
36
+ ```
37
+ client.get_orders
38
+ ```
39
+ ## Get all orders with a specified fulfillment status
40
+ ```
41
+ client.get_orders('pending')
42
+ client.get_orders('fulfilled')
43
+ client.get_orders('canceled')
44
+ ```
45
+ ## Fulfill an order
46
+ ```
47
+ client.fulfill_order(order_id, shipments, send_notification)
48
+ ```
49
+
50
+ `shipments` is a hash array in the form of
51
+
52
+ ```
53
+ [{
54
+ tracking_number: 'test_tracking_number1',
55
+ tracking_url: 'https://tools.usps.com/go/TrackConfirmAction_input?qtc_tLabels1=test_tracking_number2',
56
+ carrier_name: 'USPS',
57
+ service: 'ground'
58
+ },{
59
+ tracking_number: 'test_tracking_number2',
60
+ tracking_url: nil,
61
+ carrier_name: 'USPS',
62
+ service: 'prioritt'
63
+ }]
64
+ ```
65
+
66
+
67
+ # Testing
68
+
69
+ `bundle exec rspec`
70
+
@@ -0,0 +1,17 @@
1
+ require 'squarespace/client'
2
+ require 'squarespace/configuration'
3
+ require 'squarespace/order'
4
+ require 'squarespace/version'
5
+
6
+ module Squarespace
7
+
8
+ def self.configuration
9
+ @configuration
10
+ end
11
+
12
+ def self.configure(options = {})
13
+ @configuration = Configuration.new(options)
14
+ yield(configuration) if block_given?
15
+ self.configuration
16
+ end
17
+ end
@@ -0,0 +1,107 @@
1
+ require 'faraday'
2
+ require 'json'
3
+ require 'logger'
4
+ require 'time'
5
+
6
+ module Squarespace
7
+ class Client
8
+ attr_reader :commerce_url, :logger
9
+
10
+ COMMERCE_API_VERSION = 0.1
11
+
12
+ def initialize(options={})
13
+ @logger = Logger.new(STDOUT)
14
+ @logger.level = options.delete('log_level') || 'INFO'
15
+ @config = Squarespace::Config.new(options)
16
+ @commerce_url = "#{@config.api_url}/#{COMMERCE_API_VERSION}/commerce/orders"
17
+ end
18
+
19
+ def get_order(id)
20
+ order_response = commerce_request('get', id.to_s)
21
+ logger.debug("Order response: #{order_response.body}")
22
+ Order.new(JSON.parse(order_response.body))
23
+ end
24
+
25
+ def get_orders(fulfillment_status = nil)
26
+ if fulfillment_status.nil?
27
+ order_response = commerce_request('get')
28
+ else
29
+ # binding.pry
30
+ order_response = commerce_request('get', '', {},
31
+ {"fulfillmentStatus"=>fulfillment_status.upcase})
32
+ end
33
+
34
+ logger.debug("Order response: #{order_response.body}")
35
+ Order.new(JSON.parse(order_response.body))
36
+ end
37
+
38
+ def get_pending_orders
39
+ get_orders('pending')
40
+ end
41
+
42
+ def get_fulfilled_orders
43
+ get_orders('fulfilled')
44
+ end
45
+
46
+ def fulfill_order(order_id, shipments, send_notification=true)
47
+ # fulfill_order(string, array[hash], boolean)
48
+ #
49
+ # Shipment array example:
50
+ #
51
+ # [{
52
+ # tracking_number: 'test_tracking_number1',
53
+ # tracking_url: 'https://tools.usps.com/go/TrackConfirmAction_input?qtc_tLabels1=test_tracking_number2',
54
+ # carrier_name: 'USPS',
55
+ # service: 'ground'
56
+ # },{
57
+ # tracking_number: 'test_tracking_number2',
58
+ # tracking_url: nil,
59
+ # carrier_name: 'USPS',
60
+ # service: 'prioritt'
61
+ # }]
62
+
63
+ shipments_arry = []
64
+
65
+ shipments.each do |shipment|
66
+ shipments_arry << {
67
+ "carrierName": shipment[:carrier_name],
68
+ "service": shipment[:service],
69
+ "shipDate": "#{Time.now.utc.iso8601}",
70
+ "trackingNumber": shipment[:tracking_number],
71
+ "trackingUrl": shipment[:tracking_url]
72
+ }
73
+ end
74
+
75
+ request_body = {
76
+ "shipments": shipments_arry,
77
+ "shouldSendNotification": send_notification
78
+ }
79
+
80
+ commerce_request('post', "#{order_id}/fulfillments", {}, {}, request_body.to_json)
81
+ end
82
+
83
+ def commerce_request(method, route='', headers={}, parameters={}, body=nil)
84
+ response = connection(@commerce_url).send(method.downcase) do |req|
85
+ if method.eql?('post')
86
+ req.headers['Content-Type'] = 'application/json'
87
+ end
88
+ parameters.each { |k,v| req.params["#{k}"] = v } if parameters.any?
89
+ headers.each { |k,v| req.headers["#{k}"] = v } if headers.any?
90
+
91
+ # We always need an Authorization header
92
+ req.headers['Authorization'] = "Bearer #{@config.api_key}"
93
+ req.url route
94
+ req.body = body unless body.nil?
95
+ end
96
+ end
97
+
98
+ private
99
+
100
+ def connection(url)
101
+ Faraday.new(url: url) do |faraday|
102
+ faraday.request :url_encoded
103
+ faraday.adapter Faraday.default_adapter
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,13 @@
1
+ module Squarespace
2
+ class Config
3
+ attr_reader :api_url, :api_key, :app_name
4
+
5
+ def initialize(options)
6
+ @api_url = options[:api_url] || "https://api.squarespace.com"
7
+
8
+ # No default values
9
+ @app_name = options[:app_name]
10
+ @api_key = options[:api_key]
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ require 'ostruct'
2
+
3
+ module Squarespace
4
+ class Order < OpenStruct
5
+ ;
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ module Squarespace
2
+ VERSION = '0.0.3'
3
+ end
@@ -0,0 +1,19 @@
1
+ {
2
+ "shipments": [
3
+ {
4
+ "carrierName": "USPS",
5
+ "service": "ground",
6
+ "shipDate": "2017-01-29T22:19:26.980Z",
7
+ "trackingNumber": "test_tracking_number1",
8
+ "trackingUrl": "https://tools.usps.com/go/TrackConfirmAction_input?qtc_tLabels1=test_tracking_number2"
9
+ },
10
+ {
11
+ "carrierName": "USPS",
12
+ "service": "priority",
13
+ "shipDate": "2017-01-29T22:19:26.980Z",
14
+ "trackingNumber": "test_tracking_number2",
15
+ "trackingUrl": null
16
+ }
17
+ ],
18
+ "shouldSendNotification": true
19
+ }
@@ -0,0 +1,146 @@
1
+ {
2
+ "pagination": {
3
+ "hasNextPage": false,
4
+ "nextPageCursor": null,
5
+ "nextPageUrl": null
6
+ },
7
+ "result": [
8
+ {
9
+ "billingAddress": {
10
+ "address1": "459 Broadway",
11
+ "address2": null,
12
+ "city": "New York",
13
+ "countryCode": "US",
14
+ "firstName": "Bob",
15
+ "lastName": "Loblaw",
16
+ "phone": "5553334444",
17
+ "postalCode": "10003",
18
+ "state": "NY"
19
+ },
20
+ "createdOn": "2016-12-23T15:58:07.187Z",
21
+ "customerEmail": "foo@example.com",
22
+ "discountLines": [
23
+ {
24
+ "amount": {
25
+ "currency": "USD",
26
+ "value": "1.00"
27
+ },
28
+ "description": "Fall Sale",
29
+ "promoCode": "FALLSALE"
30
+ }
31
+ ],
32
+ "discountTotal": {
33
+ "currency": "USD",
34
+ "value": "1.00"
35
+ },
36
+ "formSubmission": [
37
+ {
38
+ "label": "How did you hear about us?",
39
+ "value": "Facebook"
40
+ }
41
+ ],
42
+ "fulfillmentStatus": "FULFILLED",
43
+ "fulfillments": [],
44
+ "grandTotal": {
45
+ "currency": "USD",
46
+ "value": "57.70"
47
+ },
48
+ "id": "585d498fdee9f31a60284a37",
49
+ "internalNotes": [
50
+ {
51
+ "content": "First note"
52
+ },
53
+ {
54
+ "content": "Second note"
55
+ }
56
+ ],
57
+ "lineItems": [
58
+ {
59
+ "customizations": null,
60
+ "id": "585d4975dee9f31a60284a16",
61
+ "imageUrl": "https://static.squarespace.com/universal/commerce/images/brine-32oz-spring-mix-v2.jpg?format=300w",
62
+ "productId": "565c8f3da7c8a3cf71d5fd0a",
63
+ "productName": "Product",
64
+ "quantity": 1,
65
+ "sku": "SQ3381024",
66
+ "unitPricePaid": {
67
+ "currency": "USD",
68
+ "value": "55.00"
69
+ },
70
+ "variantOptions": [
71
+ {
72
+ "optionName": "Size",
73
+ "value": "Large"
74
+ },
75
+ {
76
+ "optionName": "Color",
77
+ "value": "Black"
78
+ }
79
+ ]
80
+ },
81
+ {
82
+ "customizations": null,
83
+ "id": "585d4975dee9f31a60284a16",
84
+ "imageUrl": "https://static.squarespace.com/universal/commerce/images/brine-32oz-spring-mix-v2.jpg?format=300w",
85
+ "productId": "565c8f3da7c8a3cf71d5fd0a",
86
+ "productName": "Product",
87
+ "quantity": 1,
88
+ "sku": "SQ3381024",
89
+ "unitPricePaid": {
90
+ "currency": "USD",
91
+ "value": "55.00"
92
+ },
93
+ "variantOptions": [
94
+ {
95
+ "optionName": "Size",
96
+ "value": "Large"
97
+ },
98
+ {
99
+ "optionName": "Color",
100
+ "value": "Black"
101
+ }
102
+ ]
103
+ }
104
+ ],
105
+ "modifiedOn": "2016-12-23T15:58:07.187Z",
106
+ "orderNumber": "3",
107
+ "refundedTotal": {
108
+ "currency": "USD",
109
+ "value": "0.00"
110
+ },
111
+ "shippingAddress": {
112
+ "address1": "459 Broadway",
113
+ "address2": null,
114
+ "city": "New York",
115
+ "countryCode": "US",
116
+ "firstName": "Bob",
117
+ "lastName": "Loblaw",
118
+ "phone": "5553334444",
119
+ "postalCode": "10003",
120
+ "state": "NY"
121
+ },
122
+ "shippingLines": [
123
+ {
124
+ "amount": {
125
+ "currency": "USD",
126
+ "value": "1.00"
127
+ },
128
+ "method": "Flat Rate"
129
+ }
130
+ ],
131
+ "shippingTotal": {
132
+ "currency": "USD",
133
+ "value": "1.00"
134
+ },
135
+ "subtotal": {
136
+ "currency": "USD",
137
+ "value": "55.00"
138
+ },
139
+ "taxTotal": {
140
+ "currency": "USD",
141
+ "value": "2.70"
142
+ },
143
+ "testmode": true
144
+ }
145
+ ]
146
+ }