tinder 0.1.9 → 1.1.7
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.txt +0 -9
- data/Manifest.txt +0 -1
- data/README.txt +1 -4
- data/Rakefile +0 -17
- data/lib/tinder/campfire.rb +4 -29
- data/lib/tinder/room.rb +4 -28
- data/lib/tinder/version.rb +1 -1
- metadata +4 -15
- data/lib/tinder/multipart.rb +0 -64
data/CHANGELOG.txt
CHANGED
@@ -1,12 +1,3 @@
|
|
1
|
-
0.1.9
|
2
|
-
* Repackaging to include multipart file
|
3
|
-
|
4
|
-
0.1.8
|
5
|
-
* Get the list of available files [Christopher MacGown]
|
6
|
-
* Upload files [Joshua Want]
|
7
|
-
* Find rooms even when full [Josh Owens]
|
8
|
-
* Join rooms as a guest [Ian Lesperance]
|
9
|
-
|
10
1
|
0.1.7 - 2008-07-24
|
11
2
|
* Don't join the room when only speaking [Brian Donovan]
|
12
3
|
* Added support for HTTP proxies
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
@@ -6,15 +6,11 @@ Tinder is a library for interfacing with Campfire, the chat application from 37S
|
|
6
6
|
|
7
7
|
campfire = Campfire.new 'mysubdomain'
|
8
8
|
campfire.login 'myemail@example.com', 'mypassword'
|
9
|
-
|
10
9
|
room = campfire.create_room 'New Room', 'My new campfire room to test tinder'
|
11
10
|
room.rename 'New Room Name'
|
12
11
|
room.speak 'Hello world!'
|
13
12
|
room.paste "my pasted\ncode"
|
14
13
|
room.destroy
|
15
|
-
|
16
|
-
room = campfire.find_room_by_guest_hash 'abc123', 'John Doe'
|
17
|
-
room.speak 'Hello world!'
|
18
14
|
|
19
15
|
See the RDoc for more details.
|
20
16
|
|
@@ -40,4 +36,5 @@ The source for Tinder is available at http://source.collectiveidea.com/public/ti
|
|
40
36
|
== ToDo
|
41
37
|
|
42
38
|
* Tests! (unit and remote)
|
39
|
+
* Log in via guest url
|
43
40
|
* Marshmallow-style integration scripts for exception notification and continuous integration
|
data/Rakefile
CHANGED
@@ -1,12 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'hoe'
|
3
|
-
begin
|
4
|
-
require 'spec/rake/spectask'
|
5
|
-
rescue LoadError
|
6
|
-
puts 'To use rspec for testing you must install rspec gem:'
|
7
|
-
puts '$ sudo gem install rspec'
|
8
|
-
exit
|
9
|
-
end
|
10
3
|
require File.join(File.dirname(__FILE__), 'lib', 'tinder', 'version')
|
11
4
|
|
12
5
|
# RDOC_OPTS = ['--quiet', '--title', "Tinder",
|
@@ -28,14 +21,4 @@ hoe = Hoe.new('tinder', ENV['VERSION'] || Tinder::VERSION::STRING) do |p|
|
|
28
21
|
p.changes = p.paragraphs_of('CHANGELOG.txt', 0..1).join("\n\n")
|
29
22
|
p.extra_deps << ['activesupport']
|
30
23
|
p.extra_deps << ['hpricot']
|
31
|
-
p.extra_deps << ['mime-types']
|
32
|
-
end
|
33
|
-
|
34
|
-
desc "Run the specs under spec"
|
35
|
-
Spec::Rake::SpecTask.new do |t|
|
36
|
-
t.spec_opts = ['--options', "spec/spec.opts"]
|
37
|
-
t.spec_files = FileList['spec/**/*_spec.rb']
|
38
24
|
end
|
39
|
-
|
40
|
-
desc "Default task is to run specs"
|
41
|
-
task :default => :spec
|
data/lib/tinder/campfire.rb
CHANGED
@@ -4,13 +4,9 @@ module Tinder
|
|
4
4
|
#
|
5
5
|
# campfire = Tinder::Campfire.new 'mysubdomain'
|
6
6
|
# campfire.login 'myemail@example.com', 'mypassword'
|
7
|
-
#
|
8
7
|
# room = campfire.create_room 'New Room', 'My new campfire room to test tinder'
|
9
8
|
# room.speak 'Hello world!'
|
10
9
|
# room.destroy
|
11
|
-
#
|
12
|
-
# room = campfire.find_room_by_guest_hash 'abc123', 'John Doe'
|
13
|
-
# room.speak 'Hello world!'
|
14
10
|
class Campfire
|
15
11
|
attr_reader :subdomain, :uri
|
16
12
|
|
@@ -60,10 +56,8 @@ module Tinder
|
|
60
56
|
# Get an array of all the available rooms
|
61
57
|
# TODO: detect rooms that are full (no link)
|
62
58
|
def rooms
|
63
|
-
Hpricot(get.body).search("//
|
64
|
-
|
65
|
-
name = a.search("//h2").inner_html.strip if name.empty?
|
66
|
-
Room.new(self, room_id_from_element(a.attributes['id']), name)
|
59
|
+
Hpricot(get.body).search("//h2/a").collect do |a|
|
60
|
+
Room.new(self, room_id_from_url(a.attributes['href']), a.inner_html)
|
67
61
|
end
|
68
62
|
end
|
69
63
|
|
@@ -71,13 +65,6 @@ module Tinder
|
|
71
65
|
def find_room_by_name(name)
|
72
66
|
rooms.detect {|room| room.name == name }
|
73
67
|
end
|
74
|
-
|
75
|
-
# Find a campfire room by its guest hash
|
76
|
-
def find_room_by_guest_hash(hash, name)
|
77
|
-
res = post(hash, :name => name)
|
78
|
-
|
79
|
-
Room.new(self, room_id_from_url(res['location'])) if verify_response(res, :redirect)
|
80
|
-
end
|
81
68
|
|
82
69
|
# Creates and returns a new Room with the given +name+ and optionally a +topic+
|
83
70
|
def create_room(name, topic = nil)
|
@@ -124,10 +111,6 @@ module Tinder
|
|
124
111
|
def room_id_from_url(url)
|
125
112
|
url.scan(/room\/(\d*)/).to_s
|
126
113
|
end
|
127
|
-
|
128
|
-
def room_id_from_element(element)
|
129
|
-
element.split("_").last
|
130
|
-
end
|
131
114
|
|
132
115
|
def url_for(*args)
|
133
116
|
options = {:only_path => true}.merge(args.last.is_a?(Hash) ? args.pop : {})
|
@@ -138,11 +121,8 @@ module Tinder
|
|
138
121
|
def post(path, data = {}, options = {})
|
139
122
|
perform_request(options) do
|
140
123
|
returning Net::HTTP::Post.new(url_for(path)) do |request|
|
141
|
-
|
142
|
-
|
143
|
-
else
|
144
|
-
request.set_form_data(flatten(data))
|
145
|
-
end
|
124
|
+
request.add_field 'Content-Type', 'application/x-www-form-urlencoded'
|
125
|
+
request.set_form_data flatten(data)
|
146
126
|
end
|
147
127
|
end
|
148
128
|
end
|
@@ -159,11 +139,6 @@ module Tinder
|
|
159
139
|
request.add_field 'X-Requested-With', 'XMLHttpRequest'
|
160
140
|
request.add_field 'X-Prototype-Version', '1.5.1.1'
|
161
141
|
end
|
162
|
-
if options[:multipart]
|
163
|
-
request.add_field 'Content-Type', 'multipart/form-data, boundary=' + Multipart::MultipartPost::BOUNDARY + " "
|
164
|
-
else
|
165
|
-
request.add_field 'Content-Type', 'application/x-www-form-urlencoded'
|
166
|
-
end
|
167
142
|
end
|
168
143
|
end
|
169
144
|
|
data/lib/tinder/room.rb
CHANGED
@@ -95,17 +95,8 @@ module Tinder
|
|
95
95
|
|
96
96
|
# Post a new message to the chat room
|
97
97
|
def speak(message, options = {})
|
98
|
-
|
99
|
-
:
|
100
|
-
:t => Time.now.to_i
|
101
|
-
}.merge(options)
|
102
|
-
|
103
|
-
post_options.delete(:paste) unless post_options[:paste]
|
104
|
-
response = post("room/#{id}/speak", post_options, :ajax => true)
|
105
|
-
|
106
|
-
if verify_response(response, :success)
|
107
|
-
message
|
108
|
-
end
|
98
|
+
message if verify_response(post("room/#{id}/speak", {:message => message,
|
99
|
+
:t => Time.now.to_i}.merge(options), :ajax => true), :success)
|
109
100
|
end
|
110
101
|
|
111
102
|
def paste(message)
|
@@ -116,7 +107,7 @@ module Tinder
|
|
116
107
|
def users
|
117
108
|
@campfire.users name
|
118
109
|
end
|
119
|
-
|
110
|
+
|
120
111
|
# Get and array of the messages that have been posted to the room. Each
|
121
112
|
# messages is a hash with:
|
122
113
|
# * +:person+: the display name of the person that posted the message
|
@@ -172,22 +163,7 @@ module Tinder
|
|
172
163
|
}
|
173
164
|
end
|
174
165
|
end
|
175
|
-
|
176
|
-
def upload(filename)
|
177
|
-
File.open(filename, "rb") do |file|
|
178
|
-
params = Multipart::MultipartPost.new({'upload' => file, 'submit' => "Upload"})
|
179
|
-
verify_response post("upload.cgi/room/#{@id}/uploads/new", params.query, :multipart => true), :success
|
180
|
-
end
|
181
|
-
end
|
182
|
-
|
183
|
-
# Get the list of latest files for this room
|
184
|
-
def files(count = 5)
|
185
|
-
join
|
186
|
-
(Hpricot(@room.body)/"#file_list li a").to_a[0,count].map do |link|
|
187
|
-
@campfire.send :url_for, link.attributes['href'][1..-1], :only_path => false
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
166
|
+
|
191
167
|
protected
|
192
168
|
|
193
169
|
def messages
|
data/lib/tinder/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tinder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.1.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Keepers
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2008-07-24 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -32,16 +32,6 @@ dependencies:
|
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: "0"
|
34
34
|
version:
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: mime-types
|
37
|
-
type: :runtime
|
38
|
-
version_requirement:
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
40
|
-
requirements:
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: "0"
|
44
|
-
version:
|
45
35
|
- !ruby/object:Gem::Dependency
|
46
36
|
name: hoe
|
47
37
|
type: :development
|
@@ -50,7 +40,7 @@ dependencies:
|
|
50
40
|
requirements:
|
51
41
|
- - ">="
|
52
42
|
- !ruby/object:Gem::Version
|
53
|
-
version: 1.
|
43
|
+
version: 1.7.0
|
54
44
|
version:
|
55
45
|
description: An API for interfacing with Campfire, the 37Signals chat application.
|
56
46
|
email: brandon@opensoul.org
|
@@ -70,7 +60,6 @@ files:
|
|
70
60
|
- init.rb
|
71
61
|
- lib/tinder.rb
|
72
62
|
- lib/tinder/campfire.rb
|
73
|
-
- lib/tinder/multipart.rb
|
74
63
|
- lib/tinder/room.rb
|
75
64
|
- lib/tinder/version.rb
|
76
65
|
has_rdoc: true
|
@@ -96,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
85
|
requirements: []
|
97
86
|
|
98
87
|
rubyforge_project: tinder
|
99
|
-
rubygems_version: 1.
|
88
|
+
rubygems_version: 1.2.0
|
100
89
|
signing_key:
|
101
90
|
specification_version: 2
|
102
91
|
summary: An (unofficial) Campfire API
|
data/lib/tinder/multipart.rb
DELETED
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'mime/types'
|
3
|
-
require 'net/http'
|
4
|
-
require 'cgi'
|
5
|
-
|
6
|
-
module Multipart #:nodoc:
|
7
|
-
# From: http://deftcode.com/code/flickr_upload/multipartpost.rb
|
8
|
-
## Helper class to prepare an HTTP POST request with a file upload
|
9
|
-
## Mostly taken from
|
10
|
-
#http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/113774
|
11
|
-
### WAS:
|
12
|
-
## Anything that's broken and wrong probably the fault of Bill Stilwell
|
13
|
-
##(bill@marginalia.org)
|
14
|
-
### NOW:
|
15
|
-
## Everything wrong is due to keith@oreilly.com
|
16
|
-
|
17
|
-
class Param #:nodoc:
|
18
|
-
attr_accessor :k, :v
|
19
|
-
def initialize(k, v)
|
20
|
-
@k = k
|
21
|
-
@v = v
|
22
|
-
end
|
23
|
-
|
24
|
-
def to_multipart
|
25
|
-
"Content-Disposition: form-data; name=\"#{k}\"\r\n\r\n#{v}\r\n"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class FileParam #:nodoc:
|
30
|
-
attr_accessor :k, :filename, :content
|
31
|
-
def initialize(k, filename, content)
|
32
|
-
@k = k
|
33
|
-
@filename = filename
|
34
|
-
@content = content
|
35
|
-
end
|
36
|
-
|
37
|
-
def to_multipart
|
38
|
-
"Content-Disposition: form-data; name=\"#{k}\"; filename=\"#{filename}\"\r\n" +
|
39
|
-
"Content-Transfer-Encoding: binary\r\n" +
|
40
|
-
"Content-Type: #{MIME::Types.type_for(@filename)}\r\n\r\n" +
|
41
|
-
@content + "\r\n"
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
class MultipartPost #:nodoc:
|
46
|
-
BOUNDARY = 'campfire-is-awesome'
|
47
|
-
HEADER = {"Content-type" => "multipart/form-data, boundary=" + BOUNDARY + " "}
|
48
|
-
TIMEOUT_SECONDS = 30
|
49
|
-
|
50
|
-
attr_accessor :params, :query, :headers
|
51
|
-
def initialize(params)
|
52
|
-
@params = params
|
53
|
-
@query = {}
|
54
|
-
self.prepare_query
|
55
|
-
end
|
56
|
-
|
57
|
-
def prepare_query()
|
58
|
-
@query = @params.map do |k,v|
|
59
|
-
param = v.respond_to?(:read) ? FileParam.new(k, v.path, v.read) : Param.new(k, v)
|
60
|
-
"--#{BOUNDARY}\r\n#{param.to_multipart}"
|
61
|
-
end.join("") + "--#{BOUNDARY}--"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|