imgurr 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c6777d3dbff2111a8da2b309dfbd7d6770b35858
4
- data.tar.gz: 8235aa8f016c17665b6fb882372d839852588538
3
+ metadata.gz: 896266ace91ad81bebc3bd35bd2b76c92ee94535
4
+ data.tar.gz: 87c9c88f338ee26aafe7370ba72b2fa458866850
5
5
  SHA512:
6
- metadata.gz: 7808e86a9294e2e3310081dbbe6d77ce0a20b8eeb2ba7f6cc7ece4acc86597134b86cab93bb0a333d4e95bdeb24ca653cd4d2f9bf8fc9366c959fcf60bf2b195
7
- data.tar.gz: 326758a27bb0a30130cbb11c106956456abea1c6da9daf1788f347a0e9285f1afa78fe2b55e06982500052ecd40cd306d596f30d5f8a9713a630ae7197f5f9b2
6
+ metadata.gz: 86b3107f8c45e27e4df59bf1927198a7368b6f17c6068ca43c3f37c42cdce88688e7449e2bf0456868110376e7dd7b11017f8725dd2d3c6d2d551577d9ac56ff
7
+ data.tar.gz: 75f5a0287e0d01ae06655c07b887aa5998960b3b3c4b2d7778d9208be3e1346d778d4a3153644402c792cc05da97ddedc84d5c61f639ba04ffef824c31a2524c
data/README.md CHANGED
@@ -13,13 +13,13 @@ Command line utility for Imgur in Ruby. Imgurr lets you quickly upload images, g
13
13
  Uploading screenshot...
14
14
  Copied http://i.imgur.com/rGoGCNb.png to clipboard
15
15
 
16
- $ imgurr upload image.jpg
16
+ $ imgurr upload image.gif
17
17
  Copied http://i.imgur.com/PLWGJlc.gif to clipboard
18
18
 
19
19
  $ imgurr upload image.jpg --markdown
20
20
  Copied ![Screenshot](http://i.imgur.com/PLWGJlc.gif) to clipboard
21
21
 
22
- imgurr info 2KxrTAK
22
+ $ imgurr info 2KxrTAK
23
23
  Image ID : 2KxrTAK
24
24
  Views : 14717
25
25
  Bandwidth : 2.296 GiB
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'imgurr'
3
- s.version = '0.2.0'
3
+ s.version = '1.0.0'
4
4
  s.summary = "Imgurr lets you upload images to imgur from the command line"
5
5
  s.description = "Imgurr is a ruby gem that lets you upload images to Imgur and manage your account"
6
6
  s.authors = ["Christophe Naud-Dulude"]
@@ -23,7 +23,7 @@ Gem::Specification.new do |s|
23
23
 
24
24
  s.license = 'MIT'
25
25
 
26
- s.files = %w( README.md LICENSE.md Gemfile Gemfile.lock imgurr.gemspec Rakefile)
26
+ s.files = %w( README.md LICENSE.md Gemfile imgurr.gemspec Rakefile)
27
27
  s.files += Dir.glob("lib/**/*")
28
28
  s.files += Dir.glob("bin/**/*")
29
29
  s.files += Dir.glob("test/**/*")
@@ -1,7 +1,7 @@
1
1
  # coding: utf-8
2
2
 
3
3
  begin
4
- require 'rubygems'
4
+ require 'rubygems'
5
5
  rescue LoadError
6
6
  end
7
7
 
@@ -24,7 +24,7 @@ require 'imgurr/imgurErrors'
24
24
  require 'imgurr/command'
25
25
 
26
26
  module Imgurr
27
- VERSION = '0.1.2'
27
+ VERSION = '0.2.0'
28
28
  DEBUG = false
29
29
 
30
30
  def self.storage
@@ -110,6 +110,8 @@ module Imgurr
110
110
  return info(major) if command == 'info' || command == 'i'
111
111
  return delete(major,minor) if command == 'delete' || command == 'd'
112
112
  else
113
+ return list if command == 'list' || command == 'l'
114
+
113
115
  puts "Argument required for commmand #{command}."
114
116
  puts "imgurr --help for more information."
115
117
  return
@@ -124,6 +126,7 @@ module Imgurr
124
126
  puts "File #{major} not found."
125
127
  return
126
128
  end
129
+ major = File.absolute_path(major)
127
130
  response, success = ImgurAPI.upload(major)
128
131
  puts response unless success
129
132
  if success
@@ -160,6 +163,21 @@ module Imgurr
160
163
  end
161
164
  end
162
165
 
166
+ # Public: List uploaded images
167
+ #
168
+ # Returns nothing
169
+ def list
170
+ items = storage.items
171
+ if items.empty?
172
+ puts 'No items in the list.'
173
+ return
174
+ end
175
+
176
+ storage.items.each do |(id, data)|
177
+ puts "#{id} #{data[:stamp]} #{data[:source].ljust(48)}"
178
+ end
179
+ end
180
+
163
181
  # Public: build HTML image tag response
164
182
  #
165
183
  # Returns a properly formatted HTML <img> tag
@@ -181,6 +199,7 @@ module Imgurr
181
199
  #
182
200
  # Returns nothing
183
201
  def delete(major,minor)
202
+ major = major.to_sym
184
203
  if minor
185
204
  delete_hash = minor
186
205
  else
@@ -194,6 +213,8 @@ module Imgurr
194
213
  end
195
214
  if ImgurAPI.delete(delete_hash)
196
215
  puts 'Successfully deleted image from Imgur'
216
+ storage.delete(major)
217
+ storage.save
197
218
  else
198
219
  puts 'Unauthorized Access. Wrong delete hash?'
199
220
  end
@@ -259,6 +280,7 @@ module Imgurr
259
280
  [--tile="Title"] Set image title
260
281
  [--desc="Desc" ] Set image description
261
282
  imgurr capture Capture a screenshot and upload it (OS X only)
283
+ imgurr list List uploaded images
262
284
  imgurr info <id> Print image information
263
285
  imgurr delete <id> Deletes an image from imgur if the deletehash is found locally
264
286
  imgurr delete <id> <deletehash> Deletes an image from imgur with the provided deletehash
@@ -51,7 +51,7 @@ module Imgurr
51
51
  request.add_field('Authorization', API_PUBLIC_KEY)
52
52
 
53
53
  response = web_client.request(request)
54
- handle_upload_response(response.body)
54
+ handle_upload_response(response.body, image_path)
55
55
  end
56
56
 
57
57
  # Public: Get info about an image
@@ -82,11 +82,11 @@ module Imgurr
82
82
  #
83
83
  # args - Response data
84
84
  #
85
- def handle_upload_response(response)
85
+ def handle_upload_response(response, source_path)
86
86
  data = JSON.parse(response)
87
87
  puts JSON.pretty_unparse(data) if Imgurr::DEBUG
88
88
  if data['success']
89
- storage.add_hash(data['data']['id'], data['data']['deletehash'])
89
+ storage.add_hash(data['data']['id'], data['data']['deletehash'], source_path)
90
90
  return [data['data']['link'], true]
91
91
  end
92
92
  [ImgurErrors.handle_error(response), false]
@@ -127,4 +127,4 @@ module Imgurr
127
127
 
128
128
  end
129
129
  end
130
- end
130
+ end
@@ -19,7 +19,7 @@ module Imgurr
19
19
  #
20
20
  # Returns the Storage instance.
21
21
  def initialize
22
- @hashes = []
22
+ @hashes = Hash.new
23
23
  bootstrap
24
24
  populate
25
25
  end
@@ -38,9 +38,8 @@ module Imgurr
38
38
  # hash - Delete hash
39
39
  #
40
40
  # Returns nothing
41
- def add_hash(id, hash)
42
- hash_item = {:id => id, :deletehash => hash}
43
- @hashes.push(hash_item)
41
+ def add_hash(id, hash, source)
42
+ @hashes[id] = {:deletehash => hash, :source => source, :stamp => Time.now}
44
43
  end
45
44
 
46
45
  # Public: test whether out storage contains the delete hash for given id
@@ -49,7 +48,7 @@ module Imgurr
49
48
  #
50
49
  # Returns true if found, false if not.
51
50
  def hash_exists?(id)
52
- @hashes.detect { |hash| hash[:id] == id }
51
+ @hashes.has_key? id
53
52
  end
54
53
 
55
54
  # Public: finds any given delete_hash by id.
@@ -58,15 +57,22 @@ module Imgurr
58
57
  #
59
58
  # Returns the first instance of delete_hash that it finds.
60
59
  def find(id)
61
- hash = @hashes.find { |hash| hash[:id] == id }
62
- hash[:deletehash]
60
+ hash = @hashes[id]
61
+ hash ? hash[:deletehash] : nil
63
62
  end
64
63
 
65
- # Public: all Items in storage.
64
+ # Public: all Items in storage sorted in chronological order.
66
65
  #
67
66
  # Returns an Array of all Items.
68
67
  def items
69
- @hashes.collect(&:items).flatten
68
+ @hashes.to_a.sort {|(_, a), (_, b)| a[:stamp] <=> b[:stamp] }
69
+ end
70
+
71
+ # Public: delete an Item entry from storage.
72
+ #
73
+ # Returns the deleted Item or nil.
74
+ def delete(id)
75
+ @hashes.delete(id)
70
76
  end
71
77
 
72
78
  # Public: creates a Hash of the representation of the in-memory data
@@ -75,7 +81,7 @@ module Imgurr
75
81
  #
76
82
  # Returns a Hash of the entire data set.
77
83
  def to_hash
78
- { :hashes => @hashes.collect(&:to_hash) }
84
+ {:hashes => @hashes}
79
85
  end
80
86
 
81
87
  # Takes care of bootstrapping the Json file, both in terms of creating the
@@ -92,14 +98,15 @@ module Imgurr
92
98
  # Take a JSON representation of data and explode it out into the constituent
93
99
  # Lists and Items for the given Storage instance.
94
100
  #
95
- # Returns nothing.
101
+ # Returns all hashes.
96
102
  def populate
97
103
  file = File.read(json_file)
98
- storage = JSON.parse(file)
104
+ storage = JSON.parse(file, :symbolize_names => true)
105
+
106
+ @hashes = storage[:hashes]
107
+ convert if @hashes.is_a? Array
99
108
 
100
- storage['hashes'].each do |hashes|
101
- add_hash(hashes['id'], hashes['deletehash'])
102
- end
109
+ @hashes
103
110
  end
104
111
 
105
112
  # Public: persists your in-memory objects to disk in Json format.
@@ -118,5 +125,19 @@ module Imgurr
118
125
  def to_json
119
126
  JSON.pretty_generate(to_hash)
120
127
  end
128
+
129
+ private
130
+ # Private: convert from old Json representation, filling in the missing data.
131
+ # Also print a warning message for the user.
132
+ #
133
+ # Returns nothing.
134
+ def convert
135
+ old = @hashes
136
+ @hashes = Hash.new
137
+
138
+ puts 'Warning: old JSON format detected, converting.'
139
+ old.each {|i| add_hash(i[:id], i[:deletehash], 'unknown') }
140
+ save
141
+ end
121
142
  end
122
- end
143
+ end
@@ -1,30 +1,30 @@
1
1
  #!/usr/bin/env roundup
2
2
  export IMGURRFILE=test/files/imgurr.json
3
3
  imgurr="./bin/imgurr"
4
- image="test/files/habs.gif"
4
+ image="test/files/habs.png"
5
5
  id_file="test/id"
6
6
 
7
7
  describe "upload"
8
8
 
9
9
  it_uploads_image() {
10
- ${imgurr} upload ${image} | grep "Copied http://i.imgur.com" >> test/temp
11
- cat test/temp | sed 's/.*imgur.com\/\(.*\)\..*/\1/' >> ${id_file}
12
- chmod 777 ${id_file}
10
+ ${imgurr} upload ${image} >> test/temp
11
+ sed 's/.*imgur.com\/\(.*\)\..*/\1/' test/temp > ${id_file}
13
12
  rm test/temp
13
+ expr `cat ${id_file} | wc -c` ">" 0
14
14
  }
15
15
 
16
16
  it_uploads_image_with_markdown() {
17
- ${imgurr} upload ${image} --markdown | grep "Copied !\[Screenshot\](http://i.imgur.com"
17
+ ${imgurr} upload ${image} --markdown | grep -m 1 "Copied !\[Screenshot\](http://i.imgur.com"
18
18
  }
19
19
 
20
20
  it_uploads_image_with_html() {
21
- ${imgurr} upload ${image} --html | grep "Copied <img src=\"http://i.imgur.com/.*\" alt=\"Screenshot\">"
21
+ ${imgurr} upload ${image} --html | grep -m 1 "Copied <img src=\"http://i.imgur.com/.*\" alt=\"Screenshot\">"
22
22
  }
23
23
 
24
24
  it_uploads_image_with_html_and_size() {
25
- ${imgurr} upload ${image} --html --size 45 | grep "Copied <img src=\"http://i.imgur.com/.*\" alt=\"Screenshot\" width=\"45%\">"
25
+ ${imgurr} upload ${image} --html --size 45 | grep -m 1 "Copied <img src=\"http://i.imgur.com/.*\" alt=\"Screenshot\" width=\"45%\">"
26
26
  }
27
27
 
28
28
  it_uploads_image_with_title_desc() {
29
- ${imgurr} upload ${image} --title "Test" --desc "Test" | grep "Copied http://i.imgur.com"
30
- }
29
+ ${imgurr} upload ${image} --title "Test" --desc "Test" | grep -m 1 "Copied http://i.imgur.com"
30
+ }
@@ -6,17 +6,21 @@ id_file="test/id"
6
6
  describe "info"
7
7
 
8
8
  it_gets_image_info() {
9
- ${imgurr} info `cat ${id_file}` | grep "Width : 96 px"
9
+ ${imgurr} info `cat ${id_file}` | grep -m 1 "Width : 48 px"
10
10
  }
11
11
 
12
12
  it_gets_image_info_from_url() {
13
- ${imgurr} info http://i.imgur.com/2KxrTAK.jpg | grep "Width : 960 px"
13
+ ${imgurr} info http://i.imgur.com/2KxrTAK.jpg | grep -m 1 "Width : 960 px"
14
14
  }
15
15
 
16
16
  it_gets_image_info_from_url_with_title() {
17
- ${imgurr} info http://i.imgur.com/Wk1iPej.jpg | grep "Title : Imgurr Test"
17
+ ${imgurr} info http://i.imgur.com/Wk1iPej.jpg | grep -m 1 "Title : Imgurr Test"
18
18
  }
19
19
 
20
20
  it_gets_image_info_from_url_with_description() {
21
- ${imgurr} info http://i.imgur.com/Wk1iPej.jpg | grep "Desc : Imgurr Test"
22
- }
21
+ ${imgurr} info http://i.imgur.com/Wk1iPej.jpg | grep -m 1 "Desc : Imgurr Test"
22
+ }
23
+
24
+ it_lists_uploaded_images() {
25
+ ${imgurr} list | grep -m 1 `cat ${id_file}`
26
+ }
@@ -6,9 +6,9 @@ id_file="test/id"
6
6
  describe "delete"
7
7
 
8
8
  it_shows_error_wrong_hash() {
9
- ${imgurr} delete `cat ${id_file}` random | grep "Unauthorized Access"
9
+ ${imgurr} delete `cat ${id_file}` random | grep -m 1 "Unauthorized Access"
10
10
  }
11
11
 
12
12
  it_deletes_from_storage() {
13
- ${imgurr} delete `cat ${id_file}` | grep "Successfully deleted"
14
- }
13
+ ${imgurr} delete `cat ${id_file}` | grep -m 1 "Successfully deleted"
14
+ }
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env roundup
2
+ export IMGURRFILE=test/files/imgurr-old.json
3
+ imgurr="./bin/imgurr"
4
+
5
+ describe "misc"
6
+
7
+ it_converts_old_json_file() {
8
+ ${imgurr} list | grep -m 1 'Warning'
9
+ }
Binary file
data/test/run CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ./test/roundup test/*.sh
6
6
  rm test/id
7
+ rm test/files/imgurr.json
8
+ git checkout -- test/files/imgurr-old.json
7
9
 
8
- git checkout test/files/imgurr.json
9
-
10
- export IMGURRFILE=~/.imgurr
10
+ export IMGURRFILE=~/.imgurr
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: imgurr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christophe Naud-Dulude
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-25 00:00:00.000000000 Z
11
+ date: 2015-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -49,7 +49,6 @@ extra_rdoc_files:
49
49
  - LICENSE.md
50
50
  files:
51
51
  - Gemfile
52
- - Gemfile.lock
53
52
  - LICENSE.md
54
53
  - README.md
55
54
  - Rakefile
@@ -66,11 +65,12 @@ files:
66
65
  - test/1-upload.sh
67
66
  - test/2-info.sh
68
67
  - test/3-delete.sh
68
+ - test/4-misc.sh
69
69
  - test/cli.sh
70
70
  - test/error.sh
71
71
  - test/files/github-logo.png
72
- - test/files/habs.gif
73
- - test/files/imgurr.json
72
+ - test/files/habs.png
73
+ - test/files/imgurr-old.json
74
74
  - test/roundup
75
75
  - test/run
76
76
  homepage: https://github.com/Chris911/imgurr
@@ -94,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
94
  version: '0'
95
95
  requirements: []
96
96
  rubyforge_project:
97
- rubygems_version: 2.4.1
97
+ rubygems_version: 2.2.2
98
98
  signing_key:
99
99
  specification_version: 4
100
100
  summary: Imgurr lets you upload images to imgur from the command line
@@ -1,18 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- imgurr (0.1.2)
5
- json
6
-
7
- GEM
8
- remote: http://rubygems.org/
9
- specs:
10
- json (1.8.1)
11
- rake (0.9.6)
12
-
13
- PLATFORMS
14
- ruby
15
-
16
- DEPENDENCIES
17
- imgurr!
18
- rake (~> 0.9.2)
Binary file