boom 0.2.4 → 0.3.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.
- data/{CHANGELOG.markdown → CHANGELOG.md} +12 -3
- data/Gemfile.lock +3 -5
- data/{LICENSE.markdown → LICENSE.md} +0 -0
- data/{README.markdown → README.md} +14 -11
- data/Rakefile +3 -5
- data/boom.gemspec +14 -26
- data/lib/boom/command.rb +8 -35
- data/lib/boom/item.rb +2 -4
- data/lib/boom/list.rb +1 -1
- data/lib/boom/storage.rb +114 -12
- data/lib/boom.rb +5 -20
- data/test/cli.sh +13 -0
- data/test/examples/data.json +17 -0
- data/test/item.sh +19 -0
- data/test/list.sh +30 -0
- data/test/roundup +307 -0
- data/test/run +8 -0
- metadata +74 -125
- data/lib/boom/config.rb +0 -89
- data/lib/boom/storage/base.rb +0 -81
- data/lib/boom/storage/gist.rb +0 -114
- data/lib/boom/storage/json.rb +0 -69
- data/lib/boom/storage/keychain.rb +0 -135
- data/lib/boom/storage/mongodb.rb +0 -84
- data/lib/boom/storage/redis.rb +0 -72
- data/test/examples/config_json.json +0 -3
- data/test/examples/test_json.json +0 -3
- data/test/examples/urls.json +0 -1
- data/test/helper.rb +0 -24
- data/test/test_color.rb +0 -30
- data/test/test_command.rb +0 -238
- data/test/test_config.rb +0 -25
- data/test/test_item.rb +0 -54
- data/test/test_list.rb +0 -79
- data/test/test_platform.rb +0 -52
@@ -1,5 +1,14 @@
|
|
1
1
|
# boom changes
|
2
2
|
## head
|
3
|
+
|
4
|
+
## 0.3.0
|
5
|
+
- 0.3 removes all the Storage nonsense in favor of clean and easy JSON. Less
|
6
|
+
code is best code.
|
7
|
+
- It also removes all the Ruby tests and instead does them in shell with roundup.
|
8
|
+
- It also changes delete to use `--delete` so there's conceptually less of a
|
9
|
+
problem.
|
10
|
+
|
11
|
+
## 0.2.4
|
3
12
|
- [@Dlom](https://github.com/Dlom) fixed some troubles in #49.
|
4
13
|
- Some additional test coverage added by
|
5
14
|
[@nickhammond](https://github.com/nickhammond).
|
@@ -66,8 +75,8 @@
|
|
66
75
|
scripts and junk! Thanks [bschaeffer](https://github.com/bschaeffer).
|
67
76
|
|
68
77
|
## 0.0.9
|
69
|
-
- Backport `Symbol#to_proc` for 1.8.6 support (thanks
|
70
|
-
[kastner](https://github.com/kastner) and
|
78
|
+
- Backport `Symbol#to_proc` for 1.8.6 support (thanks
|
79
|
+
[kastner](https://github.com/kastner) and
|
71
80
|
[DeMarko](https://github.com/DeMarko)).
|
72
81
|
|
73
82
|
## 0.0.8
|
@@ -81,7 +90,7 @@
|
|
81
90
|
(thanks [jimmycuadra](https://github.com/jimmycuadra)).
|
82
91
|
- Output is a bit cleaner with a constrained `name` column.
|
83
92
|
- Adds items from stdin (thanks
|
84
|
-
[MichaelXavier](https://github.com/MichaelXavier)).
|
93
|
+
[MichaelXavier](https://github.com/MichaelXavier)).
|
85
94
|
|
86
95
|
## 0.0.5
|
87
96
|
- Item deletes are now scoped by list rather than GLOBAL DESTRUCTION! (thanks
|
data/Gemfile.lock
CHANGED
@@ -1,17 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
boom (0.2.
|
5
|
-
|
6
|
-
multi_json (~> 1.0.3)
|
4
|
+
boom (0.2.4)
|
5
|
+
yajl-ruby (~> 1.1.0)
|
7
6
|
|
8
7
|
GEM
|
9
8
|
remote: http://rubygems.org/
|
10
9
|
specs:
|
11
|
-
json_pure (1.5.3)
|
12
10
|
mocha (0.9.12)
|
13
|
-
multi_json (1.0.3)
|
14
11
|
rake (0.9.2)
|
12
|
+
yajl-ruby (1.1.0)
|
15
13
|
|
16
14
|
PLATFORMS
|
17
15
|
ruby
|
File without changes
|
@@ -2,12 +2,12 @@
|
|
2
2
|
|
3
3
|
## About
|
4
4
|
|
5
|
-
boom manages your text snippets
|
5
|
+
boom manages your text snippets on your command line. You can stash away text
|
6
|
+
like URLs, canned responses, and important notes and then quickly copy them
|
7
|
+
onto your clipboard, ready for pasting.
|
6
8
|
|
7
9
|
For more details about what boom is and how it works, check out
|
8
|
-
[boom's website](http://holman.github.com/boom).
|
9
|
-
(including a complete list of commands), check out
|
10
|
-
[boom's wiki](https://github.com/holman/boom/wiki).
|
10
|
+
[boom's website](http://holman.github.com/boom).
|
11
11
|
|
12
12
|
## Install
|
13
13
|
|
@@ -18,11 +18,11 @@ For more details about what boom is and how it works, check out
|
|
18
18
|
$ boom gifs
|
19
19
|
Boom! Created a new list called "gifs".
|
20
20
|
|
21
|
-
$ boom gifs
|
22
|
-
Boom! "
|
21
|
+
$ boom gifs shirt http://cl.ly/NwCS/shirt.gif
|
22
|
+
Boom! "shirt" in "gifs" is "http://cl.ly/NwCS/shirt.gif". Got it.
|
23
23
|
|
24
|
-
$ boom
|
25
|
-
Boom! Just copied http://cl.ly/
|
24
|
+
$ boom shirt
|
25
|
+
Boom! Just copied http://cl.ly/NwCS/shirt.gif to your clipboard.
|
26
26
|
|
27
27
|
And that's just a taste! I know, you're salivating, I can hear you from here.
|
28
28
|
(Why your saliva is noisy is beyond me.) Check out the [full list of
|
@@ -37,8 +37,11 @@ your contributions, friend.
|
|
37
37
|
Clone this repository, then run `bundle install`. That'll install all the gem
|
38
38
|
dependencies. Make sure your methods are [TomDoc](http://tomdoc.org)'d
|
39
39
|
properly, that existing tests pass (`rake`), and that any new functionality
|
40
|
-
includes appropriate tests.
|
41
|
-
|
40
|
+
includes appropriate tests.
|
41
|
+
|
42
|
+
The tests are written in shell for
|
43
|
+
[roundup](https://github.com/bmizerany/roundup), since boom is basically just
|
44
|
+
Ruby pretending to be shell. `rake` should run them all for you just fine.
|
42
45
|
|
43
46
|
All good? Cool! Then [send me a pull request](https://github.com/holman/boom/pull/new/master)!
|
44
47
|
|
@@ -48,4 +51,4 @@ All good? Cool! Then [send me a pull request](https://github.com/holman/boom/pul
|
|
48
51
|
[@holman](http://twitter.com/holman) — if you're having issues, want me to
|
49
52
|
merge in your pull request, or are using boom in a cool way. I'm kind of hoping
|
50
53
|
this is generic enough that people do some fun things with it. First one to use
|
51
|
-
`boom` to calculate their tax liability wins.
|
54
|
+
`boom` to calculate their tax liability wins.
|
data/Rakefile
CHANGED
@@ -45,11 +45,9 @@ end
|
|
45
45
|
|
46
46
|
task :default => :test
|
47
47
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
test.pattern = 'test/**/test_*.rb'
|
52
|
-
test.verbose = true
|
48
|
+
desc "Run tests for boom"
|
49
|
+
task :test do
|
50
|
+
exec "test/run"
|
53
51
|
end
|
54
52
|
|
55
53
|
desc "Open an irb session preloaded with this library"
|
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.
|
17
|
-
s.date = '2013-03-
|
16
|
+
s.version = '0.3.0'
|
17
|
+
s.date = '2013-03-29'
|
18
18
|
s.rubyforge_project = 'boom'
|
19
19
|
|
20
20
|
## Make sure your summary is short. The description may be as long
|
@@ -32,7 +32,7 @@ Gem::Specification.new do |s|
|
|
32
32
|
## better to set the email to an email list or something. If you don't have
|
33
33
|
## a custom homepage, consider using your GitHub URL or the like.
|
34
34
|
s.authors = ["Zach Holman"]
|
35
|
-
s.email = '
|
35
|
+
s.email = 'zach@zachholman.com'
|
36
36
|
s.homepage = 'https://github.com/holman/boom'
|
37
37
|
|
38
38
|
## This gets added to the $LOAD_PATH so that 'lib/NAME.rb' can be required as
|
@@ -50,12 +50,11 @@ 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[README.
|
53
|
+
s.extra_rdoc_files = %w[README.md LICENSE.md]
|
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.
|
57
|
-
s.add_dependency('
|
58
|
-
s.add_dependency('json_pure', "~> 1.5.3")
|
57
|
+
s.add_dependency('yajl-ruby', "~> 1.1.0")
|
59
58
|
|
60
59
|
## List your development dependencies here. Development dependencies are
|
61
60
|
## those that are only needed during development
|
@@ -67,11 +66,11 @@ Gem::Specification.new do |s|
|
|
67
66
|
## THE MANIFEST COMMENTS, they are used as delimiters by the task.
|
68
67
|
# = MANIFEST =
|
69
68
|
s.files = %w[
|
70
|
-
CHANGELOG.
|
69
|
+
CHANGELOG.md
|
71
70
|
Gemfile
|
72
71
|
Gemfile.lock
|
73
|
-
LICENSE.
|
74
|
-
README.
|
72
|
+
LICENSE.md
|
73
|
+
README.md
|
75
74
|
Rakefile
|
76
75
|
bin/boom
|
77
76
|
boom.gemspec
|
@@ -81,28 +80,17 @@ Gem::Specification.new do |s|
|
|
81
80
|
lib/boom.rb
|
82
81
|
lib/boom/color.rb
|
83
82
|
lib/boom/command.rb
|
84
|
-
lib/boom/config.rb
|
85
83
|
lib/boom/core_ext/symbol.rb
|
86
84
|
lib/boom/item.rb
|
87
85
|
lib/boom/list.rb
|
88
86
|
lib/boom/platform.rb
|
89
87
|
lib/boom/storage.rb
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
test/examples/config_json.json
|
97
|
-
test/examples/test_json.json
|
98
|
-
test/examples/urls.json
|
99
|
-
test/helper.rb
|
100
|
-
test/test_color.rb
|
101
|
-
test/test_command.rb
|
102
|
-
test/test_config.rb
|
103
|
-
test/test_item.rb
|
104
|
-
test/test_list.rb
|
105
|
-
test/test_platform.rb
|
88
|
+
test/cli.sh
|
89
|
+
test/examples/data.json
|
90
|
+
test/item.sh
|
91
|
+
test/list.sh
|
92
|
+
test/roundup
|
93
|
+
test/run
|
106
94
|
]
|
107
95
|
# = MANIFEST =
|
108
96
|
|
data/lib/boom/command.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
# Command is the main point of entry for boom commands; shell arguments are
|
4
|
-
#
|
4
|
+
# passed through to Command, which then filters and parses through individual
|
5
5
|
# commands and reroutes them to constituent object classes.
|
6
6
|
#
|
7
7
|
# Command also keeps track of one connection to Storage, which is how new data
|
@@ -87,8 +87,6 @@ module Boom
|
|
87
87
|
def delegate(command, major, minor)
|
88
88
|
return all if command == 'all'
|
89
89
|
return edit if command == 'edit'
|
90
|
-
return switch(major) if command == 'switch'
|
91
|
-
return show_storage if command == 'storage'
|
92
90
|
return version if command == "-v"
|
93
91
|
return version if command == "--version"
|
94
92
|
return help if command == 'help'
|
@@ -99,16 +97,16 @@ module Boom
|
|
99
97
|
|
100
98
|
# if we're operating on a List
|
101
99
|
if storage.list_exists?(command)
|
102
|
-
return delete_list(command) if major == 'delete'
|
100
|
+
return delete_list(command) if major == '--delete'
|
103
101
|
return detail_list(command) unless major
|
104
|
-
unless minor == 'delete'
|
102
|
+
unless minor == '--delete'
|
105
103
|
return add_item(command,major,minor) if minor
|
106
104
|
return add_item(command,major,stdin.read) if stdin.stat.size > 0
|
107
105
|
return search_list_for_item(command, major)
|
108
106
|
end
|
109
107
|
end
|
110
108
|
|
111
|
-
if minor == 'delete' and storage.item_exists?(major)
|
109
|
+
if minor == '--delete' and storage.item_exists?(major)
|
112
110
|
return delete_item(command, major)
|
113
111
|
end
|
114
112
|
|
@@ -118,25 +116,6 @@ module Boom
|
|
118
116
|
return create_list(command, major, minor)
|
119
117
|
end
|
120
118
|
|
121
|
-
# Public: shows the current user's storage.
|
122
|
-
#
|
123
|
-
# Returns nothing.
|
124
|
-
def show_storage
|
125
|
-
output "You're currently using #{Boom.config.attributes['backend']}."
|
126
|
-
end
|
127
|
-
|
128
|
-
# Public: switch to a new backend.
|
129
|
-
#
|
130
|
-
# backend - the String of the backend desired
|
131
|
-
#
|
132
|
-
# Returns nothing.
|
133
|
-
def switch(backend)
|
134
|
-
Storage.backend = backend
|
135
|
-
output "We've switched you over to #{backend}."
|
136
|
-
rescue NameError
|
137
|
-
output "We couldn't find that storage engine. Check the name and try again."
|
138
|
-
end
|
139
|
-
|
140
119
|
# Public: prints all Items over a List.
|
141
120
|
#
|
142
121
|
# name - the List object to iterate over
|
@@ -234,7 +213,7 @@ module Boom
|
|
234
213
|
#
|
235
214
|
# Returns nothing.
|
236
215
|
def delete_list(name)
|
237
|
-
|
216
|
+
printf "You sure you want to delete everything in #{yellow(name)}? (y/n): "
|
238
217
|
if $stdin.gets.chomp == 'y'
|
239
218
|
List.delete(name)
|
240
219
|
output "#{cyan("Boom!")} Deleted all your #{yellow(name)}."
|
@@ -336,11 +315,7 @@ module Boom
|
|
336
315
|
#
|
337
316
|
# Returns nothing.
|
338
317
|
def edit
|
339
|
-
|
340
|
-
output "#{cyan("Boom!")} #{Platform.edit(storage.json_file)}"
|
341
|
-
else
|
342
|
-
output "This storage backend does not store #{cyan("Boom!")} data on your computer"
|
343
|
-
end
|
318
|
+
output "#{cyan("Boom!")} #{Platform.edit(storage.json_file)}"
|
344
319
|
end
|
345
320
|
|
346
321
|
# Public: prints all the commands of boom.
|
@@ -354,12 +329,10 @@ module Boom
|
|
354
329
|
boom all show all items in all lists
|
355
330
|
boom edit edit the boom JSON file in $EDITOR
|
356
331
|
boom help this help text
|
357
|
-
boom storage shows which storage backend you're using
|
358
|
-
boom switch <storage> switches to a different storage backend
|
359
332
|
|
360
333
|
boom <list> create a new list
|
361
334
|
boom <list> show items for a list
|
362
|
-
boom <list> delete
|
335
|
+
boom <list> --delete deletes a list
|
363
336
|
|
364
337
|
boom <list> <name> <value> create a new list item
|
365
338
|
boom <name> copy item's value to clipboard
|
@@ -370,7 +343,7 @@ module Boom
|
|
370
343
|
boom random <list> open a random item's url for a list in browser
|
371
344
|
boom echo <name> echo the item's value without copying
|
372
345
|
boom echo <list> <name> echo the item's value without copying
|
373
|
-
boom <list> <name> delete
|
346
|
+
boom <list> <name> --delete deletes an item
|
374
347
|
|
375
348
|
all other documentation is located at:
|
376
349
|
https://github.com/holman/boom
|
data/lib/boom/item.rb
CHANGED
@@ -6,7 +6,6 @@
|
|
6
6
|
#
|
7
7
|
module Boom
|
8
8
|
class Item
|
9
|
-
|
10
9
|
# Public: the String name of the Item
|
11
10
|
attr_accessor :name
|
12
11
|
|
@@ -54,7 +53,7 @@ module Boom
|
|
54
53
|
end
|
55
54
|
|
56
55
|
# Public: only return url part of value - if no url has been
|
57
|
-
# detected
|
56
|
+
# detected it'll return the value.
|
58
57
|
#
|
59
58
|
# Returns a String which preferably is a URL.
|
60
59
|
def url
|
@@ -67,6 +66,5 @@ module Boom
|
|
67
66
|
def to_hash
|
68
67
|
{ @name => @value }
|
69
68
|
end
|
70
|
-
|
71
69
|
end
|
72
|
-
end
|
70
|
+
end
|
data/lib/boom/list.rb
CHANGED
data/lib/boom/storage.rb
CHANGED
@@ -1,22 +1,124 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
1
|
#
|
4
2
|
# Storage is the interface between multiple Backends. You can use Storage
|
5
3
|
# directly without having to worry about which Backend is in use.
|
6
4
|
#
|
7
5
|
module Boom
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
6
|
+
class Storage
|
7
|
+
JSON_FILE = "#{ENV['HOME']}/.boom"
|
8
|
+
|
9
|
+
# Public: the path to the Json file used by boom.
|
10
|
+
#
|
11
|
+
# Returns the String path of boom's Json representation.
|
12
|
+
def json_file
|
13
|
+
ENV['BOOMFILE'] || JSON_FILE
|
14
|
+
end
|
15
|
+
|
16
|
+
# Public: initializes a Storage instance by loading in your persisted data from adapter.
|
17
|
+
#
|
18
|
+
# Returns the Storage instance.
|
19
|
+
def initialize
|
20
|
+
@lists = []
|
21
|
+
bootstrap
|
22
|
+
populate
|
23
|
+
end
|
24
|
+
|
25
|
+
# Public: the in-memory collection of all Lists attached to this Storage
|
26
|
+
# instance.
|
27
|
+
#
|
28
|
+
# lists - an Array of individual List items
|
29
|
+
#
|
30
|
+
# Returns nothing.
|
31
|
+
attr_writer :lists
|
32
|
+
|
33
|
+
# Public: the list of Lists in your JSON data, sorted by number of items
|
34
|
+
# descending.
|
35
|
+
#
|
36
|
+
# Returns an Array of List objects.
|
37
|
+
def lists
|
38
|
+
@lists.sort_by { |list| -list.items.size }
|
39
|
+
end
|
40
|
+
|
41
|
+
# Public: tests whether a named List exists.
|
42
|
+
#
|
43
|
+
# name - the String name of a List
|
44
|
+
#
|
45
|
+
# Returns true if found, false if not.
|
46
|
+
def list_exists?(name)
|
47
|
+
@lists.detect { |list| list.name == name }
|
48
|
+
end
|
49
|
+
|
50
|
+
# Public: all Items in storage.
|
51
|
+
#
|
52
|
+
# Returns an Array of all Items.
|
53
|
+
def items
|
54
|
+
@lists.collect(&:items).flatten
|
15
55
|
end
|
16
56
|
|
17
|
-
|
18
|
-
|
57
|
+
# Public: tests whether a named Item exists.
|
58
|
+
#
|
59
|
+
# name - the String name of an Item
|
60
|
+
#
|
61
|
+
# Returns true if found, false if not.
|
62
|
+
def item_exists?(name)
|
63
|
+
items.detect { |item| item.name == name }
|
19
64
|
end
|
20
65
|
|
66
|
+
# Public: creates a Hash of the representation of the in-memory data
|
67
|
+
# structure. This percolates down to Items by calling to_hash on the List,
|
68
|
+
# which in tern calls to_hash on individual Items.
|
69
|
+
#
|
70
|
+
# Returns a Hash of the entire data set.
|
71
|
+
def to_hash
|
72
|
+
{ :lists => lists.collect(&:to_hash) }
|
73
|
+
end
|
74
|
+
|
75
|
+
# Takes care of bootstrapping the Json file, both in terms of creating the
|
76
|
+
# file and in terms of creating a skeleton Json schema.
|
77
|
+
#
|
78
|
+
# Return true if successfully saved.
|
79
|
+
def bootstrap
|
80
|
+
return if File.exist?(json_file)
|
81
|
+
FileUtils.touch json_file
|
82
|
+
File.open(json_file, 'w') {|f| f.write(to_json) }
|
83
|
+
save
|
84
|
+
end
|
85
|
+
|
86
|
+
# Take a JSON representation of data and explode it out into the consituent
|
87
|
+
# Lists and Items for the given Storage instance.
|
88
|
+
#
|
89
|
+
# Returns nothing.
|
90
|
+
def populate
|
91
|
+
file = File.new(json_file, 'r')
|
92
|
+
storage = Yajl::Parser.parse(file)
|
93
|
+
|
94
|
+
storage['lists'].each do |lists|
|
95
|
+
lists.each do |list_name, items|
|
96
|
+
@lists << list = List.new(list_name)
|
97
|
+
|
98
|
+
items.each do |item|
|
99
|
+
item.each do |name,value|
|
100
|
+
list.add_item(Item.new(name,value))
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# Public: persists your in-memory objects to disk in Json format.
|
108
|
+
#
|
109
|
+
# lists_Json - list in Json format
|
110
|
+
#
|
111
|
+
# Returns true if successful, false if unsuccessful.
|
112
|
+
def save
|
113
|
+
File.open(json_file, 'w') {|f| f.write(to_json) }
|
114
|
+
end
|
115
|
+
|
116
|
+
# Public: the Json representation of the current List and Item assortment
|
117
|
+
# attached to the Storage instance.
|
118
|
+
#
|
119
|
+
# Returns a String Json representation of its Lists and their Items.
|
120
|
+
def to_json
|
121
|
+
Yajl::Encoder.encode(to_hash, :pretty => true)
|
122
|
+
end
|
21
123
|
end
|
22
|
-
end
|
124
|
+
end
|
data/lib/boom.rb
CHANGED
@@ -6,38 +6,23 @@ rescue LoadError
|
|
6
6
|
end
|
7
7
|
|
8
8
|
require 'fileutils'
|
9
|
-
require '
|
9
|
+
require 'yajl'
|
10
10
|
|
11
11
|
$:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
|
12
12
|
|
13
13
|
require 'boom/color'
|
14
14
|
require 'boom/platform'
|
15
15
|
require 'boom/command'
|
16
|
-
require 'boom/config'
|
17
16
|
require 'boom/item'
|
18
17
|
require 'boom/list'
|
19
|
-
|
20
18
|
require 'boom/storage'
|
21
|
-
require 'boom/storage/base'
|
22
|
-
require 'boom/storage/json'
|
23
|
-
require 'boom/storage/redis'
|
24
|
-
require 'boom/storage/mongodb'
|
25
|
-
require 'boom/storage/keychain'
|
26
|
-
require 'boom/storage/gist'
|
27
19
|
|
28
20
|
require 'boom/core_ext/symbol'
|
29
21
|
|
30
22
|
module Boom
|
31
|
-
VERSION = '0.
|
32
|
-
|
33
|
-
extend self
|
34
|
-
|
35
|
-
def storage
|
36
|
-
@storage ||= Boom::Storage.backend
|
37
|
-
end
|
23
|
+
VERSION = '0.3.0'
|
38
24
|
|
39
|
-
def
|
40
|
-
@
|
25
|
+
def self.storage
|
26
|
+
@storage ||= Storage.new
|
41
27
|
end
|
42
|
-
|
43
|
-
end
|
28
|
+
end
|
data/test/cli.sh
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
{
|
2
|
+
"lists": [
|
3
|
+
{
|
4
|
+
"urls": [
|
5
|
+
{ "blog": "https://github.com/holman" },
|
6
|
+
{ "twitter": "https://twitter.com/holman"},
|
7
|
+
{ "site": "http://zachholman.com"}
|
8
|
+
]
|
9
|
+
},
|
10
|
+
{
|
11
|
+
"jokes": [
|
12
|
+
{ "none": "What do you call a cow with no legs? Ground beef." },
|
13
|
+
{ "three": "What do you call a cow with three legs? Lean beef." }
|
14
|
+
]
|
15
|
+
}
|
16
|
+
]
|
17
|
+
}
|
data/test/item.sh
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env roundup
|
2
|
+
export BOOMFILE=test/examples/data.json
|
3
|
+
boom="./bin/boom"
|
4
|
+
|
5
|
+
describe "items"
|
6
|
+
|
7
|
+
it_adds_an_item() {
|
8
|
+
$boom urls google 'http://google.com'
|
9
|
+
$boom urls | grep google.com
|
10
|
+
}
|
11
|
+
|
12
|
+
it_deletes_an_item() {
|
13
|
+
yes | $boom urls google --delete | grep 'gone forever'
|
14
|
+
$boom urls google | grep 'not found'
|
15
|
+
}
|
16
|
+
|
17
|
+
it_echos_an_item() {
|
18
|
+
$boom echo site | grep 'zachholman.com'
|
19
|
+
}
|
data/test/list.sh
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
#!/usr/bin/env roundup
|
2
|
+
export BOOMFILE=test/examples/data.json
|
3
|
+
boom="./bin/boom"
|
4
|
+
|
5
|
+
describe "lists"
|
6
|
+
|
7
|
+
it_shows_all_lists_by_default() {
|
8
|
+
$boom | grep "urls"
|
9
|
+
$boom | grep "jokes"
|
10
|
+
}
|
11
|
+
|
12
|
+
it_adds_a_list() {
|
13
|
+
$boom enemies | grep "Created a new list"
|
14
|
+
$boom | grep "enemies (0)"
|
15
|
+
}
|
16
|
+
|
17
|
+
it_adds_a_list_with_a_duplicate_name() {
|
18
|
+
$boom urls github 'http://github.com/about'
|
19
|
+
$boom github | grep '/about'
|
20
|
+
}
|
21
|
+
|
22
|
+
it_shows_a_list() {
|
23
|
+
$boom urls | grep 'zachholman'
|
24
|
+
}
|
25
|
+
|
26
|
+
it_deletes_a_list() {
|
27
|
+
$boom | grep "enemies"
|
28
|
+
yes | $boom enemies --delete | grep "Deleted"
|
29
|
+
! $boom | grep "enemies"
|
30
|
+
}
|