toadhopper 1.0.6 → 1.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.
data/.gitignore CHANGED
@@ -1,6 +1,5 @@
1
1
  pkg
2
2
  .yardoc
3
3
  doc
4
- toadhopper.gemspec
5
4
  coverage
6
5
  .bundle
data/Gemfile CHANGED
@@ -1,12 +1,4 @@
1
- source :gemcutter
1
+ source :rubygems
2
2
 
3
- group :development do
4
- gem 'yard'
5
- gem 'jeweler'
6
- gem 'rake'
7
- end
8
-
9
- group :test do
10
- gem 'rake'
11
- gem 'test-unit', :require => nil
12
- end
3
+ # Specify your gem's dependencies in toadhopper.gemspec
4
+ gemspec
@@ -1,24 +1,20 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ toadhopper (1.1)
5
+
1
6
  GEM
2
7
  remote: http://rubygems.org/
3
8
  specs:
4
- gemcutter (0.6.1)
5
- git (1.2.5)
6
- jeweler (1.4.0)
7
- gemcutter (>= 0.1.0)
8
- git (>= 1.2.5)
9
- rubyforge (>= 2.0.0)
10
- json_pure (1.4.6)
9
+ fakeweb (1.3.0)
11
10
  rake (0.8.7)
12
- rubyforge (2.0.4)
13
- json_pure (>= 1.1.7)
14
11
  test-unit (2.1.1)
15
- yard (0.6.1)
16
12
 
17
13
  PLATFORMS
18
14
  ruby
19
15
 
20
16
  DEPENDENCIES
21
- jeweler
17
+ fakeweb
22
18
  rake
23
19
  test-unit
24
- yard
20
+ toadhopper!
data/README.md CHANGED
@@ -13,6 +13,20 @@ You can install it via rubygems:
13
13
 
14
14
  gem install toadhopper
15
15
 
16
+ ## Deploy tracking
17
+
18
+ You can use Toadhopper to notify Hoptoad of deployments:
19
+
20
+ Toadhopper('YOURAPIKEY').deploy!
21
+
22
+ The method accepts options to set the environment, SCM revision, etc.
23
+
24
+ There is Capistrano support for deploy tracking. Simply require `toadhopper/capistrano` in your deploy config and set the variable `hoptoad_api_key`:
25
+
26
+ require 'toadhopper/capistrano'
27
+
28
+ set :hoptoad_api_key, 'YOURAPIKEY'
29
+
16
30
  ## Development
17
31
 
18
32
  Install Bundler 0.9.x, then:
@@ -40,4 +54,5 @@ To build the gem:
40
54
  * [Samuel Tesla](http://github.com/stesla)
41
55
  * [Corey Donohoe](http://github.com/atmos)
42
56
  * [Andre Arko](http://github.com/indirect)
43
- * [Loren Segal](http://github.com/lsegal)
57
+ * [Loren Segal](http://github.com/lsegal)
58
+ * [Theo Hultberg](http://github.com/iconara)
data/Rakefile CHANGED
@@ -1,23 +1,11 @@
1
- Bundler.setup(:development, :test)
2
- Bundler.require(:development, :test)
3
-
1
+ require 'bundler/setup'
4
2
  require 'rake/testtask'
5
3
 
4
+ Bundler::GemHelper.install_tasks
5
+
6
+
6
7
  Rake::TestTask.new do |t|
7
8
  t.libs << "test"
8
9
  t.test_files = FileList['test/test*.rb']
9
10
  t.verbose = true
10
11
  end
11
-
12
- Jeweler::Tasks.new do |s|
13
- s.name = "toadhopper"
14
- s.summary = "Post error notifications to Hoptoad"
15
- s.email = "t.lucas@toolmantim.com"
16
- s.homepage = "http://github.com/toolmantim/toadhopper"
17
- s.authors = ["Tim Lucas", "Samuel Tesla", "Corey Donohoe", "Andre Arko"]
18
- s.extra_rdoc_files = ["README.md", "LICENSE"]
19
- s.executables = nil # stops jeweler automatically adding bin/*
20
-
21
- require File.join(File.dirname(__FILE__), 'lib', 'toadhopper')
22
- s.version = Toadhopper::VERSION
23
- end
@@ -4,7 +4,7 @@ require 'ostruct'
4
4
 
5
5
  # Posts errors to the Hoptoad API
6
6
  class Toadhopper
7
- VERSION = "1.0.6"
7
+ VERSION = "1.1"
8
8
  FILTER_REPLACEMENT = "[FILTERED]"
9
9
 
10
10
  # Hoptoad API response
@@ -52,6 +52,26 @@ class Toadhopper
52
52
  post_document(document_for(error, options), {'X-Hoptoad-Client-Name' => options[:notifier_name]})
53
53
  end
54
54
 
55
+ # Posts a deployment notification
56
+ #
57
+ # @param [Hash] options
58
+ # @option options [String] framework_env The framework environment your app is running under, defaults to development
59
+ # @option options [String] scm_repository The repository URL
60
+ # @option options [String] scm_revision The current repository revision
61
+ # @option options [String] username Your name, defaults to `whoami`
62
+ #
63
+ # @return [Response]
64
+ def deploy!(options={})
65
+ params = {}
66
+ params['api_key'] = @api_key
67
+ params['deploy[rails_env]'] = options[:framework_env] || 'development'
68
+ params['deploy[local_username]'] = options[:username] || %x(whoami).strip
69
+ params['deploy[scm_repository]'] = options[:scm_repository]
70
+ params['deploy[scm_revision]'] = options[:scm_revision]
71
+ response = Net::HTTP.post_form(URI.parse('http://hoptoadapp.com/deploys.txt'), params)
72
+ parse_response(response)
73
+ end
74
+
55
75
  private
56
76
 
57
77
  def document_defaults(error)
@@ -92,14 +112,18 @@ class Toadhopper
92
112
  response = http.post uri.path,
93
113
  document,
94
114
  {'Content-type' => 'text/xml', 'Accept' => 'text/xml, application/xml'}.merge(headers)
95
- Response.new response.code.to_i,
96
- response.body,
97
- response.body.scan(%r{<error>(.+)<\/error>}).flatten
115
+ parse_response(response)
98
116
  rescue TimeoutError => e
99
117
  Response.new(500, '', ['Timeout error'])
100
118
  end
101
119
  end
102
120
  end
121
+
122
+ def parse_response(response)
123
+ Response.new(response.code.to_i,
124
+ response.body,
125
+ response.body.scan(%r{<error>(.+)<\/error>}).flatten)
126
+ end
103
127
 
104
128
  def document_for(exception, options={})
105
129
  data = document_data(exception, options)
@@ -0,0 +1,19 @@
1
+ require 'toadhopper'
2
+
3
+
4
+ Capistrano::Configuration.instance(:must_exist).load do
5
+ after 'deploy', 'deploy:notify_hoptoad'
6
+ after 'deploy:migrations', 'deploy:notify_hoptoad'
7
+
8
+ namespace :deploy do
9
+ desc 'Notify Hoptoad of the deployment'
10
+ task :notify_hoptoad, :except => {:no_release => true} do
11
+ framework_env = fetch(:rails_env, fetch(:hoptoad_env, 'production'))
12
+ api_key = fetch(:hoptoad_api_key)
13
+ puts 'Notifying Hoptoad of deploy'
14
+ options = {:framework_env => framework_env, :scm_revision => current_revision, :scm_repository => repository}
15
+ Toadhopper(api_key).deploy!(options)
16
+ puts 'Hoptoad notification complete'
17
+ end
18
+ end
19
+ end
@@ -1,8 +1,9 @@
1
- Bundler.setup(:test)
2
- Bundler.require(:test)
3
-
1
+ require 'bundler/setup'
4
2
  require 'test/unit'
5
- require "toadhopper"
3
+ require 'fakeweb'
4
+ require 'toadhopper'
5
+
6
+ FakeWeb.allow_net_connect = true
6
7
 
7
8
  def toadhopper
8
9
  @toadhopper ||= Toadhopper.new(ENV['HOPTOAD_API_KEY'] || "test api key")
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+ require 'cgi'
3
+ require 'fakeweb'
4
+
5
+ class Toadhopper::TestDeployTracking < Test::Unit::TestCase
6
+ def test_deploy
7
+ FakeWeb.register_uri(:post, 'http://hoptoadapp.com/deploys.txt', :status => ['200', 'Ok'])
8
+ options = {:framework_env => 'test', :scm_revision => 3, :scm_repository => 'some/where', :username => 'phil'}
9
+ response = Toadhopper('bogus key').deploy!(options)
10
+ request = FakeWeb.last_request
11
+ expected_parameters = {'api_key' => 'bogus key', 'deploy[rails_env]' => 'test', 'deploy[scm_revision]' => '3', 'deploy[scm_repository]' => 'some/where', 'deploy[local_username]' => 'phil'}
12
+ assert_equal 200, response.status
13
+ assert_equal expected_parameters, Hash[CGI.unescape(FakeWeb.last_request.body).split('&').map { |x| x.split('=') }]
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ $: << File.expand_path('../lib', __FILE__)
4
+
5
+ require 'toadhopper'
6
+
7
+
8
+ Gem::Specification.new do |s|
9
+ s.name = 'toadhopper'
10
+ s.version = Toadhopper::VERSION
11
+ s.platform = Gem::Platform::RUBY
12
+ s.authors = ['Tim Lucas', 'Samuel Tesla', 'Corey Donohoe', 'Andre Arko', 'Theo Hultberg']
13
+ s.email = ['t.lucas@toolmantim.com']
14
+ s.homepage = 'http://github.com/toolmantim/toadhopper'
15
+ s.summary = %q{Post error notifications to Hoptoad}
16
+ s.description = %q{A base library for Hoptoad error reporting}
17
+
18
+ s.rubyforge_project = 'toadhopper'
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ['lib']
24
+ s.extra_rdoc_files = ['README.md', 'LICENSE']
25
+
26
+ s.add_development_dependency 'rake'
27
+ s.add_development_dependency 'test-unit'
28
+ s.add_development_dependency 'fakeweb'
29
+ end
metadata CHANGED
@@ -4,32 +4,71 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 0
8
- - 6
9
- version: 1.0.6
7
+ - 1
8
+ version: "1.1"
10
9
  platform: ruby
11
10
  authors:
12
11
  - Tim Lucas
13
12
  - Samuel Tesla
14
13
  - Corey Donohoe
15
14
  - Andre Arko
15
+ - Theo Hultberg
16
16
  autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2010-10-24 00:00:00 +11:00
20
+ date: 2011-01-31 00:00:00 +11:00
21
21
  default_executable:
22
- dependencies: []
23
-
24
- description:
25
- email: t.lucas@toolmantim.com
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
24
+ name: rake
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: test-unit
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ segments:
44
+ - 0
45
+ version: "0"
46
+ type: :development
47
+ prerelease: false
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: fakeweb
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 0
58
+ version: "0"
59
+ type: :development
60
+ prerelease: false
61
+ version_requirements: *id003
62
+ description: A base library for Hoptoad error reporting
63
+ email:
64
+ - t.lucas@toolmantim.com
26
65
  executables: []
27
66
 
28
67
  extensions: []
29
68
 
30
69
  extra_rdoc_files:
31
- - LICENSE
32
70
  - README.md
71
+ - LICENSE
33
72
  files:
34
73
  - .gitignore
35
74
  - .yardopts
@@ -40,17 +79,20 @@ files:
40
79
  - Rakefile
41
80
  - lib/notice.erb
42
81
  - lib/toadhopper.rb
82
+ - lib/toadhopper/capistrano.rb
43
83
  - test/helper.rb
44
84
  - test/test_convenience_constructor.rb
85
+ - test/test_deploy_tracking.rb
45
86
  - test/test_filtering.rb
46
87
  - test/test_posting.rb
88
+ - toadhopper.gemspec
47
89
  has_rdoc: true
48
90
  homepage: http://github.com/toolmantim/toadhopper
49
91
  licenses: []
50
92
 
51
93
  post_install_message:
52
- rdoc_options:
53
- - --charset=UTF-8
94
+ rdoc_options: []
95
+
54
96
  require_paths:
55
97
  - lib
56
98
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -58,7 +100,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
100
  requirements:
59
101
  - - ">="
60
102
  - !ruby/object:Gem::Version
61
- hash: 2492547853952482404
103
+ hash: 3677881866856613108
62
104
  segments:
63
105
  - 0
64
106
  version: "0"
@@ -67,12 +109,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
67
109
  requirements:
68
110
  - - ">="
69
111
  - !ruby/object:Gem::Version
112
+ hash: 3677881866856613108
70
113
  segments:
71
114
  - 0
72
115
  version: "0"
73
116
  requirements: []
74
117
 
75
- rubyforge_project:
118
+ rubyforge_project: toadhopper
76
119
  rubygems_version: 1.3.7
77
120
  signing_key:
78
121
  specification_version: 3
@@ -80,5 +123,6 @@ summary: Post error notifications to Hoptoad
80
123
  test_files:
81
124
  - test/helper.rb
82
125
  - test/test_convenience_constructor.rb
126
+ - test/test_deploy_tracking.rb
83
127
  - test/test_filtering.rb
84
128
  - test/test_posting.rb