Class: Thingiverse::Things
- Inherits:
-
Object
- Object
- Thingiverse::Things
- Includes:
- ActiveModel::Validations
- Defined in:
- lib/thingiverse/things.rb
Instance Attribute Summary collapse
-
#added ⇒ Object
Returns the value of attribute added.
-
#ancestors ⇒ Object
Returns the value of attribute ancestors.
-
#ancestors_url ⇒ Object
Returns the value of attribute ancestors_url.
-
#categories_url ⇒ Object
Returns the value of attribute categories_url.
-
#category ⇒ Object
Returns the value of attribute category.
-
#creator ⇒ Object
Returns the value of attribute creator.
-
#derivatives_url ⇒ Object
Returns the value of attribute derivatives_url.
-
#description ⇒ Object
Returns the value of attribute description.
-
#files_url ⇒ Object
Returns the value of attribute files_url.
-
#id ⇒ Object
Returns the value of attribute id.
-
#images_url ⇒ Object
Returns the value of attribute images_url.
-
#instructions ⇒ Object
Returns the value of attribute instructions.
-
#is_published ⇒ Object
Returns the value of attribute is_published.
-
#is_wip ⇒ Object
Returns the value of attribute is_wip.
-
#license ⇒ Object
Returns the value of attribute license.
-
#like_count ⇒ Object
Returns the value of attribute like_count.
-
#likes_url ⇒ Object
Returns the value of attribute likes_url.
-
#modified ⇒ Object
Returns the value of attribute modified.
-
#name ⇒ Object
Returns the value of attribute name.
-
#public_url ⇒ Object
Returns the value of attribute public_url.
-
#ratings_enabled ⇒ Object
Returns the value of attribute ratings_enabled.
-
#tags ⇒ Object
Returns the value of attribute tags.
-
#tags_url ⇒ Object
Returns the value of attribute tags_url.
-
#thumbnail ⇒ Object
Returns the value of attribute thumbnail.
-
#url ⇒ Object
Returns the value of attribute url.
Class Method Summary collapse
Instance Method Summary collapse
-
#ancestor_things ⇒ Object
TODO: this is a dumb name, come up with a better way to set/retrieve.
- #attributes ⇒ Object
- #categories ⇒ Object
- #files ⇒ Object
- #images ⇒ Object
-
#initialize(params = {}) ⇒ Things
constructor
A new instance of Things.
- #publish ⇒ Object
- #save ⇒ Object
-
#tag_records ⇒ Object
TODO: this is a dumb name, come up with a better way to set/retrieve.
- #upload(file) ⇒ Object
- #user ⇒ Object
Constructor Details
#initialize(params = {}) ⇒ Things
Returns a new instance of Things.
11 12 13 14 15 |
# File 'lib/thingiverse/things.rb', line 11 def initialize(params={}) params.each do |name, value| send("#{name}=", value) end end |
Instance Attribute Details
#added ⇒ Object
Returns the value of attribute added.
6 7 8 |
# File 'lib/thingiverse/things.rb', line 6 def added @added end |
#ancestors ⇒ Object
Returns the value of attribute ancestors.
9 10 11 |
# File 'lib/thingiverse/things.rb', line 9 def ancestors @ancestors end |
#ancestors_url ⇒ Object
Returns the value of attribute ancestors_url.
8 9 10 |
# File 'lib/thingiverse/things.rb', line 8 def ancestors_url @ancestors_url end |
#categories_url ⇒ Object
Returns the value of attribute categories_url.
8 9 10 |
# File 'lib/thingiverse/things.rb', line 8 def categories_url @categories_url end |
#category ⇒ Object
Returns the value of attribute category.
9 10 11 |
# File 'lib/thingiverse/things.rb', line 9 def category @category end |
#creator ⇒ Object
Returns the value of attribute creator.
6 7 8 |
# File 'lib/thingiverse/things.rb', line 6 def creator @creator end |
#derivatives_url ⇒ Object
Returns the value of attribute derivatives_url.
8 9 10 |
# File 'lib/thingiverse/things.rb', line 8 def derivatives_url @derivatives_url end |
#description ⇒ Object
Returns the value of attribute description.
7 8 9 |
# File 'lib/thingiverse/things.rb', line 7 def description @description end |
#files_url ⇒ Object
Returns the value of attribute files_url.
8 9 10 |
# File 'lib/thingiverse/things.rb', line 8 def files_url @files_url end |
#id ⇒ Object
Returns the value of attribute id.
6 7 8 |
# File 'lib/thingiverse/things.rb', line 6 def id @id end |
#images_url ⇒ Object
Returns the value of attribute images_url.
8 9 10 |
# File 'lib/thingiverse/things.rb', line 8 def images_url @images_url end |
#instructions ⇒ Object
Returns the value of attribute instructions.
7 8 9 |
# File 'lib/thingiverse/things.rb', line 7 def instructions @instructions end |
#is_published ⇒ Object
Returns the value of attribute is_published.
6 7 8 |
# File 'lib/thingiverse/things.rb', line 6 def is_published @is_published end |
#is_wip ⇒ Object
Returns the value of attribute is_wip.
6 7 8 |
# File 'lib/thingiverse/things.rb', line 6 def is_wip @is_wip end |
#license ⇒ Object
Returns the value of attribute license.
7 8 9 |
# File 'lib/thingiverse/things.rb', line 7 def license @license end |
#like_count ⇒ Object
Returns the value of attribute like_count.
7 8 9 |
# File 'lib/thingiverse/things.rb', line 7 def like_count @like_count end |
#likes_url ⇒ Object
Returns the value of attribute likes_url.
8 9 10 |
# File 'lib/thingiverse/things.rb', line 8 def likes_url @likes_url end |
#modified ⇒ Object
Returns the value of attribute modified.
6 7 8 |
# File 'lib/thingiverse/things.rb', line 6 def modified @modified end |
#name ⇒ Object
Returns the value of attribute name.
6 7 8 |
# File 'lib/thingiverse/things.rb', line 6 def name @name end |
#public_url ⇒ Object
Returns the value of attribute public_url.
6 7 8 |
# File 'lib/thingiverse/things.rb', line 6 def public_url @public_url end |
#ratings_enabled ⇒ Object
Returns the value of attribute ratings_enabled.
7 8 9 |
# File 'lib/thingiverse/things.rb', line 7 def @ratings_enabled end |
#tags ⇒ Object
Returns the value of attribute tags.
9 10 11 |
# File 'lib/thingiverse/things.rb', line 9 def @tags end |
#tags_url ⇒ Object
Returns the value of attribute tags_url.
8 9 10 |
# File 'lib/thingiverse/things.rb', line 8 def @tags_url end |
#thumbnail ⇒ Object
Returns the value of attribute thumbnail.
6 7 8 |
# File 'lib/thingiverse/things.rb', line 6 def thumbnail @thumbnail end |
#url ⇒ Object
Returns the value of attribute url.
6 7 8 |
# File 'lib/thingiverse/things.rb', line 6 def url @url end |
Class Method Details
.create(params) ⇒ Object
184 185 186 187 188 189 190 191 192 |
# File 'lib/thingiverse/things.rb', line 184 def self.create(params) thing = self.new(params) raise "Invalid Parameters" unless thing.valid? response = Thingiverse::Connection.post('/things', :body => thing.attributes.to_json) raise "#{response.code}: #{JSON.parse(response.body)['error']} #{response.headers['x-error']}" unless response.success? self.new(response.parsed_response) end |
.find(thing_id) ⇒ Object
170 171 172 173 174 |
# File 'lib/thingiverse/things.rb', line 170 def self.find(thing_id) response = Thingiverse::Connection.get("/things/#{thing_id}") raise "#{response.code}: #{JSON.parse(response.body)['error']} #{response.headers['x-error']}" unless response.success? self.new response.parsed_response end |
.newest ⇒ Object
176 177 178 179 180 181 182 |
# File 'lib/thingiverse/things.rb', line 176 def self.newest response = Thingiverse::Connection.get('/newest') raise "#{response.code}: #{JSON.parse(response.body)['error']}" unless response.success? response.parsed_response.collect do |attrs| self.new attrs end end |
Instance Method Details
#ancestor_things ⇒ Object
TODO: this is a dumb name, come up with a better way to set/retrieve
78 79 80 81 82 83 84 |
# File 'lib/thingiverse/things.rb', line 78 def ancestor_things response = Thingiverse::Connection.get(ancestors_url) raise "#{response.code}: #{JSON.parse(response.body)['error']}" unless response.success? response.parsed_response.collect do |attrs| Thingiverse::Things.new attrs end end |
#attributes ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/thingiverse/things.rb', line 17 def attributes { :id => id.to_s, :name => name.to_s, :thumbnail => thumbnail.to_s, :url => url.to_s, :public_url => public_url.to_s, :creator => creator.to_s, :added => added.to_s, :modified => modified.to_s, :is_published => is_published != true ? false : true, :is_wip => is_wip != true ? false : true, :ratings_enabled => != true ? false : true, :like_count => like_count.to_s, :description => description.to_s, :instructions => instructions.to_s, :license => license.to_s, :files_url => files_url.to_s, :images_url => images_url.to_s, :likes_url => likes_url.to_s, :ancestors_url => ancestors_url.to_s, :derivatives_url => derivatives_url.to_s, :tags_url => .to_s, :categories_url => categories_url.to_s, :category => category.to_s, :ancestors => ancestors || [], :tags => || [] } end |
#categories ⇒ Object
69 70 71 72 73 74 75 |
# File 'lib/thingiverse/things.rb', line 69 def categories response = Thingiverse::Connection.get(categories_url) raise "#{response.code}: #{JSON.parse(response.body)['error']}" unless response.success? response.parsed_response.collect do |attrs| Thingiverse::Categories.new attrs end end |
#files ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/thingiverse/things.rb', line 53 def files response = Thingiverse::Connection.get(files_url) raise "#{response.code}: #{JSON.parse(response.body)['error']}" unless response.success? response.parsed_response.collect do |attrs| Thingiverse::Files.new attrs end end |
#images ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/thingiverse/things.rb', line 61 def images response = Thingiverse::Connection.get(images_url) raise "#{response.code}: #{JSON.parse(response.body)['error']}" unless response.success? response.parsed_response.collect do |attrs| Thingiverse::Images.new attrs end end |
#publish ⇒ Object
155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/thingiverse/things.rb', line 155 def publish if id.to_s == "" raise "Cannot publish until thing is saved" else response = Thingiverse::Connection.post("/things/#{id}/publish") raise "#{response.code}: #{JSON.parse(response.body)['error']}" unless response.success? thing = Thingiverse::Things.new(response.parsed_response) end thing.attributes.each do |name, value| send("#{name}=", value) end end |
#save ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/thingiverse/things.rb', line 95 def save if id.to_s == "" thing = Thingiverse::Things.create(attributes) else raise "Invalid Parameters" unless self.valid? response = Thingiverse::Connection.patch("/things/#{id}", :body => attributes.to_json) raise "#{response.code}: #{JSON.parse(response.body)['error']}" unless response.success? thing = Thingiverse::Things.new(response.parsed_response) end thing.attributes.each do |name, value| send("#{name}=", value) end end |
#tag_records ⇒ Object
TODO: this is a dumb name, come up with a better way to set/retrieve
87 88 89 90 91 92 93 |
# File 'lib/thingiverse/things.rb', line 87 def tag_records response = Thingiverse::Connection.get() raise "#{response.code}: #{JSON.parse(response.body)['error']}" unless response.success? response.parsed_response.collect do |attrs| Thingiverse::Tags.new attrs end end |
#upload(file) ⇒ Object
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'lib/thingiverse/things.rb', line 112 def upload(file) response = Thingiverse::Connection.post("/things/#{id}/files", :body => {:filename => File.basename(file.path)}.to_json) raise "#{response.code}: #{JSON.parse(response.body)['error']} #{response.headers['x-error']}" unless response.success? parsed_response = JSON.parse(response.body) action = parsed_response["action"] query = parsed_response["fields"] query["file"] = file # stupid S3 requires params to be in a certain order... so can't use HTTParty :( # prepare post data post_data = [] # TODO: is query['bucket'] needed here? post_data << Curl::PostField.content('key', query['key']) post_data << Curl::PostField.content('AWSAccessKeyId', query['AWSAccessKeyId']) post_data << Curl::PostField.content('acl', query['acl']) post_data << Curl::PostField.content('success_action_redirect', query['success_action_redirect']) post_data << Curl::PostField.content('policy', query['policy']) post_data << Curl::PostField.content('signature', query['signature']) post_data << Curl::PostField.content('Content-Type', query['Content-Type']) post_data << Curl::PostField.content('Content-Disposition', query['Content-Disposition']) post_data << Curl::PostField.file('file', file.path) # post c = Curl::Easy.new(action) do |curl| # curl.verbose = true # can't follow redirect to finalize here because need to pass access_token for auth curl.follow_location = false end c.multipart_form_post = true c.http_post(post_data) if c.response_code == 303 # finalize it response = Thingiverse::Connection.post(query['success_action_redirect']) raise "#{response.code}: #{JSON.parse(response.body)['error']} #{response.headers['x-error']}" unless response.success? Thingiverse::Files.new(response.parsed_response) else raise "#{c.response_code}: #{c.body_str}" end end |
#user ⇒ Object
47 48 49 50 51 |
# File 'lib/thingiverse/things.rb', line 47 def user response = Thingiverse::Connection.get("/users/#{creator['name']}") raise "#{response.code}: #{JSON.parse(response.body)['error']}" unless response.success? Thingiverse::Users.new response.parsed_response end |