boom 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.markdown CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## head
4
4
 
5
+ ## 0.2.2 (July 29, 2011)
6
+ - [@jimmycuadra](https://github.com/jimmycuadra) went to town on this beast and
7
+ hooked up a Gist backend to boom. Killer.
8
+ - Small Windows fix.
9
+
5
10
  ## 0.2.1 (July 16, 2011)
6
11
  - boom displays colors thanks to [@dandorman](https://github.com/dandorman).
7
12
  - Windows support, brah. [@tombell](https://github.com/tombell).
data/Gemfile.lock CHANGED
@@ -1,14 +1,17 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- boom (0.2.0)
5
- json_pure (~> 1.5.1)
4
+ boom (0.2.1)
5
+ json_pure (~> 1.5.3)
6
+ multi_json (~> 1.0.3)
6
7
 
7
8
  GEM
8
9
  remote: http://rubygems.org/
9
10
  specs:
10
- json_pure (1.5.1)
11
+ json_pure (1.5.3)
11
12
  mocha (0.9.12)
13
+ multi_json (1.0.3)
14
+ rake (0.9.2)
12
15
 
13
16
  PLATFORMS
14
17
  ruby
@@ -16,3 +19,4 @@ PLATFORMS
16
19
  DEPENDENCIES
17
20
  boom!
18
21
  mocha (~> 0.9.9)
22
+ rake (~> 0.9.2)
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.1'
17
- s.date = '2011-07-16'
16
+ s.version = '0.2.2'
17
+ s.date = '2011-07-29'
18
18
  s.rubyforge_project = 'boom'
19
19
 
20
20
  ## Make sure your summary is short. The description may be as long
@@ -54,11 +54,13 @@ Gem::Specification.new do |s|
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('json_pure', "~> 1.5.1")
57
+ s.add_dependency('multi_json', "~> 1.0.3")
58
+ s.add_dependency('json_pure', "~> 1.5.3")
58
59
 
59
60
  ## List your development dependencies here. Development dependencies are
60
61
  ## those that are only needed during development
61
62
  s.add_development_dependency('mocha', "~> 0.9.9")
63
+ s.add_development_dependency('rake', "~> 0.9.2")
62
64
 
63
65
  ## Leave this section as-is. It will be automatically generated from the
64
66
  ## contents of your Git repository via the gemspec task. DO NOT REMOVE
@@ -86,6 +88,7 @@ Gem::Specification.new do |s|
86
88
  lib/boom/platform.rb
87
89
  lib/boom/storage.rb
88
90
  lib/boom/storage/base.rb
91
+ lib/boom/storage/gist.rb
89
92
  lib/boom/storage/json.rb
90
93
  lib/boom/storage/keychain.rb
91
94
  lib/boom/storage/mongodb.rb
data/lib/boom/config.rb CHANGED
@@ -74,14 +74,14 @@ module Boom
74
74
  #
75
75
  # Returns nothing.
76
76
  def load_attributes
77
- @attributes = JSON.parse(File.new(file, 'r').read)
77
+ @attributes = MultiJson.decode(File.new(file, 'r').read)
78
78
  end
79
79
 
80
80
  # Public: writes the in-memory JSON Hash to disk.
81
81
  #
82
82
  # Returns nothing.
83
83
  def save
84
- json = JSON.generate(attributes)
84
+ json = MultiJson.encode(attributes)
85
85
  File.open(file, 'w') {|f| f.write(json) }
86
86
  end
87
87
 
data/lib/boom/platform.rb CHANGED
@@ -23,7 +23,7 @@ module Boom
23
23
  #
24
24
  # Returns true if running on windows (win32/mingw32), else false
25
25
  def windows?
26
- !!(RUBY_PLATFORM =~ /win|mingw/)
26
+ !!(RUBY_PLATFORM =~ /mswin|mingw/)
27
27
  end
28
28
 
29
29
  # Public: returns the command used to open a file or URL
@@ -0,0 +1,120 @@
1
+ # coding: utf-8
2
+ #
3
+ # Gist backend for Boom.
4
+ #
5
+ # Your .boom.conf file should look like this:
6
+ #
7
+ # {
8
+ # "backend": "gist",
9
+ # "gist": {
10
+ # "username": "your_github_username",
11
+ # "password": "your_github_password"
12
+ # }
13
+ # }
14
+ #
15
+ # There are two optional keys which can be under "gist":
16
+ #
17
+ # gist_id - The ID of an existing Gist to use. If not
18
+ # present, a Gist will be created the first time
19
+ # Boom is run and will be persisted to the config.
20
+ # public - Makes the Gist public. An absent value or
21
+ # any value other than boolean true will make
22
+ # the Gist private.
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
+
38
+ module Boom
39
+ module Storage
40
+ class Gist < Base
41
+ include HTTParty
42
+ parser JsonParser
43
+ base_uri "https://api.github.com"
44
+
45
+ def bootstrap
46
+ unless Boom.config.attributes["gist"]
47
+ puts 'A "gist" data structure must be defined in ~/.boom.conf'
48
+ exit
49
+ end
50
+
51
+ set_up_auth
52
+ find_or_create_gist
53
+ end
54
+
55
+ def populate
56
+ @storage['lists'].each do |lists|
57
+ lists.each do |list_name, items|
58
+ @lists << list = List.new(list_name)
59
+
60
+ items.each do |item|
61
+ item.each do |name,value|
62
+ list.add_item(Item.new(name,value))
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
68
+
69
+ def save
70
+ self.class.post("/gists/#{@gist_id}", request_params)
71
+ end
72
+
73
+ private
74
+
75
+ def set_up_auth
76
+ username, password = Boom.config.attributes["gist"]["username"], Boom.config.attributes["gist"]["password"]
77
+
78
+ if username and password
79
+ self.class.basic_auth(username, password)
80
+ else
81
+ puts "GitHub username and password must be defined in ~/.boom.conf"
82
+ exit
83
+ end
84
+ end
85
+
86
+ def find_or_create_gist
87
+ @gist_id = Boom.config.attributes["gist"]["gist_id"]
88
+ @public = Boom.config.attributes["gist"]["public"] == true
89
+
90
+ if @gist_id.nil? or @gist_id.empty?
91
+ response = self.class.post("/gists", request_params)
92
+ else
93
+ response = self.class.get("/gists/#{@gist_id}", request_params)
94
+ end
95
+
96
+ @storage = MultiJson.decode(response["files"]["boom.json"]["content"]) if response["files"] and response["files"]["boom.json"]
97
+
98
+ unless @storage
99
+ puts "Boom data could not be obtained"
100
+ exit
101
+ end
102
+
103
+ unless @gist_id
104
+ Boom.config.attributes["gist"]["gist_id"] = @gist_id = response["id"]
105
+ Boom.config.save
106
+ end
107
+ end
108
+
109
+ def request_params
110
+ {
111
+ :body => MultiJson.encode({
112
+ :description => "boom!",
113
+ :public => @public,
114
+ :files => { "boom.json" => { :content => MultiJson.encode(to_hash) } }
115
+ })
116
+ }
117
+ end
118
+ end
119
+ end
120
+ end
@@ -32,7 +32,7 @@ module Boom
32
32
  #
33
33
  # Returns nothing.
34
34
  def populate
35
- storage = JSON.parse(File.new(json_file, 'r').read)
35
+ storage = MultiJson.decode(File.new(json_file, 'r').read)
36
36
 
37
37
  storage['lists'].each do |lists|
38
38
  lists.each do |list_name, items|
@@ -61,7 +61,7 @@ module Boom
61
61
  #
62
62
  # Returns a String Json representation of its Lists and their Items.
63
63
  def to_json
64
- JSON.generate(to_hash)
64
+ MultiJson.encode(to_hash)
65
65
  end
66
66
 
67
67
  end
@@ -49,7 +49,7 @@ module Boom
49
49
  #
50
50
  # Returns nothing
51
51
  def populate
52
- storage = JSON.parse(collection.find_one['boom']) || []
52
+ storage = MultiJson.decode(collection.find_one['boom']) || []
53
53
 
54
54
  storage['lists'].each do |lists|
55
55
  lists.each do |list_name, items|
@@ -76,7 +76,7 @@ module Boom
76
76
  #
77
77
  # Returns
78
78
  def to_json
79
- JSON.generate(to_hash)
79
+ MultiJson.encode(to_hash)
80
80
  end
81
81
 
82
82
  end
data/lib/boom.rb CHANGED
@@ -6,7 +6,7 @@ rescue LoadError
6
6
  end
7
7
 
8
8
  require 'fileutils'
9
- require 'json/pure'
9
+ require 'multi_json'
10
10
 
11
11
  $:.unshift File.join(File.dirname(__FILE__), *%w[.. lib])
12
12
 
@@ -23,11 +23,12 @@ require 'boom/storage/json'
23
23
  require 'boom/storage/redis'
24
24
  require 'boom/storage/mongodb'
25
25
  require 'boom/storage/keychain'
26
+ require 'boom/storage/gist'
26
27
 
27
28
  require 'boom/core_ext/symbol'
28
29
 
29
30
  module Boom
30
- VERSION = '0.2.1'
31
+ VERSION = '0.2.2'
31
32
 
32
33
  extend self
33
34
 
@@ -10,6 +10,6 @@ class TestPlatform < Test::Unit::TestCase
10
10
  end
11
11
 
12
12
  def test_windows
13
- assert_equal Boom::Platform.windows?, true if RUBY_PLATFORM =~ /win|mingw/
13
+ assert_equal Boom::Platform.windows?, true if RUBY_PLATFORM =~ /mswin|mingw/
14
14
  end
15
15
  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: 21
4
+ hash: 19
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 1
10
- version: 0.2.1
9
+ - 2
10
+ version: 0.2.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Zach Holman
@@ -15,29 +15,45 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-16 00:00:00 +09:00
18
+ date: 2011-07-29 00:00:00 -07:00
19
19
  default_executable: boom
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: json_pure
22
+ name: multi_json
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
27
  - - ~>
28
28
  - !ruby/object:Gem::Version
29
- hash: 1
29
+ hash: 17
30
30
  segments:
31
31
  - 1
32
- - 5
33
- - 1
34
- version: 1.5.1
32
+ - 0
33
+ - 3
34
+ version: 1.0.3
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
38
- name: mocha
38
+ name: json_pure
39
39
  prerelease: false
40
40
  requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ hash: 5
46
+ segments:
47
+ - 1
48
+ - 5
49
+ - 3
50
+ version: 1.5.3
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: mocha
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
41
57
  none: false
42
58
  requirements:
43
59
  - - ~>
@@ -49,7 +65,23 @@ dependencies:
49
65
  - 9
50
66
  version: 0.9.9
51
67
  type: :development
52
- version_requirements: *id002
68
+ version_requirements: *id003
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ hash: 63
78
+ segments:
79
+ - 0
80
+ - 9
81
+ - 2
82
+ version: 0.9.2
83
+ type: :development
84
+ version_requirements: *id004
53
85
  description: |-
54
86
  God it's about every day where I think to myself, gadzooks,
55
87
  I keep typing *REPETITIVE_BORING_TASK* over and over. Wouldn't it be great if
@@ -88,6 +120,7 @@ files:
88
120
  - lib/boom/platform.rb
89
121
  - lib/boom/storage.rb
90
122
  - lib/boom/storage/base.rb
123
+ - lib/boom/storage/gist.rb
91
124
  - lib/boom/storage/json.rb
92
125
  - lib/boom/storage/keychain.rb
93
126
  - lib/boom/storage/mongodb.rb