spagalloco-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.
Files changed (4) hide show
  1. data/README.textile +13 -0
  2. data/VERSION.yml +4 -0
  3. data/lib/hoptoad-api.rb +122 -0
  4. metadata +56 -0
@@ -0,0 +1,13 @@
1
+ h1. Hoptoad API
2
+
3
+ An unofficial Ruby library for interacting with the "Hoptoad API":http://hoptoadapp.com/pages/api
4
+
5
+ h2. Requirements
6
+
7
+ * ActiveResource
8
+ * ActiveSupport
9
+
10
+ h2. Acknowledgements
11
+
12
+ * "Hoptoad":http://hoptoadapp.com
13
+ * "Lighthouse-api":http://github.com/Caged/lighthouse-api (inspiration for much of this code)
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 1
3
+ :minor: 0
4
+ :patch: 0
@@ -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
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spagalloco-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: 2009-02-26 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: An unofficial gem for interacting with the Hoptoad API
17
+ email: steve.agalloco@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - README.textile
26
+ - VERSION.yml
27
+ - lib/hoptoad-api.rb
28
+ has_rdoc: true
29
+ homepage: http://github.com/spagalloco/hoptoad-api
30
+ post_install_message:
31
+ rdoc_options:
32
+ - --inline-source
33
+ - --charset=UTF-8
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: "0"
41
+ version:
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ version:
48
+ requirements: []
49
+
50
+ rubyforge_project:
51
+ rubygems_version: 1.2.0
52
+ signing_key:
53
+ specification_version: 2
54
+ summary: An unofficial gem for interacting with the Hoptoad API
55
+ test_files: []
56
+