hoptoad-api 1.0.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.
- data/.gitignore +5 -0
- data/README.textile +30 -0
- data/Rakefile +18 -0
- data/VERSION.yml +4 -0
- data/hoptoad-api.gemspec +52 -0
- data/lib/hoptoad-api.rb +122 -0
- data/test/hoptoad-api.rb +29 -0
- metadata +80 -0
data/README.textile
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
h1. Hoptoad API
|
2
|
+
|
3
|
+
An unofficial Ruby library for interacting with the "Hoptoad API":http://hoptoadapp.com/pages/api
|
4
|
+
|
5
|
+
h2. Usage
|
6
|
+
|
7
|
+
<pre>
|
8
|
+
<code>
|
9
|
+
Hoptoad.account = 'myaccount'
|
10
|
+
Hoptoad.token = 'abcdeghijklmnopqrstuvwxyz'
|
11
|
+
|
12
|
+
# find an individual error:
|
13
|
+
Hoptoad::Error.find(12345)
|
14
|
+
|
15
|
+
# or get a list of errors using:
|
16
|
+
Hoptoad::Error.find(:all)
|
17
|
+
Hoptoad::Error.find(:all, :params => { :page => 2 })
|
18
|
+
</code>
|
19
|
+
</pre>
|
20
|
+
|
21
|
+
|
22
|
+
h2. Requirements
|
23
|
+
|
24
|
+
* ActiveResource
|
25
|
+
* ActiveSupport
|
26
|
+
|
27
|
+
h2. Acknowledgements
|
28
|
+
|
29
|
+
* "Hoptoad":http://hoptoadapp.com
|
30
|
+
* "Lighthouse-api":http://github.com/Caged/lighthouse-api (inspiration for much of this code)
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'rake'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'jeweler'
|
5
|
+
Jeweler::Tasks.new do |s|
|
6
|
+
s.name = "hoptoad-api"
|
7
|
+
s.summary = %Q{An unofficial gem for interacting with the Hoptoad API}
|
8
|
+
s.email = "steve.agalloco@gmail.com"
|
9
|
+
s.homepage = "http://github.com/spagalloco/hoptoad-api"
|
10
|
+
s.description = "An unofficial gem for interacting with the Hoptoad API"
|
11
|
+
s.authors = ["Steve Agalloco"]
|
12
|
+
s.add_dependency(%q<activesupport>, [">= 2.1.0"])
|
13
|
+
s.add_dependency(%q<activeresource>, [">= 2.1.0"])
|
14
|
+
end
|
15
|
+
Jeweler::GemcutterTasks.new
|
16
|
+
rescue LoadError
|
17
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
18
|
+
end
|
data/VERSION.yml
ADDED
data/hoptoad-api.gemspec
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{hoptoad-api}
|
8
|
+
s.version = "1.0.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Steve Agalloco"]
|
12
|
+
s.date = %q{2010-04-24}
|
13
|
+
s.description = %q{An unofficial gem for interacting with the Hoptoad API}
|
14
|
+
s.email = %q{steve.agalloco@gmail.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"README.textile"
|
17
|
+
]
|
18
|
+
s.files = [
|
19
|
+
".gitignore",
|
20
|
+
"README.textile",
|
21
|
+
"Rakefile",
|
22
|
+
"VERSION.yml",
|
23
|
+
"hoptoad-api.gemspec",
|
24
|
+
"lib/hoptoad-api.rb",
|
25
|
+
"test/hoptoad-api.rb"
|
26
|
+
]
|
27
|
+
s.homepage = %q{http://github.com/spagalloco/hoptoad-api}
|
28
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
29
|
+
s.require_paths = ["lib"]
|
30
|
+
s.rubygems_version = %q{1.3.5}
|
31
|
+
s.summary = %q{An unofficial gem for interacting with the Hoptoad API}
|
32
|
+
s.test_files = [
|
33
|
+
"test/hoptoad-api.rb"
|
34
|
+
]
|
35
|
+
|
36
|
+
if s.respond_to? :specification_version then
|
37
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
38
|
+
s.specification_version = 3
|
39
|
+
|
40
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
41
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 2.1.0"])
|
42
|
+
s.add_runtime_dependency(%q<activeresource>, [">= 2.1.0"])
|
43
|
+
else
|
44
|
+
s.add_dependency(%q<activesupport>, [">= 2.1.0"])
|
45
|
+
s.add_dependency(%q<activeresource>, [">= 2.1.0"])
|
46
|
+
end
|
47
|
+
else
|
48
|
+
s.add_dependency(%q<activesupport>, [">= 2.1.0"])
|
49
|
+
s.add_dependency(%q<activeresource>, [">= 2.1.0"])
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
data/lib/hoptoad-api.rb
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'uri'
|
5
|
+
require 'addressable/uri'
|
6
|
+
|
7
|
+
module URI
|
8
|
+
def decode(*args)
|
9
|
+
Addressable::URI.decode(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
def escape(*args)
|
13
|
+
Addressable::URI.escape(*args)
|
14
|
+
end
|
15
|
+
|
16
|
+
def parse(*args)
|
17
|
+
Addressable::URI.parse(*args)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
rescue LoadError
|
21
|
+
puts "Install the Addressable gem to support accounts with subdomains."
|
22
|
+
puts "# sudo gem install addressable"
|
23
|
+
puts
|
24
|
+
end
|
25
|
+
|
26
|
+
require 'activesupport'
|
27
|
+
require 'activeresource'
|
28
|
+
|
29
|
+
# Ruby lib for working with the Hoptoad API's XML interface.
|
30
|
+
# The first thing you need to set is the account name. This is the same
|
31
|
+
# as the web address for your account.
|
32
|
+
#
|
33
|
+
# Hoptoad.account = 'myaccount'
|
34
|
+
#
|
35
|
+
# Then, you should set the authentication token.
|
36
|
+
#
|
37
|
+
# Hoptoad.token = 'abcdefg'
|
38
|
+
#
|
39
|
+
# If no token or authentication info is given, a HoptoadError exception will be raised.
|
40
|
+
#
|
41
|
+
# For more details, check out the hoptoad docs at http://hoptoadapp.com/pages/api.
|
42
|
+
#
|
43
|
+
module Hoptoad
|
44
|
+
class HoptoadError < StandardError; end
|
45
|
+
class << self
|
46
|
+
attr_accessor :host_format, :domain_format, :protocol, :port
|
47
|
+
attr_reader :account, :token
|
48
|
+
|
49
|
+
# Sets the account name, and updates all the resources with the new domain.
|
50
|
+
def account=(name)
|
51
|
+
resources.each do |klass|
|
52
|
+
klass.site = klass.site_format % (host_format % [protocol, domain_format % name, ":#{port}"])
|
53
|
+
end
|
54
|
+
@account = name
|
55
|
+
end
|
56
|
+
|
57
|
+
# Sets the API token for all the resources.
|
58
|
+
def token=(value)
|
59
|
+
@token = value
|
60
|
+
end
|
61
|
+
|
62
|
+
def resources
|
63
|
+
@resources ||= []
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
self.host_format = '%s://%s%s'
|
68
|
+
self.domain_format = '%s.hoptoadapp.com'
|
69
|
+
self.protocol = 'http'
|
70
|
+
self.port = ''
|
71
|
+
|
72
|
+
class Base < ActiveResource::Base
|
73
|
+
def self.inherited(base)
|
74
|
+
Hoptoad.resources << base
|
75
|
+
class << base
|
76
|
+
attr_accessor :site_format
|
77
|
+
|
78
|
+
def append_auth_token_to_params(*arguments)
|
79
|
+
opts = arguments.last.is_a?(Hash) ? arguments.pop : {}
|
80
|
+
opts = opts.has_key?(:params) ? opts : opts.merge(:params => {})
|
81
|
+
opts[:params] = opts[:params].merge(:auth_token => Hoptoad.token)
|
82
|
+
arguments << opts
|
83
|
+
arguments
|
84
|
+
end
|
85
|
+
end
|
86
|
+
base.site_format = '%s'
|
87
|
+
super
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# Find errors
|
92
|
+
#
|
93
|
+
# Errors are paginated. You get 25 at a time.
|
94
|
+
# Hoptoad::Error.find(:all)
|
95
|
+
# Hoptoad::Error.find(:all, :params => { :page => 2 })
|
96
|
+
#
|
97
|
+
# find individual error by ID
|
98
|
+
# Hoptoad::Error.find(44)
|
99
|
+
#
|
100
|
+
class Error < Base
|
101
|
+
|
102
|
+
# find using token
|
103
|
+
def self.find(*arguments)
|
104
|
+
raise HoptoadError.new('API Token cannot be nil') if Hoptoad.token.blank?
|
105
|
+
raise HoptoadError.new('Account cannot be nil') if Hoptoad.account.blank?
|
106
|
+
|
107
|
+
arguments = append_auth_token_to_params(*arguments)
|
108
|
+
super(*arguments)
|
109
|
+
end
|
110
|
+
|
111
|
+
# produces the url on hoptoad's site
|
112
|
+
def url
|
113
|
+
path = Error.site.to_s
|
114
|
+
path << collection_path.gsub!(/^\//,'')
|
115
|
+
path.gsub!('.xml','')
|
116
|
+
path << '/'
|
117
|
+
path << self.id.to_s
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
|
122
|
+
end
|
data/test/hoptoad-api.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'rubygems'
|
3
|
+
require 'shoulda'
|
4
|
+
require File.join(File.dirname(__FILE__), "..", "lib", "hoptoad-api")
|
5
|
+
|
6
|
+
class HoptoadTest < Test::Unit::TestCase
|
7
|
+
|
8
|
+
context "given a Hoptoad account & API key" do
|
9
|
+
setup do
|
10
|
+
credentials_path = File.join(ENV['HOME'], ".hoptoad.yml")
|
11
|
+
credentials = YAML::load_file(credentials_path)
|
12
|
+
Hoptoad.account = credentials['account']
|
13
|
+
Hoptoad.token = credentials['token']
|
14
|
+
end
|
15
|
+
|
16
|
+
should "find a page of the 30 most recent errors" do
|
17
|
+
errors = Hoptoad::Error.find(:all)
|
18
|
+
ordered = errors.sort_by(&:most_recent_notice_at).reverse
|
19
|
+
assert_equal ordered, errors
|
20
|
+
assert_equal 30, errors.size
|
21
|
+
end
|
22
|
+
|
23
|
+
should "have correct collection path" do
|
24
|
+
assert_equal "/errors.xml", Hoptoad::Error.collection_path
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hoptoad-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Steve Agalloco
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2010-04-24 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activesupport
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 2.1.0
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activeresource
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.1.0
|
34
|
+
version:
|
35
|
+
description: An unofficial gem for interacting with the Hoptoad API
|
36
|
+
email: steve.agalloco@gmail.com
|
37
|
+
executables: []
|
38
|
+
|
39
|
+
extensions: []
|
40
|
+
|
41
|
+
extra_rdoc_files:
|
42
|
+
- README.textile
|
43
|
+
files:
|
44
|
+
- .gitignore
|
45
|
+
- README.textile
|
46
|
+
- Rakefile
|
47
|
+
- VERSION.yml
|
48
|
+
- hoptoad-api.gemspec
|
49
|
+
- lib/hoptoad-api.rb
|
50
|
+
- test/hoptoad-api.rb
|
51
|
+
has_rdoc: true
|
52
|
+
homepage: http://github.com/spagalloco/hoptoad-api
|
53
|
+
licenses: []
|
54
|
+
|
55
|
+
post_install_message:
|
56
|
+
rdoc_options:
|
57
|
+
- --charset=UTF-8
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
version:
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: "0"
|
71
|
+
version:
|
72
|
+
requirements: []
|
73
|
+
|
74
|
+
rubyforge_project:
|
75
|
+
rubygems_version: 1.3.5
|
76
|
+
signing_key:
|
77
|
+
specification_version: 3
|
78
|
+
summary: An unofficial gem for interacting with the Hoptoad API
|
79
|
+
test_files:
|
80
|
+
- test/hoptoad-api.rb
|