ruby_imgur 0.2.0 → 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.
Files changed (4) hide show
  1. data/lib/imgur-old.rb +85 -0
  2. data/lib/imgur.rb +37 -42
  3. data/lib/imgur_rails.rb +4 -4
  4. metadata +3 -2
data/lib/imgur-old.rb ADDED
@@ -0,0 +1,85 @@
1
+ require 'open-uri'
2
+ require 'net/http'
3
+ require 'json'
4
+ require 'base64'
5
+
6
+ class Imgur
7
+
8
+ IMAGE_SIZES = { :small => :s, :large => :l }
9
+
10
+ # add an API key to use for uploads
11
+ def self.api_key=( api_key )
12
+ @@api_key = api_key.to_s.chomp
13
+ end
14
+
15
+ def self.upload( options = {} )
16
+ data = options[:data] ||
17
+ options[:url] ||
18
+ Base64.encode64 open(options[:filename]).read
19
+ post_data = { :key => api_key, :image => data }
20
+ post_url = generate_url :method => :upload
21
+ post_uri = URI.parse post_url
22
+ response = JSON (Net::HTTP.post_form post_uri, post_data).body
23
+ { :hash => response["upload"]["image"]["hash"],
24
+ :delete_hash => response["upload"]["image"]["deletehash"],
25
+ :filetype => response["upload"]["image"]["type"].gsub("image\/","") }
26
+ end
27
+
28
+ def self.copy( url )
29
+ upload :url => url
30
+ end
31
+
32
+ def self.upload_file( filename )
33
+ upload :filename => filename
34
+ end
35
+
36
+ def self.get( hash, options = {} )
37
+ open url_for hash, options
38
+ end
39
+
40
+ def self.stats
41
+ json_get :method => :stats
42
+ end
43
+
44
+ def self.delete( delete_hash )
45
+ json_get( :hash => delete_hash, :method => :delete )["delete"]["message"] == "Success"
46
+ end
47
+
48
+ def self.album( hash, options = {} )
49
+ json_get :hash => hash, :method => :album
50
+ end
51
+
52
+ def self.url_for( hash, options = {} )
53
+ size = IMAGE_SIZES[options[:size]]
54
+ filetype = options[:filetype] || :png
55
+ if filetype == :detect
56
+ filetype = json_get( :hash => hash, :method => :image )["image"]["image"]["type"].gsub "image\/", ""
57
+ end
58
+ "http://i.imgur.com/#{hash}#{size}.#{filetype}"
59
+ end
60
+
61
+ class << self
62
+ alias_method :[], :url_for
63
+ end
64
+
65
+ private
66
+
67
+ def self.api_key
68
+ @@api_key
69
+ end
70
+
71
+ def self.json_get( options = {} )
72
+ JSON open(generate_url options).read
73
+ end
74
+
75
+ def self.generate_url( options = {} )
76
+ hash = options[:hash]
77
+ method = options[:method]
78
+ url = "http://api.imgur.com/2/"
79
+ url += method.to_s
80
+ url += "/" + hash.to_s if hash
81
+ url += ".json"
82
+ url
83
+ end
84
+
85
+ end
data/lib/imgur.rb CHANGED
@@ -1,26 +1,32 @@
1
- require 'open-uri'
2
- require 'net/http'
1
+ require 'httpclient'
3
2
  require 'json'
4
3
  require 'base64'
5
4
 
6
5
  class Imgur
7
6
 
8
- # add an API key to use for uploads
9
- def self.api_key=( api_key )
10
- @@api_key = api_key.to_s.chomp
7
+ ImgurException = Class.new Exception
8
+
9
+ IMAGE_SIZES = { :small => :s, :medium => :m, :large => :l }
10
+
11
+ def self.client_id=( client_id )
12
+ @@client_id = client_id
11
13
  end
12
14
 
13
15
  def self.upload( options = {} )
14
16
  data = options[:data] ||
15
17
  options[:url] ||
16
18
  Base64.encode64(open(options[:filename]).read)
17
- post_data = { :key => @@api_key, :image => data }
19
+ post_data = { :image => data }
18
20
  post_url = generate_url :method => :upload
19
- post_uri = URI.parse post_url
20
- response = JSON (Net::HTTP.post_form post_uri, post_data).body
21
- { :hash => response["upload"]["image"]["hash"],
22
- :delete_hash => response["upload"]["image"]["deletehash"],
23
- :filetype => response["upload"]["image"]["type"].gsub("image\/","") }
21
+ response = JSON http.post(post_url, post_data, header).body
22
+ raise ImgurException.new response["data"]["error"] if response["data"]["error"]
23
+ { :hash => response["data"]["id"],
24
+ :delete_hash => response["data"]["deletehash"],
25
+ :filetype => response["data"]["link"].match(/\.(\w*)\Z/)[1] }
26
+ end
27
+
28
+ def self.copy( url )
29
+ upload :url => url
24
30
  end
25
31
 
26
32
  def self.upload_file( filename )
@@ -28,59 +34,48 @@ class Imgur
28
34
  end
29
35
 
30
36
  def self.get( hash, options = {} )
31
- open url_for hash, options
32
- end
33
-
34
- def self.stats
35
- json_get :method => :stats
37
+ http.get_content url_for hash, options
36
38
  end
37
39
 
38
40
  def self.delete( delete_hash )
39
- json_get( :hash => delete_hash, :method => :delete )["delete"]["message"] == "Success"
40
- end
41
-
42
- def self.album( hash, options = {} )
43
- json_get :hash => hash, :method => :album
41
+ url = generate_url :hash => delete_hash, :method => :image
42
+ response = JSON http.delete( url, {}, header ).body
43
+ response["success"] == true
44
44
  end
45
45
 
46
46
  def self.url_for( hash, options = {} )
47
- sizes = {
48
- :small => :s,
49
- :large => :l }
50
- if options[:filetype] == :detect
51
- # fix this it's ugly
52
- options[:filetype] = json_get( :hash => hash, :method => :image )["image"]["image"]["type"].gsub("image\/","")
47
+ size = IMAGE_SIZES[options[:size].to_sym] if options[:size]
48
+ filetype = options[:filetype] || :png
49
+ if filetype == :detect
50
+ filetype = json_get( :hash => hash, :method => :image )["data"]["link"].match(/\.(\w*)\Z/)[1]
53
51
  end
54
- "http://i.imgur.com/#{hash}#{sizes[options[:size]]}.#{options[:filetype] || :png}"
55
- end
56
-
57
- def self.debug=( debug_setting )
58
- @debug = debug_setting
59
- end
60
-
61
- class << self
62
- alias_method :[], :url_for
52
+ "http://i.imgur.com/#{hash}#{size}.#{filetype}"
63
53
  end
64
54
 
65
55
  private
66
56
 
67
- def debug( thing_to_debug, message = "" )
68
- puts message + thing_to_debug.to_s
69
- thing_to_debug
57
+ def self.header
58
+ { "Authorization" => "Client-ID #{@@client_id}" }
70
59
  end
71
60
 
72
61
  def self.json_get( options = {} )
73
- JSON open(generate_url options).read
62
+ response = JSON http.get_content generate_url(options), {}, header
63
+ raise ImgurException.new response["data"]["error"] if response["data"]["error"]
74
64
  end
75
65
 
76
66
  def self.generate_url( options = {} )
77
67
  hash = options[:hash]
78
68
  method = options[:method]
79
- url = "http://api.imgur.com/2/"
69
+ url = "https://api.imgur.com/3/"
80
70
  url += method.to_s
81
71
  url += "/" + hash.to_s if hash
82
72
  url += ".json"
83
- url
73
+ end
74
+
75
+ def self.http
76
+ @@http ||= HTTPClient.new
77
+ @@http.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
78
+ @@http
84
79
  end
85
80
 
86
81
  end
data/lib/imgur_rails.rb CHANGED
@@ -23,13 +23,13 @@ module ImgurRails
23
23
  module InstanceMethods
24
24
 
25
25
  def url
26
- filetype = ( self.respond_to? :filetype ? self.filetype : :any )
27
- Imgur.url_for self.image_hash, :filetype => filetype
26
+ type = ( self.respond_to? :filetype ) ? self.filetype : :detect
27
+ Imgur.url_for self.image_hash, :filetype => type
28
28
  end
29
29
 
30
30
  def thumbnail( size = :small )
31
- filetype = ( self.respond_to? :filetype ? self.filetype : :any )
32
- Imgur.url_for self.image_hash, :filetype => filetype, :size => size
31
+ type = { :small => :jpeg, :medium => :jpg }[size]
32
+ Imgur.url_for self.image_hash, :filetype => type, :size => size
33
33
  end
34
34
 
35
35
  def is_image?
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.2.0
4
+ version: 1.0.0
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-06-03 00:00:00.000000000 Z
12
+ date: 2013-02-20 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description:
15
15
  email: fraser.m.murray@gmail.com
@@ -20,6 +20,7 @@ files:
20
20
  - lib/imgur_rails.rb
21
21
  - lib/test
22
22
  - lib/imgur.rb
23
+ - lib/imgur-old.rb
23
24
  homepage: ''
24
25
  licenses: []
25
26
  post_install_message: