city_watch 0.1.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.
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ source "http://rubygems.org"
2
+ gemspec
3
+
4
+ group :development do
5
+ gem "rspec", "~> 2.3.0"
6
+ gem "bundler", "~> 1.0.0"
7
+ gem "jeweler", "~> 1.5.2"
8
+ gem "rcov", ">= 0"
9
+ end
@@ -0,0 +1,47 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ city_watch (0.0.0)
5
+ city_watch
6
+ daemons (~> 1.1.0)
7
+ growl (~> 1.0.3)
8
+ nokogiri (~> 1.4.4)
9
+ rest-client (~> 1.6.1)
10
+ thor (~> 0.14.6)
11
+
12
+ GEM
13
+ remote: http://rubygems.org/
14
+ specs:
15
+ daemons (1.1.0)
16
+ diff-lcs (1.1.2)
17
+ git (1.2.5)
18
+ growl (1.0.3)
19
+ jeweler (1.5.2)
20
+ bundler (~> 1.0.0)
21
+ git (>= 1.2.5)
22
+ rake
23
+ mime-types (1.16)
24
+ nokogiri (1.4.4)
25
+ rake (0.8.7)
26
+ rcov (0.9.9)
27
+ rest-client (1.6.1)
28
+ mime-types (>= 1.16)
29
+ rspec (2.3.0)
30
+ rspec-core (~> 2.3.0)
31
+ rspec-expectations (~> 2.3.0)
32
+ rspec-mocks (~> 2.3.0)
33
+ rspec-core (2.3.1)
34
+ rspec-expectations (2.3.0)
35
+ diff-lcs (~> 1.1.2)
36
+ rspec-mocks (2.3.0)
37
+ thor (0.14.6)
38
+
39
+ PLATFORMS
40
+ ruby
41
+
42
+ DEPENDENCIES
43
+ bundler (~> 1.0.0)
44
+ city_watch!
45
+ jeweler (~> 1.5.2)
46
+ rcov
47
+ rspec (~> 2.3.0)
@@ -0,0 +1,10 @@
1
+ City Watch
2
+ ============
3
+
4
+ Get growl notices when your TeamCity builds fail (polls every 10 seconds).
5
+
6
+ $ city_watch start my_ci_server.com 'My Build Title' 'project10'
7
+
8
+ And there you go. To stop:
9
+
10
+ $ city_watch stop
@@ -0,0 +1,53 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "city_watch"
16
+ gem.homepage = "http://github.com/richmolj/city_watch"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{one-line summary of your gem}
19
+ gem.description = %Q{longer description of your gem}
20
+ gem.email = "richmolj@gmail.com"
21
+ gem.authors = ["Lee Richmond"]
22
+ # Include your dependencies below. Runtime dependencies are required when using your gem,
23
+ # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
+ gem.add_runtime_dependency 'thor', '~> 0.14.6'
25
+ gem.add_runtime_dependency 'daemons', '~> 1.1.0'
26
+ gem.add_runtime_dependency 'growl', '~> 1.0.3'
27
+ gem.add_runtime_dependency 'rest-client', '~> 1.6.1'
28
+ gem.add_runtime_dependency 'nokogiri', '~> 1.4.4'
29
+ end
30
+ Jeweler::RubygemsDotOrgTasks.new
31
+
32
+ require 'rspec/core'
33
+ require 'rspec/core/rake_task'
34
+ RSpec::Core::RakeTask.new(:spec) do |spec|
35
+ spec.pattern = FileList['spec/**/*_spec.rb']
36
+ end
37
+
38
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
39
+ spec.pattern = 'spec/**/*_spec.rb'
40
+ spec.rcov = true
41
+ end
42
+
43
+ task :default => :spec
44
+
45
+ require 'rake/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "city_watch #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
53
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'city_watch'
4
+
5
+ class CityWatchCommandLine < Thor
6
+ desc "start www.yoururl.com 'your build title'", "start watching teamcity"
7
+ def start(url, build_title, project_id)
8
+ CityWatch.url = url
9
+ CityWatch.build_title = build_title
10
+ CityWatch.build_title = project_id
11
+ daemon
12
+ end
13
+
14
+ desc "stop" ,"stop watching teamcity"
15
+ def stop
16
+ daemon
17
+ end
18
+
19
+ no_tasks do
20
+ def daemon
21
+ Daemons.run_proc('city_watch', :dir => '/tmp/pids') do
22
+ CityWatch::Watcher.start
23
+ end
24
+ end
25
+ end
26
+ end
27
+
28
+ CityWatchCommandLine.start
@@ -0,0 +1,141 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{city_watch}
8
+ s.version = "0.1.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Lee Richmond"]
12
+ s.date = %q{2011-03-07}
13
+ s.default_executable = %q{city_watch}
14
+ s.description = %q{longer description of your gem}
15
+ s.email = %q{richmolj@gmail.com}
16
+ s.executables = ["city_watch"]
17
+ s.extra_rdoc_files = [
18
+ "README.md"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ ".rspec",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "README.md",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/city_watch",
29
+ "city_watch.gemspec",
30
+ "lib/city_watch.rb",
31
+ "lib/city_watch/build_monitor.rb",
32
+ "lib/city_watch/page.rb",
33
+ "lib/city_watch/watcher.rb",
34
+ "spec/LICENSE.txt",
35
+ "spec/city_watch/build_monitor_spec.rb",
36
+ "spec/city_watch/page_spec.rb",
37
+ "spec/city_watch/watcher_spec.rb",
38
+ "spec/fixtures/page.html",
39
+ "spec/fixtures/running_builds.xml",
40
+ "spec/spec_helper.rb"
41
+ ]
42
+ s.homepage = %q{http://github.com/richmolj/city_watch}
43
+ s.licenses = ["MIT"]
44
+ s.require_paths = ["lib"]
45
+ s.rubygems_version = %q{1.4.2}
46
+ s.summary = %q{one-line summary of your gem}
47
+ s.test_files = [
48
+ "spec/city_watch/build_monitor_spec.rb",
49
+ "spec/city_watch/page_spec.rb",
50
+ "spec/city_watch/watcher_spec.rb",
51
+ "spec/spec_helper.rb"
52
+ ]
53
+
54
+ if s.respond_to? :specification_version then
55
+ s.specification_version = 3
56
+
57
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
58
+ s.add_runtime_dependency(%q<city_watch>, [">= 0"])
59
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
60
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
61
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
62
+ s.add_development_dependency(%q<rcov>, [">= 0"])
63
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
64
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
65
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
66
+ s.add_development_dependency(%q<rcov>, [">= 0"])
67
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
68
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
69
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
70
+ s.add_development_dependency(%q<rcov>, [">= 0"])
71
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
72
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
73
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
74
+ s.add_development_dependency(%q<rcov>, [">= 0"])
75
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
76
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
77
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
78
+ s.add_development_dependency(%q<rcov>, [">= 0"])
79
+ s.add_runtime_dependency(%q<thor>, ["~> 0.14.6"])
80
+ s.add_runtime_dependency(%q<daemons>, ["~> 1.1.0"])
81
+ s.add_runtime_dependency(%q<growl>, ["~> 1.0.3"])
82
+ s.add_runtime_dependency(%q<rest-client>, ["~> 1.6.1"])
83
+ s.add_runtime_dependency(%q<nokogiri>, ["~> 1.4.4"])
84
+ else
85
+ s.add_dependency(%q<city_watch>, [">= 0"])
86
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
87
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
88
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
89
+ s.add_dependency(%q<rcov>, [">= 0"])
90
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
91
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
92
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
93
+ s.add_dependency(%q<rcov>, [">= 0"])
94
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
95
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
96
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
97
+ s.add_dependency(%q<rcov>, [">= 0"])
98
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
99
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
100
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
101
+ s.add_dependency(%q<rcov>, [">= 0"])
102
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
103
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
104
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
105
+ s.add_dependency(%q<rcov>, [">= 0"])
106
+ s.add_dependency(%q<thor>, ["~> 0.14.6"])
107
+ s.add_dependency(%q<daemons>, ["~> 1.1.0"])
108
+ s.add_dependency(%q<growl>, ["~> 1.0.3"])
109
+ s.add_dependency(%q<rest-client>, ["~> 1.6.1"])
110
+ s.add_dependency(%q<nokogiri>, ["~> 1.4.4"])
111
+ end
112
+ else
113
+ s.add_dependency(%q<city_watch>, [">= 0"])
114
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
115
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
116
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
117
+ s.add_dependency(%q<rcov>, [">= 0"])
118
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
119
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
120
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
121
+ s.add_dependency(%q<rcov>, [">= 0"])
122
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
123
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
124
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
125
+ s.add_dependency(%q<rcov>, [">= 0"])
126
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
127
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
128
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
129
+ s.add_dependency(%q<rcov>, [">= 0"])
130
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
131
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
132
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
133
+ s.add_dependency(%q<rcov>, [">= 0"])
134
+ s.add_dependency(%q<thor>, ["~> 0.14.6"])
135
+ s.add_dependency(%q<daemons>, ["~> 1.1.0"])
136
+ s.add_dependency(%q<growl>, ["~> 1.0.3"])
137
+ s.add_dependency(%q<rest-client>, ["~> 1.6.1"])
138
+ s.add_dependency(%q<nokogiri>, ["~> 1.4.4"])
139
+ end
140
+ end
141
+
@@ -0,0 +1,15 @@
1
+ require 'thor'
2
+ require 'daemons'
3
+ require 'growl'
4
+ require 'rest_client'
5
+ require 'nokogiri'
6
+
7
+ require 'city_watch/page'
8
+ require 'city_watch/build_monitor'
9
+ require 'city_watch/watcher'
10
+
11
+ module CityWatch
12
+ class << self
13
+ attr_accessor :url, :build_title, :project_id
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module CityWatch
2
+ class BuildMonitor
3
+
4
+ def initialize
5
+ xml = RestClient.get("#{CityWatch.url}/ajax.html?getRunningBuilds=1")
6
+ @doc = Nokogiri::XML(xml)
7
+ end
8
+
9
+ def failure?(build_id)
10
+ @doc.xpath("//*[@buildId='#{build_id}']").first.
11
+ attributes['successful'].value == 'false'
12
+ end
13
+
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ module CityWatch
2
+ class Page
3
+
4
+ def initialize
5
+ html = RestClient.get("#{CityWatch.url}/project.html?projectId=#{CityWatch.project_id}")
6
+ @doc = Nokogiri::HTML(html)
7
+ end
8
+
9
+ # Todo: this is gross.
10
+ def build_id
11
+ @doc.xpath("//a[contains(.,'#{CityWatch.build_title}')]").
12
+ first.
13
+ parent.
14
+ parent.
15
+ next_sibling.
16
+ next_sibling.
17
+ children.
18
+ first.
19
+ children[2].
20
+ children[1].
21
+ attributes['id'].
22
+ value.
23
+ split(':')[1].
24
+ split(':')[0].
25
+ to_i
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,33 @@
1
+ module CityWatch
2
+ class Watcher
3
+
4
+ class << self
5
+
6
+ def start
7
+ loop do
8
+ if failure?
9
+ growl
10
+ sleep 10 while failure?
11
+ end
12
+ sleep 10
13
+ end
14
+ end
15
+
16
+ def failure?
17
+ page = CityWatch::Page.new
18
+ monitor = CityWatch::BuildMonitor.new
19
+ monitor.failure?(page.build_id)
20
+ end
21
+
22
+ private
23
+
24
+ def growl
25
+ Growl.send "notify_warning", "TeamCity build '#{CityWatch.build_title}' failed!",
26
+ :title => "City Watch",
27
+ :sticky => true
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Lee Richmond
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,32 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe CityWatch::BuildMonitor do
4
+
5
+ before do
6
+ @html = File.read('spec/fixtures/running_builds.xml')
7
+ RestClient.stub!(:get).with("#{CityWatch.url}/ajax.html?getRunningBuilds=1").and_return(@html)
8
+ end
9
+
10
+ context "an instance of a BuildMonitor" do
11
+ before do
12
+ @build_monitor = CityWatch::BuildMonitor.new
13
+ end
14
+
15
+ describe "#initialize" do
16
+ it "should get xml of the build statuses" do
17
+ @build_monitor.instance_variable_get(:@doc).should be_a(Nokogiri::XML::Document)
18
+ end
19
+ end
20
+
21
+ describe "#failure?" do
22
+ it "should return false if there was not a failure" do
23
+ @build_monitor.should_not be_failure(247776)
24
+ end
25
+
26
+ it "should return true if there was a failure" do
27
+ @build_monitor.should be_failure(247774)
28
+ end
29
+ end
30
+ end
31
+
32
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe CityWatch::Page do
4
+
5
+ before do
6
+ @html = File.read('spec/fixtures/page.html')
7
+ RestClient.stub!(:get).with("#{CityWatch.url}/project.html?projectId=#{CityWatch.project_id}").and_return(@html)
8
+ end
9
+
10
+ context "an instance of CityWatch::Client" do
11
+ before do
12
+ @page = CityWatch::Page.new
13
+ end
14
+
15
+ describe "#initialize" do
16
+ it "should grab the html of the TC page" do
17
+ @page.instance_variable_get(:@doc).should be_a(Nokogiri::HTML::Document)
18
+ end
19
+ end
20
+
21
+ describe "#build_id" do
22
+ it "should parse the html to get the build id" do
23
+ @page.build_id.should == 247644
24
+ end
25
+ end
26
+ end
27
+
28
+ end
@@ -0,0 +1,45 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe CityWatch::Watcher do
4
+
5
+ describe ".start" do
6
+ before do
7
+ CityWatch::Watcher.should_receive(:loop).and_yield(nil)
8
+ end
9
+
10
+ it "should growl if there is a failure" do
11
+ CityWatch::Watcher.should_receive(:sleep).with(10).twice
12
+ Growl.should_receive(:send).with("notify_warning", "TeamCity build '#{CityWatch.build_title}' failed!",
13
+ :title => "City Watch",
14
+ :sticky => true)
15
+
16
+ CityWatch::Watcher.should_receive(:failure?).and_return(true, true, false)
17
+ CityWatch::Watcher.start
18
+ end
19
+
20
+ it "should not growl if there is no failure" do
21
+ CityWatch::Watcher.should_receive(:sleep).with(10).once
22
+ Growl.should_not_receive(:send)
23
+ CityWatch::Watcher.should_receive(:failure?).and_return(false)
24
+ CityWatch::Watcher.start
25
+ end
26
+ end
27
+
28
+ describe ".failure?" do
29
+ def setup(opts)
30
+ page = CityWatch::Page.should_receive(:new).and_return(mock(:build_id => 1))
31
+ monitor = CityWatch::BuildMonitor.should_receive(:new).and_return(mock(:failure? => opts[:failure]))
32
+ end
33
+
34
+ it "should return true when there is a failure" do
35
+ setup(:failure => true)
36
+ CityWatch::Watcher.should be_failure
37
+ end
38
+
39
+ it "should return false when there is not a failure" do
40
+ setup(:failure => false)
41
+ CityWatch::Watcher.should_not be_failure
42
+ end
43
+ end
44
+
45
+ end
@@ -0,0 +1,14 @@
1
+ <div>
2
+ <span>
3
+ <a>Spec Build</a>
4
+ <img/>
5
+ </span>
6
+ </div>
7
+ <table>
8
+ <tr>
9
+ <td></td>
10
+ <td class=" status">
11
+ <img id="build:247644:img" />
12
+ </td>
13
+ </tr>
14
+ </table>
@@ -0,0 +1,5 @@
1
+ <response>
2
+ <build buildId="247776" text="Running" successful="true" remainingTime="26s" exceededEstimatedDurationTime="< 1s" elapsedTime="18s" completedPercent="42" hasArtifacts="false"/>
3
+ <build buildId="247774" text="Running" successful="false" remainingTime="21m:03s" exceededEstimatedDurationTime="< 1s" elapsedTime="2m:28s" completedPercent="11" hasArtifacts="false"/>
4
+ <build buildId="247773" text="Changes are already collected" successful="true" remainingTime="4m:09s" exceededEstimatedDurationTime="< 1s" elapsedTime="5m:23s" completedPercent="57" hasArtifacts="false"/>
5
+ </response>
@@ -0,0 +1,16 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'city_watch'
5
+
6
+ # Requires supporting files with custom matchers and macros, etc,
7
+ # in ./support/ and its subdirectories.
8
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
9
+
10
+ RSpec.configure do |config|
11
+
12
+ end
13
+
14
+ CityWatch.build_title = 'Spec Build'
15
+ CityWatch.url = 'www.fake.com'
16
+ CityWatch.project_id = 1
metadata ADDED
@@ -0,0 +1,492 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: city_watch
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 1
9
+ - 0
10
+ version: 0.1.0
11
+ platform: ruby
12
+ authors:
13
+ - Lee Richmond
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-03-07 00:00:00 -05:00
19
+ default_executable: city_watch
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ type: :runtime
23
+ version_requirements: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ hash: 3
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ requirement: *id001
33
+ prerelease: false
34
+ name: city_watch
35
+ - !ruby/object:Gem::Dependency
36
+ type: :development
37
+ version_requirements: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ hash: 3
43
+ segments:
44
+ - 2
45
+ - 3
46
+ - 0
47
+ version: 2.3.0
48
+ requirement: *id002
49
+ prerelease: false
50
+ name: rspec
51
+ - !ruby/object:Gem::Dependency
52
+ type: :development
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ~>
57
+ - !ruby/object:Gem::Version
58
+ hash: 23
59
+ segments:
60
+ - 1
61
+ - 0
62
+ - 0
63
+ version: 1.0.0
64
+ requirement: *id003
65
+ prerelease: false
66
+ name: bundler
67
+ - !ruby/object:Gem::Dependency
68
+ type: :development
69
+ version_requirements: &id004 !ruby/object:Gem::Requirement
70
+ none: false
71
+ requirements:
72
+ - - ~>
73
+ - !ruby/object:Gem::Version
74
+ hash: 7
75
+ segments:
76
+ - 1
77
+ - 5
78
+ - 2
79
+ version: 1.5.2
80
+ requirement: *id004
81
+ prerelease: false
82
+ name: jeweler
83
+ - !ruby/object:Gem::Dependency
84
+ type: :development
85
+ version_requirements: &id005 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ hash: 3
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ requirement: *id005
95
+ prerelease: false
96
+ name: rcov
97
+ - !ruby/object:Gem::Dependency
98
+ type: :development
99
+ version_requirements: &id006 !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ hash: 3
105
+ segments:
106
+ - 2
107
+ - 3
108
+ - 0
109
+ version: 2.3.0
110
+ requirement: *id006
111
+ prerelease: false
112
+ name: rspec
113
+ - !ruby/object:Gem::Dependency
114
+ type: :development
115
+ version_requirements: &id007 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ hash: 23
121
+ segments:
122
+ - 1
123
+ - 0
124
+ - 0
125
+ version: 1.0.0
126
+ requirement: *id007
127
+ prerelease: false
128
+ name: bundler
129
+ - !ruby/object:Gem::Dependency
130
+ type: :development
131
+ version_requirements: &id008 !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ~>
135
+ - !ruby/object:Gem::Version
136
+ hash: 7
137
+ segments:
138
+ - 1
139
+ - 5
140
+ - 2
141
+ version: 1.5.2
142
+ requirement: *id008
143
+ prerelease: false
144
+ name: jeweler
145
+ - !ruby/object:Gem::Dependency
146
+ type: :development
147
+ version_requirements: &id009 !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ hash: 3
153
+ segments:
154
+ - 0
155
+ version: "0"
156
+ requirement: *id009
157
+ prerelease: false
158
+ name: rcov
159
+ - !ruby/object:Gem::Dependency
160
+ type: :development
161
+ version_requirements: &id010 !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ~>
165
+ - !ruby/object:Gem::Version
166
+ hash: 3
167
+ segments:
168
+ - 2
169
+ - 3
170
+ - 0
171
+ version: 2.3.0
172
+ requirement: *id010
173
+ prerelease: false
174
+ name: rspec
175
+ - !ruby/object:Gem::Dependency
176
+ type: :development
177
+ version_requirements: &id011 !ruby/object:Gem::Requirement
178
+ none: false
179
+ requirements:
180
+ - - ~>
181
+ - !ruby/object:Gem::Version
182
+ hash: 23
183
+ segments:
184
+ - 1
185
+ - 0
186
+ - 0
187
+ version: 1.0.0
188
+ requirement: *id011
189
+ prerelease: false
190
+ name: bundler
191
+ - !ruby/object:Gem::Dependency
192
+ type: :development
193
+ version_requirements: &id012 !ruby/object:Gem::Requirement
194
+ none: false
195
+ requirements:
196
+ - - ~>
197
+ - !ruby/object:Gem::Version
198
+ hash: 7
199
+ segments:
200
+ - 1
201
+ - 5
202
+ - 2
203
+ version: 1.5.2
204
+ requirement: *id012
205
+ prerelease: false
206
+ name: jeweler
207
+ - !ruby/object:Gem::Dependency
208
+ type: :development
209
+ version_requirements: &id013 !ruby/object:Gem::Requirement
210
+ none: false
211
+ requirements:
212
+ - - ">="
213
+ - !ruby/object:Gem::Version
214
+ hash: 3
215
+ segments:
216
+ - 0
217
+ version: "0"
218
+ requirement: *id013
219
+ prerelease: false
220
+ name: rcov
221
+ - !ruby/object:Gem::Dependency
222
+ type: :development
223
+ version_requirements: &id014 !ruby/object:Gem::Requirement
224
+ none: false
225
+ requirements:
226
+ - - ~>
227
+ - !ruby/object:Gem::Version
228
+ hash: 3
229
+ segments:
230
+ - 2
231
+ - 3
232
+ - 0
233
+ version: 2.3.0
234
+ requirement: *id014
235
+ prerelease: false
236
+ name: rspec
237
+ - !ruby/object:Gem::Dependency
238
+ type: :development
239
+ version_requirements: &id015 !ruby/object:Gem::Requirement
240
+ none: false
241
+ requirements:
242
+ - - ~>
243
+ - !ruby/object:Gem::Version
244
+ hash: 23
245
+ segments:
246
+ - 1
247
+ - 0
248
+ - 0
249
+ version: 1.0.0
250
+ requirement: *id015
251
+ prerelease: false
252
+ name: bundler
253
+ - !ruby/object:Gem::Dependency
254
+ type: :development
255
+ version_requirements: &id016 !ruby/object:Gem::Requirement
256
+ none: false
257
+ requirements:
258
+ - - ~>
259
+ - !ruby/object:Gem::Version
260
+ hash: 7
261
+ segments:
262
+ - 1
263
+ - 5
264
+ - 2
265
+ version: 1.5.2
266
+ requirement: *id016
267
+ prerelease: false
268
+ name: jeweler
269
+ - !ruby/object:Gem::Dependency
270
+ type: :development
271
+ version_requirements: &id017 !ruby/object:Gem::Requirement
272
+ none: false
273
+ requirements:
274
+ - - ">="
275
+ - !ruby/object:Gem::Version
276
+ hash: 3
277
+ segments:
278
+ - 0
279
+ version: "0"
280
+ requirement: *id017
281
+ prerelease: false
282
+ name: rcov
283
+ - !ruby/object:Gem::Dependency
284
+ type: :development
285
+ version_requirements: &id018 !ruby/object:Gem::Requirement
286
+ none: false
287
+ requirements:
288
+ - - ~>
289
+ - !ruby/object:Gem::Version
290
+ hash: 3
291
+ segments:
292
+ - 2
293
+ - 3
294
+ - 0
295
+ version: 2.3.0
296
+ requirement: *id018
297
+ prerelease: false
298
+ name: rspec
299
+ - !ruby/object:Gem::Dependency
300
+ type: :development
301
+ version_requirements: &id019 !ruby/object:Gem::Requirement
302
+ none: false
303
+ requirements:
304
+ - - ~>
305
+ - !ruby/object:Gem::Version
306
+ hash: 23
307
+ segments:
308
+ - 1
309
+ - 0
310
+ - 0
311
+ version: 1.0.0
312
+ requirement: *id019
313
+ prerelease: false
314
+ name: bundler
315
+ - !ruby/object:Gem::Dependency
316
+ type: :development
317
+ version_requirements: &id020 !ruby/object:Gem::Requirement
318
+ none: false
319
+ requirements:
320
+ - - ~>
321
+ - !ruby/object:Gem::Version
322
+ hash: 7
323
+ segments:
324
+ - 1
325
+ - 5
326
+ - 2
327
+ version: 1.5.2
328
+ requirement: *id020
329
+ prerelease: false
330
+ name: jeweler
331
+ - !ruby/object:Gem::Dependency
332
+ type: :development
333
+ version_requirements: &id021 !ruby/object:Gem::Requirement
334
+ none: false
335
+ requirements:
336
+ - - ">="
337
+ - !ruby/object:Gem::Version
338
+ hash: 3
339
+ segments:
340
+ - 0
341
+ version: "0"
342
+ requirement: *id021
343
+ prerelease: false
344
+ name: rcov
345
+ - !ruby/object:Gem::Dependency
346
+ type: :runtime
347
+ version_requirements: &id022 !ruby/object:Gem::Requirement
348
+ none: false
349
+ requirements:
350
+ - - ~>
351
+ - !ruby/object:Gem::Version
352
+ hash: 43
353
+ segments:
354
+ - 0
355
+ - 14
356
+ - 6
357
+ version: 0.14.6
358
+ requirement: *id022
359
+ prerelease: false
360
+ name: thor
361
+ - !ruby/object:Gem::Dependency
362
+ type: :runtime
363
+ version_requirements: &id023 !ruby/object:Gem::Requirement
364
+ none: false
365
+ requirements:
366
+ - - ~>
367
+ - !ruby/object:Gem::Version
368
+ hash: 19
369
+ segments:
370
+ - 1
371
+ - 1
372
+ - 0
373
+ version: 1.1.0
374
+ requirement: *id023
375
+ prerelease: false
376
+ name: daemons
377
+ - !ruby/object:Gem::Dependency
378
+ type: :runtime
379
+ version_requirements: &id024 !ruby/object:Gem::Requirement
380
+ none: false
381
+ requirements:
382
+ - - ~>
383
+ - !ruby/object:Gem::Version
384
+ hash: 17
385
+ segments:
386
+ - 1
387
+ - 0
388
+ - 3
389
+ version: 1.0.3
390
+ requirement: *id024
391
+ prerelease: false
392
+ name: growl
393
+ - !ruby/object:Gem::Dependency
394
+ type: :runtime
395
+ version_requirements: &id025 !ruby/object:Gem::Requirement
396
+ none: false
397
+ requirements:
398
+ - - ~>
399
+ - !ruby/object:Gem::Version
400
+ hash: 13
401
+ segments:
402
+ - 1
403
+ - 6
404
+ - 1
405
+ version: 1.6.1
406
+ requirement: *id025
407
+ prerelease: false
408
+ name: rest-client
409
+ - !ruby/object:Gem::Dependency
410
+ type: :runtime
411
+ version_requirements: &id026 !ruby/object:Gem::Requirement
412
+ none: false
413
+ requirements:
414
+ - - ~>
415
+ - !ruby/object:Gem::Version
416
+ hash: 15
417
+ segments:
418
+ - 1
419
+ - 4
420
+ - 4
421
+ version: 1.4.4
422
+ requirement: *id026
423
+ prerelease: false
424
+ name: nokogiri
425
+ description: longer description of your gem
426
+ email: richmolj@gmail.com
427
+ executables:
428
+ - city_watch
429
+ extensions: []
430
+
431
+ extra_rdoc_files:
432
+ - README.md
433
+ files:
434
+ - .document
435
+ - .rspec
436
+ - Gemfile
437
+ - Gemfile.lock
438
+ - README.md
439
+ - Rakefile
440
+ - VERSION
441
+ - bin/city_watch
442
+ - city_watch.gemspec
443
+ - lib/city_watch.rb
444
+ - lib/city_watch/build_monitor.rb
445
+ - lib/city_watch/page.rb
446
+ - lib/city_watch/watcher.rb
447
+ - spec/LICENSE.txt
448
+ - spec/city_watch/build_monitor_spec.rb
449
+ - spec/city_watch/page_spec.rb
450
+ - spec/city_watch/watcher_spec.rb
451
+ - spec/fixtures/page.html
452
+ - spec/fixtures/running_builds.xml
453
+ - spec/spec_helper.rb
454
+ has_rdoc: true
455
+ homepage: http://github.com/richmolj/city_watch
456
+ licenses:
457
+ - MIT
458
+ post_install_message:
459
+ rdoc_options: []
460
+
461
+ require_paths:
462
+ - lib
463
+ required_ruby_version: !ruby/object:Gem::Requirement
464
+ none: false
465
+ requirements:
466
+ - - ">="
467
+ - !ruby/object:Gem::Version
468
+ hash: 3
469
+ segments:
470
+ - 0
471
+ version: "0"
472
+ required_rubygems_version: !ruby/object:Gem::Requirement
473
+ none: false
474
+ requirements:
475
+ - - ">="
476
+ - !ruby/object:Gem::Version
477
+ hash: 3
478
+ segments:
479
+ - 0
480
+ version: "0"
481
+ requirements: []
482
+
483
+ rubyforge_project:
484
+ rubygems_version: 1.4.2
485
+ signing_key:
486
+ specification_version: 3
487
+ summary: one-line summary of your gem
488
+ test_files:
489
+ - spec/city_watch/build_monitor_spec.rb
490
+ - spec/city_watch/page_spec.rb
491
+ - spec/city_watch/watcher_spec.rb
492
+ - spec/spec_helper.rb