hubs3d 0.1.1 → 1.0.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 76dc522244aaa8c93e15acf0b9751ebfd7ac8a3d
4
- data.tar.gz: 3a9d47138db23fb0b2a84d30aab07bf6f9aaa8a1
3
+ metadata.gz: d27cf81d7ea6eee957d3ca46f23b933fc4baa75b
4
+ data.tar.gz: c6222907a6282f605c18765d657d97ab9928b890
5
5
  SHA512:
6
- metadata.gz: 1d5b0196bbf9d80265ccc044c82dcaf28d0bccbae780f165b2bdea6a84aa50cc7fc60fa1b38709040ecb50563d1b2ae3ecc033d5ee4dcf06da6e1ce8025d89a0
7
- data.tar.gz: 09ef4512c515cb38f6af80bbfe6ee324bd31ca51fbd07d73dba1d5bb44232f471de2e3aa23732532d6d0bbecb6a0b70f0b56176f8660f82a66d8581a0728b3ab
6
+ metadata.gz: 7c129f18035969ffece8b11dfbd36eb1a9fdb1d1a51877caf31fba0c4807c067d2b4eb9f827318fda32b88d927fffd178d23b571f3bec7230013e0c29a44d311
7
+ data.tar.gz: b8fc61b1e714a5ca590e3f6e3fba3ba07b003800dbaa6c1748b968f25d60575999759c5cadbbf67a6c27abb0b4f8ce45b685d9cfa0add2c3b95b04a9c1f6ca31
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
- Ruby gem to access 3DHub's API
2
- ==============================
1
+ Ruby gem to access 3D Hubs' API
2
+ ===============================
3
3
 
4
- Example usage
4
+ Configuration
5
5
  -------------
6
6
 
7
7
  ```rb
@@ -9,18 +9,39 @@ Hubs3D.configure do |c|
9
9
  c.oauth_key = "YOUR_API_KEY_HERE"
10
10
  c.oauth_secret = "YOUR_API_SECRET_HERE"
11
11
  end
12
+ ```
13
+
14
+ Usage
15
+ -----
16
+
17
+ ### Upload a model and get its id back
12
18
 
13
- # Upload a model get its id
19
+ ```rb
14
20
  model = Hubs3D::Model.new(path: "/path/to/example.stl",
15
21
  name: "example.stl")
16
22
  model.id # => 42
23
+ ```
24
+
25
+ ### Create a cart and get its url to redirect to
17
26
 
18
- # Create a cart and get its url
27
+ ```rb
19
28
  cart = Hubs3D::Cart.new
20
29
  cart << model
21
30
  cart.url # => "https://www.3dhubs.com/…"
22
31
  ```
23
32
 
33
+ ### A cart can also take a third_party_id and a designer_tip
34
+
35
+ ```rb
36
+ cart = Hubs3D::Cart.new(
37
+ designer_tip: Hubs3D::Tip.new(amount_cents: 42_00,
38
+ currency: "EUR",
39
+ uuid: "5-42-42",
40
+ mandatory: true),
41
+ third_party_id: 42
42
+ )
43
+ ```
44
+
24
45
  Install
25
46
  -------
26
47
 
data/lib/hubs3d/api.rb CHANGED
@@ -6,6 +6,7 @@ require "oauth"
6
6
  # Net::HTTP.http_logger_options = {:verbose => true}
7
7
 
8
8
  require "hubs3d/configuration"
9
+ require "hubs3d/error"
9
10
 
10
11
  module Hubs3D
11
12
  module API
@@ -18,7 +19,13 @@ module Hubs3D
18
19
  response = token.post(Hubs3D.configuration.api_path + path,
19
20
  params,
20
21
  "Accept" => "application/json")
21
- JSON.parse(response.body)
22
+ body = JSON.parse(response.body)
23
+
24
+ if response.code == "200"
25
+ body
26
+ else
27
+ fail Error, "API #{response.code}: #{body.join(" ")}"
28
+ end
22
29
  end
23
30
  end
24
31
  end
@@ -0,0 +1,4 @@
1
+ module Hubs3D
2
+ class Error < RuntimeError
3
+ end
4
+ end
data/lib/hubs3d/model.rb CHANGED
@@ -16,20 +16,27 @@ module Hubs3D
16
16
  end
17
17
 
18
18
  def id
19
- @id ||= post["modelId"].to_i
19
+ @id ||= begin
20
+ result = post
21
+ fail "Expected #{result.inspect} to have modelId" if !result["modelId"]
22
+ result["modelId"].to_i
23
+ end
20
24
  end
21
25
 
22
26
 
23
27
  private
24
28
 
25
- def base_64
29
+ def base_64_file
26
30
  Base64.encode64 open(@path, 'r') { |f| f.read }
27
31
  end
28
32
 
29
33
  def post
30
- API.post("/model", file: base_64,
31
- fileName: name,
32
- attachments: attachments)
34
+ params = {
35
+ file: base_64_file,
36
+ fileName: name,
37
+ }
38
+ params[:attachments] = attachments if attachments
39
+ API.post("/model", params)
33
40
  end
34
41
  end
35
42
  end
data/lib/hubs3d/tip.rb CHANGED
@@ -1,19 +1,22 @@
1
1
  module Hubs3D
2
2
  class Tip
3
- attr_reader :amount, :currency, :uuid, :mandatory
3
+ attr_reader :amount_cents, :currency, :uuid, :mandatory
4
4
 
5
- def initialize(amount: nil,
5
+ def initialize(amount_cents: nil,
6
6
  currency: nil,
7
7
  uuid: nil,
8
8
  mandatory: nil)
9
- @amount = amount
9
+ @amount_cents = amount_cents
10
10
  @currency = currency
11
11
  @uuid = uuid
12
12
  @mandatory = mandatory
13
13
  end
14
14
 
15
15
  def to_h
16
- { amount: amount, currency: currency, uuid: uuid, mandatory: mandatory }
16
+ { amount: amount_cents,
17
+ currency: currency,
18
+ uuid: uuid,
19
+ mandatory: mandatory }
17
20
  end
18
21
  end
19
22
  end
@@ -1,3 +1,3 @@
1
1
  module Hubs3D
2
- VERSION = "0.1.1"
2
+ VERSION = "1.0.0"
3
3
  end
data/spec/cart_spec.rb CHANGED
@@ -3,9 +3,9 @@ require "hubs3d/cart"
3
3
  require "hubs3d/tip"
4
4
 
5
5
  describe Hubs3D::Cart do
6
- let(:designer_tip) { Hubs3D::Tip.new(amount: 42_00,
6
+ let(:designer_tip) { Hubs3D::Tip.new(amount_cents: 42_00,
7
7
  currency: "EUR",
8
- uuid: 5,
8
+ uuid: "5-42-42",
9
9
  mandatory: true) }
10
10
  let(:cart) { described_class.new(designer_tip: designer_tip,
11
11
  third_party_id: "foo0") }
@@ -57,7 +57,7 @@ describe Hubs3D::Cart do
57
57
  designer_tip: {
58
58
  amount: 42_00,
59
59
  currency: "EUR",
60
- uuid: 5,
60
+ uuid: "5-42-42",
61
61
  mandatory: true
62
62
  },
63
63
  third_party_id: "foo0",
data/spec/model_spec.rb CHANGED
@@ -2,20 +2,37 @@ require "spec_helper"
2
2
  require "hubs3d/model"
3
3
 
4
4
  describe Hubs3D::Model do
5
- let(:model) { described_class.new(name: "Foo", path: "example.stl") }
5
+ let(:model) {
6
+ described_class.new(name: "foo.stl", path: "spec/fixtures/example.stl")
7
+ }
6
8
 
7
9
  describe "#name" do
8
10
  it "returns the name" do
9
- expect(model.name).to eq("Foo")
11
+ expect(model.name).to eq("foo.stl")
10
12
  end
11
13
  end
12
14
 
13
15
  describe "#path" do
14
16
  it "returns the path" do
15
- expect(model.path).to eq("example.stl")
17
+ expect(model.path).to eq("spec/fixtures/example.stl")
16
18
  end
17
19
  end
18
20
 
19
- pending "#id"
20
- pending "#attachments"
21
+ describe "#id" do
22
+ it "sends a request" do
23
+ stub_request(:post, "https://www.3dhubs.com/api/v1/model")
24
+ .with(body: {"file"=>"Rk9vTwo=\n", "fileName"=>"foo.stl"},
25
+ headers: {'Accept' => 'application/json'})
26
+ .to_return(status: 200, body: '{"modelId":"42"}')
27
+
28
+ expect(model.id).to eq(42)
29
+ end
30
+ end
31
+
32
+ describe "#attachments" do
33
+ it "returns the attachments" do
34
+ model = described_class.new(attachments: { foo: 42 })
35
+ expect(model.attachments).to eq({ foo: 42 })
36
+ end
37
+ end
21
38
  end
data/spec/tip_spec.rb CHANGED
@@ -2,14 +2,14 @@ require "spec_helper"
2
2
  require "hubs3d/model"
3
3
 
4
4
  describe Hubs3D::Tip do
5
- let(:model) { described_class.new(amount: 42_00,
5
+ let(:model) { described_class.new(amount_cents: 42_00,
6
6
  currency: "EUR",
7
- uuid: "51",
7
+ uuid: "51-42-43",
8
8
  mandatory: false) }
9
9
 
10
- describe "#amount" do
11
- it "returns the amount" do
12
- expect(model.amount).to eq(42_00)
10
+ describe "#amount_cents" do
11
+ it "returns the amount_cents" do
12
+ expect(model.amount_cents).to eq(42_00)
13
13
  end
14
14
  end
15
15
 
@@ -21,7 +21,7 @@ describe Hubs3D::Tip do
21
21
 
22
22
  describe "#uuid" do
23
23
  it "returns the uuid" do
24
- expect(model.uuid).to eq("51")
24
+ expect(model.uuid).to eq("51-42-43")
25
25
  end
26
26
  end
27
27
 
@@ -30,4 +30,15 @@ describe Hubs3D::Tip do
30
30
  expect(model.mandatory).to eq(false)
31
31
  end
32
32
  end
33
+
34
+ describe "#to_h" do
35
+ it "returns a serialized tip" do
36
+ expect(model.to_h).to eq(
37
+ amount: 42_00,
38
+ currency: "EUR",
39
+ uuid: "51-42-43",
40
+ mandatory: false
41
+ )
42
+ end
43
+ end
33
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hubs3d
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sunny Ripert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-17 00:00:00.000000000 Z
11
+ date: 2015-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -80,7 +80,7 @@ dependencies:
80
80
  - - '>='
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
- description: Upload 3D Models and create carts on 3DHubs
83
+ description: Upload 3D Models and create carts on 3D Hubs
84
84
  email:
85
85
  - sunny@sunfox.org
86
86
  executables: []
@@ -94,6 +94,7 @@ files:
94
94
  - lib/hubs3d/api.rb
95
95
  - lib/hubs3d/cart.rb
96
96
  - lib/hubs3d/configuration.rb
97
+ - lib/hubs3d/error.rb
97
98
  - lib/hubs3d/model.rb
98
99
  - lib/hubs3d/tip.rb
99
100
  - lib/hubs3d/version.rb
@@ -126,7 +127,7 @@ rubyforge_project:
126
127
  rubygems_version: 2.4.5
127
128
  signing_key:
128
129
  specification_version: 4
129
- summary: Access the 3DHubs API
130
+ summary: Access the 3D Hubs API
130
131
  test_files:
131
132
  - spec/api_spec.rb
132
133
  - spec/cart_spec.rb