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
data/test/roundup
ADDED
@@ -0,0 +1,307 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
# [r5]: roundup.5.html
|
3
|
+
# [r1t]: roundup-1-test.sh.html
|
4
|
+
# [r5t]: roundup-5-test.sh.html
|
5
|
+
#
|
6
|
+
# _(c) 2010 Blake Mizerany - MIT License_
|
7
|
+
#
|
8
|
+
# Spray **roundup** on your shells to eliminate weeds and bugs. If your shells
|
9
|
+
# survive **roundup**'s deathly toxic properties, they are considered
|
10
|
+
# roundup-ready.
|
11
|
+
#
|
12
|
+
# **roundup** reads shell scripts to form test plans. Each
|
13
|
+
# test plan is sourced into a sandbox where each test is executed.
|
14
|
+
#
|
15
|
+
# See [roundup-1-test.sh.html][r1t] or [roundup-5-test.sh.html][r5t] for example
|
16
|
+
# test plans.
|
17
|
+
#
|
18
|
+
# __Install__
|
19
|
+
#
|
20
|
+
# git clone http://github.com/bmizerany/roundup.git
|
21
|
+
# cd roundup
|
22
|
+
# make
|
23
|
+
# sudo make install
|
24
|
+
# # Alternatively, copy `roundup` wherever you like.
|
25
|
+
#
|
26
|
+
# __NOTE__: Because test plans are sourced into roundup, roundup prefixes its
|
27
|
+
# variable and function names with `roundup_` to avoid name collisions. See
|
28
|
+
# "Sandbox Test Runs" below for more insight.
|
29
|
+
|
30
|
+
# Usage and Prerequisites
|
31
|
+
# -----------------------
|
32
|
+
|
33
|
+
# Exit if any following command exits with a non-zero status.
|
34
|
+
set -e
|
35
|
+
|
36
|
+
# The current version is set during `make version`. Do not modify this line in
|
37
|
+
# anyway unless you know what you're doing.
|
38
|
+
ROUNDUP_VERSION="0.0.5"
|
39
|
+
export ROUNDUP_VERSION
|
40
|
+
|
41
|
+
# Usage is defined in a specific comment syntax. It is `grep`ed out of this file
|
42
|
+
# when needed (i.e. The Tomayko Method). See
|
43
|
+
# [shocco](http://rtomayko.heroku.com/shocco) for more detail.
|
44
|
+
#/ usage: roundup [--help|-h] [--version|-v] [plan ...]
|
45
|
+
|
46
|
+
roundup_usage() {
|
47
|
+
grep '^#/' <"$0" | cut -c4-
|
48
|
+
}
|
49
|
+
|
50
|
+
while test "$#" -gt 0
|
51
|
+
do
|
52
|
+
case "$1" in
|
53
|
+
--help|-h)
|
54
|
+
roundup_usage
|
55
|
+
exit 0
|
56
|
+
;;
|
57
|
+
--version|-v)
|
58
|
+
echo "roundup version $ROUNDUP_VERSION"
|
59
|
+
exit 0
|
60
|
+
;;
|
61
|
+
--color)
|
62
|
+
color=always
|
63
|
+
shift
|
64
|
+
;;
|
65
|
+
-)
|
66
|
+
echo >&2 "roundup: unknown switch $1"
|
67
|
+
exit 1
|
68
|
+
;;
|
69
|
+
*)
|
70
|
+
break
|
71
|
+
;;
|
72
|
+
esac
|
73
|
+
done
|
74
|
+
|
75
|
+
# Consider all scripts with names matching `*-test.sh` the plans to run unless
|
76
|
+
# otherwise specified as arguments.
|
77
|
+
if [ "$#" -gt "0" ]
|
78
|
+
then
|
79
|
+
roundup_plans="$@"
|
80
|
+
else
|
81
|
+
roundup_plans="$(ls *-test.sh)"
|
82
|
+
fi
|
83
|
+
|
84
|
+
: ${color:="auto"}
|
85
|
+
|
86
|
+
# Create a temporary storage place for test output to be retrieved for display
|
87
|
+
# after failing tests.
|
88
|
+
roundup_tmp="$PWD/.roundup.$$"
|
89
|
+
mkdir -p "$roundup_tmp"
|
90
|
+
|
91
|
+
trap "rm -rf \"$roundup_tmp\"" EXIT INT
|
92
|
+
|
93
|
+
# __Tracing failures__
|
94
|
+
roundup_trace() {
|
95
|
+
# Delete the first two lines that represent roundups execution of the
|
96
|
+
# test function. They are useless to the user.
|
97
|
+
sed '1d' |
|
98
|
+
# Delete the last line which is the "set +x" of the error trap
|
99
|
+
sed '$d' |
|
100
|
+
# Replace the rc=$? of the error trap with an verbose string appended
|
101
|
+
# to the failing command trace line.
|
102
|
+
sed '$s/.*rc=/exit code /' |
|
103
|
+
# Trim the two left most `+` signs. They represent the depth at which
|
104
|
+
# roundup executed the function. They also, are useless and confusing.
|
105
|
+
sed 's/^++//' |
|
106
|
+
# Indent the output by 4 spaces to align under the test name in the
|
107
|
+
# summary.
|
108
|
+
sed 's/^/ /' |
|
109
|
+
# Highlight the last line in front of the exit code to bring notice to
|
110
|
+
# where the error occurred.
|
111
|
+
#
|
112
|
+
# The sed magic puts every line into the hold buffer first, then
|
113
|
+
# substitutes in the previous hold buffer content, prints that and starts
|
114
|
+
# with the next cycle. At the end the last line (in the hold buffer)
|
115
|
+
# is printed without substitution.
|
116
|
+
sed -n "x;1!{ \$s/\(.*\)/$mag\1$clr/; };1!p;\$x;\$p"
|
117
|
+
}
|
118
|
+
|
119
|
+
# __Other helpers__
|
120
|
+
|
121
|
+
# Track the test stats while outputting a real-time report. This takes input on
|
122
|
+
# **stdin**. Each input line must come in the format of:
|
123
|
+
#
|
124
|
+
# # The plan description to be displayed
|
125
|
+
# d <plan description>
|
126
|
+
#
|
127
|
+
# # A passing test
|
128
|
+
# p <test name>
|
129
|
+
#
|
130
|
+
# # A failed test
|
131
|
+
# f <test name>
|
132
|
+
roundup_summarize() {
|
133
|
+
set -e
|
134
|
+
|
135
|
+
# __Colors for output__
|
136
|
+
|
137
|
+
# Use colors if we are writing to a tty device.
|
138
|
+
if (test -t 1) || (test $color = always)
|
139
|
+
then
|
140
|
+
red=$(printf "\033[31m")
|
141
|
+
grn=$(printf "\033[32m")
|
142
|
+
mag=$(printf "\033[35m")
|
143
|
+
clr=$(printf "\033[m")
|
144
|
+
cols=$(tput cols)
|
145
|
+
fi
|
146
|
+
|
147
|
+
# Make these available to `roundup_trace`.
|
148
|
+
export red grn mag clr
|
149
|
+
|
150
|
+
ntests=0
|
151
|
+
passed=0
|
152
|
+
failed=0
|
153
|
+
|
154
|
+
: ${cols:=10}
|
155
|
+
|
156
|
+
while read status name
|
157
|
+
do
|
158
|
+
case $status in
|
159
|
+
p)
|
160
|
+
ntests=$(expr $ntests + 1)
|
161
|
+
passed=$(expr $passed + 1)
|
162
|
+
printf " %-48s " "$name:"
|
163
|
+
printf "$grn[PASS]$clr\n"
|
164
|
+
;;
|
165
|
+
f)
|
166
|
+
ntests=$(expr $ntests + 1)
|
167
|
+
failed=$(expr $failed + 1)
|
168
|
+
printf " %-48s " "$name:"
|
169
|
+
printf "$red[FAIL]$clr\n"
|
170
|
+
roundup_trace < "$roundup_tmp/$name"
|
171
|
+
;;
|
172
|
+
d)
|
173
|
+
printf "%s\n" "$name"
|
174
|
+
;;
|
175
|
+
esac
|
176
|
+
done
|
177
|
+
# __Test Summary__
|
178
|
+
#
|
179
|
+
# Display the summary now that all tests are finished.
|
180
|
+
yes = | head -n 57 | tr -d '\n'
|
181
|
+
printf "\n"
|
182
|
+
printf "Tests: %3d | " $ntests
|
183
|
+
printf "Passed: %3d | " $passed
|
184
|
+
printf "Failed: %3d" $failed
|
185
|
+
printf "\n"
|
186
|
+
|
187
|
+
# Exit with an error if any tests failed
|
188
|
+
test $failed -eq 0 || exit 2
|
189
|
+
}
|
190
|
+
|
191
|
+
# Sandbox Test Runs
|
192
|
+
# -----------------
|
193
|
+
|
194
|
+
# The above checks guarantee we have at least one test. We can now move through
|
195
|
+
# each specified test plan, determine its test plan, and administer each test
|
196
|
+
# listed in a isolated sandbox.
|
197
|
+
for roundup_p in $roundup_plans
|
198
|
+
do
|
199
|
+
# Create a sandbox, source the test plan, run the tests, then leave
|
200
|
+
# without a trace.
|
201
|
+
(
|
202
|
+
# Consider the description to be the `basename` of the plan minus the
|
203
|
+
# tailing -test.sh.
|
204
|
+
roundup_desc=$(basename "$roundup_p" -test.sh)
|
205
|
+
|
206
|
+
# Define functions for
|
207
|
+
# [roundup(5)][r5]
|
208
|
+
|
209
|
+
# A custom description is recommended, but optional. Use `describe` to
|
210
|
+
# set the description to something more meaningful.
|
211
|
+
# TODO: reimplement this.
|
212
|
+
describe() {
|
213
|
+
roundup_desc="$*"
|
214
|
+
}
|
215
|
+
|
216
|
+
# Provide default `before` and `after` functions that run only `:`, a
|
217
|
+
# no-op. They may or may not be redefined by the test plan.
|
218
|
+
before() { :; }
|
219
|
+
after() { :; }
|
220
|
+
|
221
|
+
# Seek test methods and aggregate their names, forming a test plan.
|
222
|
+
# This is done before populating the sandbox with tests to avoid odd
|
223
|
+
# conflicts.
|
224
|
+
|
225
|
+
# TODO: I want to do this with sed only. Please send a patch if you
|
226
|
+
# know a cleaner way.
|
227
|
+
roundup_plan=$(
|
228
|
+
grep "^it_.*()" $roundup_p |
|
229
|
+
sed "s/\(it_[a-zA-Z0-9_]*\).*$/\1/g"
|
230
|
+
)
|
231
|
+
|
232
|
+
# We have the test plan and are in our sandbox with [roundup(5)][r5]
|
233
|
+
# defined. Now we source the plan to bring its tests into scope.
|
234
|
+
. ./$roundup_p
|
235
|
+
|
236
|
+
# Output the description signal
|
237
|
+
printf "d %s" "$roundup_desc" | tr "\n" " "
|
238
|
+
printf "\n"
|
239
|
+
|
240
|
+
for roundup_test_name in $roundup_plan
|
241
|
+
do
|
242
|
+
# Any number of things are possible in `before`, `after`, and the
|
243
|
+
# test. Drop into an subshell to contain operations that may throw
|
244
|
+
# off roundup; such as `cd`.
|
245
|
+
(
|
246
|
+
# Output `before` trace to temporary file. If `before` runs cleanly,
|
247
|
+
# the trace will be overwritten by the actual test case below.
|
248
|
+
{
|
249
|
+
# redirect tracing output of `before` into file.
|
250
|
+
{
|
251
|
+
set -x
|
252
|
+
# If `before` wasn't redefined, then this is `:`.
|
253
|
+
before
|
254
|
+
} &>"$roundup_tmp/$roundup_test_name"
|
255
|
+
# disable tracing again. Its trace output goes to /dev/null.
|
256
|
+
set +x
|
257
|
+
} &>/dev/null
|
258
|
+
|
259
|
+
# exit subshell with return code of last failing command. This
|
260
|
+
# is needed to see the return code 253 on failed assumptions.
|
261
|
+
# But, only do this if the error handling is activated.
|
262
|
+
set -E
|
263
|
+
trap 'rc=$?; set +x; set -o | grep "errexit.*on" >/dev/null && exit $rc' ERR
|
264
|
+
|
265
|
+
# If `before` wasn't redefined, then this is `:`.
|
266
|
+
before
|
267
|
+
|
268
|
+
# Momentarily turn off auto-fail to give us access to the tests
|
269
|
+
# exit status in `$?` for capturing.
|
270
|
+
set +e
|
271
|
+
(
|
272
|
+
# Set `-xe` before the test in the subshell. We want the
|
273
|
+
# test to fail fast to allow for more accurate output of
|
274
|
+
# where things went wrong but not in _our_ process because a
|
275
|
+
# failed test should not immediately fail roundup. Each
|
276
|
+
# tests trace output is saved in temporary storage.
|
277
|
+
set -xe
|
278
|
+
$roundup_test_name
|
279
|
+
) >"$roundup_tmp/$roundup_test_name" 2>&1
|
280
|
+
|
281
|
+
# We need to capture the exit status before returning the `set
|
282
|
+
# -e` mode. Returning with `set -e` before we capture the exit
|
283
|
+
# status will result in `$?` being set with `set`'s status
|
284
|
+
# instead.
|
285
|
+
roundup_result=$?
|
286
|
+
|
287
|
+
# It's safe to return to normal operation.
|
288
|
+
set -e
|
289
|
+
|
290
|
+
# If `after` wasn't redefined, then this runs `:`.
|
291
|
+
after
|
292
|
+
|
293
|
+
# This is the final step of a test. Print its pass/fail signal
|
294
|
+
# and name.
|
295
|
+
if [ "$roundup_result" -ne 0 ]
|
296
|
+
then printf "f"
|
297
|
+
else printf "p"
|
298
|
+
fi
|
299
|
+
|
300
|
+
printf " $roundup_test_name\n"
|
301
|
+
)
|
302
|
+
done
|
303
|
+
)
|
304
|
+
done |
|
305
|
+
|
306
|
+
# All signals are piped to this for summary.
|
307
|
+
roundup_summarize
|
data/test/run
ADDED
metadata
CHANGED
@@ -1,109 +1,84 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: boom
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 2
|
9
|
-
- 4
|
10
|
-
version: 0.2.4
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Zach Holman
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
name: multi_json
|
23
|
-
prerelease: false
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
12
|
+
date: 2013-03-29 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: yajl-ruby
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
18
|
+
requirements:
|
27
19
|
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 1
|
32
|
-
- 0
|
33
|
-
- 3
|
34
|
-
version: 1.0.3
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.1.0
|
35
22
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: json_pure
|
39
23
|
prerelease: false
|
40
|
-
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
25
|
none: false
|
42
|
-
requirements:
|
26
|
+
requirements:
|
43
27
|
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
|
46
|
-
|
47
|
-
- 1
|
48
|
-
- 5
|
49
|
-
- 3
|
50
|
-
version: 1.5.3
|
51
|
-
type: :runtime
|
52
|
-
version_requirements: *id002
|
53
|
-
- !ruby/object:Gem::Dependency
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.1.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
54
31
|
name: mocha
|
55
|
-
|
56
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
57
33
|
none: false
|
58
|
-
requirements:
|
34
|
+
requirements:
|
59
35
|
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
hash: 41
|
62
|
-
segments:
|
63
|
-
- 0
|
64
|
-
- 9
|
65
|
-
- 9
|
36
|
+
- !ruby/object:Gem::Version
|
66
37
|
version: 0.9.9
|
67
38
|
type: :development
|
68
|
-
version_requirements: *id003
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rake
|
71
39
|
prerelease: false
|
72
|
-
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 0.9.9
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
73
49
|
none: false
|
74
|
-
requirements:
|
50
|
+
requirements:
|
75
51
|
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
hash: 63
|
78
|
-
segments:
|
79
|
-
- 0
|
80
|
-
- 9
|
81
|
-
- 2
|
52
|
+
- !ruby/object:Gem::Version
|
82
53
|
version: 0.9.2
|
83
54
|
type: :development
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.9.2
|
62
|
+
description: ! "God it's about every day where I think to myself, gadzooks,\n I keep
|
63
|
+
typing *REPETITIVE_BORING_TASK* over and over. Wouldn't it be great if\n I had
|
64
|
+
something like boom to store all these commonly-used text snippets for\n me? Then
|
65
|
+
I realized that was a worthless idea since boom hadn't been created\n yet and I
|
66
|
+
had no idea what that statement meant. At some point I found the\n code for boom
|
67
|
+
in a dark alleyway and released it under my own name because I\n wanted to look
|
68
|
+
smart."
|
69
|
+
email: zach@zachholman.com
|
70
|
+
executables:
|
95
71
|
- boom
|
96
72
|
extensions: []
|
97
|
-
|
98
|
-
|
99
|
-
-
|
100
|
-
|
101
|
-
|
102
|
-
- CHANGELOG.markdown
|
73
|
+
extra_rdoc_files:
|
74
|
+
- README.md
|
75
|
+
- LICENSE.md
|
76
|
+
files:
|
77
|
+
- CHANGELOG.md
|
103
78
|
- Gemfile
|
104
79
|
- Gemfile.lock
|
105
|
-
- LICENSE.
|
106
|
-
- README.
|
80
|
+
- LICENSE.md
|
81
|
+
- README.md
|
107
82
|
- Rakefile
|
108
83
|
- bin/boom
|
109
84
|
- boom.gemspec
|
@@ -113,66 +88,40 @@ files:
|
|
113
88
|
- lib/boom.rb
|
114
89
|
- lib/boom/color.rb
|
115
90
|
- lib/boom/command.rb
|
116
|
-
- lib/boom/config.rb
|
117
91
|
- lib/boom/core_ext/symbol.rb
|
118
92
|
- lib/boom/item.rb
|
119
93
|
- lib/boom/list.rb
|
120
94
|
- lib/boom/platform.rb
|
121
95
|
- lib/boom/storage.rb
|
122
|
-
-
|
123
|
-
-
|
124
|
-
-
|
125
|
-
-
|
126
|
-
-
|
127
|
-
-
|
128
|
-
- test/examples/config_json.json
|
129
|
-
- test/examples/test_json.json
|
130
|
-
- test/examples/urls.json
|
131
|
-
- test/helper.rb
|
132
|
-
- test/test_color.rb
|
133
|
-
- test/test_command.rb
|
134
|
-
- test/test_config.rb
|
135
|
-
- test/test_item.rb
|
136
|
-
- test/test_list.rb
|
137
|
-
- test/test_platform.rb
|
138
|
-
has_rdoc: true
|
96
|
+
- test/cli.sh
|
97
|
+
- test/examples/data.json
|
98
|
+
- test/item.sh
|
99
|
+
- test/list.sh
|
100
|
+
- test/roundup
|
101
|
+
- test/run
|
139
102
|
homepage: https://github.com/holman/boom
|
140
103
|
licenses: []
|
141
|
-
|
142
104
|
post_install_message:
|
143
|
-
rdoc_options:
|
105
|
+
rdoc_options:
|
144
106
|
- --charset=UTF-8
|
145
|
-
require_paths:
|
107
|
+
require_paths:
|
146
108
|
- lib
|
147
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
148
110
|
none: false
|
149
|
-
requirements:
|
150
|
-
- -
|
151
|
-
- !ruby/object:Gem::Version
|
152
|
-
|
153
|
-
|
154
|
-
- 0
|
155
|
-
version: "0"
|
156
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
111
|
+
requirements:
|
112
|
+
- - ! '>='
|
113
|
+
- !ruby/object:Gem::Version
|
114
|
+
version: '0'
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
157
116
|
none: false
|
158
|
-
requirements:
|
159
|
-
- -
|
160
|
-
- !ruby/object:Gem::Version
|
161
|
-
|
162
|
-
segments:
|
163
|
-
- 0
|
164
|
-
version: "0"
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
165
121
|
requirements: []
|
166
|
-
|
167
122
|
rubyforge_project: boom
|
168
|
-
rubygems_version: 1.
|
123
|
+
rubygems_version: 1.8.23
|
169
124
|
signing_key:
|
170
125
|
specification_version: 2
|
171
126
|
summary: boom lets you access text snippets over your command line.
|
172
|
-
test_files:
|
173
|
-
- test/test_color.rb
|
174
|
-
- test/test_command.rb
|
175
|
-
- test/test_config.rb
|
176
|
-
- test/test_item.rb
|
177
|
-
- test/test_list.rb
|
178
|
-
- test/test_platform.rb
|
127
|
+
test_files: []
|
data/lib/boom/config.rb
DELETED
@@ -1,89 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
#
|
4
|
-
# Config manages all the config information for boom and its backends. It's a
|
5
|
-
# simple JSON Hash that gets persisted to `~/.boom` on-disk. You may access it
|
6
|
-
# as a Hash:
|
7
|
-
#
|
8
|
-
# config.attributes = { :backend => "JSON" }
|
9
|
-
# config.attributes[:backend]
|
10
|
-
# # => "json"
|
11
|
-
#
|
12
|
-
# config.attributes[:backend] = "Redis"
|
13
|
-
# config.attributes[:backend]
|
14
|
-
# # => "redis"
|
15
|
-
#
|
16
|
-
module Boom
|
17
|
-
class Config
|
18
|
-
|
19
|
-
# The main config file for boom
|
20
|
-
FILE = "#{ENV['HOME']}/.boom.conf"
|
21
|
-
|
22
|
-
# Public: The attributes Hash for configuration options. The attributes
|
23
|
-
# needed are dictated by each backend, but the `backend` option must be
|
24
|
-
# present.
|
25
|
-
attr_reader :attributes
|
26
|
-
|
27
|
-
# Public: creates a new instance of Config.
|
28
|
-
#
|
29
|
-
# This will load the attributes from boom's config file, or bootstrap it
|
30
|
-
# if this is a new install. Bootstrapping defaults to the JSON backend.
|
31
|
-
#
|
32
|
-
# Returns nothing.
|
33
|
-
def initialize
|
34
|
-
bootstrap unless File.exist?(file)
|
35
|
-
load_attributes
|
36
|
-
end
|
37
|
-
|
38
|
-
# Public: accessor for the configuration file.
|
39
|
-
#
|
40
|
-
# Returns the String file path.
|
41
|
-
def file
|
42
|
-
FILE
|
43
|
-
end
|
44
|
-
|
45
|
-
# Public: saves an empty, barebones hash to @attributes for the purpose of
|
46
|
-
# new user setup.
|
47
|
-
#
|
48
|
-
# Returns whether the attributes were saved.
|
49
|
-
def bootstrap
|
50
|
-
@attributes = {
|
51
|
-
:backend => 'json'
|
52
|
-
}
|
53
|
-
save
|
54
|
-
end
|
55
|
-
|
56
|
-
# Public: assigns a hash to the configuration attributes object. The
|
57
|
-
# contents of the attributes hash depends on what the backend needs. A
|
58
|
-
# `backend` key MUST be present, however.
|
59
|
-
#
|
60
|
-
# attrs - the Hash representation of attributes to persist to disk.
|
61
|
-
#
|
62
|
-
# Examples
|
63
|
-
#
|
64
|
-
# config.attributes = {"backend" => "json"}
|
65
|
-
#
|
66
|
-
# Returns whether the attributes were saved.
|
67
|
-
def attributes=(attrs)
|
68
|
-
@attributes = attrs
|
69
|
-
save
|
70
|
-
end
|
71
|
-
|
72
|
-
# Public: loads and parses the JSON tree from disk into memory and stores
|
73
|
-
# it in the attributes Hash.
|
74
|
-
#
|
75
|
-
# Returns nothing.
|
76
|
-
def load_attributes
|
77
|
-
@attributes = MultiJson.decode(File.new(file, 'r').read)
|
78
|
-
end
|
79
|
-
|
80
|
-
# Public: writes the in-memory JSON Hash to disk.
|
81
|
-
#
|
82
|
-
# Returns nothing.
|
83
|
-
def save
|
84
|
-
json = MultiJson.encode(attributes)
|
85
|
-
File.open(file, 'w') {|f| f.write(json) }
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
end
|