tinder 1.4.1 → 1.4.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/CHANGELOG.txt +4 -0
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/lib/tinder.rb +2 -1
- data/lib/tinder/campfire.rb +1 -1
- data/lib/tinder/connection.rb +64 -46
- data/lib/tinder/middleware.rb +30 -0
- data/lib/tinder/room.rb +14 -12
- data/spec/spec_helper.rb +14 -0
- data/spec/tinder/campfire_spec.rb +12 -9
- data/spec/tinder/connection_spec.rb +11 -8
- data/spec/tinder/room_spec.rb +36 -9
- data/tinder.gemspec +9 -6
- metadata +27 -13
- data/lib/tinder/multipart.rb +0 -63
data/CHANGELOG.txt
CHANGED
data/Rakefile
CHANGED
@@ -9,7 +9,8 @@ begin
|
|
9
9
|
gem.homepage = 'http://github.com/collectiveidea/tinder'
|
10
10
|
gem.rubyforge_project = "tinder"
|
11
11
|
gem.add_dependency "activesupport"
|
12
|
-
gem.add_dependency "
|
12
|
+
gem.add_dependency "faraday", "~> 0.5.1"
|
13
|
+
gem.add_dependency "multipart-post"
|
13
14
|
gem.add_dependency "mime-types"
|
14
15
|
gem.add_dependency "twitter-stream"
|
15
16
|
gem.add_dependency "eventmachine"
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.4.
|
1
|
+
1.4.2
|
data/lib/tinder.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
require 'active_support'
|
2
2
|
require 'active_support/json'
|
3
|
+
require 'mime/types'
|
3
4
|
|
4
5
|
require 'tinder/connection'
|
5
|
-
require 'tinder/multipart'
|
6
6
|
require 'tinder/campfire'
|
7
7
|
require 'tinder/room'
|
8
|
+
require 'tinder/middleware'
|
8
9
|
|
9
10
|
module Tinder
|
10
11
|
class Error < StandardError; end
|
data/lib/tinder/campfire.rb
CHANGED
@@ -45,7 +45,7 @@ module Tinder
|
|
45
45
|
|
46
46
|
# Creates and returns a new Room with the given +name+ and optionally a +topic+
|
47
47
|
def create_room(name, topic = nil)
|
48
|
-
connection.post('/rooms.json',
|
48
|
+
connection.post('/rooms.json', { :room => { :name => name, :topic => topic } })
|
49
49
|
find_room_by_name(name)
|
50
50
|
end
|
51
51
|
|
data/lib/tinder/connection.rb
CHANGED
@@ -1,75 +1,93 @@
|
|
1
|
-
require '
|
2
|
-
require 'active_support/core_ext/hash/indifferent_access'
|
3
|
-
|
4
|
-
# override HTTParty's json parser to return a HashWithIndifferentAccess
|
5
|
-
module HTTParty
|
6
|
-
class Parser
|
7
|
-
protected
|
8
|
-
def json
|
9
|
-
result = Crack::JSON.parse(body)
|
10
|
-
if result.is_a?(Hash)
|
11
|
-
result = HashWithIndifferentAccess.new(result)
|
12
|
-
end
|
13
|
-
result
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
1
|
+
require 'faraday'
|
17
2
|
|
18
3
|
module Tinder
|
19
4
|
class Connection
|
20
5
|
HOST = "campfirenow.com"
|
21
6
|
|
22
7
|
attr_reader :subdomain, :uri, :options
|
23
|
-
|
8
|
+
|
9
|
+
def self.connection
|
10
|
+
@connection ||= Faraday::Connection.new do |conn|
|
11
|
+
conn.use Faraday::Request::ActiveSupportJson
|
12
|
+
conn.adapter Faraday.default_adapter
|
13
|
+
conn.use Tinder::FaradayResponse::RaiseOnAuthenticationFailure
|
14
|
+
conn.use Faraday::Response::ActiveSupportJson
|
15
|
+
conn.use Tinder::FaradayResponse::WithIndifferentAccess
|
16
|
+
|
17
|
+
conn.headers['Content-Type'] = 'application/json'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.raw_connection
|
22
|
+
@raw_connection ||= Faraday::Connection.new do |conn|
|
23
|
+
conn.adapter Faraday.default_adapter
|
24
|
+
conn.use Tinder::FaradayResponse::RaiseOnAuthenticationFailure
|
25
|
+
conn.use Faraday::Response::ActiveSupportJson
|
26
|
+
conn.use Tinder::FaradayResponse::WithIndifferentAccess
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
24
30
|
def initialize(subdomain, options = {})
|
25
31
|
@subdomain = subdomain
|
26
32
|
@options = { :ssl => true, :proxy => ENV['HTTP_PROXY'] }.merge(options)
|
27
33
|
@uri = URI.parse("#{@options[:ssl] ? 'https' : 'http' }://#{subdomain}.#{HOST}")
|
28
34
|
@token = options[:token]
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
35
|
+
|
36
|
+
connection.basic_auth token, 'X'
|
37
|
+
raw_connection.basic_auth token, 'X'
|
38
|
+
end
|
39
|
+
|
40
|
+
def basic_auth_settings
|
41
|
+
{ :username => token, :password => 'X' }
|
42
|
+
end
|
43
|
+
|
44
|
+
def connection
|
45
|
+
@connection ||= begin
|
46
|
+
conn = self.class.connection.dup
|
47
|
+
conn.url_prefix = @uri.to_s
|
48
|
+
conn.proxy options[:proxy]
|
49
|
+
conn
|
41
50
|
end
|
42
|
-
base_uri @uri.to_s
|
43
|
-
basic_auth token, 'X'
|
44
51
|
end
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
52
|
+
|
53
|
+
def raw_connection
|
54
|
+
@raw_connection ||= begin
|
55
|
+
conn = self.class.raw_connection.dup
|
56
|
+
conn.url_prefix = @uri.to_s
|
57
|
+
conn.proxy options[:proxy]
|
58
|
+
conn
|
51
59
|
end
|
52
60
|
end
|
53
|
-
|
61
|
+
|
54
62
|
def token
|
55
63
|
@token ||= begin
|
56
|
-
|
57
|
-
|
64
|
+
connection.basic_auth(options[:username], options[:password])
|
65
|
+
get('/users/me.json')['user']['api_auth_token']
|
58
66
|
end
|
59
67
|
end
|
60
68
|
|
61
|
-
def
|
62
|
-
|
69
|
+
def get(url, *args)
|
70
|
+
response = connection.get(url, *args)
|
71
|
+
response.body
|
72
|
+
end
|
73
|
+
|
74
|
+
def post(url, body = nil, *args)
|
75
|
+
response = connection.post(url, body, *args)
|
76
|
+
response.body
|
63
77
|
end
|
64
78
|
|
65
|
-
def
|
66
|
-
|
79
|
+
def raw_post(url, body = nil, *args)
|
80
|
+
response = raw_connection.post(url, body, *args)
|
67
81
|
end
|
68
|
-
|
82
|
+
|
83
|
+
def put(url, body = nil, *args)
|
84
|
+
response = connection.put(url, body, *args)
|
85
|
+
response.body
|
86
|
+
end
|
87
|
+
|
69
88
|
# Is the connection to campfire using ssl?
|
70
89
|
def ssl?
|
71
90
|
uri.scheme == 'https'
|
72
91
|
end
|
73
|
-
|
74
92
|
end
|
75
93
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Tinder
|
2
|
+
module FaradayResponse
|
3
|
+
class WithIndifferentAccess < ::Faraday::Response::Middleware
|
4
|
+
begin
|
5
|
+
require 'active_support/core_ext/hash/indifferent_access'
|
6
|
+
rescue LoadError, NameError => error
|
7
|
+
self.load_error = error
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.register_on_complete(env)
|
11
|
+
env[:response].on_complete do |response|
|
12
|
+
json = response[:body]
|
13
|
+
if json.is_a?(Hash)
|
14
|
+
response[:body] = ::HashWithIndifferentAccess.new(json)
|
15
|
+
elsif json.is_a?(Array) and json.first.is_a?(Hash)
|
16
|
+
response[:body] = json.map{|item| ::HashWithIndifferentAccess.new(item) }
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class RaiseOnAuthenticationFailure < ::Faraday::Response::Middleware
|
23
|
+
def self.register_on_complete(env)
|
24
|
+
env[:response].on_complete do |response|
|
25
|
+
raise AuthenticationFailed if response[:status] == 401
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/tinder/room.rb
CHANGED
@@ -49,7 +49,7 @@ module Tinder
|
|
49
49
|
end
|
50
50
|
|
51
51
|
def update(attrs)
|
52
|
-
connection.put("/room/#{@id}.json",
|
52
|
+
connection.put("/room/#{@id}.json", {:room => attrs})
|
53
53
|
end
|
54
54
|
|
55
55
|
# Get the current topic
|
@@ -125,7 +125,7 @@ module Tinder
|
|
125
125
|
|
126
126
|
require 'twitter/json_stream'
|
127
127
|
|
128
|
-
auth = connection.
|
128
|
+
auth = connection.basic_auth_settings
|
129
129
|
options = {
|
130
130
|
:host => "streaming.#{Connection::HOST}",
|
131
131
|
:path => room_url_for(:live),
|
@@ -178,11 +178,9 @@ module Tinder
|
|
178
178
|
end
|
179
179
|
end
|
180
180
|
|
181
|
-
def upload(filename)
|
182
|
-
|
183
|
-
|
184
|
-
post(:uploads, :body => params.query)
|
185
|
-
end
|
181
|
+
def upload(file, content_type = nil, filename = nil)
|
182
|
+
content_type ||= MIME::Types.type_for(filename || file)
|
183
|
+
raw_post(:uploads, { :upload => Faraday::UploadIO.new(file, content_type, filename) })
|
186
184
|
end
|
187
185
|
|
188
186
|
# Get the list of latest files for this room
|
@@ -210,15 +208,19 @@ module Tinder
|
|
210
208
|
end
|
211
209
|
|
212
210
|
def send_message(message, type = 'TextMessage')
|
213
|
-
post 'speak',
|
211
|
+
post 'speak', {:message => {:body => message, :type => type}}
|
212
|
+
end
|
213
|
+
|
214
|
+
def get(action)
|
215
|
+
connection.get(room_url_for(action))
|
214
216
|
end
|
215
217
|
|
216
|
-
def
|
217
|
-
connection.
|
218
|
+
def post(action, body = nil)
|
219
|
+
connection.post(room_url_for(action), body)
|
218
220
|
end
|
219
221
|
|
220
|
-
def
|
221
|
-
connection.
|
222
|
+
def raw_post(action, body = nil)
|
223
|
+
connection.raw_post(room_url_for(action), body)
|
222
224
|
end
|
223
225
|
|
224
226
|
def room_url_for(action)
|
data/spec/spec_helper.rb
CHANGED
@@ -10,4 +10,18 @@ FakeWeb.allow_net_connect = false
|
|
10
10
|
|
11
11
|
def fixture(name)
|
12
12
|
File.read(File.dirname(__FILE__) + "/fixtures/#{name}")
|
13
|
+
end
|
14
|
+
|
15
|
+
def stub_connection(object, &block)
|
16
|
+
@stubs ||= Faraday::Adapter::Test::Stubs.new
|
17
|
+
|
18
|
+
object.connection.build do |conn|
|
19
|
+
conn.use Faraday::Request::ActiveSupportJson
|
20
|
+
conn.adapter :test, @stubs
|
21
|
+
conn.use Tinder::FaradayResponse::RaiseOnAuthenticationFailure
|
22
|
+
conn.use Faraday::Response::ActiveSupportJson
|
23
|
+
conn.use Tinder::FaradayResponse::WithIndifferentAccess
|
24
|
+
end
|
25
|
+
|
26
|
+
block.call(@stubs)
|
13
27
|
end
|
@@ -7,8 +7,9 @@ describe Tinder::Campfire do
|
|
7
7
|
|
8
8
|
describe "rooms" do
|
9
9
|
before do
|
10
|
-
|
11
|
-
|
10
|
+
stub_connection(@campfire.connection) do |stub|
|
11
|
+
stub.get('/rooms.json') {[ 200, {}, fixture('rooms.json') ]}
|
12
|
+
end
|
12
13
|
end
|
13
14
|
|
14
15
|
it "should return rooms" do
|
@@ -25,11 +26,12 @@ describe Tinder::Campfire do
|
|
25
26
|
|
26
27
|
describe "users" do
|
27
28
|
before do
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
stub_connection(@campfire.connection) do |stub|
|
30
|
+
stub.get('/rooms.json') {[ 200, {}, fixture('rooms.json') ]}
|
31
|
+
|
32
|
+
[80749, 80751].each do |id|
|
33
|
+
stub.get("/room/#{id}.json") {[ 200, {}, fixture("rooms/room#{id}.json") ]}
|
34
|
+
end
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
@@ -42,8 +44,9 @@ describe Tinder::Campfire do
|
|
42
44
|
|
43
45
|
describe "me" do
|
44
46
|
before do
|
45
|
-
|
46
|
-
|
47
|
+
stub_connection(@campfire.connection) do |stub|
|
48
|
+
stub.get("/users/me.json") {[ 200, {}, fixture('users/me.json') ]}
|
49
|
+
end
|
47
50
|
end
|
48
51
|
|
49
52
|
it "should return the current user's information" do
|
@@ -3,27 +3,30 @@ require 'spec_helper'
|
|
3
3
|
describe Tinder::Connection do
|
4
4
|
describe "authentication" do
|
5
5
|
it "should raise an exception with bad credentials" do
|
6
|
-
|
7
|
-
|
6
|
+
stub_connection(Tinder::Connection) do |stub|
|
7
|
+
stub.get("/rooms.json") {[ 401, {}, "Unauthorized" ]}
|
8
|
+
end
|
9
|
+
|
8
10
|
connection = Tinder::Connection.new('test', :token => 'foo')
|
9
11
|
lambda { connection.get('/rooms.json') }.should raise_error(Tinder::AuthenticationFailed)
|
10
12
|
end
|
11
13
|
|
12
14
|
it "should lookup token when username/password provided" do
|
13
|
-
|
14
|
-
|
15
|
+
stub_connection(Tinder::Connection) do |stub|
|
16
|
+
stub.get("/users/me.json") {[ 200, {}, fixture('users/me.json') ]}
|
17
|
+
end
|
18
|
+
|
15
19
|
connection = Tinder::Connection.new('test', :username => 'user', :password => 'pass')
|
16
20
|
connection.token.should.should == "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
17
21
|
end
|
18
22
|
|
19
23
|
|
20
24
|
it "should use basic auth for credentials" do
|
21
|
-
|
22
|
-
|
25
|
+
stub_connection(Tinder::Connection) do |stub|
|
26
|
+
stub.get("/rooms.json") {[ 200, {}, fixture('rooms.json') ]}
|
27
|
+
end
|
23
28
|
connection = Tinder::Connection.new('test', :token => 'mytoken')
|
24
29
|
lambda { connection.get('/rooms.json') }.should_not raise_error
|
25
30
|
end
|
26
31
|
end
|
27
|
-
|
28
|
-
|
29
32
|
end
|
data/spec/tinder/room_spec.rb
CHANGED
@@ -2,9 +2,13 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Tinder::Room do
|
4
4
|
before do
|
5
|
-
|
6
|
-
|
7
|
-
@
|
5
|
+
@connection = Tinder::Connection.new('test', :token => 'mytoken')
|
6
|
+
|
7
|
+
stub_connection(@connection) do |stub|
|
8
|
+
stub.get('/room/80749.json') {[ 200, {}, fixture('rooms/show.json') ]}
|
9
|
+
end
|
10
|
+
|
11
|
+
@room = Tinder::Room.new(@connection, 'id' => 80749)
|
8
12
|
|
9
13
|
# Get EventMachine out of the way. We could be using em-spec, but seems like overkill
|
10
14
|
require 'twitter/json_stream'
|
@@ -15,7 +19,12 @@ describe Tinder::Room do
|
|
15
19
|
end
|
16
20
|
|
17
21
|
describe "join" do
|
18
|
-
|
22
|
+
before do
|
23
|
+
stub_connection(@connection) do |stub|
|
24
|
+
stub.post('/room/80749/join.json') {[ 200, {}, "" ]}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
19
28
|
|
20
29
|
it "should post to join url" do
|
21
30
|
@room.join
|
@@ -24,7 +33,9 @@ describe Tinder::Room do
|
|
24
33
|
|
25
34
|
describe "leave" do
|
26
35
|
before do
|
27
|
-
|
36
|
+
stub_connection(@connection) do |stub|
|
37
|
+
stub.post('/room/80749/leave.json') {[ 200, {}, "" ]}
|
38
|
+
end
|
28
39
|
end
|
29
40
|
|
30
41
|
it "should post to leave url" do
|
@@ -39,7 +50,9 @@ describe Tinder::Room do
|
|
39
50
|
|
40
51
|
describe "lock" do
|
41
52
|
before do
|
42
|
-
|
53
|
+
stub_connection(@connection) do |stub|
|
54
|
+
stub.post('/room/80749/lock.json') {[ 200, {}, "" ]}
|
55
|
+
end
|
43
56
|
end
|
44
57
|
|
45
58
|
it "should post to lock url" do
|
@@ -49,7 +62,9 @@ describe Tinder::Room do
|
|
49
62
|
|
50
63
|
describe "unlock" do
|
51
64
|
before do
|
52
|
-
|
65
|
+
stub_connection(@connection) do |stub|
|
66
|
+
stub.post('/room/80749/unlock.json') {[ 200, {}, "" ]}
|
67
|
+
end
|
53
68
|
end
|
54
69
|
|
55
70
|
it "should post to unlock url" do
|
@@ -79,13 +94,21 @@ describe Tinder::Room do
|
|
79
94
|
|
80
95
|
describe "name=" do
|
81
96
|
it "should put to update the room" do
|
82
|
-
|
83
|
-
|
97
|
+
stub_connection(@connection) do |stub|
|
98
|
+
stub.put('/room/80749.json') {[ 200, {}, "" ]}
|
99
|
+
end
|
100
|
+
|
84
101
|
@room.name = "Foo"
|
85
102
|
end
|
86
103
|
end
|
87
104
|
|
88
105
|
describe "listen" do
|
106
|
+
before do
|
107
|
+
stub_connection(@connection) do |stub|
|
108
|
+
stub.post('/room/80749/join.json') {[ 200, {}, "" ]}
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
89
112
|
it "should get from the streaming url" do
|
90
113
|
Twitter::JSONStream.should_receive(:connect).
|
91
114
|
with({:host=>"streaming.campfirenow.com", :path=>"/room/80749/live.json", :auth=>"mytoken:X", :timeout=>6, :ssl=>true}).
|
@@ -109,6 +132,10 @@ describe Tinder::Room do
|
|
109
132
|
|
110
133
|
describe "stop_listening" do
|
111
134
|
before do
|
135
|
+
stub_connection(@connection) do |stub|
|
136
|
+
stub.post('/room/80749/join.json') {[ 200, {}, "" ]}
|
137
|
+
end
|
138
|
+
|
112
139
|
Twitter::JSONStream.stub!(:connect).and_return(@stream)
|
113
140
|
@stream.stub!(:stop)
|
114
141
|
end
|
data/tinder.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{tinder}
|
8
|
-
s.version = "1.4.
|
8
|
+
s.version = "1.4.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Brandon Keepers"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-11-13}
|
13
13
|
s.description = %q{A Ruby API for interfacing with Campfire, the 37Signals chat application.}
|
14
14
|
s.email = %q{brandon@opensoul.org}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
|
|
26
26
|
"lib/tinder.rb",
|
27
27
|
"lib/tinder/campfire.rb",
|
28
28
|
"lib/tinder/connection.rb",
|
29
|
-
"lib/tinder/
|
29
|
+
"lib/tinder/middleware.rb",
|
30
30
|
"lib/tinder/room.rb",
|
31
31
|
"site/index.html",
|
32
32
|
"site/stylesheets/style.css",
|
@@ -61,7 +61,8 @@ Gem::Specification.new do |s|
|
|
61
61
|
|
62
62
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
63
63
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
64
|
-
s.add_runtime_dependency(%q<
|
64
|
+
s.add_runtime_dependency(%q<faraday>, ["~> 0.5.1"])
|
65
|
+
s.add_runtime_dependency(%q<multipart-post>, [">= 0"])
|
65
66
|
s.add_runtime_dependency(%q<mime-types>, [">= 0"])
|
66
67
|
s.add_runtime_dependency(%q<twitter-stream>, [">= 0"])
|
67
68
|
s.add_runtime_dependency(%q<eventmachine>, [">= 0"])
|
@@ -69,7 +70,8 @@ Gem::Specification.new do |s|
|
|
69
70
|
s.add_development_dependency(%q<fakeweb>, [">= 0"])
|
70
71
|
else
|
71
72
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
72
|
-
s.add_dependency(%q<
|
73
|
+
s.add_dependency(%q<faraday>, ["~> 0.5.1"])
|
74
|
+
s.add_dependency(%q<multipart-post>, [">= 0"])
|
73
75
|
s.add_dependency(%q<mime-types>, [">= 0"])
|
74
76
|
s.add_dependency(%q<twitter-stream>, [">= 0"])
|
75
77
|
s.add_dependency(%q<eventmachine>, [">= 0"])
|
@@ -78,7 +80,8 @@ Gem::Specification.new do |s|
|
|
78
80
|
end
|
79
81
|
else
|
80
82
|
s.add_dependency(%q<activesupport>, [">= 0"])
|
81
|
-
s.add_dependency(%q<
|
83
|
+
s.add_dependency(%q<faraday>, ["~> 0.5.1"])
|
84
|
+
s.add_dependency(%q<multipart-post>, [">= 0"])
|
82
85
|
s.add_dependency(%q<mime-types>, [">= 0"])
|
83
86
|
s.add_dependency(%q<twitter-stream>, [">= 0"])
|
84
87
|
s.add_dependency(%q<eventmachine>, [">= 0"])
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 1
|
7
7
|
- 4
|
8
|
-
-
|
9
|
-
version: 1.4.
|
8
|
+
- 2
|
9
|
+
version: 1.4.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Brandon Keepers
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-11-13 00:00:00 -06:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -30,19 +30,21 @@ dependencies:
|
|
30
30
|
type: :runtime
|
31
31
|
version_requirements: *id001
|
32
32
|
- !ruby/object:Gem::Dependency
|
33
|
-
name:
|
33
|
+
name: faraday
|
34
34
|
prerelease: false
|
35
35
|
requirement: &id002 !ruby/object:Gem::Requirement
|
36
36
|
requirements:
|
37
|
-
- -
|
37
|
+
- - ~>
|
38
38
|
- !ruby/object:Gem::Version
|
39
39
|
segments:
|
40
40
|
- 0
|
41
|
-
|
41
|
+
- 5
|
42
|
+
- 1
|
43
|
+
version: 0.5.1
|
42
44
|
type: :runtime
|
43
45
|
version_requirements: *id002
|
44
46
|
- !ruby/object:Gem::Dependency
|
45
|
-
name:
|
47
|
+
name: multipart-post
|
46
48
|
prerelease: false
|
47
49
|
requirement: &id003 !ruby/object:Gem::Requirement
|
48
50
|
requirements:
|
@@ -54,7 +56,7 @@ dependencies:
|
|
54
56
|
type: :runtime
|
55
57
|
version_requirements: *id003
|
56
58
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
59
|
+
name: mime-types
|
58
60
|
prerelease: false
|
59
61
|
requirement: &id004 !ruby/object:Gem::Requirement
|
60
62
|
requirements:
|
@@ -66,7 +68,7 @@ dependencies:
|
|
66
68
|
type: :runtime
|
67
69
|
version_requirements: *id004
|
68
70
|
- !ruby/object:Gem::Dependency
|
69
|
-
name:
|
71
|
+
name: twitter-stream
|
70
72
|
prerelease: false
|
71
73
|
requirement: &id005 !ruby/object:Gem::Requirement
|
72
74
|
requirements:
|
@@ -78,7 +80,7 @@ dependencies:
|
|
78
80
|
type: :runtime
|
79
81
|
version_requirements: *id005
|
80
82
|
- !ruby/object:Gem::Dependency
|
81
|
-
name:
|
83
|
+
name: eventmachine
|
82
84
|
prerelease: false
|
83
85
|
requirement: &id006 !ruby/object:Gem::Requirement
|
84
86
|
requirements:
|
@@ -87,10 +89,10 @@ dependencies:
|
|
87
89
|
segments:
|
88
90
|
- 0
|
89
91
|
version: "0"
|
90
|
-
type: :
|
92
|
+
type: :runtime
|
91
93
|
version_requirements: *id006
|
92
94
|
- !ruby/object:Gem::Dependency
|
93
|
-
name:
|
95
|
+
name: rspec
|
94
96
|
prerelease: false
|
95
97
|
requirement: &id007 !ruby/object:Gem::Requirement
|
96
98
|
requirements:
|
@@ -101,6 +103,18 @@ dependencies:
|
|
101
103
|
version: "0"
|
102
104
|
type: :development
|
103
105
|
version_requirements: *id007
|
106
|
+
- !ruby/object:Gem::Dependency
|
107
|
+
name: fakeweb
|
108
|
+
prerelease: false
|
109
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - ">="
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
version: "0"
|
116
|
+
type: :development
|
117
|
+
version_requirements: *id008
|
104
118
|
description: A Ruby API for interfacing with Campfire, the 37Signals chat application.
|
105
119
|
email: brandon@opensoul.org
|
106
120
|
executables: []
|
@@ -120,7 +134,7 @@ files:
|
|
120
134
|
- lib/tinder.rb
|
121
135
|
- lib/tinder/campfire.rb
|
122
136
|
- lib/tinder/connection.rb
|
123
|
-
- lib/tinder/
|
137
|
+
- lib/tinder/middleware.rb
|
124
138
|
- lib/tinder/room.rb
|
125
139
|
- site/index.html
|
126
140
|
- site/stylesheets/style.css
|
data/lib/tinder/multipart.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
require 'mime/types'
|
2
|
-
require 'net/http'
|
3
|
-
require 'cgi'
|
4
|
-
|
5
|
-
module Multipart #:nodoc:
|
6
|
-
# From: http://deftcode.com/code/flickr_upload/multipartpost.rb
|
7
|
-
## Helper class to prepare an HTTP POST request with a file upload
|
8
|
-
## Mostly taken from
|
9
|
-
#http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/113774
|
10
|
-
### WAS:
|
11
|
-
## Anything that's broken and wrong probably the fault of Bill Stilwell
|
12
|
-
##(bill@marginalia.org)
|
13
|
-
### NOW:
|
14
|
-
## Everything wrong is due to keith@oreilly.com
|
15
|
-
|
16
|
-
class Param #:nodoc:
|
17
|
-
attr_accessor :k, :v
|
18
|
-
def initialize(k, v)
|
19
|
-
@k = k
|
20
|
-
@v = v
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_multipart
|
24
|
-
"Content-Disposition: form-data; name=\"#{k}\"\r\n\r\n#{v}\r\n"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
class FileParam #:nodoc:
|
29
|
-
attr_accessor :k, :filename, :content
|
30
|
-
def initialize(k, filename, content)
|
31
|
-
@k = k
|
32
|
-
@filename = filename
|
33
|
-
@content = content
|
34
|
-
end
|
35
|
-
|
36
|
-
def to_multipart
|
37
|
-
"Content-Disposition: form-data; name=\"#{k}\"; filename=\"#{filename}\"\r\n" +
|
38
|
-
"Content-Transfer-Encoding: binary\r\n" +
|
39
|
-
"Content-Type: #{MIME::Types.type_for(@filename)}\r\n\r\n" +
|
40
|
-
@content + "\r\n"
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
class MultipartPost #:nodoc:
|
45
|
-
BOUNDARY = 'campfire-is-awesome'
|
46
|
-
HEADER = {"Content-type" => "multipart/form-data, boundary=" + BOUNDARY + " "}
|
47
|
-
TIMEOUT_SECONDS = 30
|
48
|
-
|
49
|
-
attr_accessor :params, :query, :headers
|
50
|
-
def initialize(params)
|
51
|
-
@params = params
|
52
|
-
@query = {}
|
53
|
-
self.prepare_query
|
54
|
-
end
|
55
|
-
|
56
|
-
def prepare_query()
|
57
|
-
@query = @params.map do |k,v|
|
58
|
-
param = v.respond_to?(:read) ? FileParam.new(k, v.path, v.read) : Param.new(k, v)
|
59
|
-
"--#{BOUNDARY}\r\n#{param.to_multipart}"
|
60
|
-
end.join("") + "--#{BOUNDARY}--"
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|