boom 0.2.2 → 0.2.3

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.
data/CHANGELOG.markdown CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  ## head
4
4
 
5
+ ## 0.2.3
6
+ - [@culvr](https://github.com/culvr) added `boom random <list>` that lets you
7
+ quickly pull a random item.
8
+ - Fixed so that opening a specific item (`boom open urls github`) will only
9
+ open that item.
10
+ - [@culvr](https://github.com/culvr) fixed STDIN list+item creation.
11
+ - HTTParty should only be a soft dependency. (#46)
12
+
5
13
  ## 0.2.2 (July 29, 2011)
6
14
  - [@jimmycuadra](https://github.com/jimmycuadra) went to town on this beast and
7
15
  hooked up a Gist backend to boom. Killer.
data/boom.gemspec CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
13
13
  ## If your rubyforge_project name is different, then edit it and comment out
14
14
  ## the sub! line in the Rakefile
15
15
  s.name = 'boom'
16
- s.version = '0.2.2'
17
- s.date = '2011-07-29'
16
+ s.version = '0.2.3'
17
+ s.date = '2011-09-06'
18
18
  s.rubyforge_project = 'boom'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
@@ -89,6 +89,7 @@ Gem::Specification.new do |s|
89
89
  lib/boom/storage.rb
90
90
  lib/boom/storage/base.rb
91
91
  lib/boom/storage/gist.rb
92
+ lib/boom/storage/gist/json_parser.rb
92
93
  lib/boom/storage/json.rb
93
94
  lib/boom/storage/keychain.rb
94
95
  lib/boom/storage/mongodb.rb
data/lib/boom/command.rb CHANGED
@@ -95,6 +95,7 @@ module Boom
95
95
  return help if command[0] == 45 || command[0] == '-' # any - dash options are pleas for help
96
96
  return echo(major,minor) if command == 'echo' || command == 'e'
97
97
  return open(major,minor) if command == 'open' || command == 'o'
98
+ return random(major) if command == 'random' || command == 'rand' || command == 'r'
98
99
 
99
100
  # if we're operating on a List
100
101
  if storage.list_exists?(command)
@@ -113,6 +114,7 @@ module Boom
113
114
  return delete_item(command, major)
114
115
  end
115
116
 
117
+ return create_list(command, major, stdin.read) if !minor && stdin.stat.size > 0
116
118
  return create_list(command, major, minor)
117
119
  end
118
120
 
@@ -153,14 +155,36 @@ module Boom
153
155
  def open(major, minor)
154
156
  if storage.list_exists?(major)
155
157
  list = List.find(major)
156
- list.items.each { |item| Platform.open(item) }
157
- output "#{cyan("Boom!")} We just opened all of #{yellow(major)} for you."
158
+ if minor
159
+ item = storage.items.detect { |item| item.name == minor }
160
+ output "#{cyan("Boom!")} We just opened #{yellow(Platform.open(item))} for you."
161
+ else
162
+ list.items.each { |item| Platform.open(item) }
163
+ output "#{cyan("Boom!")} We just opened all of #{yellow(major)} for you."
164
+ end
158
165
  else
159
166
  item = storage.items.detect { |item| item.name == major }
160
167
  output "#{cyan("Boom!")} We just opened #{yellow(Platform.open(item))} for you."
161
168
  end
162
169
  end
163
170
 
171
+ # Public: Opens a random item
172
+ #
173
+ # Returns nothing.
174
+ def random(major)
175
+ if major.nil?
176
+ index = rand(storage.items.size)
177
+ item = storage.items[index]
178
+ elsif storage.list_exists?(major)
179
+ list = List.find(major)
180
+ index = rand(list.items.size)
181
+ item = list.items[index]
182
+ else
183
+ output "We couldn't find that list."
184
+ end
185
+ open(item.name, nil) unless item.nil?
186
+ end
187
+
164
188
  # Public: echoes only the Item's value without copying
165
189
  #
166
190
  # item_name - the String term to search for in all Item names
@@ -331,6 +355,8 @@ module Boom
331
355
  boom <list> <name> copy item's value to clipboard
332
356
  boom open <name> open item's url in browser
333
357
  boom open <list> <name> open all item's url in browser for a list
358
+ boom random open a random item's url in browser
359
+ boom random <list> open a random item's url for a list in browser
334
360
  boom echo <name> echo the item's value without copying
335
361
  boom echo <list> <name> echo the item's value without copying
336
362
  boom <list> <name> delete deletes an item
@@ -0,0 +1,8 @@
1
+ # coding: utf-8
2
+
3
+ # Crack's parsing is no bueno. Use the MultiJson instead.
4
+ class JsonParser < HTTParty::Parser
5
+ def json
6
+ MultiJson.decode(body)
7
+ end
8
+ end
@@ -21,28 +21,24 @@
21
21
  # any value other than boolean true will make
22
22
  # the Gist private.
23
23
  #
24
- begin
25
- require "httparty"
26
- rescue LoadError
27
- puts "The Gist backend requires HTTParty: gem install httparty"
28
- exit
29
- end
30
-
31
- # Crack's parsing is no bueno. Use the MultiJson instead.
32
- class JsonParser < HTTParty::Parser
33
- def json
34
- MultiJson.decode(body)
35
- end
36
- end
37
24
 
38
25
  module Boom
39
26
  module Storage
40
27
  class Gist < Base
41
- include HTTParty
42
- parser JsonParser
43
- base_uri "https://api.github.com"
44
28
 
45
29
  def bootstrap
30
+ begin
31
+ require "httparty"
32
+ require "boom/storage/gist/json_parser"
33
+
34
+ self.class.send(:include, HTTParty)
35
+ self.class.parser JsonParser
36
+ self.class.base_uri "https://api.github.com"
37
+ rescue LoadError
38
+ puts "The Gist backend requires HTTParty: gem install httparty"
39
+ exit
40
+ end
41
+
46
42
  unless Boom.config.attributes["gist"]
47
43
  puts 'A "gist" data structure must be defined in ~/.boom.conf'
48
44
  exit
data/lib/boom.rb CHANGED
@@ -28,7 +28,7 @@ require 'boom/storage/gist'
28
28
  require 'boom/core_ext/symbol'
29
29
 
30
30
  module Boom
31
- VERSION = '0.2.2'
31
+ VERSION = '0.2.3'
32
32
 
33
33
  extend self
34
34
 
data/test/test_command.rb CHANGED
@@ -66,6 +66,14 @@ class TestCommand < Test::Unit::TestCase
66
66
  assert_match /a new list called newlist.* item in newlist/, command('newlist item blah')
67
67
  end
68
68
 
69
+ def test_list_creation_with_item_stdin
70
+ STDIN.stubs(:read).returns('blah')
71
+ STDIN.stubs(:stat)
72
+ STDIN.stat.stubs(:size).returns(4)
73
+
74
+ assert_match /a new list called newlist.* item in newlist is blah/, command('newlist item')
75
+ end
76
+
69
77
  def test_item_access
70
78
  assert_match /copied https:\/\/github\.com to your clipboard/,
71
79
  command('github')
@@ -76,11 +84,16 @@ class TestCommand < Test::Unit::TestCase
76
84
  command('urls github')
77
85
  end
78
86
 
79
- def test_item_open_url
87
+ def test_item_open_item
80
88
  Boom::Platform.stubs(:system).returns('')
81
89
  assert_match /opened https:\/\/github\.com for you/, command('open github')
82
90
  end
83
91
 
92
+ def test_item_open_specific_item
93
+ Boom::Platform.stubs(:system).returns('')
94
+ assert_match /opened https:\/\/github\.com for you/, command('open urls github')
95
+ end
96
+
84
97
  def test_item_open_lists
85
98
  Boom::Platform.stubs(:system).returns('')
86
99
  assert_match /opened all of urls for you/, command('open urls')
@@ -180,4 +193,20 @@ class TestCommand < Test::Unit::TestCase
180
193
  Boom::Command.stubs(:stdin).returns(stub)
181
194
  assert_match /twitter in urls/, command('urls twitter')
182
195
  end
196
+
197
+ def test_random
198
+ Boom::Platform.stubs(:system).returns('')
199
+ assert_match /opened .+ for you/, command('random')
200
+ end
201
+
202
+ def test_random_from_list
203
+ Boom::Platform.stubs(:system).returns('')
204
+ assert_match /(github|zachholman)/, command('random urls')
205
+ end
206
+
207
+ def test_random_list_not_exist
208
+ Boom::Platform.stubs(:system).returns('')
209
+ assert_match /couldn't find that list\./, command('random 39jc02jlskjbbac9')
210
+ end
211
+
183
212
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boom
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 17
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 2
10
- version: 0.2.2
9
+ - 3
10
+ version: 0.2.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Zach Holman
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-29 00:00:00 -07:00
18
+ date: 2011-09-06 00:00:00 -07:00
19
19
  default_executable: boom
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -121,6 +121,7 @@ files:
121
121
  - lib/boom/storage.rb
122
122
  - lib/boom/storage/base.rb
123
123
  - lib/boom/storage/gist.rb
124
+ - lib/boom/storage/gist/json_parser.rb
124
125
  - lib/boom/storage/json.rb
125
126
  - lib/boom/storage/keychain.rb
126
127
  - lib/boom/storage/mongodb.rb