tinder 1.2.1 → 1.2.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/.gitignore ADDED
@@ -0,0 +1,3 @@
1
+ pkg
2
+ rdoc
3
+ test/remote/credentials.rb
data/README.txt CHANGED
@@ -18,24 +18,29 @@ Tinder is a library for interfacing with Campfire, the chat application from 37S
18
18
 
19
19
  See the RDoc for more details.
20
20
 
21
- == Requirements
22
-
23
- * Active Support
24
- gem install activesupport
25
- * Hpricot
26
- gem install hpricot
27
-
28
21
  == Installation
29
22
 
30
23
  Tinder can be installed as a gem or a Rails plugin:
31
24
 
32
25
  gem install tinder
33
26
 
34
- script/plugin install http://source.collectiveidea.com/public/tinder/trunk
27
+ script/plugin install git://github.com/collectiveidea/tinder.git
35
28
 
36
- == Development
29
+ == How to contribute
30
+
31
+ If you find what looks like a bug:
32
+
33
+ 1. Check the GitHub issue tracker to see if anyone else has had the same issue.
34
+ http://github.com/collectiveidea/tinder/issues/
35
+ 2. If you don't see anything, create an issue with information on how to reproduce it.
36
+
37
+ If you want to contribute an enhancement or a fix:
37
38
 
38
- The source for Tinder is available at http://source.collectiveidea.com/public/tinder/trunk. Development can be followed at http://opensoul.org/tags/tinder. Contributions are welcome!
39
+ 1. Fork the project on github.
40
+ http://github.com/collectiveidea/tinder
41
+ 2. Make your changes with tests.
42
+ 3. Commit the changes without making changes to the Rakefile, VERSION, or any other files that aren't related to your enhancement or fix
43
+ 4. Send a pull request.
39
44
 
40
45
  == ToDo
41
46
 
data/Rakefile CHANGED
@@ -1,41 +1,68 @@
1
- require 'rubygems'
2
- require 'hoe'
3
1
  begin
4
- require 'spec/rake/spectask'
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |gem|
4
+ gem.name = "tinder"
5
+ gem.summary = "An (unofficial) Campfire API"
6
+ gem.description = "An API for interfacing with Campfire, the 37Signals chat application."
7
+ gem.authors = ['Brandon Keepers']
8
+ gem.email = 'brandon@opensoul.org'
9
+ gem.homepage = 'http://github.com/collectiveidea/tinder'
10
+ gem.rubyforge_project = "tinder"
11
+ gem.add_dependency "activesupport"
12
+ gem.add_dependency "hpricot"
13
+ gem.add_dependency "mime-types"
14
+ gem.add_development_dependency "rspec"
15
+ end
16
+ Jeweler::GemcutterTasks.new
17
+ Jeweler::RubyforgeTasks.new do |rubyforge|
18
+ rubyforge.doc_task = "rdoc"
19
+ end
5
20
  rescue LoadError
6
- puts 'To use rspec for testing you must install rspec gem:'
7
- puts '$ sudo gem install rspec'
8
- exit
21
+ puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
9
22
  end
10
- require File.join(File.dirname(__FILE__), 'lib', 'tinder', 'version')
11
23
 
12
- # RDOC_OPTS = ['--quiet', '--title', "Tinder",
13
- # "--opname", "index.html",
14
- # "--line-numbers",
15
- # "--main", "README",
16
- # "--inline-source"]
17
- #
18
- # Generate all the Rake tasks
24
+ require 'rake/testtask'
25
+ Rake::TestTask.new(:test) do |test|
26
+ test.libs << 'lib' << 'test'
27
+ test.pattern = 'test/**/*_test.rb'
28
+ test.verbose = true
29
+ end
30
+
31
+ begin
32
+ require 'rcov/rcovtask'
33
+ Rcov::RcovTask.new do |test|
34
+ test.libs << 'test'
35
+ test.pattern = 'test/**/*_test.rb'
36
+ test.verbose = true
37
+ end
38
+ rescue LoadError
39
+ task :rcov do
40
+ abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
41
+ end
42
+ end
43
+
44
+ task :test => :check_dependencies
45
+
46
+ require 'rake/rdoctask'
47
+ Rake::RDocTask.new do |rdoc|
48
+ if File.exist?('VERSION')
49
+ version = File.read('VERSION')
50
+ else
51
+ version = ""
52
+ end
19
53
 
20
- hoe = Hoe.new('tinder', ENV['VERSION'] || Tinder::VERSION::STRING) do |p|
21
- p.rubyforge_name = 'tinder'
22
- p.summary = "An (unofficial) Campfire API"
23
- p.description = "An API for interfacing with Campfire, the 37Signals chat application."
24
- p.author = 'Brandon Keepers'
25
- p.email = 'brandon@opensoul.org'
26
- p.url = 'http://tinder.rubyforge.org'
27
- p.test_globs = ["test/**/*_test.rb"]
28
- p.changes = p.paragraphs_of('CHANGELOG.txt', 0..1).join("\n\n")
29
- p.extra_deps << ['activesupport']
30
- p.extra_deps << ['hpricot']
31
- p.extra_deps << ['mime-types']
54
+ rdoc.rdoc_dir = 'rdoc'
55
+ rdoc.title = "tinder #{version}"
56
+ rdoc.rdoc_files.include('README*')
57
+ rdoc.rdoc_files.include('lib/**/*.rb')
32
58
  end
33
59
 
60
+ require 'spec/rake/spectask'
34
61
  desc "Run the specs under spec"
35
62
  Spec::Rake::SpecTask.new do |t|
36
63
  t.spec_opts = ['--options', "spec/spec.opts"]
37
64
  t.spec_files = FileList['spec/**/*_spec.rb']
38
65
  end
39
66
 
40
- desc "Default task is to run specs"
41
- task :default => :spec
67
+ desc "Run tests"
68
+ task :default => [:spec, :test]
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.2.2
data/lib/tinder.rb CHANGED
@@ -6,7 +6,9 @@ require 'net/https'
6
6
  require 'open-uri'
7
7
  require 'hpricot'
8
8
 
9
- Dir[File.join(File.dirname(__FILE__), 'tinder/**/*.rb')].sort.each { |lib| require lib }
9
+ require 'tinder/multipart'
10
+ require 'tinder/campfire'
11
+ require 'tinder/room'
10
12
 
11
13
  module Tinder
12
14
  class Error < StandardError; end
@@ -153,10 +153,10 @@ module Tinder
153
153
 
154
154
  def prepare_request(request, options = {})
155
155
  returning request do
156
- request.add_field 'User-Agent', "Tinder/#{Tinder::VERSION::STRING} (http://tinder.rubyforge.org)"
156
+ request.add_field 'User-Agent', "Tinder (http://tinder.rubyforge.org)"
157
157
  request.add_field 'Cookie', @cookie if @cookie
158
+ request.add_field 'X-Requested-With', 'XMLHttpRequest'
158
159
  if options[:ajax]
159
- request.add_field 'X-Requested-With', 'XMLHttpRequest'
160
160
  request.add_field 'X-Prototype-Version', '1.5.1.1'
161
161
  end
162
162
  if options[:multipart]
data/site/index.html ADDED
@@ -0,0 +1,101 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
3
+
4
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
5
+ <head>
6
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
7
+ <title>Tinder</title>
8
+ <link rel="stylesheet" type="text/css" href="http://opensoul.org/stylesheets/code.css" />
9
+ <link rel="stylesheet" type="text/css" href="stylesheets/style.css" />
10
+ <link href="http://opensoul.org/stylesheets/ci.css" rel="stylesheet" type="text/css" />
11
+ <script src="http://opensoul.org/javascripts/code_highlighter.js" type="text/javascript"></script>
12
+ <script src="http://opensoul.org/javascripts/ruby.js" type="text/javascript"></script>
13
+ </head>
14
+
15
+ <body>
16
+ <div id="collectiveidea">
17
+ <a href="http://collectiveidea.com"><img src="http://opensoul.org/images/header_logo.gif" alt="Collective Idea" class="logo" width="17" height="22" /></a>
18
+ <ul class="links">
19
+ <li><a href="http://daniel.collectiveidea.com/blog">Daniel</a></li>
20
+ <li><a href="http://opensoul.org">Brandon</a></li>
21
+ <li class="name"><a href="http://collectiveidea.com"><img src="http://opensoul.org/images/header_collectiveidea.gif" alt="Collective Idea" width="123" height="21" /></a></li>
22
+ </ul>
23
+ </div>
24
+ <div id="main">
25
+ <div id="header">
26
+ <h1><a href="/">Tinder</a></h1>
27
+ <p>Getting the campfire started</p>
28
+ <ul id="nav">
29
+ <li><a href="tinder">API Docs</a></li>
30
+ <li><a href="http://rubyforge.org/projects/tinder">RubyForge</a></li>
31
+ <li><a href="http://opensoul.org/tags/tinder">Blog</a></li>
32
+ </ul>
33
+ </div>
34
+ <div id="content">
35
+ <p>Tinder is an API for interfacing with <a href="http://campfirenow.com">Campfire</a>, the 37Signals chat application.</p>
36
+ <h2>Example</h2>
37
+
38
+ <pre><code class="ruby">campfire = Tinder::Campfire.new 'mysubdomain'
39
+ campfire.login 'myemail@example.com', 'mypassword'</code></pre>
40
+
41
+ <h3>Create, find and destroy rooms</h3>
42
+ <pre><code class="ruby">room = campfire.create_room 'New Room', 'My new campfire room to test tinder'
43
+ room = campfire.find_room_by_name 'Other Room'
44
+ room.destroy</code></pre>
45
+
46
+ <h3>Speak and Paste</h3>
47
+ <pre><code class="ruby">room.speak 'Hello world!'
48
+ room.paste File.read(&quot;path/to/your/file.txt&quot;)</code></pre>
49
+
50
+ <h3>Listening</h3>
51
+ <pre><code class="ruby">room.listen
52
+ #=&gt; [{:person=&gt;&quot;Brandon&quot;, :message=&gt;&quot;I'm getting very sleepy&quot;, :user_id=&gt;&quot;148583&quot;, :id=&gt;&quot;16434003&quot;}]
53
+
54
+ # or in block form
55
+ room.listen do |m|
56
+ room.speak 'Welcome!' if m[:message] == /hello/
57
+ end</code></pre>
58
+
59
+ <h3>Guest Access</h3>
60
+ <pre><code class="ruby">room.toggle_guest_access
61
+ room.guest_url #=> http://mysubdomain.campfirenow.com/11111
62
+ room.guest_invite_code #=> 11111</code></pre>
63
+
64
+ <h3>Change the name and topic</h3>
65
+ <pre><code class="ruby">room.name = 'Tinder Demo'
66
+ room.topic = 'Showing how to change the room name and topic with tinder…'</code></pre>
67
+
68
+ <h3>Users</h3>
69
+ <pre><code class="ruby">room.users
70
+ campfire.users # users in all rooms</code></pre>
71
+
72
+ <h3>Transcripts</h3>
73
+ <pre><code class="ruby">transcript = room.transcript(room.available_transcripts.first)
74
+ #=&gt; [{:message=&gt;&quot;foobar!&quot;, :user_id=&gt;&quot;99999&quot;, :person=&gt;&quot;Brandon&quot;, :id=&gt;&quot;18659245&quot;, :timestamp=&gt;Tue May 05 07:15:00 -0700 2009}]
75
+ </code></pre>
76
+
77
+ <p>See the <a href="tinder">API documentation</a> for more details.</p>
78
+
79
+ <h2>Installation</h2>
80
+
81
+ <p>Tinder can be installed as a gem or a Rails plugin. Install the gem by executing:</p>
82
+
83
+ <pre>gem install tinder</pre>
84
+
85
+ <p>Or, download it from <a href="http://rubyforge.org/frs/?group_id=2922">RubyForge</a>.</p>
86
+
87
+ <h2>Source</h2>
88
+
89
+ <p>Contributions are welcome and appreciated! The source is available from:</p>
90
+
91
+ <pre>http://github.com/collectiveidea/tinder</pre>
92
+ </div>
93
+ </div>
94
+ <script src="http://www.google-analytics.com/urchin.js" type="text/javascript">
95
+ </script>
96
+ <script type="text/javascript">
97
+ _uacct = "UA-194397-8";
98
+ urchinTracker();
99
+ </script>
100
+ </body>
101
+ </html>
@@ -0,0 +1,77 @@
1
+ body {
2
+ font-family: "Lucida Grande", Helvetica, Arial, sans-serif;
3
+ font-size: 76%;
4
+ background: #2A2A2A;
5
+ margin: 0;
6
+ padding: 0;
7
+ }
8
+
9
+ #collectiveidea {
10
+ border-bottom: 1px solid #444;
11
+ }
12
+
13
+ a {
14
+ color: #2D5385;
15
+ }
16
+
17
+ #main {
18
+ background-color: #FFF;
19
+ width: 700px;
20
+ margin: 0 auto;
21
+ border: 5px #CCC;
22
+ border-left-style: solid;
23
+ border-right-style: solid;
24
+ padding: 0 1em;
25
+ }
26
+
27
+ #header {
28
+ position: relative;
29
+ border-bottom: 1px solid #999;
30
+ padding: 1em;
31
+ }
32
+
33
+ #header h1 {
34
+ margin: 0;
35
+ padding: 0;
36
+ color: #2D5385;
37
+ }
38
+
39
+ #header h1 a {
40
+ text-decoration: none;
41
+ }
42
+
43
+ #header p {
44
+ margin: 0;
45
+ padding: 0;
46
+ font-size: 0.8em;
47
+ color: #999;
48
+ }
49
+
50
+ #nav {
51
+ list-style: none;
52
+ position: absolute;
53
+ right: 0;
54
+ top: 0.6em;
55
+ }
56
+ #nav li {
57
+ display: inline;
58
+ padding: 0 0.5em;
59
+ }
60
+
61
+ #content {
62
+ padding: 1em 0;
63
+ }
64
+
65
+ dl {
66
+ background-color: #DDD;
67
+ padding: 1em;
68
+ border: 1px solid #CCC;
69
+ }
70
+ dl .pronunciation {
71
+ color: #C00;
72
+ }
73
+ dl .description {
74
+ text-transform: uppercase;
75
+ font-size: 0.8em;
76
+ font-family: fixed;
77
+ }
@@ -0,0 +1,225 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "Preparing a campfire request" do
4
+ before do
5
+ @campfire = Tinder::Campfire.new("foobar")
6
+ @request = Net::HTTP::Get.new("does_not_matter")
7
+ end
8
+
9
+ def prepare_request
10
+ @campfire.send(:prepare_request, @request)
11
+ end
12
+
13
+ it "should return the request" do
14
+ prepare_request.should equal(@request)
15
+ end
16
+
17
+ it "should set the cookie" do
18
+ @campfire.instance_variable_set("@cookie", "foobar")
19
+ prepare_request['Cookie'].should == 'foobar'
20
+ end
21
+
22
+ it "should set the user agent" do
23
+ prepare_request['User-Agent'].should =~ /^Tinder/
24
+ end
25
+ end
26
+
27
+ # describe "Performing a campfire request" do
28
+ #
29
+ # before do
30
+ # @response = mock("response")
31
+ # Net::HTTP.any_instance.stubs(:request).returns(response)
32
+ # request = Net::HTTP::Get.new("does_not_matter")
33
+ # response.expects(:[]).with('set-cookie').and_return('foobar')
34
+ # @campfire.send(:perform_request) { request }
35
+ # end
36
+ #
37
+ # it "should set cookie" do
38
+ # @campfire.instance_variable_get("@cookie").should == 'foobar'
39
+ # end
40
+ #
41
+ # end
42
+
43
+ describe "Verifying a 200 response" do
44
+
45
+ before do
46
+ @campfire = Tinder::Campfire.new("foobar")
47
+ @response = mock("response")
48
+ @response.should_receive(:code).and_return(200)
49
+ end
50
+
51
+ it "should return true when expecting success" do
52
+ @campfire.send(:verify_response, @response, :success).should equal(true)
53
+ end
54
+
55
+ it "should return false when expecting a redirect" do
56
+ @campfire.send(:verify_response, @response, :redirect).should equal(false)
57
+ end
58
+
59
+ it "should return false when expecting a redirect to a specific path" do
60
+ @campfire.send(:verify_response, @response, :redirect_to => '/foobar').should equal(false)
61
+ end
62
+
63
+ end
64
+
65
+ describe "Verifying a 302 response" do
66
+
67
+ before do
68
+ @campfire = Tinder::Campfire.new("foobar")
69
+ @response = mock("response")
70
+ @response.should_receive(:code).and_return(302)
71
+ end
72
+
73
+ it "should return true when expecting redirect" do
74
+ @campfire.send(:verify_response, @response, :redirect).should equal(true)
75
+ end
76
+
77
+ it "should return false when expecting success" do
78
+ @campfire.send(:verify_response, @response, :success).should equal(false)
79
+ end
80
+
81
+ it "should return true when expecting a redirect to a specific path" do
82
+ @response.should_receive(:[]).with('location').and_return("/foobar")
83
+ @campfire.send(:verify_response, @response, :redirect_to => '/foobar').should equal(true)
84
+ end
85
+
86
+ it "should return false when redirecting to a different path than expected" do
87
+ @response.should_receive(:[]).with('location').and_return("/baz")
88
+ @campfire.send(:verify_response, @response, :redirect_to => '/foobar').should equal(false)
89
+ end
90
+
91
+ end
92
+
93
+ describe "A failed login" do
94
+
95
+ before do
96
+ @campfire = Tinder::Campfire.new 'foobar'
97
+ @response = mock("response")
98
+ @campfire.should_receive(:post).and_return(@response)
99
+ @response.should_receive(:code).and_return("302")
100
+ @response.should_receive(:[]).with("location").and_return("/login")
101
+ end
102
+
103
+ it "should raise an error" do
104
+ lambda do
105
+ @campfire.login "doesn't", "matter"
106
+ end.should raise_error(Tinder::Error)
107
+ end
108
+
109
+ it "should not set logged in status" do
110
+ @campfire.login 'foo', 'bar' rescue
111
+ @campfire.logged_in?.should equal(false)
112
+ end
113
+
114
+ end
115
+
116
+ describe "Accessing a room with guest access" do
117
+
118
+ before do
119
+ @room_id = 123
120
+ @campfire = Tinder::Campfire.new 'foobar'
121
+ @response = mock("response")
122
+ @campfire.stub!(:post).and_return(@response)
123
+ end
124
+
125
+ it "should return a room for the public room" do
126
+ @response.should_receive(:code).and_return(302)
127
+ @response.should_receive(:[]).with("location").and_return("/rooms/#{@room_id}")
128
+
129
+ room = @campfire.find_room_by_guest_hash "valid_hash", "John Doe"
130
+ room.should be_kind_of(Tinder::Room)
131
+ end
132
+
133
+ it "should raise an error if given an invalid room hash" do
134
+ @response.should_receive(:code).and_return(500)
135
+
136
+ room = @campfire.find_room_by_guest_hash "invalid_hash", "John Doe"
137
+ room.should be_nil
138
+ end
139
+
140
+ end
141
+
142
+ describe "Accessing a room" do
143
+
144
+ before do
145
+ @request = mock("request")
146
+ @response = mock("response")
147
+ Net::HTTP.stub!(:new).and_return(@request)
148
+ @request.stub!(:use_ssl=)
149
+ @request.stub!(:request).and_return(@response)
150
+ @response.stub!(:[]).and_return(true)
151
+ end
152
+
153
+ describe "when the room is full" do
154
+
155
+ before do
156
+ @html = File.read(File.dirname(__FILE__) + '/html/full_lobby.html')
157
+ @response.stub!(:body).and_return(@html)
158
+ @campfire = Tinder::Campfire.new 'foobar'
159
+ end
160
+
161
+ it "should return a room" do
162
+ @campfire.rooms.should_not be_empty
163
+ end
164
+
165
+ it "should find a room by name" do
166
+ @campfire.find_room_by_name("Just Fishin").class.should == Tinder::Room
167
+ end
168
+
169
+ end
170
+
171
+ describe "when the room is not full" do
172
+
173
+ before do
174
+ @html = File.read(File.dirname(__FILE__) + '/html/normal_lobby.html')
175
+ @response.stub!(:body).and_return(@html)
176
+ @campfire = Tinder::Campfire.new 'foobar'
177
+ end
178
+
179
+ it "should return a room" do
180
+ @campfire.rooms.should_not be_empty
181
+ end
182
+
183
+ it "should find a room by name" do
184
+ @campfire.find_room_by_name("Just Fishin").class.should == Tinder::Room
185
+ end
186
+ end
187
+
188
+ end
189
+
190
+ describe "Accessing a room's transcript" do
191
+
192
+ before do
193
+ @room = Tinder::Room.new nil, 42
194
+ @html = File.read(File.dirname(__FILE__) + '/html/transcript.html')
195
+ @response = mock("response")
196
+ @response.stub!(:body).and_return(@html)
197
+ @room.stub!(:get).with("room/42/transcript/2009/05/05").
198
+ and_return(@response)
199
+ require 'time'
200
+ @transcript = @room.transcript(Time.parse("2009-05-05"))
201
+ end
202
+
203
+ it "should return some messages" do
204
+ @transcript.should_not be_empty
205
+ end
206
+
207
+ describe "the first message" do
208
+ # This is a timestamp message
209
+ it "should include a timestamp" do
210
+ @transcript.first[:timestamp].should == Time.parse("2009-05-05 09:35")
211
+ end
212
+ end
213
+
214
+ describe "the second message" do
215
+ it "should include a timestamp" do
216
+ @transcript.second[:timestamp].should == Time.parse("2009-05-05 09:35")
217
+ end
218
+ end
219
+
220
+ describe "when entering the room" do
221
+ it "a transcript message should include the person who entered" do
222
+ @transcript.second[:person].should == "Marcel"
223
+ end
224
+ end
225
+ end
@@ -0,0 +1,198 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3
+
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>Chat rooms</title>
7
+ <link href="/stylesheets/screen.css?1224558404" media="all" rel="stylesheet" type="text/css" />
8
+ <!--[if lte IE 6]>
9
+ <style type="text/css">
10
+ @import url("/stylesheets/screen-ie.css?1224558404");
11
+ </style>
12
+ <![endif]-->
13
+ <!--[if IE 7]>
14
+ <style type="text/css">
15
+ @import url("/stylesheets/screen-ie-7.css?1224558404");
16
+ </style>
17
+ <![endif]-->
18
+
19
+ <link href="/stylesheets/print.css?1224558404" media="print" rel="stylesheet" type="text/css" />
20
+ <link href="/stylesheets/blue.css?1224558404" media="screen" rel="stylesheet" title="Theme" type="text/css" />
21
+ <script src="/javascripts/prototype.js?1224558404" type="text/javascript"></script>
22
+ <script src="/javascripts/effects.js?1224558404" type="text/javascript"></script>
23
+ <script src="/javascripts/application.js?1224558404" type="text/javascript"></script>
24
+ <script src="/javascripts/nubbins.js?1224558404" type="text/javascript"></script>
25
+ <script src="/javascripts/campfire.js?1224558404" type="text/javascript"></script>
26
+ <script src="/javascripts/javascript_flash_gateway.js?1224558404" type="text/javascript"></script>
27
+ </head>
28
+
29
+ <body class="lobby">
30
+
31
+
32
+
33
+
34
+ <div id="Header">
35
+ <div id="Tabs">
36
+ <ul id="MainTabs">
37
+ <li><a href="http://fish.campfirenow.com/" class="current">Lobby</a></li>
38
+
39
+
40
+
41
+ <li><a href="http://fish.campfirenow.com/room/17715" class="chat" id="room_tab-17715">Just Fishin</a></li>
42
+
43
+
44
+
45
+
46
+ <li><a href="http://fish.campfirenow.com/files+transcripts" class="" style="margin-left: 8px">Files, Transcripts &amp; Search</a></li>
47
+
48
+ <li style="float: right;" class="logout"><a href="http://fish.campfirenow.com/logout">Logout</a></li>
49
+ <li style="float: right" class="logout"><a href="/member/edit">My account</a></li>
50
+
51
+
52
+ </ul>
53
+ </div>
54
+ </div>
55
+
56
+
57
+ <div id="Wrapper">
58
+ <div id="Container">
59
+
60
+
61
+
62
+
63
+ <div class="Full">
64
+ <div class="col">
65
+
66
+ <div id="lobby">
67
+ <h1>
68
+ <span><a class="admin toggle show_hide_toggler_new_room" href="#" id="create_room_link" onclick="$('new_room').showHide.toggle(); return false;">Create a new room</a></span>
69
+ Chat rooms
70
+ </h1>
71
+
72
+ <div class="currentChatters">
73
+ 4 people currently chatting
74
+ <span>
75
+ <br />You're near your simultaneous chatter limit of 4.
76
+ Ask <a href="mailto:bob@billy.com">Billy Bob</a> to upgrade the account.
77
+ </span>
78
+
79
+ </div>
80
+ <div class="show_hide_wrapper"><div class=" showhide" id="new_room" style="display: none"><div class="basic_form_wrapper">
81
+ <div class="basic_form">
82
+ <div class="explanation">
83
+ <h3>Create a new room</h3>
84
+ <p>All chats take place in rooms. You can create as many rooms as you'd like.</p>
85
+ <p>Consider making rooms for client projects, general discussions, specific meetings/events, and more.</p>
86
+ <div class="spinner" id="new_room_spinner" style="display: none">&nbsp;</div>
87
+ </div>
88
+ <div id="new_room_form_errors"></div>
89
+ <div class="body">
90
+ <form action="http://fish.campfirenow.com/account/create/room?from=lobby" id="new_room_form" method="post" onsubmit="$(this).down('input[type=submit]').disable(); Element.hide('new_room_cancel_link'); new Ajax.Request('http://fish.campfirenow.com/account/create/room?from=lobby', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;"> <h3>Name the room</h3>
91
+ <p><input class="big expanded" id="room_name" name="room[name]" size="30" type="text" /></p>
92
+ <h3 style="font-weight: normal;">Optional: Give the room a topic or description</h3>
93
+ <p><textarea class="expanded" cols="40" id="room_topic" name="room[topic]" rows="20"></textarea></p>
94
+ <p class="submit"><input class="primary" name="commit" type="submit" value="Create the room" />
95
+ <span id="new_room_cancel_link"> or
96
+ <a class="admin show_hide_toggler_new_room" href="#" onclick="$('new_room').showHide.toggle(); return false;">Cancel</a></span></p>
97
+ </form> </div>
98
+ </div>
99
+ </div>
100
+ </div><script type="text/javascript">
101
+ //<![CDATA[
102
+ new ShowHide('new_room', {"beforeToggle": function(showHide) {Form.reset('new_room_form'); Element.update('new_room_form_errors', '')}, "afterToggle": function(showHide) {if (/MSIE/.test(navigator.userAgent)) {Element.hide(document.body);Element.show(document.body);};Field.activate('room_name')}})
103
+ //]]>
104
+ </script></div>
105
+
106
+ <div id="rooms">
107
+ <table class="lobby">
108
+ <tr>
109
+ <td class="lobby_room" style="vertical-align: top; width: 33%;"><div id="room_17715" class="room full shaded">
110
+ <h2>
111
+ Just Fishin
112
+ </h2>
113
+
114
+ <div class="updated">
115
+
116
+ Full
117
+ <span class="active"> Active 7 minutes ago</span>
118
+ </div>
119
+ <p>Sargasm: Deriving far too much satisfaction from glibly berating another with sarcasm.
120
+
121
+ Ex: &quot;Oh, thanks a lot for drinking my last beer! No, it's my fault... if I wanted it for myself, I shouldn't have put it in the fridge!&quot;
122
+ &quot;Dude, don't have a sargasm</p>
123
+
124
+
125
+ <ul class="participant-list" id="participant_list-17715">
126
+ <li class="user nubbin_region" id="user_38447">
127
+
128
+ <span class="name">Caribou Barbie</span>
129
+
130
+ </li>
131
+ <li class="user nubbin_region idle" id="user_39723">
132
+
133
+ <span class="name">git</span>
134
+
135
+ </li>
136
+ <li class="user nubbin_region" id="user_38449">
137
+
138
+ <span class="name">Joe Sixpack</span>
139
+
140
+ </li>
141
+ <li class="user nubbin_region idle" id="user_38445">
142
+
143
+ <span class="name">Billy Bob</span>
144
+
145
+ </li>
146
+ </ul>
147
+
148
+ </div>
149
+ </td>
150
+ <td class="lobby_room" style="vertical-align: top; width: 33%;">&nbsp;</td>
151
+ <td class="lobby_room" style="vertical-align: top; width: 33%;">&nbsp;</td>
152
+ </tr>
153
+ </table>
154
+
155
+ </div>
156
+ </div>
157
+
158
+ <script type="text/javascript">
159
+ //<![CDATA[
160
+ Ajax.Responders.register({
161
+ onCreate: function() {
162
+ if (Ajax.activeRequestCount > 0)
163
+ Element.show('new_room_spinner');
164
+ },
165
+ onComplete: function() {
166
+ if (Ajax.activeRequestCount == 0)
167
+ Element.hide('new_room_spinner');
168
+ }
169
+ });
170
+
171
+ //]]>
172
+ </script>
173
+ <script type="text/javascript">
174
+ //<![CDATA[
175
+ new PeriodicalExecuter(function() {new Ajax.Request('http://fish.campfirenow.com/rooms', {asynchronous:true, evalScripts:true})}, 60)
176
+ //]]>
177
+ </script>
178
+
179
+ <p style="clear: both;">&nbsp;</p>
180
+
181
+ </div>
182
+
183
+ <div class="bottom">&nbsp;</div>
184
+ <div id="Footer">
185
+ <strong><a href="http://www.campfirenow.com/help" target=_blank>FAQs and Help</a></strong> |
186
+ <a href="http://www.campfirenow.com/privacy.html" target=_blank>Privacy Policy</a> |
187
+ <a href="http://www.campfirenow.com/terms.html" target=_blank>Terms of Service</a>
188
+ </div>
189
+
190
+ </div>
191
+
192
+
193
+ </div>
194
+ </div>
195
+
196
+
197
+ </body>
198
+ </html>
@@ -0,0 +1,192 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3
+
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>Chat rooms</title>
7
+ <link href="/stylesheets/screen.css?1224558404" media="all" rel="stylesheet" type="text/css" />
8
+ <!--[if lte IE 6]>
9
+ <style type="text/css">
10
+ @import url("/stylesheets/screen-ie.css?1224558404");
11
+ </style>
12
+ <![endif]-->
13
+ <!--[if IE 7]>
14
+ <style type="text/css">
15
+ @import url("/stylesheets/screen-ie-7.css?1224558404");
16
+ </style>
17
+ <![endif]-->
18
+
19
+ <link href="/stylesheets/print.css?1224558404" media="print" rel="stylesheet" type="text/css" />
20
+ <link href="/stylesheets/blue.css?1224558404" media="screen" rel="stylesheet" title="Theme" type="text/css" />
21
+ <script src="/javascripts/prototype.js?1224558404" type="text/javascript"></script>
22
+ <script src="/javascripts/effects.js?1224558404" type="text/javascript"></script>
23
+ <script src="/javascripts/application.js?1224558404" type="text/javascript"></script>
24
+ <script src="/javascripts/nubbins.js?1224558404" type="text/javascript"></script>
25
+ <script src="/javascripts/campfire.js?1224558404" type="text/javascript"></script>
26
+ <script src="/javascripts/javascript_flash_gateway.js?1224558404" type="text/javascript"></script>
27
+ </head>
28
+
29
+ <body class="lobby">
30
+
31
+
32
+
33
+
34
+ <div id="Header">
35
+ <div id="Tabs">
36
+ <ul id="MainTabs">
37
+ <li><a href="http://fish.campfirenow.com/" class="current">Lobby</a></li>
38
+
39
+
40
+
41
+ <li><a href="http://fish.campfirenow.com/room/179715" class="chat" id="room_tab-17715">Just Fishin</a></li>
42
+
43
+
44
+
45
+
46
+ <li><a href="http://fish.campfirenow.com/files+transcripts" class="" style="margin-left: 8px">Files, Transcripts &amp; Search</a></li>
47
+
48
+ <li style="float: right;" class="logout"><a href="http://fish.campfirenow.com/logout">Logout</a></li>
49
+ <li style="float: right" class="logout"><a href="/member/edit">My account</a></li>
50
+
51
+
52
+ </ul>
53
+ </div>
54
+ </div>
55
+
56
+
57
+ <div id="Wrapper">
58
+ <div id="Container">
59
+
60
+
61
+
62
+
63
+ <div class="Full">
64
+ <div class="col">
65
+
66
+ <div id="lobby">
67
+ <h1>
68
+ <span><a class="admin toggle show_hide_toggler_new_room" href="#" id="create_room_link" onclick="$('new_room').showHide.toggle(); return false;">Create a new room</a></span>
69
+ Chat rooms
70
+ </h1>
71
+
72
+ <div class="currentChatters">
73
+ 3 people currently chatting
74
+ <span>
75
+ <br />You're near your simultaneous chatter limit of 4.
76
+ Ask <a href="mailto:bob@billy.com">Billy Bob</a> to upgrade the account.
77
+ </span>
78
+
79
+ </div>
80
+ <div class="show_hide_wrapper"><div class=" showhide" id="new_room" style="display: none"><div class="basic_form_wrapper">
81
+ <div class="basic_form">
82
+ <div class="explanation">
83
+ <h3>Create a new room</h3>
84
+ <p>All chats take place in rooms. You can create as many rooms as you'd like.</p>
85
+ <p>Consider making rooms for client projects, general discussions, specific meetings/events, and more.</p>
86
+ <div class="spinner" id="new_room_spinner" style="display: none">&nbsp;</div>
87
+ </div>
88
+ <div id="new_room_form_errors"></div>
89
+ <div class="body">
90
+ <form action="http://fish.campfirenow.com/account/create/room?from=lobby" id="new_room_form" method="post" onsubmit="$(this).down('input[type=submit]').disable(); Element.hide('new_room_cancel_link'); new Ajax.Request('http://fish.campfirenow.com/account/create/room?from=lobby', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;"> <h3>Name the room</h3>
91
+ <p><input class="big expanded" id="room_name" name="room[name]" size="30" type="text" /></p>
92
+ <h3 style="font-weight: normal;">Optional: Give the room a topic or description</h3>
93
+ <p><textarea class="expanded" cols="40" id="room_topic" name="room[topic]" rows="20"></textarea></p>
94
+ <p class="submit"><input class="primary" name="commit" type="submit" value="Create the room" />
95
+ <span id="new_room_cancel_link"> or
96
+ <a class="admin show_hide_toggler_new_room" href="#" onclick="$('new_room').showHide.toggle(); return false;">Cancel</a></span></p>
97
+ </form> </div>
98
+ </div>
99
+ </div>
100
+ </div><script type="text/javascript">
101
+ //<![CDATA[
102
+ new ShowHide('new_room', {"beforeToggle": function(showHide) {Form.reset('new_room_form'); Element.update('new_room_form_errors', '')}, "afterToggle": function(showHide) {if (/MSIE/.test(navigator.userAgent)) {Element.hide(document.body);Element.show(document.body);};Field.activate('room_name')}})
103
+ //]]>
104
+ </script></div>
105
+
106
+ <div id="rooms">
107
+ <table class="lobby">
108
+ <tr>
109
+ <td class="lobby_room" style="vertical-align: top; width: 33%;"><div id="room_17715" class="room shaded">
110
+ <h2>
111
+
112
+ <a href="http://fish.campfirenow.com/room/17715">Just Fishin</a>
113
+ </h2>
114
+
115
+ <div class="updated">
116
+ <span class="active"> Active 12 minutes ago</span>
117
+ </div>
118
+ <p>Sargasm: Deriving far too much satisfaction from glibly berating another with sarcasm.
119
+
120
+ Ex: &quot;Oh, thanks a lot for drinking my last beer! No, it's my fault... if I wanted it for myself, I shouldn't have put it in the fridge!&quot;
121
+ &quot;Dude, don't have a sargasm</p>
122
+
123
+
124
+ <ul class="participant-list" id="participant_list-17715">
125
+ <li class="user nubbin_region" id="user_38447">
126
+
127
+ <span class="name">Caribou Barbie</span>
128
+
129
+ </li>
130
+ <li class="user nubbin_region" id="user_38449">
131
+
132
+ <span class="name">Joe Sixpack</span>
133
+
134
+ </li>
135
+ <li class="user nubbin_region" id="user_38445">
136
+
137
+ <span class="name">Billy Bob</span>
138
+
139
+ </li>
140
+ </ul>
141
+
142
+ </div>
143
+ </td>
144
+ <td class="lobby_room" style="vertical-align: top; width: 33%;">&nbsp;</td>
145
+ <td class="lobby_room" style="vertical-align: top; width: 33%;">&nbsp;</td>
146
+ </tr>
147
+ </table>
148
+
149
+ </div>
150
+ </div>
151
+
152
+ <script type="text/javascript">
153
+ //<![CDATA[
154
+ Ajax.Responders.register({
155
+ onCreate: function() {
156
+ if (Ajax.activeRequestCount > 0)
157
+ Element.show('new_room_spinner');
158
+ },
159
+ onComplete: function() {
160
+ if (Ajax.activeRequestCount == 0)
161
+ Element.hide('new_room_spinner');
162
+ }
163
+ });
164
+
165
+ //]]>
166
+ </script>
167
+ <script type="text/javascript">
168
+ //<![CDATA[
169
+ new PeriodicalExecuter(function() {new Ajax.Request('http://fish.campfirenow.com/rooms', {asynchronous:true, evalScripts:true})}, 60)
170
+ //]]>
171
+ </script>
172
+
173
+ <p style="clear: both;">&nbsp;</p>
174
+
175
+ </div>
176
+
177
+ <div class="bottom">&nbsp;</div>
178
+ <div id="Footer">
179
+ <strong><a href="http://www.campfirenow.com/help" target=_blank>FAQs and Help</a></strong> |
180
+ <a href="http://www.campfirenow.com/privacy.html" target=_blank>Privacy Policy</a> |
181
+ <a href="http://www.campfirenow.com/terms.html" target=_blank>Terms of Service</a>
182
+ </div>
183
+
184
+ </div>
185
+
186
+
187
+ </div>
188
+ </div>
189
+
190
+
191
+ </body>
192
+ </html>
@@ -0,0 +1,133 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3
+
4
+ <head>
5
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
6
+ <title>Campfire: Today, May 5</title>
7
+ <link href="/stylesheets/screen.css?1238215612" media="all" rel="stylesheet" type="text/css" />
8
+ <!--[if lte IE 6]>
9
+ <style type="text/css">
10
+ @import url("/stylesheets/screen-ie.css?1238215612");
11
+ </style>
12
+ <![endif]-->
13
+ <!--[if IE 7]>
14
+ <style type="text/css">
15
+ @import url("/stylesheets/screen-ie-7.css?1238215612");
16
+ </style>
17
+ <![endif]-->
18
+
19
+ <!--[if lte IE 6]>
20
+ <style type="text/css">
21
+ @import url("/stylesheets/transcript-ie.css?1238215612");
22
+ </style>
23
+ <![endif]-->
24
+ <!--[if IE 7]>
25
+ <style type="text/css">
26
+ @import url("/stylesheets/transcript-ie-7.css?1238215612");
27
+ </style>
28
+ <![endif]-->
29
+
30
+ <link href="/stylesheets/print.css?1238215612" media="print" rel="stylesheet" type="text/css" />
31
+ <link href="/stylesheets/pink.css?1238215612" media="screen" rel="stylesheet" title="Theme" type="text/css" />
32
+ <script src="/javascripts/prototype.js?1238215612" type="text/javascript"></script>
33
+ <script src="/javascripts/effects.js?1238215612" type="text/javascript"></script>
34
+ <script src="/javascripts/sound.js?1238215612" type="text/javascript"></script>
35
+ <script src="/javascripts/application.js?1238215612" type="text/javascript"></script>
36
+ <script src="/javascripts/nubbins.js?1238215612" type="text/javascript"></script>
37
+ <script src="/javascripts/campfire.js?1238215612" type="text/javascript"></script>
38
+ <script src="/javascripts/javascript_flash_gateway.js?1238215612" type="text/javascript"></script>
39
+ <script type="text/javascript">
40
+ soundManager.url = "/movies/";
41
+ </script>
42
+ </head>
43
+
44
+ <body class="transcript">
45
+
46
+
47
+
48
+
49
+
50
+ <div id="Wrapper">
51
+ <div id="Container">
52
+
53
+
54
+
55
+
56
+ <div class="Left">
57
+ <div class="col">
58
+
59
+ <h1 class="date"><span class="print_only">Desk:Marcel &mdash;</span> Today, May 5</h1>
60
+
61
+ <p class="adjacent_transcripts">&larr; <a href="https://care2.campfirenow.com/room/214625/transcript/2009/05/04">Yesterday, May 4</a></p>
62
+
63
+
64
+ <div id="chat-wrapper">
65
+ <table class="chat">
66
+ <tbody id="chat">
67
+ <tr class="timestamp_message message" id="message_128062968" style="">
68
+ <td class="date"><span>May 5</span></td>
69
+ <td class="time"><div> 9:35 AM</div></td>
70
+ </tr>
71
+
72
+ <tr class="enter_message message user_407349" id="message_128062969" style="">
73
+ <td class="person">Marcel</td>
74
+ <td class="body"><div>has entered the room</div></td>
75
+ </tr>
76
+ <tr class="timestamp_message message" id="message_128093469" style="">
77
+ <td class="date"><span style="display:none">May 5</span></td>
78
+ <td class="time"><div>11:20 AM</div></td>
79
+ </tr>
80
+
81
+ <tr class="text_message message user_407349 you" id="message_128093470" style="">
82
+ <td class="person"><span>Marcel</span></td>
83
+ <td class="body"><div>Hello World</div></td>
84
+ </tr>
85
+
86
+ </tbody>
87
+ </table>
88
+ <style type="text/css">#chat td.body div {}</style>
89
+
90
+
91
+ <p class="adjacent_transcripts">&larr; <a href="https://care2.campfirenow.com/room/214625/transcript/2009/05/04">Yesterday, May 4</a></p>
92
+
93
+ </div>
94
+
95
+
96
+ </div>
97
+ <div class="bottom">&nbsp;</div>
98
+ </div>
99
+
100
+ <script type="text/javascript">
101
+ Campfire.Responders = ['Transcript', 'WindowManager', 'SoundManager'];
102
+ window.chat = new Campfire.Chat({transcriptElement: 'chat', sounds: {"crickets": "hears crickets chirping", "trombone": "plays a sad trombone", "rimshot": "plays a rimshot"}, soundsEnabled: true});
103
+ </script>
104
+
105
+
106
+ <div class="Right">
107
+ <div class="col">
108
+ <div id="Title">
109
+ <div id="room_title">
110
+ <h1>Desk:Marcel</h1>
111
+ </div>
112
+ </div>
113
+
114
+ <div class="participants">
115
+ <h3>People in this transcript</h3>
116
+
117
+ <ul id="participants">
118
+ <li>Marcel</li>
119
+ </ul>
120
+ </div>
121
+
122
+ <div class="files">
123
+ </div>
124
+
125
+ </div>
126
+ </div>
127
+
128
+ </div>
129
+ </div>
130
+
131
+
132
+ </body>
133
+ </html>
data/spec/spec.opts ADDED
@@ -0,0 +1 @@
1
+ --colour
@@ -0,0 +1,4 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
2
+ require 'rubygems'
3
+ require 'spec'
4
+ require 'tinder'
@@ -0,0 +1,4 @@
1
+ # Rename to credentials.rb
2
+ SUBDOMAIN = 'test'
3
+ USER, PASS = 'user@example.com', 'secret'
4
+ SSL = false
@@ -0,0 +1,3 @@
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ require File.dirname(__FILE__) + '/../lib/tinder.rb'
data/tinder.gemspec ADDED
@@ -0,0 +1,77 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{tinder}
8
+ s.version = "1.2.2"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Brandon Keepers"]
12
+ s.date = %q{2009-09-12}
13
+ s.description = %q{An API for interfacing with Campfire, the 37Signals chat application.}
14
+ s.email = %q{brandon@opensoul.org}
15
+ s.extra_rdoc_files = [
16
+ "README.txt"
17
+ ]
18
+ s.files = [
19
+ ".gitignore",
20
+ "CHANGELOG.txt",
21
+ "Manifest.txt",
22
+ "README.txt",
23
+ "Rakefile",
24
+ "VERSION",
25
+ "init.rb",
26
+ "lib/tinder.rb",
27
+ "lib/tinder/campfire.rb",
28
+ "lib/tinder/multipart.rb",
29
+ "lib/tinder/room.rb",
30
+ "site/index.html",
31
+ "site/stylesheets/style.css",
32
+ "spec/campfire_spec.rb",
33
+ "spec/html/full_lobby.html",
34
+ "spec/html/normal_lobby.html",
35
+ "spec/html/transcript.html",
36
+ "spec/spec.opts",
37
+ "spec/spec_helper.rb",
38
+ "test/remote/credentials.rb.example",
39
+ "test/remote/remote_campfire_test.rb",
40
+ "test/test_helper.rb",
41
+ "tinder.gemspec"
42
+ ]
43
+ s.homepage = %q{http://github.com/collectiveidea/tinder}
44
+ s.rdoc_options = ["--charset=UTF-8"]
45
+ s.require_paths = ["lib"]
46
+ s.rubyforge_project = %q{tinder}
47
+ s.rubygems_version = %q{1.3.3}
48
+ s.summary = %q{An (unofficial) Campfire API}
49
+ s.test_files = [
50
+ "spec/campfire_spec.rb",
51
+ "spec/spec_helper.rb",
52
+ "test/remote/remote_campfire_test.rb",
53
+ "test/test_helper.rb"
54
+ ]
55
+
56
+ if s.respond_to? :specification_version then
57
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
+ s.specification_version = 3
59
+
60
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
61
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
62
+ s.add_runtime_dependency(%q<hpricot>, [">= 0"])
63
+ s.add_runtime_dependency(%q<mime-types>, [">= 0"])
64
+ s.add_development_dependency(%q<rspec>, [">= 0"])
65
+ else
66
+ s.add_dependency(%q<activesupport>, [">= 0"])
67
+ s.add_dependency(%q<hpricot>, [">= 0"])
68
+ s.add_dependency(%q<mime-types>, [">= 0"])
69
+ s.add_dependency(%q<rspec>, [">= 0"])
70
+ end
71
+ else
72
+ s.add_dependency(%q<activesupport>, [">= 0"])
73
+ s.add_dependency(%q<hpricot>, [">= 0"])
74
+ s.add_dependency(%q<mime-types>, [">= 0"])
75
+ s.add_dependency(%q<rspec>, [">= 0"])
76
+ end
77
+ end
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: 1.2.1
4
+ version: 1.2.2
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: 2009-09-06 00:00:00 -04:00
12
+ date: 2009-09-12 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -43,14 +43,14 @@ dependencies:
43
43
  version: "0"
44
44
  version:
45
45
  - !ruby/object:Gem::Dependency
46
- name: hoe
46
+ name: rspec
47
47
  type: :development
48
48
  version_requirement:
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
51
  - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: 2.0.0
53
+ version: "0"
54
54
  version:
55
55
  description: An API for interfacing with Campfire, the 37Signals chat application.
56
56
  email: brandon@opensoul.org
@@ -59,28 +59,38 @@ executables: []
59
59
  extensions: []
60
60
 
61
61
  extra_rdoc_files:
62
- - CHANGELOG.txt
63
- - Manifest.txt
64
62
  - README.txt
65
63
  files:
64
+ - .gitignore
66
65
  - CHANGELOG.txt
67
66
  - Manifest.txt
68
67
  - README.txt
69
68
  - Rakefile
69
+ - VERSION
70
70
  - init.rb
71
71
  - lib/tinder.rb
72
72
  - lib/tinder/campfire.rb
73
73
  - lib/tinder/multipart.rb
74
74
  - lib/tinder/room.rb
75
- - lib/tinder/version.rb
75
+ - site/index.html
76
+ - site/stylesheets/style.css
77
+ - spec/campfire_spec.rb
78
+ - spec/html/full_lobby.html
79
+ - spec/html/normal_lobby.html
80
+ - spec/html/transcript.html
81
+ - spec/spec.opts
82
+ - spec/spec_helper.rb
83
+ - test/remote/credentials.rb.example
84
+ - test/remote/remote_campfire_test.rb
85
+ - test/test_helper.rb
86
+ - tinder.gemspec
76
87
  has_rdoc: true
77
- homepage: http://tinder.rubyforge.org
88
+ homepage: http://github.com/collectiveidea/tinder
78
89
  licenses: []
79
90
 
80
91
  post_install_message:
81
92
  rdoc_options:
82
- - --main
83
- - README.txt
93
+ - --charset=UTF-8
84
94
  require_paths:
85
95
  - lib
86
96
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -103,4 +113,7 @@ signing_key:
103
113
  specification_version: 3
104
114
  summary: An (unofficial) Campfire API
105
115
  test_files:
116
+ - spec/campfire_spec.rb
117
+ - spec/spec_helper.rb
106
118
  - test/remote/remote_campfire_test.rb
119
+ - test/test_helper.rb
@@ -1,9 +0,0 @@
1
- module Tinder #:nodoc:
2
- module VERSION #:nodoc:
3
- MAJOR = 1
4
- MINOR = 2
5
- TINY = 1
6
-
7
- STRING = [MAJOR, MINOR, TINY].join('.')
8
- end
9
- end