brocktail 0.0.1 → 0.0.2
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/README +10 -0
- data/brocktail.gemspec +5 -1
- data/lib/brocktail.rb +9 -5
- data/lib/brocktail/act.rb +19 -0
- data/lib/brocktail/api/acts.rb +22 -0
- data/lib/brocktail/api/base.rb +45 -0
- data/lib/brocktail/api/events.rb +10 -0
- data/lib/brocktail/base.rb +22 -0
- data/lib/brocktail/base_model.rb +51 -0
- data/lib/brocktail/behavior/crud.rb +29 -0
- data/lib/brocktail/credentials.rb +23 -0
- data/lib/brocktail/errors.rb +26 -0
- data/lib/brocktail/event.rb +24 -0
- data/lib/brocktail/version.rb +1 -1
- metadata +58 -5
data/README
ADDED
data/brocktail.gemspec
CHANGED
@@ -12,7 +12,11 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.summary = %q{Brocktail is a Ruby wrapper for Blocktail API v1}
|
13
13
|
s.description = %q{Brocktail is a Ruby wrapper for Blocktail API v1}
|
14
14
|
|
15
|
-
s.
|
15
|
+
s.add_dependency "typhoeus"
|
16
|
+
s.add_dependency "crack"
|
17
|
+
s.add_dependency "activesupport"
|
18
|
+
s.add_dependency "i18n"
|
19
|
+
|
16
20
|
|
17
21
|
s.rubyforge_project = "brocktail"
|
18
22
|
|
data/lib/brocktail.rb
CHANGED
@@ -1,13 +1,17 @@
|
|
1
1
|
require 'typhoeus'
|
2
|
-
require 'json'
|
3
2
|
require 'base64'
|
3
|
+
require 'crack'
|
4
|
+
require 'active_support/all'
|
4
5
|
|
5
|
-
require 'brocktail/
|
6
|
-
require 'brocktail/credentials'
|
7
|
-
require 'brocktail/
|
6
|
+
require File.dirname(__FILE__) + '/brocktail/version'
|
7
|
+
require File.dirname(__FILE__) + '/brocktail/credentials'
|
8
|
+
require File.dirname(__FILE__) + '/brocktail/errors'
|
9
|
+
require File.dirname(__FILE__) + '/brocktail/behavior/crud'
|
8
10
|
|
11
|
+
require File.dirname(__FILE__) + '/brocktail/base'
|
9
12
|
|
10
|
-
require
|
13
|
+
%w(base_model event act).each { |f| require File.dirname(__FILE__) + "/brocktail/#{f}" }
|
14
|
+
%w(base events acts).each { |f| require File.dirname(__FILE__) + "/brocktail/api/#{f}" }
|
11
15
|
|
12
16
|
module Brocktail
|
13
17
|
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Brocktail
|
2
|
+
class Act < BaseModel
|
3
|
+
|
4
|
+
api_path "/acts"
|
5
|
+
|
6
|
+
attr_accessor :id, # Integer
|
7
|
+
:event_id, # Integer
|
8
|
+
:item_id, # Integer
|
9
|
+
:venue_id, # Integer
|
10
|
+
:day_number, # Integer
|
11
|
+
:starttime, # Date
|
12
|
+
:duration, # Integer
|
13
|
+
:attendees_count, # Integer
|
14
|
+
:created_at, # DateTime
|
15
|
+
:updated_at, # DateTime
|
16
|
+
:item # Object
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Brocktail
|
2
|
+
module API
|
3
|
+
class Acts < Base
|
4
|
+
api_model Brocktail::Act
|
5
|
+
|
6
|
+
include Brocktail::Behavior::Crud
|
7
|
+
|
8
|
+
attr_reader :event_id
|
9
|
+
|
10
|
+
def initialize(credentials, event_id)
|
11
|
+
@event_id = event_id
|
12
|
+
super(credentials)
|
13
|
+
end
|
14
|
+
|
15
|
+
def all
|
16
|
+
response = request(:get, credentials, "#{Brocktail::Event.api_path}/#{@event_id}/#{api_model.api_path}")
|
17
|
+
api_model.parse(response.body)
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Brocktail
|
2
|
+
module API
|
3
|
+
class Base
|
4
|
+
attr_reader :credentials
|
5
|
+
|
6
|
+
def initialize(credentials)
|
7
|
+
@credentials = credentials
|
8
|
+
end
|
9
|
+
|
10
|
+
class << self
|
11
|
+
def api_model(klass)
|
12
|
+
class_eval <<-END
|
13
|
+
def api_model
|
14
|
+
#{klass}
|
15
|
+
end
|
16
|
+
END
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
protected #-------------------------------------------------------------|
|
22
|
+
|
23
|
+
def request(method, credentials, path, options = {})
|
24
|
+
request = Typhoeus::Request.new("#{credentials.host}#{path}")
|
25
|
+
|
26
|
+
hydra = Typhoeus::Hydra.new
|
27
|
+
hydra.queue(request)
|
28
|
+
hydra.run
|
29
|
+
|
30
|
+
response = request.response
|
31
|
+
|
32
|
+
case response.code
|
33
|
+
when 200..201 then response
|
34
|
+
when 400 then raise Brocktail::BadRequest.new(response)
|
35
|
+
when 404 then raise Brocktail::NotFound.new(response)
|
36
|
+
when 500 then raise Brocktail::ServerError.new(response)
|
37
|
+
when 502 then raise Brocktail::Unavailable.new(response)
|
38
|
+
when 503 then raise Brocktail::RateLimited.new(response)
|
39
|
+
else raise Brocktail::InformBrocktail.new(response)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Brocktail
|
2
|
+
class Base
|
3
|
+
|
4
|
+
attr_reader :request, :credentials
|
5
|
+
|
6
|
+
def initialize(username, password, options = {})
|
7
|
+
options[:ssl] = true if options[:ssl].nil?
|
8
|
+
@credentials = Credentials.new(username, password, options[:ssl])
|
9
|
+
raise InvalidCredentials unless credentials.valid?
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def events
|
14
|
+
@events ||= Brocktail::API::Events.new(credentials)
|
15
|
+
end
|
16
|
+
|
17
|
+
def acts(event_id)
|
18
|
+
@events ||= Brocktail::API::Acts.new(credentials, event_id)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Brocktail
|
2
|
+
class BaseModel
|
3
|
+
|
4
|
+
def initialize(attributes = {})
|
5
|
+
self.attributes = attributes
|
6
|
+
end
|
7
|
+
|
8
|
+
def attributes=(attributes)
|
9
|
+
attributes.each { |k,v| send("#{k}=", v)}
|
10
|
+
end
|
11
|
+
|
12
|
+
def ==(other)
|
13
|
+
id == other.id
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_i
|
17
|
+
id
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_json
|
21
|
+
# TODO
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.parse(json, options = {})
|
25
|
+
options[:resource] ||= self.name.split('::').last.downcase
|
26
|
+
puts options
|
27
|
+
|
28
|
+
if options[:singular]
|
29
|
+
return self.new(Crack::JSON.parse(json)[options[:resource].to_s])
|
30
|
+
else
|
31
|
+
resources = []
|
32
|
+
|
33
|
+
# Rails 3 way: Arrayified objects
|
34
|
+
# [{"object":{...}}, {"object":{...}}, ..., {"object":{...}}]
|
35
|
+
Crack::JSON.parse(json).each { |obj| resources << self.new(obj[options[:resource].to_s]) }
|
36
|
+
|
37
|
+
# Rails old way: Rooted JSON
|
38
|
+
# {"objects":[{...}, {...}, ..., {...}]}
|
39
|
+
# Crack::JSON.parse(json)[options[:resource].to_s.pluralize].each { |attrs| resources << self.new(attrs) }
|
40
|
+
return resources
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class << self
|
45
|
+
def api_path(path = nil)
|
46
|
+
@path ||= path
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Brocktail
|
2
|
+
module Behavior
|
3
|
+
module Crud
|
4
|
+
|
5
|
+
def all
|
6
|
+
response = request(:get, credentials, api_model.api_path)
|
7
|
+
api_model.parse(response.body)
|
8
|
+
end
|
9
|
+
|
10
|
+
def find(id)
|
11
|
+
response = request(:get, credentials, "#{api_model.api_path}/#{id}")
|
12
|
+
api_model.parse(response.body, :singular => true)
|
13
|
+
end
|
14
|
+
|
15
|
+
# def create(model)
|
16
|
+
#
|
17
|
+
# end
|
18
|
+
#
|
19
|
+
# def update(model)
|
20
|
+
#
|
21
|
+
# end
|
22
|
+
#
|
23
|
+
# def delete(model)
|
24
|
+
#
|
25
|
+
# end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Brocktail
|
2
|
+
class Credentials
|
3
|
+
|
4
|
+
attr_accessor :username, :password, :ssl
|
5
|
+
|
6
|
+
def initialize(username, password, ssl = true)
|
7
|
+
@username, @password, @ssl = username, password, ssl
|
8
|
+
end
|
9
|
+
|
10
|
+
def valid?
|
11
|
+
!username.nil? && !password.nil?
|
12
|
+
end
|
13
|
+
|
14
|
+
def basic_auth
|
15
|
+
Base64.encode64("#{username}:#{password}").delete("\r\n")
|
16
|
+
end
|
17
|
+
|
18
|
+
def host
|
19
|
+
"#{ssl ? "https" : "http"}://blocktail.heroku.com/api/v1"
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Brocktail
|
2
|
+
|
3
|
+
class InvalidCredentials < StandardError; end
|
4
|
+
|
5
|
+
class HTTPError < StandardError
|
6
|
+
attr_reader :response
|
7
|
+
|
8
|
+
def initialize(response)
|
9
|
+
@response = response
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_s
|
14
|
+
hint = response.headers["hint"].nil? ? nil : response.headers["hint"].first
|
15
|
+
"#{self.class.to_s} : #{response.code}#{" - #{hint}" if hint}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class RateLimited < HTTPError; end
|
20
|
+
class NotFound < HTTPError; end
|
21
|
+
class Unavailable < HTTPError; end
|
22
|
+
class InformHarvest < HTTPError; end
|
23
|
+
class BadRequest < HTTPError; end
|
24
|
+
class ServerError < HTTPError; end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Brocktail
|
2
|
+
class Event < BaseModel
|
3
|
+
|
4
|
+
api_path "/events"
|
5
|
+
|
6
|
+
attr_accessor :id, # Integer
|
7
|
+
:name, # String
|
8
|
+
:slug, # String
|
9
|
+
:introduction, # Text
|
10
|
+
:description, # Text
|
11
|
+
:startdate, # Date
|
12
|
+
:number_of_days, # Integer
|
13
|
+
:attendees_count, # Integer
|
14
|
+
:acts_count, # Integer
|
15
|
+
:address, # String
|
16
|
+
:zip, # String
|
17
|
+
:locality, # String
|
18
|
+
:state, # String
|
19
|
+
:country, # String
|
20
|
+
:created_at, # DateTime
|
21
|
+
:updated_at # DateTime
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
data/lib/brocktail/version.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brocktail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 2
|
10
|
+
version: 0.0.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Ivan Malijkh
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-02 00:00:00 +02:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -30,8 +30,50 @@ dependencies:
|
|
30
30
|
segments:
|
31
31
|
- 0
|
32
32
|
version: "0"
|
33
|
-
type: :
|
33
|
+
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: crack
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :runtime
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: activesupport
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
type: :runtime
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: i18n
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 0
|
74
|
+
version: "0"
|
75
|
+
type: :runtime
|
76
|
+
version_requirements: *id004
|
35
77
|
description: Brocktail is a Ruby wrapper for Blocktail API v1
|
36
78
|
email:
|
37
79
|
- ivan@lesslines.com
|
@@ -44,9 +86,20 @@ extra_rdoc_files: []
|
|
44
86
|
files:
|
45
87
|
- .gitignore
|
46
88
|
- Gemfile
|
89
|
+
- README
|
47
90
|
- Rakefile
|
48
91
|
- brocktail.gemspec
|
49
92
|
- lib/brocktail.rb
|
93
|
+
- lib/brocktail/act.rb
|
94
|
+
- lib/brocktail/api/acts.rb
|
95
|
+
- lib/brocktail/api/base.rb
|
96
|
+
- lib/brocktail/api/events.rb
|
97
|
+
- lib/brocktail/base.rb
|
98
|
+
- lib/brocktail/base_model.rb
|
99
|
+
- lib/brocktail/behavior/crud.rb
|
100
|
+
- lib/brocktail/credentials.rb
|
101
|
+
- lib/brocktail/errors.rb
|
102
|
+
- lib/brocktail/event.rb
|
50
103
|
- lib/brocktail/version.rb
|
51
104
|
has_rdoc: true
|
52
105
|
homepage: ""
|