oshpark 0.0.7 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Gemfile.lock +13 -17
- data/Guardfile +0 -7
- data/lib/oshpark.rb +2 -0
- data/lib/oshpark/address.rb +8 -1
- data/lib/oshpark/client.rb +20 -4
- data/lib/oshpark/connection.rb +6 -2
- data/lib/oshpark/import.rb +1 -0
- data/lib/oshpark/model.rb +14 -35
- data/lib/oshpark/order.rb +12 -5
- data/lib/oshpark/panel.rb +1 -0
- data/lib/oshpark/price.rb +15 -0
- data/lib/oshpark/project.rb +2 -1
- data/lib/oshpark/remote_model.rb +41 -0
- data/lib/oshpark/shipping_rate.rb +1 -1
- data/lib/oshpark/token.rb +15 -5
- data/lib/oshpark/upload.rb +1 -0
- data/lib/oshpark/version.rb +1 -1
- data/oshpark.gemspec +2 -1
- data/spec/acceptance/authentication_spec.rb +51 -0
- data/spec/acceptance/workflow_spec.rb +71 -0
- data/spec/fixtures/2-Layer.brd +0 -0
- data/spec/fixtures/cassettes/RSpec_ExampleGroups_APIWorkflow.yml +16416 -0
- data/spec/fixtures/cassettes/RSpec_ExampleGroups_APIWorkflow_WhenPayingByInvoice.yml +13438 -0
- data/spec/lib/oshpark/address_spec.rb +1 -1
- data/spec/lib/oshpark/client_spec.rb +15 -4
- data/spec/lib/oshpark/model_spec.rb +3 -0
- data/spec/lib/oshpark/price_spec.rb +28 -0
- data/spec/support/helper.rb +17 -0
- data/spec/support/vcr.rb +26 -0
- metadata +44 -12
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c03c63de755a320ca2ff92012a6ee518224a36d
|
4
|
+
data.tar.gz: fb4a13cb27455eca130da96a42e00af4c8410741
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a82622645351c80fbb0728cafcbba2c1d887d3dd122cead3223a6b2bd98e9bc63bdc3a69938d671bd5aeae0d5e88cf78c8dd163019fb42ba99cfa9256fd3026
|
7
|
+
data.tar.gz: bb2392fedfcf1ea183e65c057536ea50ecfbab3a1f91586d3ae8825ab017398b523ee2f4c48812aa1f82bf0c37fb99e3a33ca67381a3206c5ee650c9595ea1be
|
data/.gitignore
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
oshpark (0.0.
|
4
|
+
oshpark (0.0.10)
|
5
5
|
micro_token
|
6
6
|
thor
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
|
-
|
11
|
+
addressable (2.3.6)
|
12
12
|
byebug (2.7.0)
|
13
13
|
columnize (~> 0.3)
|
14
14
|
debugger-linecache (~> 1.2)
|
@@ -16,18 +16,13 @@ GEM
|
|
16
16
|
timers (~> 1.1.0)
|
17
17
|
coderay (1.1.0)
|
18
18
|
columnize (0.8.9)
|
19
|
-
|
20
|
-
|
21
|
-
diff-lcs (>= 1.1.3)
|
22
|
-
gherkin (~> 2.12)
|
23
|
-
multi_json (>= 1.7.5, < 2.0)
|
24
|
-
multi_test (>= 0.1.1)
|
19
|
+
crack (0.4.2)
|
20
|
+
safe_yaml (~> 1.0.0)
|
25
21
|
debugger-linecache (1.2.0)
|
26
22
|
diff-lcs (1.2.5)
|
23
|
+
dotenv (1.0.2)
|
27
24
|
ffi (1.9.3)
|
28
25
|
formatador (0.2.5)
|
29
|
-
gherkin (2.12.2)
|
30
|
-
multi_json (~> 1.3)
|
31
26
|
guard (2.6.1)
|
32
27
|
formatador (>= 0.2.4)
|
33
28
|
listen (~> 2.7)
|
@@ -37,9 +32,6 @@ GEM
|
|
37
32
|
guard-bundler (2.0.0)
|
38
33
|
bundler (~> 1.0)
|
39
34
|
guard (~> 2.2)
|
40
|
-
guard-cucumber (1.4.1)
|
41
|
-
cucumber (>= 1.2.0)
|
42
|
-
guard (>= 1.1.0)
|
43
35
|
guard-rspec (4.2.9)
|
44
36
|
guard (~> 2.1)
|
45
37
|
rspec (>= 2.14, < 4.0)
|
@@ -50,8 +42,6 @@ GEM
|
|
50
42
|
lumberjack (1.0.6)
|
51
43
|
method_source (0.8.2)
|
52
44
|
micro_token (0.0.3)
|
53
|
-
multi_json (1.10.1)
|
54
|
-
multi_test (0.1.1)
|
55
45
|
pry (0.9.12.6)
|
56
46
|
coderay (~> 1.0)
|
57
47
|
method_source (~> 0.8)
|
@@ -75,9 +65,14 @@ GEM
|
|
75
65
|
rspec-mocks (3.0.1)
|
76
66
|
rspec-support (~> 3.0.0)
|
77
67
|
rspec-support (3.0.0)
|
68
|
+
safe_yaml (1.0.3)
|
78
69
|
slop (3.5.0)
|
79
70
|
thor (0.19.1)
|
80
71
|
timers (1.1.0)
|
72
|
+
vcr (2.9.3)
|
73
|
+
webmock (1.18.0)
|
74
|
+
addressable (>= 2.3.6)
|
75
|
+
crack (>= 0.3.2)
|
81
76
|
|
82
77
|
PLATFORMS
|
83
78
|
ruby
|
@@ -85,9 +80,8 @@ PLATFORMS
|
|
85
80
|
DEPENDENCIES
|
86
81
|
bundler (~> 1.6)
|
87
82
|
byebug
|
88
|
-
|
83
|
+
dotenv
|
89
84
|
guard-bundler
|
90
|
-
guard-cucumber
|
91
85
|
guard-rspec
|
92
86
|
oshpark!
|
93
87
|
pry
|
@@ -95,3 +89,5 @@ DEPENDENCIES
|
|
95
89
|
rspec-core
|
96
90
|
rspec-its
|
97
91
|
rspec-mocks
|
92
|
+
vcr
|
93
|
+
webmock
|
data/Guardfile
CHANGED
@@ -4,13 +4,6 @@ guard :rspec do
|
|
4
4
|
watch('spec/spec_helper.rb') { "spec" }
|
5
5
|
end
|
6
6
|
|
7
|
-
|
8
|
-
guard 'cucumber' do
|
9
|
-
watch(%r{^features/.+\.feature$})
|
10
|
-
watch(%r{^features/support/.+$}) { 'features' }
|
11
|
-
watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
|
12
|
-
end
|
13
|
-
|
14
7
|
guard :bundler do
|
15
8
|
watch('Gemfile')
|
16
9
|
watch(/^.+\.gemspec/)
|
data/lib/oshpark.rb
CHANGED
@@ -3,6 +3,7 @@ require "oshpark/ext"
|
|
3
3
|
require "oshpark/client"
|
4
4
|
require "oshpark/connection"
|
5
5
|
require "oshpark/model"
|
6
|
+
require "oshpark/remote_model"
|
6
7
|
require "oshpark/stateful"
|
7
8
|
require "oshpark/dimensionable"
|
8
9
|
require "oshpark/order_option"
|
@@ -17,6 +18,7 @@ require "oshpark/upload"
|
|
17
18
|
require "oshpark/token"
|
18
19
|
require "oshpark/address"
|
19
20
|
require "oshpark/shipping_rate"
|
21
|
+
require "oshpark/price"
|
20
22
|
require "oshpark/order_item"
|
21
23
|
require "oshpark/order_item_option_selection"
|
22
24
|
|
data/lib/oshpark/address.rb
CHANGED
@@ -10,7 +10,10 @@ module Oshpark
|
|
10
10
|
attrs.each {|a| attr_accessor a }
|
11
11
|
|
12
12
|
def initialize args={}
|
13
|
-
|
13
|
+
clean_json args do |json|
|
14
|
+
check_args json
|
15
|
+
reload_with json
|
16
|
+
end
|
14
17
|
end
|
15
18
|
|
16
19
|
def to_h
|
@@ -21,6 +24,10 @@ module Oshpark
|
|
21
24
|
end
|
22
25
|
end
|
23
26
|
|
27
|
+
def available_shipping_rates
|
28
|
+
ShippingRate.rates_for_address self
|
29
|
+
end
|
30
|
+
|
24
31
|
private
|
25
32
|
|
26
33
|
def check_args args
|
data/lib/oshpark/client.rb
CHANGED
@@ -38,6 +38,12 @@ module Oshpark
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
# Abandon a previous authentication.
|
42
|
+
def abandon
|
43
|
+
self.token = nil
|
44
|
+
refresh_token
|
45
|
+
end
|
46
|
+
|
41
47
|
# Retrieve a list of projects for the current user.
|
42
48
|
def projects
|
43
49
|
get_request 'projects'
|
@@ -77,6 +83,16 @@ module Oshpark
|
|
77
83
|
true
|
78
84
|
end
|
79
85
|
|
86
|
+
# Request a price estimate
|
87
|
+
#
|
88
|
+
# @param width In thousands of an Inch
|
89
|
+
# @param height In thousands of an Inch
|
90
|
+
# @param layers
|
91
|
+
# @param quantity Optional Defaults to the minimum quantity
|
92
|
+
def pricing width, height, pcb_layers, quantity = nil
|
93
|
+
post_request "pricing", {width_in_mils: width, height_in_mils: height, pcb_layers: pcb_layers, quantity: quantity}
|
94
|
+
end
|
95
|
+
|
80
96
|
# List all the current user's orders, and their status.
|
81
97
|
def orders
|
82
98
|
get_request 'orders'
|
@@ -100,7 +116,7 @@ module Oshpark
|
|
100
116
|
# @param project_id
|
101
117
|
# @param quantity
|
102
118
|
def add_order_item id, project_id, quantity
|
103
|
-
|
119
|
+
post_request "orders/#{id}/add_item", {order: {project_id: project_id, quantity: quantity}}
|
104
120
|
end
|
105
121
|
|
106
122
|
# Set the delivery address for an Order
|
@@ -108,7 +124,7 @@ module Oshpark
|
|
108
124
|
# @param id
|
109
125
|
# @param address
|
110
126
|
def set_order_address id, address
|
111
|
-
|
127
|
+
post_request "orders/#{id}/set_address", {order: {address: address.to_h}}
|
112
128
|
end
|
113
129
|
|
114
130
|
def shipping_rates address_params
|
@@ -121,14 +137,14 @@ module Oshpark
|
|
121
137
|
# @param carrier_name
|
122
138
|
# @param service_name
|
123
139
|
def set_order_shipping_rate id, carrier_name, service_name
|
124
|
-
|
140
|
+
post_request "orders/#{id}/set_shipping_rate", {order:{shipping_rate:{carrier_name: carrier_name, service_name: service_name}}}
|
125
141
|
end
|
126
142
|
|
127
143
|
# Checkout a specific order by ID.
|
128
144
|
#
|
129
145
|
# @param id
|
130
146
|
def checkout_order id
|
131
|
-
|
147
|
+
post_request "orders/#{id}/checkout"
|
132
148
|
end
|
133
149
|
|
134
150
|
# Cancel a specific order by ID.
|
data/lib/oshpark/connection.rb
CHANGED
@@ -39,7 +39,11 @@ module Oshpark
|
|
39
39
|
|
40
40
|
response = http.request(request)
|
41
41
|
|
42
|
-
json =
|
42
|
+
json = if response.body.size >= 2
|
43
|
+
JSON.parse(response.body)
|
44
|
+
else
|
45
|
+
{}
|
46
|
+
end
|
43
47
|
|
44
48
|
case response.code.to_i
|
45
49
|
when 401
|
@@ -53,7 +57,7 @@ module Oshpark
|
|
53
57
|
json
|
54
58
|
|
55
59
|
rescue JSON::ParserError => e
|
56
|
-
raise ServerError, "Bad response from server"
|
60
|
+
raise ServerError, "Bad response from server: #{e.message}"
|
57
61
|
end
|
58
62
|
|
59
63
|
private
|
data/lib/oshpark/import.rb
CHANGED
data/lib/oshpark/model.rb
CHANGED
@@ -11,25 +11,6 @@ module Oshpark
|
|
11
11
|
@dirty_attributes.size > 0
|
12
12
|
end
|
13
13
|
|
14
|
-
def save!
|
15
|
-
attrs = {}
|
16
|
-
@dirty_attributes.map do |attr|
|
17
|
-
attrs[attr] = public_send(attr)
|
18
|
-
end
|
19
|
-
|
20
|
-
Oshpark::client.public_send("update_#{object_name}", id, attrs)
|
21
|
-
end
|
22
|
-
|
23
|
-
def reload!
|
24
|
-
json = Oshpark::client.public_send(object_name, id)[object_name]
|
25
|
-
reload_with json
|
26
|
-
end
|
27
|
-
|
28
|
-
def destroy!
|
29
|
-
Oshpark::client.public_send("destroy_#{object_name}", id)[object_name]
|
30
|
-
nil
|
31
|
-
end
|
32
|
-
|
33
14
|
def self.included base
|
34
15
|
base.send :extend, ClassMethods
|
35
16
|
|
@@ -55,16 +36,6 @@ module Oshpark
|
|
55
36
|
[]
|
56
37
|
end
|
57
38
|
|
58
|
-
def all
|
59
|
-
Oshpark::client.public_send(object_names)[object_names].map do |json|
|
60
|
-
self.from_json json
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
|
-
def find id
|
65
|
-
self.from_json(Oshpark::client.public_send(object_name, id)[object_name])
|
66
|
-
end
|
67
|
-
|
68
39
|
def object_name
|
69
40
|
self.name.split('::').last.downcase
|
70
41
|
end
|
@@ -72,7 +43,6 @@ module Oshpark
|
|
72
43
|
def object_names
|
73
44
|
"#{object_name}s"
|
74
45
|
end
|
75
|
-
|
76
46
|
end
|
77
47
|
|
78
48
|
private
|
@@ -91,12 +61,22 @@ module Oshpark
|
|
91
61
|
self.class.object_names
|
92
62
|
end
|
93
63
|
|
64
|
+
def clean_json json
|
65
|
+
json = json[object_name] if json.has_key?(object_name) && (Hash === json[object_name])
|
66
|
+
|
67
|
+
yield json if block_given?
|
68
|
+
json
|
69
|
+
end
|
70
|
+
|
94
71
|
def reload_with json
|
95
|
-
|
96
|
-
|
97
|
-
|
72
|
+
clean_json(json) do |json|
|
73
|
+
guard_against_invalid_arguments json.keys
|
74
|
+
|
75
|
+
json.each do |key,value|
|
76
|
+
instance_variable_set "@#{key}", value
|
77
|
+
end
|
78
|
+
@dirty_attributes = []
|
98
79
|
end
|
99
|
-
@dirty_attributes = []
|
100
80
|
end
|
101
81
|
|
102
82
|
def guard_against_invalid_arguments keys
|
@@ -105,6 +85,5 @@ module Oshpark
|
|
105
85
|
end
|
106
86
|
end
|
107
87
|
|
108
|
-
|
109
88
|
end
|
110
89
|
end
|
data/lib/oshpark/order.rb
CHANGED
@@ -12,6 +12,7 @@ module Oshpark
|
|
12
12
|
end
|
13
13
|
|
14
14
|
include Model
|
15
|
+
include RemoteModel
|
15
16
|
include Stateful
|
16
17
|
|
17
18
|
def self.create
|
@@ -20,22 +21,28 @@ module Oshpark
|
|
20
21
|
|
21
22
|
def add_item order_item, quantity
|
22
23
|
json = Oshpark::client.add_order_item id, order_item.id, quantity
|
23
|
-
reload_with json
|
24
|
+
reload_with json
|
24
25
|
end
|
25
26
|
|
26
27
|
def set_address address
|
27
28
|
json = Oshpark::client.set_order_address id, address
|
28
|
-
reload_with json
|
29
|
+
reload_with json
|
29
30
|
end
|
30
31
|
|
31
|
-
def set_shipping_rate
|
32
|
+
def set_shipping_rate *args
|
33
|
+
carrier_name, service_name = if Oshpark::ShippingRate === args.first
|
34
|
+
rate = args.first
|
35
|
+
[rate.carrier_name, rate.service_name]
|
36
|
+
else
|
37
|
+
args
|
38
|
+
end
|
32
39
|
json = Oshpark::client.set_order_shipping_rate id, carrier_name, service_name
|
33
|
-
reload_with json
|
40
|
+
reload_with json
|
34
41
|
end
|
35
42
|
|
36
43
|
def checkout
|
37
44
|
json = Oshpark::client.checkout_order id
|
38
|
-
reload_with json
|
45
|
+
reload_with json
|
39
46
|
end
|
40
47
|
|
41
48
|
def panel
|
data/lib/oshpark/panel.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
module Oshpark
|
2
|
+
class Price
|
3
|
+
|
4
|
+
def self.attrs
|
5
|
+
%w| width_in_mils height_in_mils pcb_layers quantity quantity_multiple minimum_quantity minimum_square_inches batches batch_cost subtotal |
|
6
|
+
end
|
7
|
+
|
8
|
+
include Model
|
9
|
+
|
10
|
+
def self.price_for width, height, pcb_layers, quantity = nil
|
11
|
+
json = Oshpark::client.pricing width, height, pcb_layers, quantity
|
12
|
+
from_json json['pricing']
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/oshpark/project.rb
CHANGED
@@ -11,6 +11,7 @@ module Oshpark
|
|
11
11
|
end
|
12
12
|
|
13
13
|
include Model
|
14
|
+
include RemoteModel
|
14
15
|
include Stateful
|
15
16
|
include Dimensionable
|
16
17
|
|
@@ -46,7 +47,7 @@ module Oshpark
|
|
46
47
|
|
47
48
|
def approve!
|
48
49
|
json = Oshpark::client.approve_project id
|
49
|
-
reload_with
|
50
|
+
reload_with json
|
50
51
|
end
|
51
52
|
|
52
53
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
module Oshpark
|
4
|
+
module RemoteModel
|
5
|
+
|
6
|
+
def self.included base
|
7
|
+
base.extend ClassMethods
|
8
|
+
end
|
9
|
+
|
10
|
+
def save!
|
11
|
+
attrs = {}
|
12
|
+
@dirty_attributes.map do |attr|
|
13
|
+
attrs[attr] = public_send(attr)
|
14
|
+
end
|
15
|
+
|
16
|
+
Oshpark::client.public_send("update_#{object_name}", id, attrs)
|
17
|
+
end
|
18
|
+
|
19
|
+
def reload!
|
20
|
+
json = Oshpark::client.public_send(object_name, id)
|
21
|
+
reload_with json
|
22
|
+
end
|
23
|
+
|
24
|
+
def destroy!
|
25
|
+
Oshpark::client.public_send("destroy_#{object_name}", id)
|
26
|
+
nil
|
27
|
+
end
|
28
|
+
|
29
|
+
module ClassMethods
|
30
|
+
def all
|
31
|
+
Oshpark::client.public_send(object_names)[object_names].map do |json|
|
32
|
+
self.from_json json
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def find id
|
37
|
+
self.from_json(Oshpark::client.public_send(object_name, id)[object_name])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|