boom 0.0.5 → 0.0.6
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 +7 -0
- data/README.markdown +12 -5
- data/boom.gemspec +3 -3
- data/lib/boom/clipboard.rb +1 -1
- data/lib/boom/command.rb +12 -7
- data/lib/boom/item.rb +26 -1
- data/lib/boom/list.rb +13 -0
- data/lib/boom.rb +1 -1
- data/test/test_command.rb +4 -0
- data/test/test_item.rb +18 -0
- data/test/test_list.rb +12 -0
- metadata +6 -8
- data/license.markdown +0 -21
- data/readme.markdown +0 -127
data/CHANGELOG.markdown
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
## head
|
4
4
|
|
5
|
+
## 0.0.6
|
6
|
+
- Searching for an item that doesn't exist doesn't murder puppies anymore
|
7
|
+
(thanks [jimmycuadra](https://github.com/jimmycuadra)).
|
8
|
+
- Output is a bit cleaner with a constrained `name` column.
|
9
|
+
- Adds items from stdin (thanks
|
10
|
+
[MichaelXavier](https://github.com/MichaelXavier)).
|
11
|
+
|
5
12
|
## 0.0.5
|
6
13
|
- Item deletes are now scoped by list rather than GLOBAL DESTRUCTION! (thanks
|
7
14
|
[natebean](https://github.com/natebean)).
|
data/README.markdown
CHANGED
@@ -45,6 +45,9 @@ can have multiple lists.
|
|
45
45
|
$ boom urls github https://github.com
|
46
46
|
Boom! "github" in "urls" is "https://github.com". Got it.
|
47
47
|
|
48
|
+
# boom <list> <name> with stdin
|
49
|
+
$ boom journal january < ~/Desktop/01-secret-journal.markdown
|
50
|
+
|
48
51
|
** Copy an item's value to your clipboard **
|
49
52
|
|
50
53
|
$ boom github
|
@@ -110,14 +113,18 @@ important business information (say, a carefully cultivated list of animated
|
|
110
113
|
.gifs), you'd be sitting pretty if you made a backup of `~/.boom` every now and
|
111
114
|
then, just in case. We're living on the edge, baby.
|
112
115
|
|
113
|
-
Also, don't mistype anything. Everything should be 100% perfect if you type all
|
114
|
-
the commands correctly. If you don't, it'll probably ungracefully error out and
|
115
|
-
a puppy in Kansas will probably be murdered. You should be fine, though. As
|
116
|
-
long as you don't have butter fingers.
|
117
|
-
|
118
116
|
Soon enough, though, this'll be stable to the point where I can truthfully tell
|
119
117
|
myself that this time baby, `boom` will be, bulletttttttttttttproof ♫.
|
120
118
|
|
119
|
+
## Contribute
|
120
|
+
|
121
|
+
I'd love to include your contributions, friend. Make sure your methods are
|
122
|
+
[TomDoc](http://tomdoc.org)'d properly, that existing tests pass (`rake`), and
|
123
|
+
that any new functionality includes appropriate tests. Bonus points if you're
|
124
|
+
not updating the gemspec or bumping boom's version.
|
125
|
+
|
126
|
+
All good? Cool! Then [send me a pull request](https://github.com/holman/boom/pull/new/master)!
|
127
|
+
|
121
128
|
## I love you
|
122
129
|
|
123
130
|
[Zach Holman](http://zachholman.com) made this. Ping me on Twitter —
|
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.0.
|
17
|
-
s.date = '
|
16
|
+
s.version = '0.0.6'
|
17
|
+
s.date = '2011-01-05'
|
18
18
|
s.rubyforge_project = 'boom'
|
19
19
|
|
20
20
|
## Make sure your summary is short. The description may be as long
|
@@ -50,7 +50,7 @@ Gem::Specification.new do |s|
|
|
50
50
|
## Specify any RDoc options here. You'll want to add your README and
|
51
51
|
## LICENSE files to the extra_rdoc_files list.
|
52
52
|
s.rdoc_options = ["--charset=UTF-8"]
|
53
|
-
s.extra_rdoc_files = %w[
|
53
|
+
s.extra_rdoc_files = %w[README.markdown LICENSE.markdown]
|
54
54
|
|
55
55
|
## List your runtime dependencies here. Runtime dependencies are those
|
56
56
|
## that are needed for an end user to actually USE your code.
|
data/lib/boom/clipboard.rb
CHANGED
data/lib/boom/command.rb
CHANGED
@@ -58,7 +58,7 @@ module Boom
|
|
58
58
|
storage.lists.each do |list|
|
59
59
|
output " #{list.name}"
|
60
60
|
list.items.each do |item|
|
61
|
-
output " #{item.
|
61
|
+
output " #{item.short_name}:#{item.spacer} #{item.value}"
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
@@ -77,7 +77,8 @@ module Boom
|
|
77
77
|
return delete_list(command) if major == 'delete'
|
78
78
|
return detail_list(command) unless major
|
79
79
|
unless minor == 'delete'
|
80
|
-
|
80
|
+
minor ||= $stdin.read
|
81
|
+
return add_item(command,major,minor) if minor.to_s.length > 0
|
81
82
|
return search_list_for_item(command, major)
|
82
83
|
end
|
83
84
|
end
|
@@ -99,7 +100,7 @@ module Boom
|
|
99
100
|
def detail_list(name)
|
100
101
|
list = List.find(name)
|
101
102
|
list.items.sort{ |x,y| x.name <=> y.name }.each do |item|
|
102
|
-
output " #{item.
|
103
|
+
output " #{item.short_name}:#{item.spacer} #{item.value}"
|
103
104
|
end
|
104
105
|
end
|
105
106
|
|
@@ -189,17 +190,21 @@ module Boom
|
|
189
190
|
end
|
190
191
|
|
191
192
|
# Public: search for an Item in a particular list by name. Drops the
|
192
|
-
# corresponding entry into your clipboard.
|
193
|
+
# corresponding entry into your clipboard if found.
|
193
194
|
#
|
194
195
|
# list_name - the String name of the List in which to scope the search
|
195
196
|
# item_name - the String term to search for in all Item names
|
196
197
|
#
|
197
|
-
# Returns the matching Item.
|
198
|
+
# Returns the matching Item if found.
|
198
199
|
def search_list_for_item(list_name, item_name)
|
199
200
|
list = List.find(list_name)
|
200
|
-
item = list.
|
201
|
+
item = list.find_item(item_name)
|
201
202
|
|
202
|
-
|
203
|
+
if item
|
204
|
+
output Clipboard.copy(item)
|
205
|
+
else
|
206
|
+
output "\"#{item_name}\" not found in \"#{list_name}\""
|
207
|
+
end
|
203
208
|
end
|
204
209
|
|
205
210
|
# Public: save in-memory data to disk.
|
data/lib/boom/item.rb
CHANGED
@@ -18,7 +18,7 @@ module Boom
|
|
18
18
|
#
|
19
19
|
# Examples
|
20
20
|
#
|
21
|
-
# Item.new("github", "
|
21
|
+
# Item.new("github", "https://github.com")
|
22
22
|
#
|
23
23
|
# Returns the newly initialized Item.
|
24
24
|
def initialize(name,value)
|
@@ -26,6 +26,31 @@ module Boom
|
|
26
26
|
@value = value
|
27
27
|
end
|
28
28
|
|
29
|
+
# Public: the shortened String name of the Item. Truncates with ellipses if
|
30
|
+
# larger.
|
31
|
+
#
|
32
|
+
# Examples
|
33
|
+
#
|
34
|
+
# item = Item.new("github's home page","https://github.com")
|
35
|
+
# item.short_name
|
36
|
+
# # => 'github's home p…'
|
37
|
+
#
|
38
|
+
# item = Item.new("github","https://github.com")
|
39
|
+
# item.short_name
|
40
|
+
# # => 'github'
|
41
|
+
#
|
42
|
+
# Returns the shortened name.
|
43
|
+
def short_name
|
44
|
+
name.length > 15 ? "#{name[0..14]}…" : name[0..14]
|
45
|
+
end
|
46
|
+
|
47
|
+
# Public: the amount of consistent spaces to pad based on Item#short_name.
|
48
|
+
#
|
49
|
+
# Returns a String of spaces.
|
50
|
+
def spacer
|
51
|
+
name.length > 15 ? '' : ' '*(15-name.length+1)
|
52
|
+
end
|
53
|
+
|
29
54
|
# Public: creates a Hash for this Item.
|
30
55
|
#
|
31
56
|
# Returns a Hash of its data.
|
data/lib/boom/list.rb
CHANGED
@@ -72,6 +72,19 @@ module Boom
|
|
72
72
|
previous != items.size
|
73
73
|
end
|
74
74
|
|
75
|
+
# Public: finds an Item by name. If the name is typically truncated, also
|
76
|
+
# allow a search based on that truncated name.
|
77
|
+
#
|
78
|
+
# name - String name of the Item to find
|
79
|
+
#
|
80
|
+
# Returns the found item
|
81
|
+
def find_item(name)
|
82
|
+
items.find do |item|
|
83
|
+
item.name == name ||
|
84
|
+
item.short_name.gsub('…','') == name.gsub('…','')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
75
88
|
# Public: a Hash representation of this List.
|
76
89
|
#
|
77
90
|
# Returns a Hash of its own data and its child Items.
|
data/lib/boom.rb
CHANGED
data/test/test_command.rb
CHANGED
@@ -96,4 +96,8 @@ class TestCommand < Test::Unit::TestCase
|
|
96
96
|
assert_match 'boom help', command('--anything')
|
97
97
|
assert_match 'boom help', command('-d')
|
98
98
|
end
|
99
|
+
|
100
|
+
def test_nonexistent_item_access_scoped_by_list
|
101
|
+
assert_match /"twitter" not found in "urls"/, command('urls twitter')
|
102
|
+
end
|
99
103
|
end
|
data/test/test_item.rb
CHANGED
@@ -14,6 +14,24 @@ class TestItem < Test::Unit::TestCase
|
|
14
14
|
assert_equal 'https://github.com', @item.value
|
15
15
|
end
|
16
16
|
|
17
|
+
def test_short_name
|
18
|
+
assert_equal 'github', @item.short_name
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_short_name
|
22
|
+
@item.name = 'github github github lol lol lol'
|
23
|
+
assert_equal 'github github g…', @item.short_name
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_spacer_none
|
27
|
+
@item.name = 'github github github lol lol lol'
|
28
|
+
assert_equal '', @item.spacer
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_spacer_tons
|
32
|
+
assert_equal ' ', @item.spacer
|
33
|
+
end
|
34
|
+
|
17
35
|
def test_to_hash
|
18
36
|
assert_equal 1, @item.to_hash.size
|
19
37
|
end
|
data/test/test_list.rb
CHANGED
@@ -28,6 +28,18 @@ class TestList < Test::Unit::TestCase
|
|
28
28
|
assert_equal 'urls', Boom::List.find('urls').name
|
29
29
|
end
|
30
30
|
|
31
|
+
def test_find_item
|
32
|
+
@list.add_item(@item)
|
33
|
+
assert_equal 'https://github.com', @list.find_item('github').value
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_find_item_long_name
|
37
|
+
@item = Boom::Item.new('long-long-long-name','longname')
|
38
|
+
@list.add_item(@item)
|
39
|
+
assert_equal 'longname', @list.find_item('long-long-long-').value
|
40
|
+
assert_equal 'longname', @list.find_item('long-long-long-…').value
|
41
|
+
end
|
42
|
+
|
31
43
|
def test_delete_success
|
32
44
|
assert_equal 1, Boom.storage.lists.size
|
33
45
|
assert Boom::List.delete('urls')
|
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:
|
4
|
+
hash: 19
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 6
|
10
|
+
version: 0.0.6
|
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:
|
18
|
+
date: 2011-01-05 00:00:00 -08:00
|
19
19
|
default_executable: boom
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -64,8 +64,8 @@ executables:
|
|
64
64
|
extensions: []
|
65
65
|
|
66
66
|
extra_rdoc_files:
|
67
|
-
-
|
68
|
-
-
|
67
|
+
- README.markdown
|
68
|
+
- LICENSE.markdown
|
69
69
|
files:
|
70
70
|
- CHANGELOG.markdown
|
71
71
|
- LICENSE.markdown
|
@@ -84,8 +84,6 @@ files:
|
|
84
84
|
- test/test_command.rb
|
85
85
|
- test/test_item.rb
|
86
86
|
- test/test_list.rb
|
87
|
-
- readme.markdown
|
88
|
-
- license.markdown
|
89
87
|
has_rdoc: true
|
90
88
|
homepage: https://github.com/holman/boom
|
91
89
|
licenses: []
|
data/license.markdown
DELETED
@@ -1,21 +0,0 @@
|
|
1
|
-
The MIT License
|
2
|
-
|
3
|
-
Copyright (c) Zach Holman, http://zachholman.com
|
4
|
-
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
7
|
-
in the Software without restriction, including without limitation the rights
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
10
|
-
furnished to do so, subject to the following conditions:
|
11
|
-
|
12
|
-
The above copyright notice and this permission notice shall be included in
|
13
|
-
all copies or substantial portions of the Software.
|
14
|
-
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
-
THE SOFTWARE.
|
data/readme.markdown
DELETED
@@ -1,127 +0,0 @@
|
|
1
|
-
# B O O M
|
2
|
-
|
3
|
-
See? Look, a tiny explosion: \*
|
4
|
-
|
5
|
-
## What's a boom?
|
6
|
-
|
7
|
-
boom lets you access text snippets over your command line. I'm personally
|
8
|
-
aiming for exactly two use cases, but I'm almost positive there are thirteen
|
9
|
-
more. Here's a couple examples:
|
10
|
-
|
11
|
-
- **Your own [del.icio.us](http://delicious.com)-esque URL tracker.** When I
|
12
|
-
make [clever animated
|
13
|
-
gifs](http://github.com/holman/dotfiles/blob/master/bin/gifme) of my
|
14
|
-
coworkers, I tend to lose the URL, which is a total bummer since I want to
|
15
|
-
repeatedly repost these images well past their funny expiration date. boom
|
16
|
-
lets me easily access the good stuff for years to come.
|
17
|
-
- **Commonly-used email replies.** Everyone's got those stock replies in their
|
18
|
-
pocket for a few common use cases. Rather than keep some files strewn about
|
19
|
-
with the responses, boom gives me them on my ever-present command line.
|
20
|
-
- **Simple todos.** You can super-quickly drop items into lists and remove them
|
21
|
-
when finished. I'm a big fan of simple, straightforward stuff. Plus, it's a
|
22
|
-
Dropbox away from simple cloud syncing. Someone get Cultured Code on the line
|
23
|
-
THIS MAY BE RELEVANT TO THEIR INTERESTS!
|
24
|
-
|
25
|
-
We store everything in one JSON file in your home directory: `~/.boom`. The
|
26
|
-
structure is simple, too. Each individual item is tossed on a `list`, and you
|
27
|
-
can have multiple lists.
|
28
|
-
|
29
|
-
## Show me the boom
|
30
|
-
|
31
|
-
** Overview **
|
32
|
-
|
33
|
-
$ boom
|
34
|
-
gifs (5)
|
35
|
-
email (4)
|
36
|
-
|
37
|
-
** Create a list **
|
38
|
-
|
39
|
-
$ boom urls
|
40
|
-
Boom! Created a new list called "urls".
|
41
|
-
|
42
|
-
** Add an item **
|
43
|
-
|
44
|
-
# boom <list> <name> <value>
|
45
|
-
$ boom urls github https://github.com
|
46
|
-
Boom! "github" in "urls" is "https://github.com". Got it.
|
47
|
-
|
48
|
-
** Copy an item's value to your clipboard **
|
49
|
-
|
50
|
-
$ boom github
|
51
|
-
Boom! Just copied https://github.com to your clipboard.
|
52
|
-
|
53
|
-
$ boom urls github
|
54
|
-
Boom! Just copied https://github.com to your clipboard.
|
55
|
-
|
56
|
-
** List items in a list **
|
57
|
-
|
58
|
-
$ boom urls
|
59
|
-
blog http://zachholman.com
|
60
|
-
github http://github.com
|
61
|
-
|
62
|
-
** Delete a list **
|
63
|
-
|
64
|
-
$ boom urls delete
|
65
|
-
You sure you want to delete everything in "urls"? (y/n): y
|
66
|
-
Boom! Deleted all your urls.
|
67
|
-
|
68
|
-
** Delete an item **
|
69
|
-
|
70
|
-
# boom urls github delete
|
71
|
-
Boom! "github" is gone forever.
|
72
|
-
|
73
|
-
** List everything **
|
74
|
-
|
75
|
-
$ boom all
|
76
|
-
enemies
|
77
|
-
@kneath: he's got dreamy eyes. he must die.
|
78
|
-
@rtomayko: i must murder him for his mac and cheese recipe.
|
79
|
-
@luckiestmonkey: she hates recycling.
|
80
|
-
urls
|
81
|
-
blog: http://zachholman.com
|
82
|
-
github: https://github.com
|
83
|
-
|
84
|
-
** Help **
|
85
|
-
|
86
|
-
$ boom help
|
87
|
-
|
88
|
-
** Manual edit **
|
89
|
-
|
90
|
-
If you want to edit the underlying JSON directly, make sure your `$EDITOR`
|
91
|
-
environment variable is set, and run:
|
92
|
-
|
93
|
-
$ boom edit
|
94
|
-
|
95
|
-
** It's just the command line, silly **
|
96
|
-
|
97
|
-
So don't forget all your other favorites are there to help you, too:
|
98
|
-
|
99
|
-
$ boom all | grep @luckiestmonkey
|
100
|
-
@luckiestmonkey: she hates recycling.
|
101
|
-
|
102
|
-
## Install
|
103
|
-
|
104
|
-
gem install boom
|
105
|
-
|
106
|
-
## Current Status
|
107
|
-
|
108
|
-
Precarious. I'm starting to use this a bunch now, but if you're tossing in
|
109
|
-
important business information (say, a carefully cultivated list of animated
|
110
|
-
.gifs), you'd be sitting pretty if you made a backup of `~/.boom` every now and
|
111
|
-
then, just in case. We're living on the edge, baby.
|
112
|
-
|
113
|
-
Also, don't mistype anything. Everything should be 100% perfect if you type all
|
114
|
-
the commands correctly. If you don't, it'll probably ungracefully error out and
|
115
|
-
a puppy in Kansas will probably be murdered. You should be fine, though. As
|
116
|
-
long as you don't have butter fingers.
|
117
|
-
|
118
|
-
Soon enough, though, this'll be stable to the point where I can truthfully tell
|
119
|
-
myself that this time baby, `boom` will be, bulletttttttttttttproof ♫.
|
120
|
-
|
121
|
-
## I love you
|
122
|
-
|
123
|
-
[Zach Holman](http://zachholman.com) made this. Ping me on Twitter —
|
124
|
-
[@holman](http://twitter.com/holman) — if you're having issues, want me to
|
125
|
-
merge in your pull request, or are using boom in a cool way. I'm kind of hoping
|
126
|
-
this is generic enough that people do some fun things with it. First one to use
|
127
|
-
`boom` to calculate their tax liability wins.
|