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 +3 -0
- data/README.txt +15 -10
- data/Rakefile +55 -28
- data/VERSION +1 -0
- data/lib/tinder.rb +3 -1
- data/lib/tinder/campfire.rb +2 -2
- data/site/index.html +101 -0
- data/site/stylesheets/style.css +77 -0
- data/spec/campfire_spec.rb +225 -0
- data/spec/html/full_lobby.html +198 -0
- data/spec/html/normal_lobby.html +192 -0
- data/spec/html/transcript.html +133 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +4 -0
- data/test/remote/credentials.rb.example +4 -0
- data/test/test_helper.rb +3 -0
- data/tinder.gemspec +77 -0
- metadata +23 -10
- data/lib/tinder/version.rb +0 -9
data/.gitignore
ADDED
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
|
27
|
+
script/plugin install git://github.com/collectiveidea/tinder.git
|
35
28
|
|
36
|
-
==
|
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
|
-
|
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 '
|
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
|
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
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
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
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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 "
|
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
|
-
|
9
|
+
require 'tinder/multipart'
|
10
|
+
require 'tinder/campfire'
|
11
|
+
require 'tinder/room'
|
10
12
|
|
11
13
|
module Tinder
|
12
14
|
class Error < StandardError; end
|
data/lib/tinder/campfire.rb
CHANGED
@@ -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
|
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("path/to/your/file.txt")</code></pre>
|
49
|
+
|
50
|
+
<h3>Listening</h3>
|
51
|
+
<pre><code class="ruby">room.listen
|
52
|
+
#=> [{:person=>"Brandon", :message=>"I'm getting very sleepy", :user_id=>"148583", :id=>"16434003"}]
|
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
|
+
#=> [{:message=>"foobar!", :user_id=>"99999", :person=>"Brandon", :id=>"18659245", :timestamp=>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 & 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"> </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: "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!"
|
122
|
+
"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%;"> </td>
|
151
|
+
<td class="lobby_room" style="vertical-align: top; width: 33%;"> </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;"> </p>
|
180
|
+
|
181
|
+
</div>
|
182
|
+
|
183
|
+
<div class="bottom"> </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 & 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"> </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: "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!"
|
121
|
+
"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%;"> </td>
|
145
|
+
<td class="lobby_room" style="vertical-align: top; width: 33%;"> </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;"> </p>
|
174
|
+
|
175
|
+
</div>
|
176
|
+
|
177
|
+
<div class="bottom"> </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 —</span> Today, May 5</h1>
|
60
|
+
|
61
|
+
<p class="adjacent_transcripts">← <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">← <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"> </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
|
data/spec/spec_helper.rb
ADDED
data/test/test_helper.rb
ADDED
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.
|
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-
|
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:
|
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:
|
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
|
-
-
|
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
|
88
|
+
homepage: http://github.com/collectiveidea/tinder
|
78
89
|
licenses: []
|
79
90
|
|
80
91
|
post_install_message:
|
81
92
|
rdoc_options:
|
82
|
-
- --
|
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
|