boom 0.2.3 → 0.2.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.markdown CHANGED
@@ -1,6 +1,8 @@
1
1
  # boom changes
2
-
3
2
  ## head
3
+ - [@Dlom](https://github.com/Dlom) fixed some troubles in #49.
4
+ - Some additional test coverage added by
5
+ [@nickhammond](https://github.com/nickhammond).
4
6
 
5
7
  ## 0.2.3
6
8
  - [@culvr](https://github.com/culvr) added `boom random <list>` that lets you
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- boom (0.2.1)
4
+ boom (0.2.3)
5
5
  json_pure (~> 1.5.3)
6
6
  multi_json (~> 1.0.3)
7
7
 
data/Rakefile CHANGED
@@ -52,22 +52,6 @@ Rake::TestTask.new(:test) do |test|
52
52
  test.verbose = true
53
53
  end
54
54
 
55
- desc "Generate RCov test coverage and open in your browser"
56
- task :coverage do
57
- require 'rcov'
58
- sh "rm -fr coverage"
59
- sh "rcov test/test_*.rb"
60
- sh "open coverage/index.html"
61
- end
62
-
63
- require 'rake/rdoctask'
64
- Rake::RDocTask.new do |rdoc|
65
- rdoc.rdoc_dir = 'rdoc'
66
- rdoc.title = "#{name} #{version}"
67
- rdoc.rdoc_files.include('README*')
68
- rdoc.rdoc_files.include('lib/**/*.rb')
69
- end
70
-
71
55
  desc "Open an irb session preloaded with this library"
72
56
  task :console do
73
57
  sh "irb -rubygems -r ./lib/#{name}.rb"
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.3'
17
- s.date = '2011-09-06'
16
+ s.version = '0.2.4'
17
+ s.date = '2013-03-15'
18
18
  s.rubyforge_project = 'boom'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
@@ -89,7 +89,6 @@ 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
93
92
  lib/boom/storage/json.rb
94
93
  lib/boom/storage/keychain.rb
95
94
  lib/boom/storage/mongodb.rb
data/completion/boom.bash CHANGED
@@ -1,23 +1,17 @@
1
1
  _boom_complete() {
2
- local cur prev lists
2
+ local cur prev lists curr_list items
3
3
  COMPREPLY=()
4
4
  cur="${COMP_WORDS[COMP_CWORD]}"
5
5
  prev="${COMP_WORDS[COMP_CWORD-1]}"
6
+ curr_list=`eval echo "$prev"`
7
+ local IFS=$'\n'
6
8
 
7
- lists=`boom | awk '{print $1}'`
8
-
9
- case "${prev}" in
10
- boom)
11
- COMPREPLY=( $(compgen -W "${lists}" -- ${cur}) )
12
- return 0
13
- ;;
14
- *)
15
- for ((i = 0; i < ${#lists}; i++)); do
16
- local items=`boom $prev | awk '{print $1}' | sed -e 's/://'`
17
- COMPREPLY=( $(compgen -W "${items}" -- ${cur}))
18
- return 0
19
- done
20
- ;;
21
- esac
9
+ if [ $COMP_CWORD -eq 1 ]; then
10
+ lists=`boom | sed 's/^ \(.*\) ([0-9]\+)$/\1/'`
11
+ COMPREPLY=( $( compgen -W '${lists}' -- ${cur} ) )
12
+ elif [ $COMP_CWORD -eq 2 ]; then
13
+ items=`boom $curr_list | sed 's/^ \(.\{0,16\}\):.*$/\1/'`
14
+ COMPREPLY=( $( compgen -W '${items}' -- ${cur} ) )
15
+ fi
22
16
  }
23
- complete -F _boom_complete boom
17
+ complete -o filenames -F _boom_complete boom
data/lib/boom/color.rb CHANGED
@@ -33,8 +33,14 @@ module Boom
33
33
  # colorize("Boom!", :magenta)
34
34
  # # => "\e[35mBoom!\e[0m"
35
35
  #
36
- # Returns the wrapped String.
36
+ # Returns the wrapped String unless the the platform is windows and
37
+ # does not have Win32::Console, in which case, returns the String.
37
38
  def colorize(string, color_code)
39
+ if !defined?(Win32::Console) && !!(RUBY_PLATFORM =~ /win32/ || RUBY_PLATFORM =~ /mingw32/)
40
+ # looks like this person doesn't have Win32::Console and is on windows
41
+ # just return the uncolorized string
42
+ return string
43
+ end
38
44
  "#{CODES[color_code] || color_code}#{string}#{CODES[:reset]}"
39
45
  end
40
46
 
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
- # passd through to Command, which then filters and parses through indivdual
4
+ # passd 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
@@ -108,12 +108,12 @@ module Boom
108
108
  end
109
109
  end
110
110
 
111
- return search_items(command) if storage.item_exists?(command)
112
-
113
111
  if minor == 'delete' and storage.item_exists?(major)
114
112
  return delete_item(command, major)
115
113
  end
116
114
 
115
+ return search_items(command) if storage.item_exists?(command) and !major
116
+
117
117
  return create_list(command, major, stdin.read) if !minor && stdin.stat.size > 0
118
118
  return create_list(command, major, minor)
119
119
  end
@@ -273,10 +273,17 @@ module Boom
273
273
  #
274
274
  # Returns nothing.
275
275
  def delete_item(list_name,name)
276
- list = List.find(list_name)
277
- list.delete_item(name)
278
- output "#{cyan("Boom!")} #{yellow(name)} is gone forever."
279
- save
276
+ if storage.list_exists?(list_name)
277
+ list = List.find(list_name)
278
+ if list.delete_item(name)
279
+ output "#{cyan("Boom!")} #{yellow(name)} is gone forever."
280
+ save
281
+ else
282
+ output "#{yellow(name)} #{red("not found in")} #{yellow(list_name)}"
283
+ end
284
+ else
285
+ output "We couldn't find that list."
286
+ end
280
287
  end
281
288
 
282
289
  # Public: search for an Item in all lists by name. Drops the
@@ -329,7 +336,11 @@ module Boom
329
336
  #
330
337
  # Returns nothing.
331
338
  def edit
332
- output "#{cyan("Boom!")} #{Platform.edit(storage.json_file)}"
339
+ if storage.respond_to?("json_file")
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
333
344
  end
334
345
 
335
346
  # Public: prints all the commands of boom.
data/lib/boom/platform.rb CHANGED
@@ -48,9 +48,9 @@ module Boom
48
48
  # Returns a String of the Item value.
49
49
  def open(item)
50
50
  unless windows?
51
- system("#{open_command} '#{item.url.gsub("\'","\\'")}'")
51
+ system("#{open_command} '#{item.url.gsub("\'","'\\\\''")}'")
52
52
  else
53
- system("#{open_command} #{item.url.gsub("\'","\\'")}")
53
+ system("#{open_command} #{item.url.gsub("\'","'\\\\''")}")
54
54
  end
55
55
 
56
56
  item.value
@@ -75,25 +75,25 @@ module Boom
75
75
  #
76
76
  # Returns the String value of the Item.
77
77
  def copy(item)
78
- unless windows?
79
- system("printf '#{item.value.gsub("\'","\\'")}' | #{copy_command}")
80
- else
81
- system("echo #{item.value.gsub("\'","\\'")} | #{copy_command}")
82
- end
83
-
78
+ IO.popen(copy_command,"w") {|cc| cc.write(item.value)}
84
79
  item.value
85
80
  end
86
81
 
87
82
  # Public: opens the JSON file in an editor for you to edit. Uses the
88
83
  # $EDITOR environment variable, or %EDITOR% on Windows for editing.
89
84
  # This method is designed to handle multiple platforms.
85
+ # If $EDITOR is nil, try to open using the open_command.
90
86
  #
91
87
  # Returns a String with a helpful message.
92
88
  def edit(json_file)
93
- unless windows?
94
- system("`echo $EDITOR` #{json_file} &")
89
+ unless $EDITOR.nil?
90
+ unless windows?
91
+ system("`echo $EDITOR` #{json_file} &")
92
+ else
93
+ system("start %EDITOR% #{json_file}")
94
+ end
95
95
  else
96
- system("start %EDITOR% #{json_file}")
96
+ system("#{open_command} #{json_file}")
97
97
  end
98
98
 
99
99
  "Make your edits, and do be sure to save."
@@ -29,10 +29,8 @@ module Boom
29
29
  def bootstrap
30
30
  begin
31
31
  require "httparty"
32
- require "boom/storage/gist/json_parser"
33
32
 
34
33
  self.class.send(:include, HTTParty)
35
- self.class.parser JsonParser
36
34
  self.class.base_uri "https://api.github.com"
37
35
  rescue LoadError
38
36
  puts "The Gist backend requires HTTParty: gem install httparty"
@@ -19,15 +19,21 @@ module Boom
19
19
 
20
20
  alias_method :json_file, :open_keychain_app
21
21
 
22
- # Boostraps Keychain by asking if you're using Mac OS X which is a prereq
22
+ # Boostraps Keychain by checking if you're using a Mac which is a prereq
23
23
  #
24
- # Returns true on a Mac
24
+ # Returns
25
25
  def bootstrap
26
- raise RuntimeError unless Boom::Platform.darwin?
27
- true
26
+ raise RuntimeError unless is_mac?
28
27
  rescue
29
- puts(e 'No Keychain utility to access, maybe try another storage option?')
30
- false
28
+ puts('No Keychain utility to access, maybe try another storage option?')
29
+ exit
30
+ end
31
+
32
+ # Asks if you're using Mac OS X
33
+ #
34
+ # Returns true on a Mac
35
+ def is_mac?
36
+ return Boom::Platform.darwin?
31
37
  end
32
38
 
33
39
  # Populate the in-memory store with all the lists and items from Keychain
@@ -5,6 +5,7 @@
5
5
  begin
6
6
  require 'digest'
7
7
  require 'redis'
8
+ require 'uri'
8
9
  rescue LoadError
9
10
  end
10
11
 
@@ -13,8 +14,12 @@ module Boom
13
14
  class Redis < Base
14
15
 
15
16
  def redis
16
- @redis ||= ::Redis.new :host => Boom.config.attributes["redis"]["host"],
17
- :port => Boom.config.attributes["redis"]["port"]
17
+ uri = URI.parse(Boom.config.attributes['uri'] || '')
18
+
19
+ @redis ||= ::Redis.new :host => (uri.host || Boom.config.attributes["redis"]["host"]),
20
+ :port => (uri.port || Boom.config.attributes["redis"]["port"]),
21
+ :user => (uri.user || Boom.config.attributes["redis"]["user"]),
22
+ :password => (uri.password || Boom.config.attributes["redis"]["password"])
18
23
  rescue NameError => e
19
24
  puts "You don't have Redis installed yet:\n gem install redis"
20
25
  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.3'
31
+ VERSION = '0.2.4'
32
32
 
33
33
  extend self
34
34
 
data/test/test_color.rb CHANGED
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  require 'helper'
4
2
 
5
3
  class TestColor < Test::Unit::TestCase
@@ -23,4 +21,10 @@ class TestColor < Test::Unit::TestCase
23
21
  assert_equal "\e[33mYellow!\e[0m",
24
22
  Boom::Color.yellow("Yellow!")
25
23
  end
24
+
25
+ def test_cyan
26
+ assert_equal "\e[36mCyan!\e[0m",
27
+ Boom::Color.cyan("Cyan!")
28
+ end
29
+
26
30
  end
data/test/test_command.rb CHANGED
@@ -74,12 +74,19 @@ class TestCommand < Test::Unit::TestCase
74
74
  assert_match /a new list called newlist.* item in newlist is blah/, command('newlist item')
75
75
  end
76
76
 
77
+ def test_list_creation_with_existing_items_name
78
+ command('list item foo')
79
+ assert_match /a new list called item.* key in item is bar/, command('item key bar')
80
+ end
81
+
77
82
  def test_item_access
83
+ IO.stubs(:popen)
78
84
  assert_match /copied https:\/\/github\.com to your clipboard/,
79
85
  command('github')
80
86
  end
81
87
 
82
88
  def test_item_access_scoped_by_list
89
+ IO.stubs(:popen)
83
90
  assert_match /copied https:\/\/github\.com to your clipboard/,
84
91
  command('urls github')
85
92
  end
@@ -209,4 +216,23 @@ class TestCommand < Test::Unit::TestCase
209
216
  assert_match /couldn't find that list\./, command('random 39jc02jlskjbbac9')
210
217
  end
211
218
 
219
+ def test_delete_item_list_not_exist
220
+ assert_match /couldn't find that list\./, command('urlz github delete')
221
+ end
222
+
223
+ def test_delete_item_wrong_list
224
+ command('urlz twitter https://twitter.com/')
225
+ assert_match /github not found in urlz/, command('urlz github delete')
226
+ end
227
+
228
+ def test_delete_item_different_name
229
+ command('foo bar baz')
230
+ assert_match /bar is gone forever/, command('foo bar delete')
231
+ end
232
+
233
+ def test_delete_item_same_name
234
+ command('duck duck goose')
235
+ assert_match /duck is gone forever/, command('duck duck delete')
236
+ end
237
+
212
238
  end
@@ -3,6 +3,7 @@ require 'helper'
3
3
  class TestPlatform < Test::Unit::TestCase
4
4
 
5
5
  def setup
6
+
6
7
  end
7
8
 
8
9
  def test_darwin
@@ -12,4 +13,40 @@ class TestPlatform < Test::Unit::TestCase
12
13
  def test_windows
13
14
  assert_equal Boom::Platform.windows?, true if RUBY_PLATFORM =~ /mswin|mingw/
14
15
  end
16
+
17
+ def test_open_command_darwin
18
+ Boom::Platform.stubs(:darwin?).returns(true)
19
+ assert_equal Boom::Platform.open_command, 'open'
20
+ end
21
+
22
+ def test_open_command_windows
23
+ Boom::Platform.stubs(:darwin?).returns(false)
24
+ Boom::Platform.stubs(:windows?).returns(true)
25
+ assert_equal Boom::Platform.open_command, 'start'
26
+ end
27
+
28
+ def test_open_command_linux
29
+ Boom::Platform.stubs(:darwin?).returns(false)
30
+ Boom::Platform.stubs(:windows?).returns(false)
31
+ assert_equal Boom::Platform.open_command, 'xdg-open'
32
+ end
33
+
34
+ def test_copy_command_darwin
35
+ Boom::Platform.stubs(:darwin?).returns(true)
36
+ Boom::Platform.stubs(:windows?).returns(false)
37
+ assert_equal Boom::Platform.copy_command, 'pbcopy'
38
+ end
39
+
40
+ def test_copy_command_windows
41
+ Boom::Platform.stubs(:darwin?).returns(false)
42
+ Boom::Platform.stubs(:windows?).returns(true)
43
+ assert_equal Boom::Platform.copy_command, 'clip'
44
+ end
45
+
46
+ def test_copy_command_linux
47
+ Boom::Platform.stubs(:darwin?).returns(false)
48
+ Boom::Platform.stubs(:windows?).returns(false)
49
+ assert_equal Boom::Platform.copy_command, 'xclip -selection clipboard'
50
+ end
51
+
15
52
  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: 17
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 3
10
- version: 0.2.3
9
+ - 4
10
+ version: 0.2.4
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-09-06 00:00:00 -07:00
18
+ date: 2013-03-15 00:00:00 -07:00
19
19
  default_executable: boom
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -121,7 +121,6 @@ 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
125
124
  - lib/boom/storage/json.rb
126
125
  - lib/boom/storage/keychain.rb
127
126
  - lib/boom/storage/mongodb.rb
@@ -1,8 +0,0 @@
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