tinder 1.9.2 → 1.9.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f2d55e9349a7780126ad86990aa8620357ea6002
4
+ data.tar.gz: eb2f2fe2b5990203b2a5f4f55e5dfea2a48dc9e7
5
+ SHA512:
6
+ metadata.gz: c914892452c4af7dc20c266d6042356ab8ba9e3a4d681695e4d74c998a66f6370eaa7936be12dc68a1d987ce413eae6d0c070ff4c3e0f225cfa14cc4c359af26
7
+ data.tar.gz: ef2db0dae19f724d07c668e4f49bc4f3ace90db8019d6ee2c3298c181988640a217447d55caf2d0c205660173072bfecd2870981ecc1d27f0e20a25e9d478520
@@ -7,6 +7,8 @@ Tinder is a library for interfacing with Campfire, the chat application from 37S
7
7
  campfire = Tinder::Campfire.new 'mysubdomain', :token => '546884b3d8fee4d80665g561caf7h9f3ea7b999e'
8
8
  # or you can still use username/password and Tinder will look up your token
9
9
  # campfire = Tinder::Campfire.new 'mysubdomain', :username => 'user', :password => 'pass'
10
+ # or if you have an OAuth token then you can use that to connect
11
+ # campfire = Tinder::Campfire.new 'mysubdomain', :oauth_token => '546884b3d8fee4d80665g561caf7h9f3ea7b999e'
10
12
 
11
13
  room = campfire.rooms.first
12
14
  room.rename 'New Room Names'
@@ -25,6 +25,7 @@ module Tinder
25
25
 
26
26
  def self.raw_connection
27
27
  @raw_connection ||= Faraday.new do |builder|
28
+ builder.use Faraday::Request::Multipart
28
29
  builder.use FaradayMiddleware::Mashify
29
30
  builder.use FaradayMiddleware::ParseJson
30
31
  builder.use Faraday::Response::RemoveWhitespace
@@ -40,9 +41,15 @@ module Tinder
40
41
  @options.merge!(options)
41
42
  @uri = URI.parse("#{@options[:ssl] ? 'https' : 'http' }://#{subdomain}.#{HOST}")
42
43
  @token = options[:token]
43
-
44
- connection.basic_auth token, 'X'
45
- raw_connection.basic_auth token, 'X'
44
+ @oauth_token = options[:oauth_token]
45
+
46
+ if @oauth_token
47
+ connection.headers["Authorization"] = "Bearer #{@oauth_token}"
48
+ raw_connection.headers["Authorization"] = "Bearer #{@oauth_token}"
49
+ else
50
+ connection.basic_auth token, 'X'
51
+ raw_connection.basic_auth token, 'X'
52
+ end
46
53
  end
47
54
 
48
55
  def basic_auth_settings
@@ -1,4 +1,6 @@
1
1
  # encoding: UTF-8
2
+ require 'time'
3
+
2
4
  module Tinder
3
5
  # A campfire room
4
6
  class Room
@@ -92,25 +94,37 @@ module Tinder
92
94
 
93
95
  # Get the list of users currently chatting for this room
94
96
  def users
97
+ @users ||= current_users
98
+ end
99
+
100
+ def current_users
95
101
  reload!
96
- @users
102
+ @current_users
97
103
  end
98
104
 
99
- # return the user with the given id; if it isn't in our room cache, do a request to get it
105
+ # return the user with the given id; if it isn't in our room cache,
106
+ # do a request to get it
100
107
  def user(id)
101
108
  if id
102
- user = users.detect {|u| u[:id] == id }
103
- unless user
104
- user_data = connection.get("/users/#{id}.json")
105
- user = user_data && user_data[:user]
106
- end
107
- user[:created_at] = Time.parse(user[:created_at])
109
+ cached_user = users.detect {|u| u[:id] == id }
110
+ user = cached_user || fetch_user(id)
111
+ self.users << user
108
112
  user
109
113
  end
110
114
  end
111
115
 
112
- # Listen for new messages in the room, yielding them to the provided block as they arrive.
113
- # Each message is a hash with:
116
+ # Perform a request for the user with the given ID
117
+ def fetch_user(id)
118
+ user_data = connection.get("/users/#{id}.json")
119
+ user = user_data && user_data[:user]
120
+ user[:created_at] = Time.parse(user[:created_at])
121
+ user
122
+ end
123
+
124
+ # Modifies a hash representation of a Campfire message. Expands +:user_id+
125
+ # to a full hash at +:user+, generates Timestamp from +:created_at+.
126
+ #
127
+ # Full returned hash:
114
128
  # * +:body+: the body of the message
115
129
  # * +:user+: Campfire user, which is itself a hash, of:
116
130
  # * +:id+: User id
@@ -123,6 +137,14 @@ module Tinder
123
137
  # * +:type+: Campfire message type
124
138
  # * +:room_id+: Campfire room id
125
139
  # * +:created_at+: Message creation timestamp
140
+ def parse_message(message)
141
+ message[:user] = user(message.delete(:user_id))
142
+ message[:created_at] = Time.parse(message[:created_at])
143
+ message
144
+ end
145
+
146
+ # Listen for new messages in the room, parsing them with #parse_message
147
+ # and then yielding them to the provided block as they arrive.
126
148
  #
127
149
  # room.listen do |m|
128
150
  # room.speak "Go away!" if m[:body] =~ /Java/i
@@ -137,7 +159,6 @@ module Tinder
137
159
  require 'hashie'
138
160
  require 'multi_json'
139
161
  require 'twitter/json_stream'
140
- require 'time'
141
162
 
142
163
  auth = connection.basic_auth_settings
143
164
  options = {
@@ -154,8 +175,7 @@ module Tinder
154
175
  Tinder.logger.info "Listening to #{@name}…"
155
176
  @stream.each_item do |message|
156
177
  message = Hashie::Mash.new(MultiJson.decode(message))
157
- message[:user] = user(message.delete(:user_id))
158
- message[:created_at] = Time.parse(message[:created_at])
178
+ message = parse_message(message)
159
179
  yield(message)
160
180
  end
161
181
 
@@ -184,35 +204,21 @@ module Tinder
184
204
  @stream = nil
185
205
  end
186
206
 
187
- # Get the transcript for the given date (Returns a hash in the same format as #listen)
188
- #
189
- # room.transcript(room.available_transcripts.first)
190
- # #=> [{:message=>"foobar!",
191
- # :user_id=>"99999",
192
- # :person=>"Brandon",
193
- # :id=>"18659245",
194
- # :timestamp=>=>Tue May 05 07:15:00 -0700 2009}]
207
+ # Get the transcript for the given date (returns an array of messages parsed
208
+ # via #parse_message, see #parse_message for format of returned message)
195
209
  #
196
- # The timestamp slot will typically have a granularity of five minutes.
197
- #
198
- def transcript(transcript_date)
199
- url = "/room/#{@id}/transcript/#{transcript_date.to_date.strftime('%Y/%m/%d')}.json"
200
- connection.get(url)['messages'].map do |room|
201
- { :id => room['id'],
202
- :user_id => room['user_id'],
203
- :message => room['body'],
204
- :timestamp => Time.parse(room['created_at']) }
210
+ def transcript(transcript_date = Date.today)
211
+ unless transcript_date.is_a?(Date)
212
+ transcript_date = transcript_date.to_date
213
+ end
214
+ url = "/room/#{@id}/transcript/#{transcript_date.strftime('%Y/%m/%d')}.json"
215
+ connection.get(url)['messages'].map do |message|
216
+ parse_message(message)
205
217
  end
206
218
  end
207
219
 
208
- # Search transcripts for a specific term
209
- #
210
- # room.search("bobloblaw")
211
- # #=> [{:message=>"foo!",
212
- # :user_id=>"99999",
213
- # :person=>"Brandon",
214
- # :id=>"18659245",
215
- # :timestamp=>=>Tue May 05 07:15:00 -0700 2009}]
220
+ # Search transcripts for the given term (returns an array of messages parsed
221
+ # via #parse_message, see #parse_message for format of returned message)
216
222
  #
217
223
  def search(term)
218
224
  encoded_term = URI.encode(term)
@@ -221,11 +227,8 @@ module Tinder
221
227
  message[:room_id] == id
222
228
  end
223
229
 
224
- room_messages.map do |room|
225
- { :id => room['id'],
226
- :user_id => room['user_id'],
227
- :message => room['body'],
228
- :timestamp => Time.parse(room['created_at']) }
230
+ room_messages.map do |message|
231
+ parse_message(message)
229
232
  end
230
233
  end
231
234
 
@@ -244,14 +247,13 @@ module Tinder
244
247
  # Accepts a hash for options:
245
248
  # * +:limit+: Restrict the number of messages returned
246
249
  # * +:since_message_id+: Get messages created after the specified message id
247
- def recent(limit=10, since_message_id=nil)
250
+ def recent(options = {})
251
+ options = { :limit => 10, :since_message_id => nil }.merge(options)
248
252
  # Build url manually, faraday has to be 8.0 to do this
249
- url = "#{room_url_for(:recent)}?limit=#{limit}&since_message_id=#{since_message_id}"
253
+ url = "#{room_url_for(:recent)}?limit=#{options[:limit]}&since_message_id=#{options[:since_message_id]}"
250
254
 
251
255
  connection.get(url)['messages'].map do |msg|
252
- msg[:created_at] = Time.parse(msg[:created_at])
253
- msg[:user] = user(msg[:user_id])
254
- msg
256
+ parse_message(msg)
255
257
  end
256
258
  end
257
259
 
@@ -270,7 +272,10 @@ module Tinder
270
272
  @full = attributes['full']
271
273
  @open_to_guests = attributes['open_to_guests']
272
274
  @active_token_value = attributes['active_token_value']
273
- @users = attributes['users']
275
+ @current_users = attributes['users'].map do |user|
276
+ user[:created_at] = Time.parse(user[:created_at])
277
+ user
278
+ end
274
279
 
275
280
  @loaded = true
276
281
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: UTF-8
2
2
  module Tinder
3
- VERSION = '1.9.2' unless defined?(::Tinder::VERSION)
3
+ VERSION = '1.9.3' unless defined?(::Tinder::VERSION)
4
4
  end
@@ -25,7 +25,7 @@ describe Tinder::Campfire do
25
25
  end
26
26
  end
27
27
 
28
- describe "find_by_id" do
28
+ describe "find_room_by_id" do
29
29
  before do
30
30
  stub_connection(@campfire.connection) do |stub|
31
31
  stub.get('/rooms.json') {[200, {}, fixture('rooms.json')]}
@@ -37,6 +37,33 @@ describe Tinder::Connection do
37
37
  connection = Tinder::Connection.new('test', :token => 'mytoken')
38
38
  lambda { connection.get('/rooms.json') }.should_not raise_error
39
39
  end
40
+
41
+ end
42
+
43
+ describe "oauth" do
44
+ let (:oauth_token) { "myoauthtoken" }
45
+ let (:connection) { Tinder::Connection.new('test', :oauth_token => oauth_token) }
46
+
47
+ before do
48
+ stub_connection(Tinder::Connection) do |stub|
49
+ stub.get("/rooms.json") {[200, {}, fixture('rooms.json')]}
50
+ end
51
+ end
52
+
53
+ it "should authenticate" do
54
+ lambda { connection.get('/rooms.json') }.should_not raise_error
55
+ end
56
+
57
+ it "should set the oauth_token" do
58
+ connection.get('/rooms.json')
59
+ connection.options[:oauth_token].should == oauth_token
60
+ end
61
+
62
+ it "should set an Authorization header" do
63
+ connection.get('/rooms.json')
64
+ connection.connection.headers["Authorization"].should == "Bearer #{oauth_token}"
65
+ end
66
+
40
67
  end
41
68
 
42
69
  describe "ssl" do
@@ -1,5 +1,6 @@
1
1
  # encoding: UTF-8
2
2
  require 'spec_helper'
3
+ require 'date'
3
4
 
4
5
  describe Tinder::Room do
5
6
  before do
@@ -14,11 +15,11 @@ describe Tinder::Room do
14
15
  # Get EventMachine out of the way. We could be using em-spec, but seems like overkill
15
16
  require 'twitter/json_stream'
16
17
  module EventMachine; def self.run; yield end end
17
- EventMachine.stub!(:reactor_running?).and_return(true)
18
- @stream = mock(Twitter::JSONStream)
19
- @stream.stub!(:each_item)
20
- @stream.stub!(:on_error)
21
- @stream.stub!(:on_max_reconnects)
18
+ EventMachine.stub(:reactor_running?).and_return(true)
19
+ @stream = double(Twitter::JSONStream)
20
+ @stream.stub(:each_item)
21
+ @stream.stub(:on_error)
22
+ @stream.stub(:on_max_reconnects)
22
23
  end
23
24
 
24
25
  describe "join" do
@@ -69,9 +70,35 @@ describe Tinder::Room do
69
70
  end
70
71
  end
71
72
 
72
- it "should GET the search endpoint with the search term" do
73
+ it "should GET the search endpoint with the search term and filter by room" do
74
+ @room.stub(:id).and_return(490096)
75
+ @room.should_receive(:parse_message).exactly(2).times
73
76
  @room.search("foo")
74
77
  end
78
+
79
+ it "should return empty array if no messages in room" do
80
+ @room.should_receive(:parse_message).never
81
+ @room.search("foo").should be_empty
82
+ end
83
+ end
84
+
85
+ describe "transcript" do
86
+ it "should GET the transcript endpoint with the provided date" do
87
+ stub_connection(@connection) do |stub|
88
+ stub.get('/room/80749/transcript/2012/10/15.json') {[200, {}, fixture("rooms/recent.json")]}
89
+ end
90
+ @room.should_receive(:parse_message).exactly(2).times
91
+ @room.transcript(Date.parse('2012-10-15'))
92
+ end
93
+
94
+ it "should default to today's date" do
95
+ stub_connection(@connection) do |stub|
96
+ stub.get('/room/80749/transcript/1981/03/21.json') {[200, {}, fixture("rooms/recent.json")]}
97
+ end
98
+ Date.stub(:today).and_return(Date.parse('1981-03-21'))
99
+ @room.should_receive(:parse_message).exactly(2).times
100
+ @room.transcript
101
+ end
75
102
  end
76
103
 
77
104
  describe "unlock" do
@@ -88,12 +115,12 @@ describe Tinder::Room do
88
115
 
89
116
  describe "guest_url" do
90
117
  it "should use guest_invite_code if active" do
91
- @room.stub!(:guest_access_enabled? => true, :guest_invite_code => '123')
118
+ @room.stub(:guest_access_enabled? => true, :guest_invite_code => '123')
92
119
  @room.guest_url.should == "https://test.campfirenow.com/123"
93
120
  end
94
121
 
95
122
  it "should return nil when guest access is not enabled" do
96
- @room.stub!(:guest_access_enabled?).and_return(false)
123
+ @room.stub(:guest_access_enabled?).and_return(false)
97
124
  @room.guest_url.should be_nil
98
125
  end
99
126
  end
@@ -167,7 +194,7 @@ describe Tinder::Room do
167
194
  end
168
195
 
169
196
  it "marks the room as listening" do
170
- Twitter::JSONStream.stub!(:connect).and_return(@stream)
197
+ Twitter::JSONStream.stub(:connect).and_return(@stream)
171
198
  lambda {
172
199
  @room.listen { }
173
200
  }.should change(@room, :listening?).from(false).to(true)
@@ -180,8 +207,8 @@ describe Tinder::Room do
180
207
  stub.post('/room/80749/join.json') {[200, {}, ""]}
181
208
  end
182
209
 
183
- Twitter::JSONStream.stub!(:connect).and_return(@stream)
184
- @stream.stub!(:stop)
210
+ Twitter::JSONStream.stub(:connect).and_return(@stream)
211
+ @stream.stub(:stop)
185
212
  end
186
213
 
187
214
  it "changes a listening room to a non-listening room" do
@@ -210,21 +237,94 @@ describe Tinder::Room do
210
237
  stub.get('/room/80749/recent.json') {[
211
238
  200, {}, fixture('rooms/recent.json')
212
239
  ]}
213
- stub.get('/users/1158839.json') {[
214
- 200, {}, fixture('users/me.json')
215
- ]}
216
- stub.get('/users/1158837.json') {[
217
- 200, {}, fixture('users/me.json')
218
- ]}
219
240
  end
220
241
  end
221
242
 
222
243
  it "should get a list of parsed recent messages" do
223
- messages = @room.recent({:limit => 1})
244
+ @room.should_receive(:parse_message).exactly(2).times
245
+ messages = @room.recent
246
+ end
247
+ end
248
+
249
+ describe "parse_message" do
250
+ it "expands user and parses created_at" do
251
+ unparsed_message = {
252
+ :user_id => 123,
253
+ :body => 'An aunt is worth two nieces',
254
+ :created_at => '2012/02/14 16:21:00 +0000'
255
+ }
256
+ expected = {
257
+ :user => {
258
+ :name => 'Dr. Noodles'
259
+ },
260
+ :body => 'An aunt is worth two nieces',
261
+ :created_at => Time.parse('2012/02/14 16:21:00 +0000')
262
+ }
263
+ @room.stub(:user).with(123).and_return({ :name => 'Dr. Noodles' })
264
+
265
+ actual = @room.parse_message(unparsed_message)
266
+ actual.should == expected
267
+ end
268
+ end
269
+
270
+ describe "user" do
271
+ before do
272
+ @room.stub(:current_users).and_return([
273
+ { :id => 1, :name => 'The Amazing Crayon Executive'},
274
+ { :id => 2, :name => 'Lord Pants'},
275
+ ])
276
+ @not_current_user = { :id => 3, :name => 'Patriot Sally'}
277
+ end
278
+
279
+ it "looks up user if not already in room's cache" do
280
+ @room.should_receive(:fetch_user).with(3).
281
+ and_return(@not_current_user)
282
+ @room.user(3).should == @not_current_user
283
+ end
284
+
285
+ it "pulls user from room's cache if user in participant list" do
286
+ @room.should_receive(:fetch_user).never
287
+ user = @room.user(1)
288
+ end
289
+
290
+ it "adds user to cache after first lookup" do
291
+ @room.should_receive(:fetch_user).with(3).at_most(:once).
292
+ and_return(@not_current_user)
293
+ @room.user(3).should == @not_current_user
294
+ @room.user(3).should == @not_current_user
295
+ end
296
+ end
297
+
298
+ describe "fetch_user" do
299
+ before do
300
+ stub_connection(@connection) do |stub|
301
+ stub.get("/users/5.json") {[200, {}, fixture('users/me.json')]}
302
+ end
303
+ end
304
+
305
+ it "requests via GET and returns the requested user's information" do
306
+ @room.fetch_user(5)['name'].should == 'John Doe'
307
+ end
308
+ end
309
+
310
+ describe "current_users" do
311
+ it "returns list of currently participating users" do
312
+ current_users = @room.current_users
313
+ current_users.size.should == 1
314
+ current_users.first[:name].should == 'Brandon Keepers'
315
+ end
316
+ end
317
+
318
+ describe "users" do
319
+ it "returns current users if cache has not been initialized yet" do
320
+ @room.should_receive(:current_users).and_return(:the_whole_spittoon)
321
+ @room.users.should == :the_whole_spittoon
322
+ end
224
323
 
225
- messages.size.should equal(2)
226
- messages.first.size.should equal(8)
227
- messages.first[:user].size.should equal(7)
324
+ it "returns current users plus any added cached users" do
325
+ @room.should_receive(:current_users).and_return([:mia_cuttlefish])
326
+ @room.users << :guy_wearing_new_mexico_as_a_hat
327
+ @room.users.should == [:mia_cuttlefish, :guy_wearing_new_mexico_as_a_hat]
228
328
  end
229
329
  end
230
330
  end
@@ -6,19 +6,19 @@ Gem::Specification.new do |gem|
6
6
  gem.add_dependency 'eventmachine', '~> 1.0'
7
7
  gem.add_dependency 'faraday', '~> 0.8'
8
8
  gem.add_dependency 'faraday_middleware', '~> 0.9'
9
- gem.add_dependency 'hashie', '~> 1.0'
10
- gem.add_dependency 'json', '~> 1.7.5'
9
+ gem.add_dependency 'hashie', ['>= 1.0', '< 3']
10
+ gem.add_dependency 'json', '~> 1.8.0'
11
11
  gem.add_dependency 'mime-types', '~> 1.19'
12
- gem.add_dependency 'multi_json', '~> 1.5'
12
+ gem.add_dependency 'multi_json', '~> 1.7'
13
13
  gem.add_dependency 'twitter-stream', '~> 0.1'
14
14
 
15
15
  gem.add_development_dependency 'fakeweb'
16
16
  gem.add_development_dependency 'rake'
17
17
  gem.add_development_dependency 'rspec'
18
18
 
19
- gem.authors = ["Brandon Keepers", "Brian Ryckbost"]
19
+ gem.authors = ["Brandon Keepers", "Brian Ryckbost", "Tony Coconate"]
20
20
  gem.description = %q{A Ruby API for interfacing with Campfire, the 37Signals chat application.}
21
- gem.email = ['brandon@opensoul.org', 'bryckbost@gmail.com']
21
+ gem.email = ['brandon@opensoul.org', 'bryckbost@gmail.com', 'me@tonycoconate.com']
22
22
  gem.extra_rdoc_files = ['README.markdown']
23
23
  gem.files = `git ls-files`.split("\n")
24
24
  gem.homepage = 'http://github.com/collectiveidea/tinder'
metadata CHANGED
@@ -1,21 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tinder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.2
5
- prerelease:
4
+ version: 1.9.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Brandon Keepers
9
8
  - Brian Ryckbost
9
+ - Tony Coconate
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-01-04 00:00:00.000000000 Z
13
+ date: 2013-09-06 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: eventmachine
17
17
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
18
  requirements:
20
19
  - - ~>
21
20
  - !ruby/object:Gem::Version
@@ -23,7 +22,6 @@ dependencies:
23
22
  type: :runtime
24
23
  prerelease: false
25
24
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
25
  requirements:
28
26
  - - ~>
29
27
  - !ruby/object:Gem::Version
@@ -31,7 +29,6 @@ dependencies:
31
29
  - !ruby/object:Gem::Dependency
32
30
  name: faraday
33
31
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
32
  requirements:
36
33
  - - ~>
37
34
  - !ruby/object:Gem::Version
@@ -39,7 +36,6 @@ dependencies:
39
36
  type: :runtime
40
37
  prerelease: false
41
38
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
39
  requirements:
44
40
  - - ~>
45
41
  - !ruby/object:Gem::Version
@@ -47,7 +43,6 @@ dependencies:
47
43
  - !ruby/object:Gem::Dependency
48
44
  name: faraday_middleware
49
45
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
46
  requirements:
52
47
  - - ~>
53
48
  - !ruby/object:Gem::Version
@@ -55,7 +50,6 @@ dependencies:
55
50
  type: :runtime
56
51
  prerelease: false
57
52
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
53
  requirements:
60
54
  - - ~>
61
55
  - !ruby/object:Gem::Version
@@ -63,39 +57,40 @@ dependencies:
63
57
  - !ruby/object:Gem::Dependency
64
58
  name: hashie
65
59
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
60
  requirements:
68
- - - ~>
61
+ - - '>='
69
62
  - !ruby/object:Gem::Version
70
63
  version: '1.0'
64
+ - - <
65
+ - !ruby/object:Gem::Version
66
+ version: '3'
71
67
  type: :runtime
72
68
  prerelease: false
73
69
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
70
  requirements:
76
- - - ~>
71
+ - - '>='
77
72
  - !ruby/object:Gem::Version
78
73
  version: '1.0'
74
+ - - <
75
+ - !ruby/object:Gem::Version
76
+ version: '3'
79
77
  - !ruby/object:Gem::Dependency
80
78
  name: json
81
79
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
80
  requirements:
84
81
  - - ~>
85
82
  - !ruby/object:Gem::Version
86
- version: 1.7.5
83
+ version: 1.8.0
87
84
  type: :runtime
88
85
  prerelease: false
89
86
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
87
  requirements:
92
88
  - - ~>
93
89
  - !ruby/object:Gem::Version
94
- version: 1.7.5
90
+ version: 1.8.0
95
91
  - !ruby/object:Gem::Dependency
96
92
  name: mime-types
97
93
  requirement: !ruby/object:Gem::Requirement
98
- none: false
99
94
  requirements:
100
95
  - - ~>
101
96
  - !ruby/object:Gem::Version
@@ -103,7 +98,6 @@ dependencies:
103
98
  type: :runtime
104
99
  prerelease: false
105
100
  version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
101
  requirements:
108
102
  - - ~>
109
103
  - !ruby/object:Gem::Version
@@ -111,23 +105,20 @@ dependencies:
111
105
  - !ruby/object:Gem::Dependency
112
106
  name: multi_json
113
107
  requirement: !ruby/object:Gem::Requirement
114
- none: false
115
108
  requirements:
116
109
  - - ~>
117
110
  - !ruby/object:Gem::Version
118
- version: '1.5'
111
+ version: '1.7'
119
112
  type: :runtime
120
113
  prerelease: false
121
114
  version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
115
  requirements:
124
116
  - - ~>
125
117
  - !ruby/object:Gem::Version
126
- version: '1.5'
118
+ version: '1.7'
127
119
  - !ruby/object:Gem::Dependency
128
120
  name: twitter-stream
129
121
  requirement: !ruby/object:Gem::Requirement
130
- none: false
131
122
  requirements:
132
123
  - - ~>
133
124
  - !ruby/object:Gem::Version
@@ -135,7 +126,6 @@ dependencies:
135
126
  type: :runtime
136
127
  prerelease: false
137
128
  version_requirements: !ruby/object:Gem::Requirement
138
- none: false
139
129
  requirements:
140
130
  - - ~>
141
131
  - !ruby/object:Gem::Version
@@ -143,55 +133,50 @@ dependencies:
143
133
  - !ruby/object:Gem::Dependency
144
134
  name: fakeweb
145
135
  requirement: !ruby/object:Gem::Requirement
146
- none: false
147
136
  requirements:
148
- - - ! '>='
137
+ - - '>='
149
138
  - !ruby/object:Gem::Version
150
139
  version: '0'
151
140
  type: :development
152
141
  prerelease: false
153
142
  version_requirements: !ruby/object:Gem::Requirement
154
- none: false
155
143
  requirements:
156
- - - ! '>='
144
+ - - '>='
157
145
  - !ruby/object:Gem::Version
158
146
  version: '0'
159
147
  - !ruby/object:Gem::Dependency
160
148
  name: rake
161
149
  requirement: !ruby/object:Gem::Requirement
162
- none: false
163
150
  requirements:
164
- - - ! '>='
151
+ - - '>='
165
152
  - !ruby/object:Gem::Version
166
153
  version: '0'
167
154
  type: :development
168
155
  prerelease: false
169
156
  version_requirements: !ruby/object:Gem::Requirement
170
- none: false
171
157
  requirements:
172
- - - ! '>='
158
+ - - '>='
173
159
  - !ruby/object:Gem::Version
174
160
  version: '0'
175
161
  - !ruby/object:Gem::Dependency
176
162
  name: rspec
177
163
  requirement: !ruby/object:Gem::Requirement
178
- none: false
179
164
  requirements:
180
- - - ! '>='
165
+ - - '>='
181
166
  - !ruby/object:Gem::Version
182
167
  version: '0'
183
168
  type: :development
184
169
  prerelease: false
185
170
  version_requirements: !ruby/object:Gem::Requirement
186
- none: false
187
171
  requirements:
188
- - - ! '>='
172
+ - - '>='
189
173
  - !ruby/object:Gem::Version
190
174
  version: '0'
191
175
  description: A Ruby API for interfacing with Campfire, the 37Signals chat application.
192
176
  email:
193
177
  - brandon@opensoul.org
194
178
  - bryckbost@gmail.com
179
+ - me@tonycoconate.com
195
180
  executables: []
196
181
  extensions: []
197
182
  extra_rdoc_files:
@@ -229,30 +214,26 @@ files:
229
214
  - tinder.gemspec
230
215
  homepage: http://github.com/collectiveidea/tinder
231
216
  licenses: []
217
+ metadata: {}
232
218
  post_install_message:
233
219
  rdoc_options: []
234
220
  require_paths:
235
221
  - lib
236
222
  required_ruby_version: !ruby/object:Gem::Requirement
237
- none: false
238
223
  requirements:
239
- - - ! '>='
224
+ - - '>='
240
225
  - !ruby/object:Gem::Version
241
226
  version: '0'
242
- segments:
243
- - 0
244
- hash: 3804490809334781938
245
227
  required_rubygems_version: !ruby/object:Gem::Requirement
246
- none: false
247
228
  requirements:
248
- - - ! '>='
229
+ - - '>='
249
230
  - !ruby/object:Gem::Version
250
231
  version: 1.3.6
251
232
  requirements: []
252
233
  rubyforge_project:
253
- rubygems_version: 1.8.24
234
+ rubygems_version: 2.0.3
254
235
  signing_key:
255
- specification_version: 3
236
+ specification_version: 4
256
237
  summary: Ruby wrapper for the Campfire API
257
238
  test_files:
258
239
  - spec/fixtures/rooms.json