shapeways_api 0.1.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 +7 -0
- data/lib/shapeways_api.rb +98 -0
- metadata +87 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3a04a6f3c872c0fdba111bb9b108b4c847b3f3d61f35ab8ee2f0967a2fb4491c
|
4
|
+
data.tar.gz: e817bc6dedfeb690bc114d87ed1524b3479c047b20081720ec70df45afd69ab7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 17f77d298004bbb230c684638e9e9cddc695fbe544285cab035af684168d43997543ec5a7764927514335716d2c8ad38f342b4612f9ad27ef97d7bf541119d40
|
7
|
+
data.tar.gz: 53b09ce69e21545d39bc094b6d77f9e47870399dd2698128b0a7a85c09aab7ccd0306ac5a5aa01d7155ad6b1f52152f30cb2a5fa5999dd1396974ab44a78969b
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'uri'
|
3
|
+
require 'json'
|
4
|
+
require 'base64'
|
5
|
+
|
6
|
+
class ShapewaysAPI
|
7
|
+
BASE_URL = 'https://api.shapeways.com'
|
8
|
+
|
9
|
+
def initialize(client_id, client_secret)
|
10
|
+
@client_id = client_id
|
11
|
+
@client_secret = client_secret
|
12
|
+
@access_token = authenticate
|
13
|
+
end
|
14
|
+
|
15
|
+
def authenticate
|
16
|
+
uri = URI("#{BASE_URL}/oauth2/token")
|
17
|
+
request = Net::HTTP::Post.new(uri)
|
18
|
+
request.basic_auth(@client_id, @client_secret)
|
19
|
+
request.set_form_data('grant_type' => 'client_credentials')
|
20
|
+
|
21
|
+
response = send_request(uri, request)
|
22
|
+
response['access_token']
|
23
|
+
end
|
24
|
+
|
25
|
+
def materials
|
26
|
+
uri = URI("#{BASE_URL}/materials/v1?")
|
27
|
+
request = Net::HTTP::Get.new(uri)
|
28
|
+
request['Authorization'] = "Bearer #{@access_token}"
|
29
|
+
|
30
|
+
send_request(uri, request)
|
31
|
+
end
|
32
|
+
|
33
|
+
def get_model(model_id)
|
34
|
+
uri = URI("#{BASE_URL}/models/#{model_id}/v1?")
|
35
|
+
request = Net::HTTP::Get.new(uri)
|
36
|
+
request['Authorization'] = "Bearer #{@access_token}"
|
37
|
+
|
38
|
+
send_request(uri, request)
|
39
|
+
end
|
40
|
+
|
41
|
+
def upload_model(file_path, description)
|
42
|
+
file_name = File.basename(file_path)
|
43
|
+
file_data = File.read(file_path)
|
44
|
+
encoded_file = Base64.strict_encode64(file_data)
|
45
|
+
|
46
|
+
uri = URI("#{BASE_URL}/models/v1")
|
47
|
+
request = Net::HTTP::Post.new(uri)
|
48
|
+
request['Authorization'] = "Bearer #{@access_token}"
|
49
|
+
request['Content-Type'] = 'application/json'
|
50
|
+
|
51
|
+
model_upload_data = {
|
52
|
+
'fileName' => file_name,
|
53
|
+
'file' => encoded_file,
|
54
|
+
'description' => description,
|
55
|
+
'hasRightsToModel' => 1,
|
56
|
+
'acceptTermsAndConditions' => 1
|
57
|
+
}.to_json
|
58
|
+
|
59
|
+
request.body = model_upload_data
|
60
|
+
send_request(uri, request)
|
61
|
+
end
|
62
|
+
|
63
|
+
# Creates an order using the provided order_data
|
64
|
+
# order_data should be a hash with the following structure:
|
65
|
+
# {
|
66
|
+
# 'items' => [{ 'materialId' => material_id, 'modelId' => model_id, 'quantity' => 1 }],
|
67
|
+
# 'firstName' => 'John',
|
68
|
+
# 'lastName' => 'Doe',
|
69
|
+
# 'country' => 'US',
|
70
|
+
# 'state' => 'NY',
|
71
|
+
# 'city' => 'New York',
|
72
|
+
# 'address1' => '419 Park Ave S',
|
73
|
+
# 'address2' => 'Suite 900',
|
74
|
+
# 'zipCode' => '10016',
|
75
|
+
# 'phoneNumber' => '0000000000',
|
76
|
+
# 'paymentVerificationId' => 'YOUR_PAYMENT_VERIFICATION_ID',
|
77
|
+
# 'paymentMethod' => 'credit_card',
|
78
|
+
# 'shippingOption' => 'Cheapest'
|
79
|
+
# }
|
80
|
+
def create_order(order_data)
|
81
|
+
uri = URI("#{BASE_URL}/orders/v1")
|
82
|
+
request = Net::HTTP::Post.new(uri)
|
83
|
+
request['Authorization'] = "Bearer #{@access_token}"
|
84
|
+
request['Content-Type'] = 'application/json'
|
85
|
+
|
86
|
+
request.body = order_data.to_json
|
87
|
+
send_request(uri, request)
|
88
|
+
end
|
89
|
+
|
90
|
+
private
|
91
|
+
|
92
|
+
def send_request(uri, request)
|
93
|
+
response = Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
|
94
|
+
http.request(request)
|
95
|
+
end
|
96
|
+
JSON.parse(response.body)
|
97
|
+
end
|
98
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shapeways_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dmitry Ro
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2025-02-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: stringio
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 3.1.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.1.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.10'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: net-http
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.6'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.6'
|
55
|
+
description: This gem provides an easy-to-use interface to interact with the Shapeways
|
56
|
+
API, including authentication, model management, and order processing.
|
57
|
+
email:
|
58
|
+
- dmitry@falsetrue.io
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- lib/shapeways_api.rb
|
64
|
+
homepage: https://github.com/noroot/shapeways_api
|
65
|
+
licenses:
|
66
|
+
- MIT
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubygems_version: 3.4.10
|
84
|
+
signing_key:
|
85
|
+
specification_version: 4
|
86
|
+
summary: A Ruby wrapper for the Shapeways API
|
87
|
+
test_files: []
|