ruby-imgur 0.03 → 0.04

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.
@@ -20,6 +20,11 @@ class Imgur::Client < Cistern::Service
20
20
  request :get_accounts
21
21
  request :get_account
22
22
 
23
+ model :comment
24
+ collection :comments
25
+ request :get_comments
26
+ request :get_comment
27
+
23
28
  model :basic_response
24
29
  collection :basic_responses
25
30
 
@@ -110,8 +115,94 @@ class Imgur::Client < Cistern::Service
110
115
  end
111
116
 
112
117
  class Mock
118
+ def self.random_id
119
+ characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
120
+ selection = ''
121
+ 7.times do
122
+ position = rand(characters.length)
123
+ selection << characters[position..position]
124
+ end
125
+ selection
126
+ end
127
+
128
+ def self.random_number
129
+ characters = '1234567890'
130
+ selection = ''
131
+ 7.times do
132
+ position = rand(characters.length)
133
+ selection << characters[position..position]
134
+ end
135
+ selection.to_i
136
+ end
137
+
113
138
  def self.data
114
- @data ||= {}
139
+ @data ||= begin
140
+ image_id = random_id
141
+ account_id = random_number
142
+ account_name = random_id
143
+ album_id = random_id
144
+ comment_id = random_id
145
+
146
+ account = {
147
+ "id" => account_id,
148
+ "url" => "#{account_name}.imgur.com",
149
+ "bio" => nil,
150
+ "reputation" => 435.5,
151
+ "created" => 1349051610,
152
+ }
153
+
154
+ image = {
155
+ "id" => image_id,
156
+ "title" => "test image",
157
+ "datetime" => 1349051625,
158
+ "type" => "image/jpeg",
159
+ "animated" => false,
160
+ "width" => 2490,
161
+ "height" => 3025,
162
+ "size" => 618969,
163
+ "views" => 625622,
164
+ "bandwidth" => 387240623718,
165
+ "ups" => 1889,
166
+ "downs" => 58,
167
+ "score" => 18935622,
168
+ "account_id" => account_id,
169
+ }
170
+
171
+ album = {
172
+ "id" => album_id,
173
+ "title" => "test album",
174
+ "description" => nil,
175
+ "privacy" => "public",
176
+ "cover" => image_id,
177
+ "order" => 0,
178
+ "layout" => "blog",
179
+ "datetime" => 1347058832,
180
+ "link" => "https://imgur.com/a/#{album_id}",
181
+ "account_id" => account_id,
182
+ }
183
+
184
+ comment = {
185
+ "id" => comment_id,
186
+ "image_id" => image_id,
187
+ "author" => account_name,
188
+ "author_id" => account_id,
189
+ "on_album" => false,
190
+ "ups" => 10,
191
+ "downs" => 2,
192
+ "points" => 23.4,
193
+ "datetime" => 1349051670,
194
+ "parent_id" => 2,
195
+ "deleted" => false,
196
+ "children" => [],
197
+ }
198
+
199
+ {
200
+ :images => {image_id => image},
201
+ :accounts => {account_id => account},
202
+ :albums => {album_id => album},
203
+ :comments => {comment_id => comment},
204
+ }
205
+ end
115
206
  end
116
207
 
117
208
  def self.reset!
@@ -122,40 +213,16 @@ class Imgur::Client < Cistern::Service
122
213
  self.class.data
123
214
  end
124
215
 
125
- def initalize(options={})
126
- @url = options[:url] || "https://api.imgur.com"
216
+ def random_id
217
+ self.class.random_id
127
218
  end
128
219
 
129
- def page(params, collection, object_rool, options={})
130
- if params["url"]
131
- uri = URI.parse(params["url"])
132
- params = uri.query.split("&").inject({}) { |r,e| k,v = e.qplit("="); r.merge(k => v) }
133
- end
134
-
135
- resources = options[:resources] || self.data[collection]
136
- page_size = (params["per_page"] || 20).to_i
137
- page_index = (params["page"] || 1).to_i
138
- total_pages = (resources.size.to_f / page_size.to_f).round
139
- offset = (page_index - 1) * page_size
140
- links = []
141
-
142
- resource_page = resources.values.reverse.slice(offset, page_size)
143
-
144
- if page_index < total_pages
145
- links << url_for_page(collection, page_index - 1, page_size, 'next')
146
- end
147
-
148
- if page_index - 1 > 0
149
- links << url_for_page(collection, page_index - 1, page_size, 'prev')
150
- end
151
-
152
- links << url_for_page(collection, total_pages, page_size, 'last')
153
-
154
- [links.join(", "), resource_page]
220
+ def credits
221
+ "980/1000"
155
222
  end
156
223
 
157
- def url_for_page(collection, page_index, page_size, rel)
158
- "<#{File.join(@url, collection.to_s)}?page=#{page_index}&per_page=#{page_size}>; rel=\"#{rel}\""
224
+ def initialize(options={})
225
+ @url = options[:url] || "https://api.imgur.com"
159
226
  end
160
227
 
161
228
  def response(options={})
@@ -167,13 +234,5 @@ class Imgur::Client < Cistern::Service
167
234
 
168
235
  Imgur::Response.new(status, headers, body).raise!
169
236
  end
170
-
171
- def url_for(path)
172
- File.join(@url, path)
173
- end
174
-
175
- def stringify_keys(hash)
176
- hash.inject({}) { |r,(k,v)| r.merge(k.to_s => v) }
177
- end
178
237
  end
179
238
  end
@@ -26,4 +26,10 @@ class Imgur::Client::Image < Imgur::Model
26
26
  data = connection.delete_image(deletehash).body
27
27
  connection.basic_responses.new(data)
28
28
  end
29
+
30
+ def comments
31
+ type = is_album ? "album" : "image"
32
+ data = connection.get_comments(type: type, id: id).body["data"]
33
+ connection.comments.load(data)
34
+ end
29
35
  end
@@ -9,4 +9,22 @@ class Imgur::Client
9
9
  )
10
10
  end
11
11
  end
12
+
13
+ class Mock
14
+ def delete_image(deletehash)
15
+ image = self.data[:images].values.detect { |i| i["deletehash"] == deletehash }
16
+
17
+ self.data[:images].delete_if do |id, image|
18
+ image["deletehash"] == deletehash
19
+ end
20
+
21
+ basic_response = {
22
+ "data" => true,
23
+ "status" => 200,
24
+ "success" => true,
25
+ }
26
+
27
+ response(body: basic_response)
28
+ end
29
+ end
12
30
  end
@@ -8,4 +8,11 @@ class Imgur::Client
8
8
  )
9
9
  end
10
10
  end
11
+
12
+ class Mock
13
+ def get_accounts(params={})
14
+ accounts = self.data[:accounts].values.first
15
+ response(body: {"data" => accounts})
16
+ end
17
+ end
11
18
  end
@@ -8,4 +8,17 @@ class Imgur::Client
8
8
  )
9
9
  end
10
10
  end
11
+
12
+ class Mock
13
+ def get_albums(params={})
14
+ albums = self.data[:albums].values
15
+ albums = if params[:path] =~ /^\/account/
16
+ {"data" => albums.select { |a| !a["account_id"].nil? } }
17
+ else
18
+ {"data" => albums}
19
+ end
20
+
21
+ response(body: albums)
22
+ end
23
+ end
11
24
  end
@@ -9,4 +9,12 @@ class Imgur::Client
9
9
  )
10
10
  end
11
11
  end
12
+
13
+ class Mock
14
+ def get_image(id)
15
+ image = self.data[:images][id["id"]]
16
+
17
+ response(:body => {"data" => image})
18
+ end
19
+ end
12
20
  end
@@ -8,4 +8,17 @@ class Imgur::Client
8
8
  )
9
9
  end
10
10
  end
11
+
12
+ class Mock
13
+ def get_images(params={})
14
+ images = self.data[:images].values
15
+ images = if params[:path] =~ /^\/account/
16
+ {"data" => images.select { |i| !i["account_id"].nil? } }
17
+ else
18
+ {"data" => images}
19
+ end
20
+
21
+ response(body: images)
22
+ end
23
+ end
11
24
  end
@@ -1,6 +1,6 @@
1
1
  class Imgur::Client
2
2
  class Real
3
- def upload_image(options)
3
+ def upload_image(options={})
4
4
  path = "/upload"
5
5
 
6
6
  request(
@@ -10,4 +10,33 @@ class Imgur::Client
10
10
  )
11
11
  end
12
12
  end
13
+
14
+ class Mock
15
+ def upload_image(options={})
16
+ images = self.data[:images]
17
+ image_id = self.random_id
18
+ account_id = self.data[:accounts].values.first["id"]
19
+
20
+ image = {
21
+ "id" => image_id,
22
+ "title" => options[:title],
23
+ "datetime" => 1349051625,
24
+ "type" => "image/jpeg",
25
+ "animated" => false,
26
+ "width" => 2490,
27
+ "height" => 3025,
28
+ "size" => 618969,
29
+ "views" => 625622,
30
+ "bandwidth" => 387240623718,
31
+ "ups" => 1889,
32
+ "downs" => 58,
33
+ "score" => 18935622,
34
+ "deletehash" => self.random_id,
35
+ }
36
+
37
+ images[image_id] = image
38
+
39
+ response(:body => {"data" => image})
40
+ end
41
+ end
13
42
  end
@@ -1,3 +1,3 @@
1
1
  module Imgur
2
- VERSION = "0.03"
2
+ VERSION = "0.04"
3
3
  end
@@ -9,10 +9,19 @@ describe "images" do
9
9
  images.first.should be_a_kind_of(Imgur::Client::Image)
10
10
  end
11
11
 
12
+ it "should have comments" do
13
+ image = client.images.all.first
14
+ image.comments.should_not be_empty
15
+ image.comments.first.should be_a_kind_of(Imgur::Client::Comment)
16
+ end
17
+
12
18
  it "should upload an image from filesystem" do
13
19
  image = File.expand_path("spec/support/ruby_logo.jpg")
14
- response = client.images.upload(image: image, title: "ruby_logo_jpg")
20
+ title = "ruby_logo_jpg"
21
+ response = client.images.upload(image: image, title: title)
15
22
  response.should be_a_kind_of(Imgur::Client::Image)
23
+ image = client.images.get(response.id)
24
+ image.title.should == title
16
25
 
17
26
  response = response.delete
18
27
  response.should be_a_kind_of(Imgur::Client::BasicResponse)
@@ -20,8 +29,11 @@ describe "images" do
20
29
 
21
30
  it "should upload an image from the internet" do
22
31
  image = "http://www.ruby-lang.org/images/logo.gif"
23
- response = client.images.upload(image: image, title: "ruby_logo_gif")
32
+ title = "ruby_logo_gif"
33
+ response = client.images.upload(image: image, title: title)
24
34
  response.should be_a_kind_of(Imgur::Client::Image)
35
+ image = client.images.get(response.id)
36
+ image.title.should == title
25
37
 
26
38
  response = response.delete
27
39
  response.should be_a_kind_of(Imgur::Client::BasicResponse)
@@ -1,3 +1,5 @@
1
+ ENV["IMGUR_MOCK"] ||= 'false'
2
+
1
3
  Bundler.require(:test)
2
4
  Bundler.require(:darwin) if RUBY_PLATFORM.match(/darwin/)
3
5
  require File.expand_path("../../lib/imgur", __FILE__)
@@ -5,6 +7,11 @@ Dir[File.expand_path("../{shared,support}/*.rb", __FILE__)].each{|f| require(f)}
5
7
 
6
8
  Cistern.formatter = Cistern::Formatter::AwesomePrint
7
9
 
10
+ if ENV["IMGUR_MOCK"] == 'true'
11
+ Cistern.timeout = 0
12
+ Imgur::Client.mock!
13
+ end
14
+
8
15
  RSpec.configure do |config|
9
16
  config.before(:all) do
10
17
  Imgur::Client.reset! if Imgur::Client.mocking?
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-imgur
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.03'
4
+ version: '0.04'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-21 00:00:00.000000000 Z
12
+ date: 2013-01-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: multi_json