imgur-api 0.0.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ab91171bd2f3ec61e508f2b9b8e85eac18479562
4
+ data.tar.gz: 41bd543ea770fe094d6c0903de6e862954dc4f6e
5
+ SHA512:
6
+ metadata.gz: 7be725a58539db5d13b304476e7e1dd412780aea4b7d12eb62214796f379e44564d060a59598d5dcbddc5301305b92d327b0de9855aa5fcc494d4b61f26da2cc
7
+ data.tar.gz: f554e94eeac10659d4f1b3a6dc7b972b8ab86d05239b5720ea18b136ff200a426f5aefcd64e5269e2402d9c1bc3121b46d00284361c52eae1965abadde1060ad
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+
19
+ .idea
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in imgur.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 August
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,38 @@
1
+ # Imgur
2
+
3
+ Ruby wrapper for the Imgur API.
4
+
5
+ ## Installation
6
+
7
+ If you're using Bundler:
8
+
9
+ ```ruby
10
+ gem 'imgur', github: 'augustt198/imgur'
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ For anonymous usage, create a new client with your Client-ID
16
+
17
+ ```ruby
18
+ client = Imgur.new(client_id) # or Imgur::Client.new(client_id)
19
+ ```
20
+
21
+ To upload an image, first create a `Imgur::LocalImage`
22
+ ```ruby
23
+ image = Imgur::LocalImage.new('path/to/image', title: 'Awesome photo')
24
+ ```
25
+
26
+ Then use the client to upload it and recieve a `Imgur::Image`
27
+ ```ruby
28
+ uploaded = client.upload(image)
29
+ # uploaded.link => http://i.imgur.com/...
30
+ ```
31
+
32
+ Creating an album is super easy!
33
+ ```ruby
34
+ # The first argument can also be an array of images, or nil for a blank album.
35
+ album = client.new_album(uploaded, title: 'My Photography')
36
+
37
+ # album.link => http://imgur.com/a/...
38
+ ```
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'imgur/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'imgur-api'
8
+ spec.version = Imgur::VERSION
9
+ spec.authors = ['August']
10
+ spec.email = ['augustt198@gmail.com']
11
+ spec.description = %q{Imgur API wrapper}
12
+ spec.summary = %q{Imgur API wrapper}
13
+ spec.homepage = ''
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.3'
22
+ spec.add_development_dependency 'rake'
23
+ spec.add_dependency 'httparty'
24
+
25
+ end
@@ -0,0 +1,190 @@
1
+ require 'imgur/version'
2
+ require 'httparty'
3
+
4
+ module Imgur
5
+
6
+ HTML_PATH = 'https://imgur.com/'
7
+ API_PATH = 'https://api.imgur.com/3/'
8
+ UPLOAD_PATH = 'upload'
9
+ IMAGE_PATH = 'image/'
10
+ ALBUM_GET_PATH = 'album/'
11
+ ALBUM_CREATE_PATH = 'album'
12
+
13
+ class Client
14
+ attr_accessor :client_id
15
+
16
+ def initialize(client_id)
17
+ @client_id = client_id
18
+ end
19
+
20
+ def post(url, body={})
21
+ HTTParty.post(url, body: body, headers: auth_header)
22
+ end
23
+
24
+ def get(url, data={})
25
+ HTTParty.get(url, query: data, headers: auth_header)
26
+ end
27
+
28
+ def get_image(id)
29
+ url = API_PATH + IMAGE_PATH + id
30
+ resp = get(url).parsed_response
31
+ Image.new(resp['data'])
32
+ end
33
+
34
+ def get_album(id)
35
+ url = API_PATH + ALBUM_GET_PATH + id
36
+ resp = get(url).parsed_response
37
+ Album.new resp['data']
38
+ end
39
+
40
+ def upload(local_file)
41
+ local_file.file.rewind
42
+ image = local_file.file.read
43
+ body = {image: image, type: 'file'}
44
+ body[:title] = local_file.title if local_file.title
45
+ body[:description] = local_file.description if local_file.description
46
+ body[:album] = local_file.album_id if local_file.album_id
47
+ resp = post(API_PATH + UPLOAD_PATH, body).parsed_response
48
+ # the Imgur API doesn't send title or description back apparently.
49
+ data = resp['data'].merge({'title' => body[:title], 'description' => body[:description]})
50
+ Image.new(data)
51
+ end
52
+
53
+ def new_album(images=nil, options={})
54
+ image_ids = []
55
+ if images.is_a? Array
56
+ if images[0].is_a? Image
57
+ images.each do |img|
58
+ image_ids << img.id
59
+ end
60
+ elsif images[0].is_a? String
61
+ image_ids = images
62
+ end
63
+ elsif
64
+ if images.is_a? Image
65
+ image_ids << images.id
66
+ elsif images.is_a? String
67
+ image_ids << images
68
+ end
69
+ end
70
+ options[:cover] = options[:cover].id if options[:cover].is_a? Image
71
+ body = {ids: image_ids}.merge options
72
+ url = API_PATH + ALBUM_CREATE_PATH
73
+ resp = post(url, body).parsed_response
74
+ id = resp['data']['id']
75
+ album = get_album id
76
+ album.deletehash = resp['data']['deletehash']
77
+ album
78
+ end
79
+
80
+ def auth_header
81
+ {'Authorization' => 'Client-ID ' + @client_id}
82
+ end
83
+
84
+ end
85
+
86
+ class Album
87
+ attr_accessor :id
88
+ attr_accessor :title
89
+ attr_accessor :description
90
+ attr_accessor :date
91
+ attr_accessor :cover
92
+ attr_accessor :cover_width
93
+ attr_accessor :cover_height
94
+ attr_accessor :account_url
95
+ attr_accessor :privacy
96
+ attr_accessor :layout
97
+ attr_accessor :views
98
+ attr_accessor :link
99
+ attr_accessor :deletehash
100
+ attr_accessor :images_count
101
+ attr_accessor :images
102
+
103
+ def initialize(data)
104
+ @id = data['id']
105
+ @title = data['title']
106
+ @description = data['description']
107
+ @date = Time.at data['datetime']
108
+ @cover = data['cover']
109
+ @cover_width = data['cover_width']
110
+ @account_url = data['account_url']
111
+ @privacy = data['privacy']
112
+ @layout = data['layout']
113
+ @views = data['views']
114
+ @link = data['link']
115
+ @deletehash = data['deletehash']
116
+ @images_count = data['images_count']
117
+ @images = []
118
+ data['images'].each do |img|
119
+ @images << Image.new(img)
120
+ end
121
+ end
122
+ end
123
+
124
+ # Represents an image stored on the computer
125
+ class LocalImage
126
+ attr_accessor :file
127
+ attr_accessor :title
128
+ attr_accessor :description
129
+ attr_accessor :album_id
130
+
131
+ def initialize(file, options={})
132
+ if file.is_a? String
133
+ @file = File.open file, 'rb'
134
+ else
135
+ @file = file
136
+ end
137
+ @title = options[:title]
138
+ @description = options[:description]
139
+ @album_id = options[:album_id]
140
+ end
141
+
142
+ end
143
+
144
+ # Represents an image on Imgur
145
+ class Image
146
+ attr_accessor :id
147
+ attr_accessor :title
148
+ attr_accessor :description
149
+ attr_accessor :date # Time object of :datetime
150
+ attr_accessor :type
151
+ attr_accessor :animated
152
+ attr_accessor :width
153
+ attr_accessor :height
154
+ attr_accessor :size
155
+ attr_accessor :views
156
+ attr_accessor :bandwidth
157
+ attr_accessor :favorite
158
+ attr_accessor :nsfw
159
+ attr_accessor :section
160
+ attr_accessor :deletehash
161
+ attr_accessor :link
162
+ attr_accessor :html_link
163
+
164
+ def initialize(data)
165
+ @id = data['id']
166
+ @title = data['title']
167
+ @description = data['description']
168
+ @date = Time.at data['datetime']
169
+ @type = data['type']
170
+ @animated = data['animated']
171
+ @width = data['width']
172
+ @height = data['height']
173
+ @size = data['size']
174
+ @views = data['views']
175
+ @bandwidth = data['bandwidth']
176
+ @favorite = data['favorite']
177
+ @nsfw = data['nsfw']
178
+ @section = data['section']
179
+ @deletehash = data['deletehash']
180
+ @link = data['link']
181
+ @html_link = HTML_PATH + @id
182
+ end
183
+
184
+ end
185
+
186
+ def self.new(client_id)
187
+ Client.new client_id
188
+ end
189
+
190
+ end
@@ -0,0 +1,3 @@
1
+ module Imgur
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,94 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: imgur-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - August
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: httparty
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Imgur API wrapper
56
+ email:
57
+ - augustt198@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - imgur.gemspec
68
+ - lib/imgur.rb
69
+ - lib/imgur/version.rb
70
+ homepage: ''
71
+ licenses:
72
+ - MIT
73
+ metadata: {}
74
+ post_install_message:
75
+ rdoc_options: []
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ required_rubygems_version: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ requirements: []
89
+ rubyforge_project:
90
+ rubygems_version: 2.2.0.rc.1
91
+ signing_key:
92
+ specification_version: 4
93
+ summary: Imgur API wrapper
94
+ test_files: []