guardian 0.0.1

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
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ .DS_Store
5
+ coverage/
@@ -0,0 +1,15 @@
1
+ infinity_test do
2
+ notifications :growl
3
+
4
+ use :test_framework => :rspec
5
+
6
+ before_run do
7
+ clear :terminal
8
+ end
9
+
10
+ heuristics do
11
+ add('lib/(.+)\.rb') do |file|
12
+ run :all => :tests
13
+ end
14
+ end
15
+ end
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --tty
2
+ --color
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.2@guardian-gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in guardian-gem.gemspec
4
+ gemspec
@@ -0,0 +1,57 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ guardian (0.0.1)
5
+ httparty
6
+ json
7
+ sinatra
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ addressable (2.2.5)
13
+ crack (0.1.8)
14
+ diff-lcs (1.1.2)
15
+ httparty (0.7.7)
16
+ crack (= 0.1.8)
17
+ infinity_test (1.0.2)
18
+ notifiers (>= 1.1.0)
19
+ watchr (>= 0.7)
20
+ json (1.5.1)
21
+ notifiers (1.1.0)
22
+ rack (1.2.2)
23
+ rack-test (0.5.7)
24
+ rack (>= 1.0)
25
+ rspec (2.5.0)
26
+ rspec-core (~> 2.5.0)
27
+ rspec-expectations (~> 2.5.0)
28
+ rspec-mocks (~> 2.5.0)
29
+ rspec-core (2.5.1)
30
+ rspec-expectations (2.5.0)
31
+ diff-lcs (~> 1.1.2)
32
+ rspec-mocks (2.5.0)
33
+ shotgun (0.9)
34
+ rack (>= 1.0)
35
+ simplecov (0.4.1)
36
+ simplecov-html (~> 0.4.3)
37
+ simplecov-html (0.4.3)
38
+ sinatra (1.2.3)
39
+ rack (~> 1.1)
40
+ tilt (< 2.0, >= 1.2.2)
41
+ tilt (1.3)
42
+ watchr (0.7)
43
+ webmock (1.6.2)
44
+ addressable (>= 2.2.2)
45
+ crack (>= 0.1.7)
46
+
47
+ PLATFORMS
48
+ ruby
49
+
50
+ DEPENDENCIES
51
+ guardian!
52
+ infinity_test
53
+ rack-test
54
+ rspec
55
+ shotgun
56
+ simplecov
57
+ webmock
@@ -0,0 +1,9 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require 'rspec/core'
5
+ require 'rspec/core/rake_task'
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = FileList['spec/**/*_spec.rb']
8
+ end
9
+
@@ -0,0 +1,32 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "guardian/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "guardian"
7
+ s.version = Guardian::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Adam Hawkins"]
10
+ s.email = ["adam@guardianapp.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{Ruby library for interacting with the Guardian webservice.}
13
+ s.description = %q{Notify, retreive systems, and misc information from the webservice.}
14
+
15
+ s.rubyforge_project = "guardian-gem"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency 'json'
23
+ s.add_dependency 'httparty'
24
+ s.add_dependency 'sinatra'
25
+
26
+ s.add_development_dependency 'rspec'
27
+ s.add_development_dependency 'webmock'
28
+ s.add_development_dependency 'infinity_test'
29
+ s.add_development_dependency 'simplecov'
30
+ s.add_development_dependency 'shotgun'
31
+ s.add_development_dependency 'rack-test'
32
+ end
@@ -0,0 +1,29 @@
1
+ require 'httparty'
2
+
3
+ module Guardian
4
+ include HTTParty
5
+
6
+ API_URL = 'http://guardianapp.heroku.com'.freeze
7
+
8
+ base_uri API_URL
9
+ format :json
10
+
11
+ autoload :Notifier, 'guardian/notifier'
12
+ autoload :StatusPage, 'guardian/status_page'
13
+
14
+ class << self
15
+ def account_id=(val)
16
+ @account_id = val
17
+ end
18
+
19
+ def account_id
20
+ @account_id
21
+ end
22
+
23
+ def systems
24
+ raise RuntimeError, "Guardian is not configured! Set the account_id first." unless account_id
25
+
26
+ get("/accounts/#{account_id}/systems").parsed_response
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,54 @@
1
+ module Guardian
2
+ require 'net/http'
3
+ require 'json'
4
+ require 'uri'
5
+
6
+ class Notifier
7
+
8
+ def self.notify system_id, attributes
9
+ assert_valid_keys! attributes, :online, :description, :data
10
+
11
+ unless attributes.has_key? :online
12
+ raise ArgumentError, ":online missing! Must specify :online as a boolean."
13
+ end
14
+
15
+ if !attributes.has_key?(:description) && attributes[:online] == false
16
+ raise ArgumentError, ":description missing! Must specify description when offline"
17
+ end
18
+
19
+ uri = URI.parse "#{Guardian::API_URL}/systems/#{system_id}/updates"
20
+ params = {:update => attributes, :account_id => Guardian.account_id}
21
+
22
+ request = Net::HTTP::Post.new(uri.path)
23
+ request.content_type = 'application/json'
24
+ request.body = params.to_json
25
+
26
+ response = Net::HTTP.new(uri.host, uri.port).start {|http| http.request(request) }
27
+
28
+ if response.is_a?(Net::HTTPUnauthorized)
29
+ raise RuntimeError, "Request unauthorized! You must specify correct account and system tokens"
30
+ end
31
+
32
+ unless response.is_a?(Net::HTTPCreated)
33
+ raise RuntimeError, "Guardian did something unexpected!\n #{response.body}"
34
+ end
35
+
36
+ true
37
+ end
38
+
39
+ def self.online(system_id, description = nil, data = nil)
40
+ notify system_id, :online => true, :description => description, :data => data
41
+ end
42
+
43
+ def self.offline(system_id, description, data = nil)
44
+ notify system_id, :online => false, :description => description, :data => data
45
+ end
46
+
47
+ private
48
+ # File activesupport/lib/active_support/core_ext/hash/keys.rb, line 41
49
+ def self.assert_valid_keys!(hash, *valid_keys)
50
+ unknown_keys = hash.keys - [valid_keys].flatten
51
+ raise(ArgumentError, "Unknown key(s): #{unknown_keys.join(", ")}") unless unknown_keys.empty?
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,45 @@
1
+ require 'sinatra/base'
2
+ require 'erb'
3
+ require 'guardian'
4
+ require 'guardian/version'
5
+
6
+ module Guardian
7
+ class StatusPage < Sinatra::Base
8
+ dir = File.dirname File.expand_path(__FILE__)
9
+
10
+ set :views, "#{dir}/status_page/views"
11
+ set :public, "#{dir}/status_page/public"
12
+
13
+ helpers do
14
+ include Rack::Utils
15
+ alias_method :h, :escape_html
16
+
17
+ def system_state(system)
18
+ if system['online']
19
+ :online
20
+ elsif system['data_reported'] == false
21
+ :no_data
22
+ else
23
+ :offline
24
+ end
25
+ end
26
+
27
+ def system_status(system)
28
+ case system_state(system)
29
+ when :online
30
+ 'Online'
31
+ when :offline
32
+ 'Offline'
33
+ when :no_data
34
+ 'No Data Reported'
35
+ end
36
+ end
37
+ end
38
+
39
+ get '/' do
40
+ @systems = Guardian.systems.map {|h| h['system']}
41
+
42
+ erb :index
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,76 @@
1
+ html {
2
+ background-color: #777;
3
+ }
4
+
5
+ body {
6
+ color: #868686;
7
+ font: 14px/18px "Helvetica Neue", Helvetica, Arial, sans-serif;
8
+ }
9
+
10
+ #container {
11
+ width: 500px;
12
+ margin: 36px auto;
13
+ background-color: #fff;
14
+ padding: 10px 0;
15
+ }
16
+
17
+ h2 {
18
+ background: #EEE;
19
+ padding: 9px 15px;
20
+ font-size: 16px;
21
+ color: #333;
22
+ }
23
+
24
+ #systems {
25
+ margin: 20px 0;
26
+ }
27
+
28
+ li.system {
29
+ margin: 15px 0
30
+ }
31
+
32
+ li.system p {
33
+ padding: 4px 15px;
34
+ }
35
+
36
+ .status {
37
+ font-weight: bold;
38
+ }
39
+
40
+ .offline .text, td.offline {
41
+ color: #bc0404;
42
+ text-transform: uppercase;
43
+ }
44
+
45
+ .no_data .text, td.no_data {
46
+ color: #bc0404;
47
+ text-transform: uppercase;
48
+ }
49
+
50
+ .online .text, td.online {
51
+ color: #199734;
52
+ text-transform: uppercase;
53
+ }
54
+
55
+ a {
56
+ color: #235985;
57
+ text-decoration: none;
58
+ }
59
+
60
+ h2.small {
61
+ font-size: 14px;
62
+ }
63
+
64
+ p.small {
65
+ font-size: 12px;
66
+ padding: 9px 15px;
67
+ }
68
+
69
+ table {
70
+ width: 100%
71
+ }
72
+
73
+ td,th {
74
+ padding: 9px 15px;
75
+ border-bottom: 1px solid #EEE;
76
+ }
@@ -0,0 +1,65 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5
+ <title>Application Status</title>
6
+ <link rel='stylesheet' href='http://yui.yahooapis.com/3.3.0/build/cssreset/reset-min.css' type='text/css' media="screen, projection">
7
+ <link rel='stylesheet' href='style.css' type='text/css' media="screen, projection">
8
+ </head>
9
+ <body>
10
+ <div id="container">
11
+ <h2 class="small">About This Page</h2>
12
+ <p class="small">
13
+ This page is automatically generated by <a href="#">Guardian</a>.
14
+ Guardian is a tool to help you monitor and manage your applications.
15
+ It works with any application. You can try it free of charge.
16
+ </p>
17
+ <p class="small">Running Guardian v<%= Guardian::VERSION %></p>
18
+
19
+ <h2>Status</h2>
20
+ <table>
21
+ <thead>
22
+ <tr>
23
+ <th>System</th>
24
+ <th>Status</th>
25
+ </tr>
26
+ </thead>
27
+ <tbody>
28
+ <% @systems.each do |system| %>
29
+ <tr>
30
+ <td><%=h system['name'] %></td>
31
+ <td class="status <%= system_state(system) %>">
32
+ <%= system_status(system) %>
33
+ </td>
34
+ </tr>
35
+ <% end %>
36
+ </tbody>
37
+ </table>
38
+
39
+ <ul id="systems">
40
+ <% @systems.each do |system| %>
41
+ <li class="system">
42
+ <h2><%=h system['name'] %></h2>
43
+ <% if system_state(system) == :online %>
44
+ <p class='online status'>
45
+ <% if system['running_message'] %>
46
+ <span class='text'>Online:</span>
47
+ <%= h(system['running_message']) %>
48
+ <% else %>
49
+ <span class='text'>Online</span>
50
+ <% end %>
51
+ </p>
52
+ <% elsif system_state(system) == :no_data %>
53
+ <p class='no_data status'><span class='text'>No Data Reported</span></p>
54
+ <% elsif system_state(system) == :offline %>
55
+ <p class='offline status'><span class='text'>Offline:</span> <%=h system['failure_message'] %></p>
56
+ <% end %>
57
+
58
+ <p><%=h system['description'] %></p>
59
+ <p>Last Test: <%=h system['updated_at'].strftime('%Y-%m-%d %H:%I %Z') %></p>
60
+ </li>
61
+ <% end %>
62
+ </ul>
63
+ </div>
64
+ </body>
65
+ <html>
@@ -0,0 +1,3 @@
1
+ module Guardian
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,76 @@
1
+ # Guardian
2
+
3
+ This is the Guardian ruby gem. It's designed to be used inside your
4
+ application to do various things. It's also used to create the status
5
+ webpage for your application. The gem is easy to use and you should be
6
+ able to interact with most of your Guardian data through it.
7
+
8
+ ## Configuration
9
+
10
+ Configuration is exteremly easy. You need one thing in the beginning.
11
+ Your `account_id` is required for all requests. You need the `system_id`
12
+ for each system you intend to work with through the API. Here's how you
13
+ set the `account_id`
14
+
15
+ Guardian.account_id = 'your-account-id-here'
16
+
17
+ You'll need the `system_id` later depending on what code you want to
18
+ use.
19
+
20
+ ## Notifying
21
+
22
+ This one of the primary features. You should use it to inside your
23
+ application to report system status back to guardian. There are two
24
+ different types of notifications: 'online' and 'offline'. Creating an
25
+ offline update will send notifications to everyone who's configured
26
+ them. It will also update the system status on your site's dasboard.
27
+ Sending an 'online' update will switch the status to online if it is
28
+ offline. It will remain online if it was online previously. All updates
29
+ are stored so you can review them later. You'll need the `system_id` to
30
+ send any updates. Make sure the guardian gem is configured before use.
31
+
32
+ There are there general methods:
33
+
34
+ Guardian::Notifier.notify(system_id, attributes)
35
+ Guardian::Notifier.online(system_id, attributes = {})
36
+ Guardian::Notifier.offline(system_id, description, data = {})
37
+
38
+ The `online` and `offline` methods are wrappers around the `notify`
39
+ method. Attributes uses two keys: `:description` and `:data`.
40
+ `:description` is required if are creating an offline update. You can
41
+ send anything you want in `:data` as long as it can be represented in
42
+ JSON. It will be serialized so you an retreive it later.
43
+
44
+ Here are some examples:
45
+
46
+ require 'guardian'
47
+ require 'guardian/notifier'
48
+
49
+ Guardian::Notifier.account_id = 'your-account-id'
50
+
51
+ Guardian::Notifier.notify 'your-system-id', online, :description => "GOLIATH ONLINE!"
52
+ Guardian::Notifier.notify 'your-system-id', offline, :description => "FFFFFFUUUU", :data => hash_of_useful_context_data
53
+
54
+ Guardian::Notifier.online 'your-system-id'
55
+ Guardian::Notifier.online 'your-system-id', "GOLIATH ONLINE"
56
+ Guardian::Notifier.online 'your-system-id', "GOLIATH ONLINE", context_information
57
+
58
+ Guardian::Notifier.offline 'your-system-id', "GOLIATH FAILED"
59
+ Guardian::Notifier.offline 'your-system-id', "GOLIATH FAILED", hash_of_context_data
60
+
61
+ ## Displaying a Status Page
62
+
63
+ The secondary purpose to create a dashboard for you. It will display the
64
+ status of all your systems. All you need is your `account_id` to start
65
+ the server. It is a single page application written in Sinatra. That
66
+ means it will run on any rack based server. Here is an example
67
+ `config.ru`:
68
+
69
+ require "rubygems"
70
+ require "bundler/setup"
71
+
72
+ require 'guardian'
73
+
74
+ Guardian.account_id = 'your-account-id-here'
75
+
76
+ run Guardian::StatusPage
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ describe Guardian do
4
+ def api_url(string)
5
+ "#{Guardian::API_URL}/#{string}"
6
+ end
7
+
8
+ subject do
9
+ Guardian.account_id = 'fake-account-token'
10
+ Guardian
11
+ end
12
+
13
+ let(:account_id) { 'fake-account-token' }
14
+
15
+ it { should respond_to(:account_id=, :account_id) }
16
+
17
+ describe 'Getting all the systems' do
18
+ let(:systems) { ['fake-systems'] }
19
+
20
+ it "should raise an error if it's not configured" do
21
+ subject.account_id = nil
22
+ lambda { subject.systems }.should raise_error(RuntimeError, /configured/)
23
+ end
24
+
25
+ it "should delegate to httparty to find the systems" do
26
+ mock_response = mock HTTParty::Response
27
+
28
+ subject.should_receive(:get).with("/accounts/#{account_id}/systems").
29
+ and_return(mock_response)
30
+
31
+ mock_response.should_receive(:parsed_response).and_return(systems)
32
+
33
+ subject.systems.should eql(systems)
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,86 @@
1
+ require 'spec_helper'
2
+
3
+ describe Guardian::Notifier do
4
+ def api_url(string)
5
+ "#{Guardian::API_URL}/#{string}"
6
+ end
7
+
8
+ before(:each) do
9
+ Guardian.account_id = 'fake-account-token'
10
+ end
11
+
12
+ subject { Guardian::Notifier }
13
+
14
+ let(:system_id) { 'fake-system-token' }
15
+ let(:account_id) { 'fake-account-token' }
16
+ let(:json) do
17
+ {
18
+ :update => {
19
+ :description => 'desc',
20
+ :data => 'context-info',
21
+ :online => true
22
+ },
23
+ :account_id => account_id
24
+ }.to_json
25
+ end
26
+
27
+ it "should use the guardian api to create an update" do
28
+ stub_request(:post, api_url("systems/#{system_id}/updates")).
29
+ with(:body => json, :content_type => 'application/json').
30
+ to_return(:status => 201)
31
+
32
+ attributes = {
33
+ :description => 'desc',
34
+ :data => 'context-info',
35
+ :online => true
36
+ }
37
+
38
+ Guardian::Notifier.notify(system_id, attributes).should be_true
39
+ end
40
+
41
+ it "should raise an error if the tokens are in correct" do
42
+ stub_request(:post, api_url("systems/#{system_id}/updates")).
43
+ to_return(:status => 401)
44
+
45
+ lambda { Guardian::Notifier.notify(system_id, :online => true) }.
46
+ should raise_error(RuntimeError, /authorized/)
47
+ end
48
+
49
+ it "should raise an error if it's anything other than 201" do
50
+ stub_request(:post, api_url("systems/#{system_id}/updates")).
51
+ to_return(:status => 500)
52
+
53
+ lambda { Guardian::Notifier.notify(system_id, :online => true) }.
54
+ should raise_error(RuntimeError, /unexpected/)
55
+ end
56
+
57
+ it "should raise an error if it's offline and there is no description" do
58
+ lambda { Guardian::Notifier.notify(system_id, :online => false) }.
59
+ should raise_error(ArgumentError, /missing/)
60
+ end
61
+
62
+ it "should raise an error if it's offline is missing" do
63
+ lambda { Guardian::Notifier.notify(system_id, {}) }.
64
+ should raise_error(ArgumentError, /:online missing/)
65
+ end
66
+
67
+ it "should raise an error if there are invalid keys" do
68
+ lambda { Guardian::Notifier.notify(system_id, :unknown_key => 'lolwut') }.
69
+ should raise_error(ArgumentError, /Unknown key/)
70
+ end
71
+
72
+ it "should have a shortcut for taking a system online" do
73
+ attributes = {:data => 'data', :online => true, :description => 'desc'}
74
+ Guardian::Notifier.should_receive(:notify).with(system_id, attributes).and_return(true)
75
+
76
+ Guardian::Notifier.online(system_id, 'desc', 'data')
77
+ end
78
+
79
+ it "should have a shortcut for taking a system offline" do
80
+ attributes = {:description => 'description', :data => 'data', :online => false}
81
+
82
+ Guardian::Notifier.should_receive(:notify).with(system_id, attributes).and_return(true)
83
+
84
+ Guardian::Notifier.offline(system_id, 'description', 'data')
85
+ end
86
+ end
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ describe Guardian::StatusPage, :type => :rack do
4
+ def app
5
+ Guardian::StatusPage
6
+ end
7
+
8
+ let(:online_system) do
9
+ {
10
+ 'name' => 'System 1',
11
+ 'description' => 'fake description',
12
+ 'online' => true,
13
+ 'data_reported' => true,
14
+ 'updated_at' => Time.now,
15
+ 'running_message' => 'GOLIATH ONLINE',
16
+ }
17
+ end
18
+
19
+ let(:offline_system) do
20
+ {
21
+ 'name' => 'System 2',
22
+ 'description' => 'fake description',
23
+ 'online' => false,
24
+ 'data_reported' => true,
25
+ 'updated_at' => Time.now,
26
+ 'failure_message' => 'fake-status-update',
27
+ }
28
+ end
29
+
30
+ let(:not_updated_system) do
31
+ {
32
+ 'name' => 'System 3',
33
+ 'description' => 'fake description',
34
+ 'online' => false,
35
+ 'data_reported' => false,
36
+ 'updated_at' => Time.now,
37
+ }
38
+ end
39
+
40
+ let(:systems) { [
41
+ {'system' => online_system},
42
+ {'system' => offline_system},
43
+ {'system' => not_updated_system}
44
+ ] }
45
+
46
+ it "should show the names of all the systems" do
47
+ Guardian.stub!(:systems).and_return(systems)
48
+
49
+ get '/'
50
+
51
+ last_response.body.should include(online_system['name'])
52
+ last_response.body.should include(offline_system['name'])
53
+ end
54
+
55
+ it "should show the status of all the sytems" do
56
+ Guardian.stub!(:systems).and_return(systems)
57
+
58
+ get '/'
59
+ last_response.body.should include('online')
60
+ last_response.body.should include('offline')
61
+ end
62
+
63
+ it "should show the descriptions of all the sytems" do
64
+ Guardian.stub!(:systems).and_return(systems)
65
+
66
+ get '/'
67
+ last_response.body.should include(online_system['description'])
68
+ last_response.body.should include(offline_system['description'])
69
+ end
70
+
71
+
72
+ it "should show the up message for an online system" do
73
+ Guardian.stub!(:systems).and_return(systems)
74
+
75
+ get '/'
76
+
77
+ last_response.body.should include(online_system['running_message'])
78
+ end
79
+
80
+ it "should show the failure message for offline systems" do
81
+ Guardian.stub!(:systems).and_return(systems)
82
+
83
+ get '/'
84
+
85
+ last_response.body.should include(offline_system['failure_message'])
86
+ end
87
+
88
+ it "should show systems that don't have any data" do
89
+ Guardian.stub!(:systems).and_return(systems)
90
+
91
+ get '/'
92
+
93
+ last_response.body.should include('No Data Reported')
94
+ end
95
+ end
@@ -0,0 +1,14 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
5
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
6
+ require 'rspec'
7
+ require 'guardian'
8
+
9
+ # Requires supporting files with custom matchers and macros, etc,
10
+ # in ./support/ and its subdirectories.
11
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
12
+
13
+ RSpec.configure do |config|
14
+ end
@@ -0,0 +1,6 @@
1
+ require 'rack/test'
2
+
3
+ RSpec.configure do |conf|
4
+ conf.include Rack::Test::Methods, :type => :rack
5
+ end
6
+
@@ -0,0 +1,3 @@
1
+ require 'webmock/rspec'
2
+
3
+ WebMock.disable_net_connect!
metadata ADDED
@@ -0,0 +1,180 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: guardian
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Adam Hawkins
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-04-29 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: json
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: httparty
29
+ prerelease: false
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: "0"
36
+ type: :runtime
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: sinatra
40
+ prerelease: false
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: rspec
51
+ prerelease: false
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :development
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: webmock
62
+ prerelease: false
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ type: :development
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: infinity_test
73
+ prerelease: false
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: "0"
80
+ type: :development
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: simplecov
84
+ prerelease: false
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ type: :development
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
94
+ name: shotgun
95
+ prerelease: false
96
+ requirement: &id008 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ version: "0"
102
+ type: :development
103
+ version_requirements: *id008
104
+ - !ruby/object:Gem::Dependency
105
+ name: rack-test
106
+ prerelease: false
107
+ requirement: &id009 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: "0"
113
+ type: :development
114
+ version_requirements: *id009
115
+ description: Notify, retreive systems, and misc information from the webservice.
116
+ email:
117
+ - adam@guardianapp.com
118
+ executables: []
119
+
120
+ extensions: []
121
+
122
+ extra_rdoc_files: []
123
+
124
+ files:
125
+ - .gitignore
126
+ - .infinity_test
127
+ - .rspec
128
+ - .rvmrc
129
+ - Gemfile
130
+ - Gemfile.lock
131
+ - Rakefile
132
+ - guardian.gemspec
133
+ - lib/guardian.rb
134
+ - lib/guardian/notifier.rb
135
+ - lib/guardian/status_page.rb
136
+ - lib/guardian/status_page/public/style.css
137
+ - lib/guardian/status_page/views/index.erb
138
+ - lib/guardian/version.rb
139
+ - readme.md
140
+ - spec/guardian_spec.rb
141
+ - spec/lib/notifier_spec.rb
142
+ - spec/lib/status_page_spec.rb
143
+ - spec/spec_helper.rb
144
+ - spec/support/server.rb
145
+ - spec/support/webmock.rb
146
+ has_rdoc: true
147
+ homepage: ""
148
+ licenses: []
149
+
150
+ post_install_message:
151
+ rdoc_options: []
152
+
153
+ require_paths:
154
+ - lib
155
+ required_ruby_version: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: "0"
161
+ required_rubygems_version: !ruby/object:Gem::Requirement
162
+ none: false
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: "0"
167
+ requirements: []
168
+
169
+ rubyforge_project: guardian-gem
170
+ rubygems_version: 1.6.1
171
+ signing_key:
172
+ specification_version: 3
173
+ summary: Ruby library for interacting with the Guardian webservice.
174
+ test_files:
175
+ - spec/guardian_spec.rb
176
+ - spec/lib/notifier_spec.rb
177
+ - spec/lib/status_page_spec.rb
178
+ - spec/spec_helper.rb
179
+ - spec/support/server.rb
180
+ - spec/support/webmock.rb