cory-rubyflashbake 0.1.3

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/License.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2008-2009 Cory Ondrejka
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,7 @@
1
+ = rubyflashbake
2
+
3
+ A Ruby project inspired by Thomas Gideon's python Flashbake project.
4
+
5
+ == Copyright
6
+
7
+ Copyright (c) 2009 Cory Ondrejka. See LICENSE for details.
data/README.textile ADDED
@@ -0,0 +1,38 @@
1
+ h1. RubyFlashbake
2
+
3
+ A Ruby project inspired by Thomas Gideon's python "Flashbake":http://wiki.github.com/commandline/flashbake project.
4
+
5
+ h2. What it is
6
+
7
+ A set of routines to help with writing and blogging.
8
+
9
+ h2. "But, why?" you ask
10
+
11
+ I thought that Flashbake was a very cool project, but since I spend time in the Ruby world - and do more blogging than writing - converting it to Ruby seemed like a fun weekend project. Plus, I wanted to experiment with monitoring directories, building an app that works well with small Ruby plugins, and do some web scraping.
12
+
13
+ As always, it's all about writing snippets of fun code.
14
+
15
+ h2. License
16
+
17
+ Copyright (c) 2009 Cory Ondrejka
18
+
19
+ Permission is hereby granted, free of charge, to any person
20
+ obtaining a copy of this software and associated documentation
21
+ files (the "Software"), to deal in the Software without
22
+ restriction, including without limitation the rights to use,
23
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
24
+ copies of the Software, and to permit persons to whom the
25
+ Software is furnished to do so, subject to the following
26
+ conditions:
27
+
28
+ The above copyright notice and this permission notice shall be
29
+ included in all copies or substantial portions of the Software.
30
+
31
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
33
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
34
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
35
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
36
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
37
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
38
+ OTHER DEALINGS IN THE SOFTWARE.
data/bin/rubyflashbake ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # ruby-flashbake
4
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
5
+ # See License.txt for licensing details.
6
+
7
+ require "#{File.dirname(__FILE__)}/../lib/rubyflashbake/options"
8
+ require "#{File.dirname(__FILE__)}/../lib/rubyflashbake/core"
9
+
10
+ # startup and read configuration
11
+ options = RubyFlashbakeOptions.new(ARGV)
12
+
13
+ # if options read successfull, go read configuration file
14
+ rfb = RubyFlashbake.new
15
+ rfb.load_file(options.config_file)
16
+ rfb.configure_git(Dir.pwd)
17
+ rfb.configure_github(Dir.pwd)
18
+ rfb.load_plugins
19
+ rfb.setup_watch_commits(Dir.pwd)
20
+ puts "startup commit and push"
21
+ rfb.git_commit(Dir.pwd, rfb.checkin_comment)
22
+ rfb.start_directory_watchers
23
+ puts "hit return to stop watching directory"
24
+ gets
25
+ rfb.stop_directory_watchers
26
+ puts "exit commit and push"
27
+ rfb.git_commit(Dir.pwd, rfb.checkin_comment)
@@ -0,0 +1,73 @@
1
+ # default rubyflashbake config file should be .rubyflashbake in the local directory
2
+ # stored in the RubyFlashbake.status instance hash
3
+ # rubyflashbake expects valid yaml
4
+
5
+ # plugin directories are relative to ./lib/rubyflashbake directory
6
+ # you can add more than one if you want
7
+ :PLUGIN_DIRECTORIES:
8
+ - plugins
9
+
10
+ # when modifying git repository, spam STDOUT
11
+ :VERBOSE: true
12
+
13
+ # what order should we run plugins in?
14
+ :PLUGIN_CALL_ORDER:
15
+ - :TIME
16
+ - :INTERNET
17
+ - :LOCATION
18
+ - :WEATHER
19
+ - :TWITTER
20
+
21
+ # plugins take the form of
22
+ # :PLUGINBASENAME:
23
+ # - :ACTIVE: boolean to turn plugin on and off
24
+ # - optional hash of configuration arguments
25
+ # convetion for plugins:
26
+ # be name.rb
27
+ # map to a ALLCAPS(name) section in this file
28
+ # require a do_name function called every time a file is saved
29
+ # have an optional configure_name functions called once on configuration file load
30
+
31
+ # internet alive plugin, confirmed by pinging a test uri
32
+ :PLUGIN:
33
+ :INTERNET:
34
+ :ACTIVE: true
35
+ :OPTIONAL_HASH:
36
+ :INTERNET_ALIVE: false
37
+ :INTERNET_TEST_URI: www.google.com
38
+
39
+ # location plugin, using maxmind's javascript api
40
+ :LOCATION:
41
+ :ACTIVE: true
42
+
43
+ # time plugin, just using native Ruby Time class
44
+ :TIME:
45
+ :ACTIVE: true
46
+
47
+ # twitter plugin, using twitter's rest API
48
+ :TWITTER:
49
+ :ACTIVE: true
50
+ :OPTIONAL_HASH:
51
+ :TWITTER_ID: ~ # your Twitter ID
52
+
53
+ # weather plugin, using google's undocumented weather API and location plugin
54
+ :WEATHER:
55
+ :ACTIVE: true
56
+ :OPTIONAL_HASH:
57
+ :WEATHER_URI: http://www.google.com/ig/api?weather= # uri to get weather from
58
+
59
+ # how often to check directories, in seconds
60
+ :DIRECTORY_MONITOR_INTERVAL: 60
61
+
62
+ # how many checks to wait for until a file is considered stable
63
+ :STABLE_INTERVALS: 5
64
+
65
+ # git details, so that you can automate git and github commits in addition to git
66
+ :GIT:
67
+ :NAME: ~ # your name
68
+ :EMAIL: ~ # your email address
69
+ :USE_GITHUB: false
70
+ :GITHUB_DATA:
71
+ :GITHUB_ID: ~ # your github ID
72
+ :GITHUB_REPOSITORY: ~ # name of the guthub repository to link to
73
+ :GITHUB_URI: git@github.com
@@ -0,0 +1,170 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
4
+ # See License.txt for licensing details.
5
+
6
+ require "rubygems"
7
+ require "directory_watcher"
8
+
9
+ class RubyFlashbake
10
+ attr_reader :configuration
11
+
12
+ def initialize
13
+ @configuration = nil
14
+ @filename = nil
15
+ @dw = []
16
+ @plugins = []
17
+ end
18
+
19
+ def load_file(file)
20
+ # load the configuration file
21
+ @filename = file
22
+ begin
23
+ @configuration = YAML.load_file(file)
24
+ @configuration[:GIT_SETUP] = false
25
+ @configuration[:GITHUB_SETUP] = false
26
+ rescue SystemCallError => e
27
+ puts "Configuration file \"#{file}\" not found!"
28
+ puts "Please make sure code path loads configuration before trying to load plugins."
29
+ exit 1
30
+ end
31
+ end
32
+
33
+ def check_config
34
+ unless @configuration
35
+ puts "Configuration not loaded before trying to work with it"
36
+ puts "Please make sure code path loads configuration before trying to load plugins."
37
+ exit 1
38
+ end
39
+ end
40
+
41
+ def configure_git(dir)
42
+ check_config
43
+ unless @configuration[:GIT_SETUP] == true
44
+ if File.directory?("#{dir}/.git") && File.exists?("#{dir}/.git/config")
45
+ @configuration[:GIT_SETUP] = true
46
+ else
47
+ if (@configuration[:GIT][:NAME] && @configuration[:GIT][:EMAIL])
48
+ Dir.chdir("#{dir}") do
49
+ puts `git init`
50
+ puts `git config user.name "#{@configuration[:GIT][:NAME]}"`
51
+ puts `git config user.email #{@configuration[:GIT][:EMAIL]}`
52
+ File.open(".gitignore", "w") do |file|
53
+ file.puts ".DS_Store\ncoverage/\n.message.tmp\n"
54
+ end
55
+ puts "Initialized git in #{dir}"
56
+ @configuration[:GIT_SETUP] = true
57
+ end
58
+ else
59
+ puts "Can't configure git without git :NAME and :EMAIL configured in config file."
60
+ exit 1
61
+ end
62
+ end
63
+ end
64
+ return true
65
+ end
66
+
67
+ def configure_github(dir)
68
+ check_config
69
+ unless @configuration[:GIT_SETUP] == true
70
+ puts "Trying to configure github without previous call to config_git."
71
+ exit 1
72
+ end
73
+ unless @configuration[:GITHUB_SETUP] == true
74
+ contents = File.read("#{dir}/.git/config")
75
+ if contents =~ /\[remote \"origin\"\]/
76
+ @configuration[:GITHUB_SETUP] = true
77
+ else
78
+ Dir.chdir("#{dir}") do
79
+ if !@configuration[:GITHUB_SETUP] && @configuration[:GIT][:GITHUB_DATA][:GITHUB_URI] && @configuration[:GIT][:GITHUB_DATA][:GITHUB_ID] && @configuration[:GIT][:GITHUB_DATA][:GITHUB_REPOSITORY]
80
+ puts `git remote add origin #{configuration[:GIT][:GITHUB_DATA][:GITHUB_URI]}:#{@configuration[:GIT][:GITHUB_DATA][:GITHUB_ID]}/#{@configuration[:GIT][:GITHUB_DATA][:GITHUB_REPOSITORY]}.git`
81
+ puts "Initialized github in #{dir}"
82
+ @configuration[:GITHUB_SETUP] = true
83
+ else
84
+ puts "Can't configure github without :GITHUB_URI, :GITHUB_ID, and :GITHUB_REPOSITORY configured in config file."
85
+ exit 1
86
+ end
87
+ end
88
+ end
89
+ end
90
+ Dir.chdir("#{dir}") do
91
+ puts `git pull origin master`
92
+ end
93
+ return true
94
+ end
95
+
96
+ def git_commit(dir, message)
97
+ if @configuration[:GIT_SETUP] == true
98
+ Dir.chdir("#{dir}") do
99
+ File.open(".message.tmp", "w") {|file| file.puts message}
100
+ puts `git add .`
101
+ puts `git commit -a --file=.message.tmp`
102
+ File.delete(".message.tmp")
103
+ if @configuration[:INTERNET_ALIVE] && @configuration[:GIT][:USE_GITHUB] && @configuration[:GITHUB_SETUP]
104
+ puts `git push origin master`
105
+ end
106
+ end
107
+ end
108
+ end
109
+
110
+ def load_plugins
111
+ check_config
112
+
113
+ @configuration[:PLUGIN_DIRECTORIES].each do |dir|
114
+ libdir = File.dirname(__FILE__)
115
+ pattern = File.join(libdir, "#{dir}", "*.rb")
116
+ Dir.glob(pattern).each do |file|
117
+ require file
118
+ end
119
+ end
120
+
121
+ @configuration[:PLUGIN_CALL_ORDER].each {|p| @plugins.push p }
122
+ end
123
+
124
+ def setup_directory_watchers(basedir, &block)
125
+ check_config
126
+
127
+ dw = DirectoryWatcher.new("#{basedir}")
128
+ dw.interval = @configuration[:DIRECTORY_MONITOR_INTERVAL]
129
+ dw.stable = @configuration[:STABLE_INTERVALS]
130
+ dw.glob = "**/*"
131
+
132
+ dw.add_observer do |*events|
133
+ block.call(events, basedir, checkin_comment)
134
+ end
135
+ @dw.push dw
136
+ end
137
+
138
+ def setup_watch_commits(bdir)
139
+ setup_directory_watchers(bdir) do |events, basedir, func|
140
+ events.each do |event|
141
+ if event.type == :stable
142
+ puts "#{event}" if @configuration[:VERBOSE]
143
+ git_commit("#{basedir}", func)
144
+ end
145
+ end
146
+ end
147
+ end
148
+
149
+ def start_directory_watchers
150
+ @dw.each do |dw|
151
+ dw.start
152
+ end
153
+ end
154
+
155
+ def stop_directory_watchers
156
+ @dw.each {|dw| dw.stop}
157
+ end
158
+
159
+ def do_plugins
160
+ @plugins.each do |p|
161
+ send "do_#{p.to_s.downcase}"
162
+ end
163
+ end
164
+
165
+ def checkin_comment
166
+ @configuration[:OUTPUT] = []
167
+ do_plugins
168
+ @configuration[:OUTPUT].to_yaml
169
+ end
170
+ end
@@ -0,0 +1,50 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # options
4
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
5
+ # See License.txt for licensing details.
6
+
7
+ require "optparse"
8
+
9
+ class RubyFlashbakeOptions
10
+ DEFAULT_CONFIG_FILE = ".rubyflashbake"
11
+ attr_reader :config_file
12
+
13
+ def initialize(argv)
14
+ @config_file = DEFAULT_CONFIG_FILE
15
+ parse(argv)
16
+ end
17
+
18
+ def test(val)
19
+ [:config_file => @config_file] == val
20
+ end
21
+
22
+ private
23
+ def parse(argv)
24
+ OptionParser.new do |opts|
25
+ opts.banner = "Usage: rubyflashbake [ options ]"
26
+
27
+ opts.on("-c [file]", "--config [file]", "Use config file [file]") do |file|
28
+ @config_file = file if file
29
+ end
30
+
31
+ opts.on("-e", "--example", "Dump an example, annotated config file to stdout and exit") do
32
+ example = File.read("#{File.dirname(__FILE__)}/../data/.rubyflashbake_example")
33
+ puts example
34
+ exit
35
+ end
36
+
37
+ opts.on("-h", "--help", "You're looking at it. Functionality documented in config file and on first run.") do
38
+ puts opts
39
+ exit
40
+ end
41
+
42
+ begin
43
+ opts.parse!(argv)
44
+ rescue OptionParser::ParseError => e
45
+ puts opts
46
+ exit(1)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # time plug in
4
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
5
+ # See License.txt for licensing details.
6
+
7
+ require 'ping'
8
+
9
+ class RubyFlashbake
10
+ def do_internet
11
+ @configuration[:INTERNET_ALIVE] = false
12
+ if @configuration[:PLUGIN][:INTERNET][:ACTIVE]
13
+ @configuration[:INTERNET_ALIVE] = Ping.pingecho(@configuration[:PLUGIN][:INTERNET][:OPTIONAL_HASH][:INTERNET_TEST_URI],2,80)
14
+ unless @configuration[:INTERNET_ALIVE]
15
+ @configuration[:OUTPUT].push "offline"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # time plug in
4
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
5
+ # See License.txt for licensing details.
6
+
7
+ require 'net/http'
8
+
9
+ class RubyFlashbake
10
+ def do_location
11
+ if @configuration[:PLUGIN][:LOCATION][:ACTIVE] && @configuration[:INTERNET_ALIVE]
12
+ location = Net::HTTP.get(URI.parse("http://j.maxmind.com/app/geoip.js"))
13
+ location_array = location.scan(/return \'(.*)\'/)
14
+ @configuration[:LOCATION_CITY] = "#{location_array[2][0]}"
15
+ @configuration[:LOCATION_STATE] = "#{location_array[3][0]}"
16
+ @configuration[:LOCATION_COUNTRY] = "#{location_array[0][0]}"
17
+ if @configuration[:LOCATION_COUNTRY] == "US"
18
+ @configuration[:LOCATION_CACHE] = "#{@configuration[:LOCATION_CITY]},#{@configuration[:LOCATION_STATE]},#{@configuration[:LOCATION_COUNTRY]}"
19
+ else
20
+ @configuration[:LOCATION_CACHE] = "#{@configuration[:LOCATION_CITY]},#{@configuration[:LOCATION_COUNTRY]}"
21
+ end
22
+ @configuration[:OUTPUT].push "#{@configuration[:LOCATION_CACHE]} #{location_array[5][0]},#{location_array[6][0]}"
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # time plug in
4
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
5
+ # See License.txt for licensing details.
6
+
7
+ class RubyFlashbake
8
+ def do_time
9
+ if @configuration[:PLUGIN][:TIME][:ACTIVE]
10
+ @configuration[:OUTPUT].push "#{Time.now.ctime} #{Time.now.zone}"
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # time plug in
4
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
5
+ # See License.txt for licensing details.
6
+
7
+ require 'net/http'
8
+ require "hpricot"
9
+
10
+ class RubyFlashbake
11
+ def do_twitter
12
+ @configuration[:OUTPUT] = ["Couldn't reach twitter"]
13
+ if @configuration[:PLUGIN][:TIME][:ACTIVE] && @configuration[:INTERNET_ALIVE] && @configuration[:PLUGIN][:TWITTER][:OPTIONAL_HASH][:TWITTER_ID]
14
+ xml = Net::HTTP.get(URI.parse("http://twitter.com/statuses/user_timeline/#{@configuration[:PLUGIN][:TWITTER][:OPTIONAL_HASH][:TWITTER_ID]}.xml"))
15
+ doc = Hpricot(xml)
16
+ (0..2).each do |i|
17
+ if ((doc/"status"/"created_at")[i])
18
+ @configuration[:OUTPUT].push "Twitter: #{(doc/"status"/"created_at")[i].inner_html} #{(doc/"status"/"text")[i].inner_html}"
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # time plug in
4
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
5
+ # See License.txt for licensing details.
6
+
7
+ require 'net/http'
8
+ class RubyFlashbake
9
+ def do_weather
10
+ @configuration[:OUTPUT].push "No valid weather found"
11
+ if @configuration[:PLUGIN][:WEATHER][:ACTIVE] && @configuration[:INTERNET_ALIVE]
12
+ if @configuration[:LOCATION_CACHE]
13
+ weather = Net::HTTP.get(URI.parse("http://www.google.com/ig/api?weather=#{@configuration[:LOCATION_CACHE]}"))
14
+ if weather =~ /temp_f data=\"(\d+)\"/ && weather =~ /condition data=\"([\s\w]+)\"/
15
+ @configuration[:OUTPUT].push "#{weather.scan(/temp_f data=\"(\d+)\"/)[0][0]} #{weather.scan(/condition data=\"([\s\w]+)\"/)[0][0]}"
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # spec-suite
4
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
5
+ # See License.txt for licensing details.
6
+
7
+ dir = File.dirname(__FILE__)
8
+ Dir["#{dir}/*_spec.rb"].reverse.each do |file|
9
+ require file
10
+ end
@@ -0,0 +1,280 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
4
+ # See License.txt for licensing details.
5
+
6
+ require "#{File.dirname(__FILE__)}/../../lib/rubyflashbake/core"
7
+
8
+ describe RubyFlashbake do
9
+ before :each do
10
+ @stdout_orig = $stdout
11
+ $stdout = StringIO.new
12
+ FileUtils.rm_rf("#{File.dirname(__FILE__)}/.git")
13
+ FileUtils.rm_rf("#{File.dirname(__FILE__)}/testdata/testdir/.git")
14
+ end
15
+
16
+ after :each do
17
+ $stdout = @stdout_orig
18
+ FileUtils.rm_rf("#{File.dirname(__FILE__)}/.git")
19
+ FileUtils.rm_rf("#{File.dirname(__FILE__)}/testdata/testdir/.git")
20
+ end
21
+
22
+ it "should print error message and exit if config file isn't found" do
23
+ begin
24
+ rfb = RubyFlashbake.new
25
+ rfb.load_file("notafile")
26
+ rescue SystemExit => e
27
+ $stdout.string.should == "Configuration file \"notafile\" not found!\nPlease make sure code path loads configuration before trying to load plugins.\n"
28
+ e.status.should == 1
29
+ end
30
+ end
31
+
32
+ it "should read in config file as YAML and return hash if file is found" do
33
+ rfb = RubyFlashbake.new
34
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
35
+ test = YAML.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
36
+ test[:GIT_SETUP] = false
37
+ test[:GITHUB_SETUP] = false
38
+
39
+ rfb.configuration.should == test
40
+ end
41
+
42
+ it "should complain if git name and email address aren't filled in" do
43
+ rfb = RubyFlashbake.new
44
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
45
+ end
46
+
47
+ it "should exit if you try to examine git config without loading config file" do
48
+ begin
49
+ rfb = RubyFlashbake.new
50
+ rfb.configure_git("#{File.dirname(__FILE__)}")
51
+ rescue SystemExit => e
52
+ $stdout.string.should == "Configuration not loaded before trying to work with it\nPlease make sure code path loads configuration before trying to load plugins.\n"
53
+ e.status.should == 1
54
+ end
55
+ end
56
+
57
+ it "should exit with a useful error message if name and email aren't configured" do
58
+ begin
59
+ rfb = RubyFlashbake.new
60
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
61
+ rfb.configure_git("#{File.dirname(__FILE__)}").should == false
62
+ rescue SystemExit => e
63
+ $stdout.string.should == "Can't configure git without git :NAME and :EMAIL configured in config file.\n"
64
+ e.status.should == 1
65
+ end
66
+ end
67
+
68
+ it "should configure git in watch directiory if name and email are setup and git not configured" do
69
+ rfb = RubyFlashbake.new
70
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
71
+ rfb.configuration[:GIT][:NAME] = "Test Monkey"
72
+ rfb.configuration[:GIT][:EMAIL] = "mokey@fake.fake"
73
+ rfb.configure_git("#{File.dirname(__FILE__)}").should == true
74
+ $stdout.string.scan("Initialized empty Git repository").should_not == []
75
+ end
76
+
77
+ it "should be able to call configure_git multiple times once git is setup" do
78
+ begin
79
+ rfb = RubyFlashbake.new
80
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
81
+ rfb.configuration[:GIT][:NAME] = "Test Monkey"
82
+ rfb.configuration[:GIT][:EMAIL] = "mokey@fake.fake"
83
+ rfb.configure_git("#{File.dirname(__FILE__)}").should == true
84
+ rfb.configure_git("#{File.dirname(__FILE__)}").should == true
85
+ end
86
+ end
87
+
88
+ it "should find .git and .git/config files as signal that git was setup in directory before" do
89
+ begin
90
+ rfb = RubyFlashbake.new
91
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
92
+ rfb.configuration[:GIT][:NAME] = "Test Monkey"
93
+ rfb.configuration[:GIT][:EMAIL] = "mokey@fake.fake"
94
+ Dir.mkdir("#{File.dirname(__FILE__)}/.git")
95
+ File.open("#{File.dirname(__FILE__)}/.git/config", "w") {|file| file.puts "foo!"}
96
+ rfb.configure_git("#{File.dirname(__FILE__)}").should == true
97
+ end
98
+ end
99
+
100
+ it "should dump useful error message if uri, github id, and repository aren't setup and git not configured" do
101
+ begin
102
+ rfb = RubyFlashbake.new
103
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
104
+ rfb.configuration[:GIT][:NAME] = "Test Monkey"
105
+ rfb.configuration[:GIT][:EMAIL] = "mokey@fake.fake"
106
+ rfb.configure_git("#{File.dirname(__FILE__)}")
107
+ rfb.configure_github("#{File.dirname(__FILE__)}")
108
+ rescue SystemExit => e
109
+ $stdout.string.should == "Initialized empty Git repository in /Users/cory/opensource/rubyflashbake/spec/rubyflashbake/.git/\n\n\nInitialized git in ./spec/rubyflashbake\nCan't configure github without :GITHUB_URI, :GITHUB_ID, and :GITHUB_REPOSITORY configured in config file.\n"
110
+ e.status.should == 1
111
+ end
112
+ end
113
+
114
+ it "should configure github if uri, github id, and repository are setup and git not configured" do
115
+ begin
116
+ rfb = RubyFlashbake.new
117
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
118
+ rfb.configuration[:GIT][:NAME] = "Test Monkey"
119
+ rfb.configuration[:GIT][:EMAIL] = "mokey@fake.fake"
120
+ rfb.configuration[:GIT][:USE_GITHUB] = true
121
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_ID] = "fake"
122
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_REPOSITORY] = "fake"
123
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_URI] = "git@github.com"
124
+ rfb.configure_git("#{File.dirname(__FILE__)}")
125
+ rfb.configure_github("#{File.dirname(__FILE__)}").should == true
126
+ end
127
+ end
128
+
129
+ it "should fail if trying to configure github without first configuring git" do
130
+ begin
131
+ rfb = RubyFlashbake.new
132
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
133
+ rfb.configuration[:GIT][:NAME] = "Test Monkey"
134
+ rfb.configuration[:GIT][:EMAIL] = "mokey@fake.fake"
135
+ rfb.configuration[:GIT][:USE_GITHUB] = true
136
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_ID] = "fake"
137
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_REPOSITORY] = "fake"
138
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_URI] = "git@github.com"
139
+ rfb.configure_github("#{File.dirname(__FILE__)}")
140
+ rescue SystemExit => e
141
+ $stdout.string.should == "Trying to configure github without previous call to config_git.\n"
142
+ end
143
+ end
144
+
145
+ it "should find .git and .git/config files as signal that git was setup in directory before" do
146
+ begin
147
+ rfb = RubyFlashbake.new
148
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
149
+ rfb.configuration[:GIT][:NAME] = "Test Monkey"
150
+ rfb.configuration[:GIT][:EMAIL] = "mokey@fake.fake"
151
+ Dir.mkdir("#{File.dirname(__FILE__)}/.git")
152
+ File.open("#{File.dirname(__FILE__)}/.git/config", "w") {|file| file.puts "[remote origin]"}
153
+ rfb.configure_git("#{File.dirname(__FILE__)}").should == true
154
+ end
155
+ end
156
+
157
+ it "should be fine to repated configure github" do
158
+ begin
159
+ rfb = RubyFlashbake.new
160
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
161
+ rfb.configuration[:GIT][:NAME] = "Test Monkey"
162
+ rfb.configuration[:GIT][:EMAIL] = "mokey@fake.fake"
163
+ rfb.configuration[:GIT][:USE_GITHUB] = true
164
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_ID] = "fake"
165
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_REPOSITORY] = "fake"
166
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_URI] = "git@github.com"
167
+ rfb.configure_git("#{File.dirname(__FILE__)}")
168
+ rfb.configure_github("#{File.dirname(__FILE__)}").should == true
169
+ rfb.configure_github("#{File.dirname(__FILE__)}").should == true
170
+ end
171
+ end
172
+
173
+ it "should define a plugin directory" do
174
+ rfb = RubyFlashbake.new
175
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
176
+ rfb.configuration[:PLUGIN_DIRECTORIES][0].should == "plugins"
177
+ end
178
+
179
+ it "should exit if you try to load plugins without loading config file" do
180
+ begin
181
+ rfb = RubyFlashbake.new
182
+ rfb.load_plugins
183
+ rescue SystemExit => e
184
+ $stdout.string.should == "Configuration not loaded before trying to work with it\nPlease make sure code path loads configuration before trying to load plugins.\n"
185
+ e.status.should == 1
186
+ end
187
+ end
188
+
189
+ it "should load files from the specified plugins directory" do
190
+ rfb = RubyFlashbake.new
191
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
192
+ rfb.load_plugins
193
+ files = Dir.glob("#{File.dirname(__FILE__)}/../../lib/rubyflashbake/#{rfb.configuration[:PLUGIN_DIRECTORIES]}/*.rb")
194
+ files.each do |file|
195
+ basename = File.basename(file, ".rb")
196
+ RubyFlashbake.method_defined?("do_#{basename}").should == true
197
+ end
198
+ end
199
+
200
+ it "should setup directory watchers as specified in the in config file" do
201
+ rfb = RubyFlashbake.new
202
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
203
+ rfb.configuration[:GIT][:NAME] = "Test Monkey"
204
+ rfb.configuration[:GIT][:EMAIL] = "mokey@fake.fake"
205
+ rfb.configuration[:GIT][:USE_GITHUB] = true
206
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_ID] = "fake"
207
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_REPOSITORY] = "fake"
208
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_URI] = "git@github.com"
209
+ rfb.configuration[:DIRECTORY_MONITOR_INTERVAL] = 1
210
+ rfb.configuration[:STABLE_INTERVALS] = 1
211
+ rfb.configure_git("#{File.dirname(__FILE__)}/testdata/testdir/")
212
+ rfb.configure_github("#{File.dirname(__FILE__)}/testdata/testdir/")
213
+ rfb.load_plugins
214
+ output = ""
215
+ rfb.setup_directory_watchers("#{File.dirname(__FILE__)}/testdata/testdir/") do |events, basedir, func|
216
+ events.each do |event|
217
+ if event.type == :stable
218
+ output += "#{basedir} #{event}\n#{func}"
219
+ end
220
+ end
221
+ end
222
+ rfb.start_directory_watchers
223
+ File.open("#{File.dirname(__FILE__)}/testdata/testdir/temp.txt", "w") {|file| file.puts "foo!"}
224
+ File.open("#{File.dirname(__FILE__)}/testdata/testdir/temp2.txt", "w") {|file| file.puts "foo!"}
225
+ sleep(10)
226
+ File.open("#{File.dirname(__FILE__)}/testdata/testdir/temp3.txt", "w") {|file| file.puts "foo!"}
227
+ File.delete("#{File.dirname(__FILE__)}/testdata/testdir/temp3.txt")
228
+ File.delete("#{File.dirname(__FILE__)}/testdata/testdir/temp2.txt")
229
+ File.delete("#{File.dirname(__FILE__)}/testdata/testdir/temp.txt")
230
+
231
+ output.scan(/temp\.txt/).should_not == []
232
+ output.scan(/temp2\.txt/).should_not == []
233
+ output.scan(/temp3\.txt/).should == []
234
+
235
+ rfb.stop_directory_watchers
236
+ end
237
+
238
+ it "should commit changes on stable files with the commit message" do
239
+ rfb = RubyFlashbake.new
240
+ rfb.load_file("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
241
+ rfb.configuration[:GIT][:NAME] = "Test Monkey"
242
+ rfb.configuration[:GIT][:EMAIL] = "mokey@fake.fake"
243
+ rfb.configuration[:GIT][:USE_GITHUB] = true
244
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_ID] = "fake"
245
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_REPOSITORY] = "fake"
246
+ rfb.configuration[:GIT][:GITHUB_DATA][:GITHUB_URI] = "git@github.com"
247
+ rfb.configuration[:DIRECTORY_MONITOR_INTERVAL] = 1
248
+ rfb.configuration[:STABLE_INTERVALS] = 1
249
+ rfb.configure_git("#{File.dirname(__FILE__)}/testdata/testdir/")
250
+ rfb.configure_github("#{File.dirname(__FILE__)}/testdata/testdir/")
251
+ rfb.load_plugins
252
+
253
+ rfb.setup_watch_commits("#{File.dirname(__FILE__)}/testdata/testdir")
254
+
255
+ rfb.start_directory_watchers
256
+ File.open("#{File.dirname(__FILE__)}/testdata/testdir/temp.txt", "w") {|file| file.puts "foo!"}
257
+ File.open("#{File.dirname(__FILE__)}/testdata/testdir/temp2.txt", "w") {|file| file.puts "foo!"}
258
+ sleep(10)
259
+ File.open("#{File.dirname(__FILE__)}/testdata/testdir/temp3.txt", "w") {|file| file.puts "foo!"}
260
+ File.open("#{File.dirname(__FILE__)}/testdata/testdir/temp3.txt", "a") {|file| file.puts "bar!"}
261
+ File.delete("#{File.dirname(__FILE__)}/testdata/testdir/temp2.txt")
262
+ sleep(10)
263
+
264
+ rfb.stop_directory_watchers
265
+
266
+ status = ""
267
+ log = ""
268
+
269
+ Dir.chdir("#{File.dirname(__FILE__)}/testdata/testdir/") do
270
+ status = `git status`
271
+ log = `git log`
272
+ end
273
+
274
+ File.delete("#{File.dirname(__FILE__)}/testdata/testdir/temp3.txt")
275
+ File.delete("#{File.dirname(__FILE__)}/testdata/testdir/temp.txt")
276
+
277
+ status.should == "# On branch master\nnothing to commit (working directory clean)\n"
278
+ log.scan(/commit/).length.should == 2
279
+ end
280
+ end
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # options_spec
4
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
5
+ # See License.txt for licensing details.
6
+
7
+ require "#{File.dirname(__FILE__)}/../../lib/rubyflashbake/options"
8
+
9
+ RubyFlashbakeOptionHelp = <<-EOF
10
+ Usage: rubyflashbake [ options ]
11
+ -c, --config [file] Use config file [file]
12
+ -e, --example Dump an example, annotated config file to stdout and exit
13
+ -h, --help You're looking at it. Functionality documented in config file and on first run.
14
+ EOF
15
+
16
+ describe RubyFlashbakeOptions do
17
+ before :each do
18
+ @stdout_orig = $stdout
19
+ $stdout = StringIO.new
20
+ end
21
+
22
+ after :each do
23
+ $stdout = @stdout_orig
24
+ end
25
+
26
+ it "should default to config file .rubyflashbake, example false" do
27
+ RubyFlashbakeOptions.new([]).test([:config_file => ".rubyflashbake"]).should == true
28
+ end
29
+
30
+ it "should read from config file if -c given without a file" do
31
+ RubyFlashbakeOptions.new(["-c"]).test([:config_file => ".rubyflashbake"]).should == true
32
+ end
33
+
34
+ it "should read from config file if --config given without a file" do
35
+ RubyFlashbakeOptions.new(["--config"]).test([:config_file => ".rubyflashbake"]).should == true
36
+ end
37
+
38
+ it "should read from config file if -c foo option given" do
39
+ RubyFlashbakeOptions.new(["-c", "foo"]).test([:config_file => "foo"]).should == true
40
+ end
41
+
42
+ it "should read from config file if --config foo option given" do
43
+ RubyFlashbakeOptions.new(["--config", "foo"]).test([:config_file => "foo"]).should == true
44
+ end
45
+
46
+ it "should print out help when -h is requested or not input" do
47
+ begin
48
+ RubyFlashbakeOptions.new(["-h"])
49
+ rescue SystemExit => e
50
+ $stdout.string.should == RubyFlashbakeOptionHelp
51
+ e.status.should == 0
52
+ end
53
+ end
54
+
55
+ it "should print out help when --help is requested or not input" do
56
+ begin
57
+ RubyFlashbakeOptions.new(["--help"])
58
+ rescue SystemExit => e
59
+ $stdout.string.should == RubyFlashbakeOptionHelp
60
+ e.status.should == 0
61
+ end
62
+ end
63
+
64
+ it "should handle junk by dumping help and exiting" do
65
+ begin
66
+ RubyFlashbakeOptions.new(["-this is -junky junk"]).should == true
67
+ rescue SystemExit => e
68
+ $stdout.string.should == RubyFlashbakeOptionHelp
69
+ e.status.should == 1
70
+ end
71
+ end
72
+
73
+ it "should dump example config file to stdout if -e given" do
74
+ begin
75
+ RubyFlashbakeOptions.new(["-e"])
76
+ rescue SystemExit => e
77
+ $stdout.string.should == File.read("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
78
+ e.status.should == 0
79
+ end
80
+ end
81
+
82
+ it "should dump example config file to stdout if --example given" do
83
+ begin
84
+ RubyFlashbakeOptions.new(["--example"])
85
+ rescue SystemExit => e
86
+ $stdout.string.should == File.read("#{File.dirname(__FILE__)}/../../lib/data/.rubyflashbake_example")
87
+ e.status.should == 0
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
4
+ # See License.txt for licensing details.
5
+
6
+ require "#{File.dirname(__FILE__)}/../../../lib/rubyflashbake/core"
7
+ require "#{File.dirname(__FILE__)}/../../../lib/rubyflashbake/plugins/internet"
8
+
9
+ describe RubyFlashbake do
10
+ it "should set up @configuration[:INTERNET_ALIVE] to true if computer can ping the net" do
11
+ begin
12
+ rfb = RubyFlashbake.new
13
+ rfb.load_file("#{File.dirname(__FILE__)}/../../../lib/data/.rubyflashbake_example")
14
+ rfb.load_plugins
15
+ rfb.configuration[:OUTPUT] = []
16
+ rfb.do_internet
17
+ unless rfb.configuration[:OUTPUT][0] == "offline"
18
+ rfb.configuration[:INTERNET_ALIVE].should == true
19
+ end
20
+ end
21
+ end
22
+
23
+ it "should set up @configuration[:INTERNET_ALIVE] to false if computer can't ping the net" do
24
+ begin
25
+ rfb = RubyFlashbake.new
26
+ rfb.load_file("#{File.dirname(__FILE__)}/../../../lib/data/.rubyflashbake_example")
27
+ rfb.load_plugins
28
+ rfb.configuration[:PLUGIN][:INTERNET][:OPTIONAL_HASH][:INTERNET_TEST_URI] = "notavalidwebaddressatall.ca"
29
+ rfb.configuration[:OUTPUT] = []
30
+ rfb.do_internet
31
+ rfb.configuration[:INTERNET_ALIVE].should == false
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
4
+ # See License.txt for licensing details.
5
+
6
+ require "#{File.dirname(__FILE__)}/../../../lib/rubyflashbake/core"
7
+ require "#{File.dirname(__FILE__)}/../../../lib/rubyflashbake/plugins/location"
8
+
9
+ describe RubyFlashbake do
10
+ it "should pull location data from maxmind if @configuration[:INTERNET_ALIVE] is true" do
11
+ begin
12
+ rfb = RubyFlashbake.new
13
+ rfb.load_file("#{File.dirname(__FILE__)}/../../../lib/data/.rubyflashbake_example")
14
+ rfb.load_plugins
15
+ rfb.configuration[:OUTPUT] = []
16
+ rfb.do_internet
17
+ rfb.do_location
18
+ if rfb.configuration[:INTERNET_ALIVE]
19
+ rfb.configuration[:LOCATION_CACHE].scan(/(.*),(.*),(.*)/).should_not == ""
20
+ rfb.configuration[:OUTPUT][0].scan(/(.*),(.*),(.*) (.*),(.*)/).should_not == ""
21
+ end
22
+ end
23
+ end
24
+
25
+ it "should fail to get location data if @configuration[:INTERNET_ALIVE] is false" do
26
+ begin
27
+ rfb = RubyFlashbake.new
28
+ rfb.load_file("#{File.dirname(__FILE__)}/../../../lib/data/.rubyflashbake_example")
29
+ rfb.load_plugins
30
+ rfb.configuration[:PLUGIN][:INTERNET][:OPTIONAL_HASH][:INTERNET_TEST_URI] = "notavalidwebaddressatall.ca"
31
+ rfb.configuration[:OUTPUT] = []
32
+ rfb.do_internet
33
+ rfb.do_location
34
+ rfb.configuration[:LOCATION_CACHE].should == nil
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
4
+ # See License.txt for licensing details.
5
+
6
+ require "#{File.dirname(__FILE__)}/../../../lib/rubyflashbake/core"
7
+ require "#{File.dirname(__FILE__)}/../../../lib/rubyflashbake/plugins/time"
8
+
9
+ describe RubyFlashbake do
10
+ it "should pull time data" do
11
+ begin
12
+ rfb = RubyFlashbake.new
13
+ rfb.load_file("#{File.dirname(__FILE__)}/../../../lib/data/.rubyflashbake_example")
14
+ rfb.load_plugins
15
+ rfb.configuration[:OUTPUT] = []
16
+ rfb.do_time
17
+ # "Sat Apr 18 21:48:25 2009 PDT"
18
+ rfb.configuration[:OUTPUT][0].scan(/(\w*) (\w*) (\d*) (\d*):(\d*):(\d*) (\d*) (\w*)/).should_not == ""
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,35 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
4
+ # See License.txt for licensing details.
5
+
6
+ require "#{File.dirname(__FILE__)}/../../../lib/rubyflashbake/core"
7
+ require "#{File.dirname(__FILE__)}/../../../lib/rubyflashbake/plugins/twitter"
8
+
9
+ describe RubyFlashbake do
10
+ it "should pull last 3 tweets from twitter account if @configuration[:INTERNET_ALIVE] is true and @configuration[:PLUGIN][:TWITTER][:OPTIONAL_HASH][:TWITTER_ID] is set" do
11
+ begin
12
+ rfb = RubyFlashbake.new
13
+ rfb.load_file("#{File.dirname(__FILE__)}/../../../lib/data/.rubyflashbake_example")
14
+ rfb.load_plugins
15
+ rfb.configuration[:OUTPUT] = []
16
+ rfb.configuration[:PLUGIN][:TWITTER][:OPTIONAL_HASH][:TWITTER_ID] = "github"
17
+ rfb.do_internet
18
+ rfb.do_twitter
19
+ rfb.configuration[:OUTPUT][0].scan(/Twitter: .*/).should_not == ""
20
+ end
21
+ end
22
+
23
+ it "should fail to get location data if @configuration[:INTERNET_ALIVE] is false or @configuration[:PLUGIN][:TWITTER][:OPTIONAL_HASH][:TWITTER_ID] is set" do
24
+ begin
25
+ rfb = RubyFlashbake.new
26
+ rfb.load_file("#{File.dirname(__FILE__)}/../../../lib/data/.rubyflashbake_example")
27
+ rfb.load_plugins
28
+ rfb.configuration[:PLUGIN][:INTERNET][:OPTIONAL_HASH][:INTERNET_TEST_URI] = "notavalidwebaddressatall.ca"
29
+ rfb.configuration[:OUTPUT] = []
30
+ rfb.do_internet
31
+ rfb.do_twitter
32
+ rfb.configuration[:OUTPUT][0].should == "Couldn't reach twitter"
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # Copyright (c) 2009 Cory Ondrejka. All rights reserved.
4
+ # See License.txt for licensing details.
5
+
6
+ require "#{File.dirname(__FILE__)}/../../../lib/rubyflashbake/core"
7
+ require "#{File.dirname(__FILE__)}/../../../lib/rubyflashbake/plugins/weather"
8
+
9
+ describe RubyFlashbake do
10
+ it "should get weather data if @configuration[:INTERNET_ALIVE] is true" do
11
+ begin
12
+ rfb = RubyFlashbake.new
13
+ rfb.load_file("#{File.dirname(__FILE__)}/../../../lib/data/.rubyflashbake_example")
14
+ rfb.load_plugins
15
+ rfb.configuration[:OUTPUT] = []
16
+ rfb.do_internet
17
+ rfb.do_location
18
+ rfb.do_weather
19
+ if rfb.configuration[:INTERNET_ALIVE]
20
+ rfb.configuration[:LOCATION_CACHE].scan(/(.*),(.*),(.*)/).should_not == ""
21
+ rfb.configuration[:OUTPUT][0].scan(/(.*),(.*),(.*) (.*),(.*)/).should_not == ""
22
+ rfb.configuration[:OUTPUT][1].scan(/(\w+) (\w+)/).should_not == ""
23
+ end
24
+ end
25
+ end
26
+
27
+ it "should fail to get weather data if @configuration[:INTERNET_ALIVE] is false" do
28
+ begin
29
+ rfb = RubyFlashbake.new
30
+ rfb.load_file("#{File.dirname(__FILE__)}/../../../lib/data/.rubyflashbake_example")
31
+ rfb.load_plugins
32
+ rfb.configuration[:PLUGIN][:INTERNET][:OPTIONAL_HASH][:INTERNET_TEST_URI] = "notavalidwebaddressatall.ca"
33
+ rfb.configuration[:OUTPUT] = []
34
+ rfb.do_internet
35
+ rfb.do_location
36
+ rfb.do_weather
37
+ rfb.configuration[:LOCATION_CACHE].should == nil
38
+ rfb.configuration[:OUTPUT][0].should == "offline"
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,3 @@
1
+ .DS_Store
2
+ coverage/
3
+ .message.tmp
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cory-rubyflashbake
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.3
5
+ platform: ruby
6
+ authors:
7
+ - Cory Ondrejka
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-04-08 00:00:00 -07:00
13
+ default_executable: rubyflashbake
14
+ dependencies: []
15
+
16
+ description:
17
+ email: cory.ondrejka@gmail.com
18
+ executables:
19
+ - rubyflashbake
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - bin/rubyflashbake
26
+ - lib/data/.rubyflashbake_example
27
+ - lib/rubyflashbake/core.rb
28
+ - lib/rubyflashbake/options.rb
29
+ - lib/rubyflashbake/plugins/internet.rb
30
+ - lib/rubyflashbake/plugins/location.rb
31
+ - lib/rubyflashbake/plugins/time.rb
32
+ - lib/rubyflashbake/plugins/twitter.rb
33
+ - lib/rubyflashbake/plugins/weather.rb
34
+ - License.txt
35
+ - README.rdoc
36
+ - README.textile
37
+ - spec/rspec_suite.rb
38
+ - spec/rubyflashbake/core_spec.rb
39
+ - spec/rubyflashbake/options_spec.rb
40
+ - spec/rubyflashbake/plugins/internet_spec.rb
41
+ - spec/rubyflashbake/plugins/location_spec.rb
42
+ - spec/rubyflashbake/plugins/time_spec.rb
43
+ - spec/rubyflashbake/plugins/twitter_spec.rb
44
+ - spec/rubyflashbake/plugins/weather_spec.rb
45
+ - spec/rubyflashbake/testdata/testdir/.gitignore
46
+ has_rdoc: false
47
+ homepage: http://cory.github.com
48
+ post_install_message:
49
+ rdoc_options: []
50
+
51
+ require_paths:
52
+ - lib
53
+ required_ruby_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "1.8"
58
+ version:
59
+ required_rubygems_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ requirements: []
66
+
67
+ rubyforge_project:
68
+ rubygems_version: 1.2.0
69
+ signing_key:
70
+ specification_version: 2
71
+ summary: "A Ruby project inspired by Thomas Gideon\xE2\x80\x99s python Flashbake project"
72
+ test_files: []
73
+