assistly 0.1.2 → 0.1.3

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/lib/assistly/api.rb CHANGED
@@ -11,10 +11,15 @@ module Assistly
11
11
  # Creates a new API
12
12
  def initialize(options={})
13
13
  options = Assistly.options.merge(options)
14
+
14
15
  Configuration::VALID_OPTIONS_KEYS.each do |key|
15
16
  send("#{key}=", options[key])
16
17
  end
17
18
  end
19
+
20
+ def endpoint
21
+ "https://#{self.subdomain}.assistly.com/api/#{self.version}/"
22
+ end
18
23
 
19
24
  include Connection
20
25
  include Request
@@ -9,7 +9,6 @@ module Assistly
9
9
  :adapter,
10
10
  :consumer_key,
11
11
  :consumer_secret,
12
- :endpoint,
13
12
  :format,
14
13
  :oauth_token,
15
14
  :oauth_token_secret,
@@ -57,15 +56,7 @@ module Assistly
57
56
 
58
57
  # The user agent that will be sent to the API endpoint if none is set
59
58
  DEFAULT_VERSION = "v1".freeze
60
-
61
- # The endpoint that will be used to connect if none is set
62
- #
63
- # @note This is configurable in case you want to use HTTP instead of HTTPS, specify a different API version, or use a Twitter-compatible endpoint.
64
- # @see http://status.net/wiki/Twitter-compatible_API
65
- # @see http://en.blog.wordpress.com/2009/12/12/twitter-api/
66
- # @see http://staff.tumblr.com/post/287703110/api
67
- # @see http://developer.typepad.com/typepad-twitter-api/twitter-api.html
68
- # DEFAULT_ENDPOINT = "https://#{self.subdomain}.assistly.com/api/#{Assistly.version}/"
59
+
69
60
 
70
61
  # @private
71
62
  attr_accessor *VALID_OPTIONS_KEYS
@@ -90,7 +81,6 @@ module Assistly
90
81
  self.adapter = DEFAULT_ADAPTER
91
82
  self.consumer_key = DEFAULT_CONSUMER_KEY
92
83
  self.consumer_secret = DEFAULT_CONSUMER_SECRET
93
- self.endpoint = "https://#{Assistly.subdomain}.assistly.com/api/#{Assistly.version}/"
94
84
  self.format = DEFAULT_FORMAT
95
85
  self.oauth_token = DEFAULT_OAUTH_TOKEN
96
86
  self.oauth_token_secret = DEFAULT_OAUTH_TOKEN_SECRET
@@ -1,4 +1,4 @@
1
1
  module Assistly
2
2
  # The version of the gem
3
- VERSION = '0.1.2'.freeze unless defined?(::Assistly::VERSION)
3
+ VERSION = '0.1.3'.freeze unless defined?(::Assistly::VERSION)
4
4
  end
@@ -35,7 +35,6 @@ describe Assistly::API do
35
35
  :oauth_token => 'OT',
36
36
  :oauth_token_secret => 'OS',
37
37
  :adapter => :typhoeus,
38
- :endpoint => 'http://tumblr.com/',
39
38
  :format => :xml,
40
39
  :proxy => 'http://erik:sekret@proxy.example.com:8080',
41
40
  :subdomain => 'zencoder',
@@ -44,19 +44,6 @@ describe Assistly do
44
44
  Assistly.adapter.should == :typhoeus
45
45
  end
46
46
  end
47
-
48
- # describe ".endpoint" do
49
- # it "should return the default endpoint" do
50
- # Assistly.endpoint.should == Assistly::Configuration::DEFAULT_ENDPOINT
51
- # end
52
- # end
53
-
54
- describe ".endpoint=" do
55
- it "should set the endpoint" do
56
- Assistly.endpoint = 'http://tumblr.com/'
57
- Assistly.endpoint.should == 'http://tumblr.com/'
58
- end
59
- end
60
47
 
61
48
  describe ".subdomain=" do
62
49
  before do
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: assistly
3
3
  version: !ruby/object:Gem::Version
4
- hash: 31
4
+ hash: 29
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 2
10
- version: 0.1.2
9
+ - 3
10
+ version: 0.1.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Chris Warren
@@ -298,7 +298,6 @@ files:
298
298
  - lib/assistly/connection.rb
299
299
  - lib/assistly/error.rb
300
300
  - lib/assistly/request.rb
301
- - lib/assistly/search.rb
302
301
  - lib/assistly/version.rb
303
302
  - lib/faraday/request/multipart_with_file.rb
304
303
  - lib/faraday/response/raise_http_4xx.rb
@@ -1,473 +0,0 @@
1
- require 'cgi'
2
-
3
- module Twitter
4
- # Wrapper for the Twitter Search API
5
- #
6
- # @note As of April 1st 2010, the Search API provides an option to retrieve
7
- # "popular tweets" in addition to real-time search results. In an upcoming release,
8
- # this will become the default and clients that don't want to receive popular tweets
9
- # in their search results will have to explicitly opt-out. See {Twitter::Search#result_type}
10
- # for more information.
11
- # @note The user ids in the Search API are different from those in the REST API
12
- # ({http://dev.twitter.com/pages/api_overview about the two APIs}). This defect is
13
- # being tracked by {http://code.google.com/p/twitter-api/issues/detail?id=214 Issue 214}.
14
- # This means that the to_user_id and from_user_id field vary from the actualy user id on
15
- # Twitter.com. Applications will have to perform a screen name-based lookup with
16
- # {Twitter::Client::User#user} to get the correct user id if necessary.
17
- # @see http://dev.twitter.com/doc/get/search Twitter Search API Documentation
18
- class Search < API
19
- include Enumerable
20
-
21
- # @private
22
- attr_reader :query
23
-
24
- # Creates a new search
25
- #
26
- # @example Initialize a Twitter search
27
- # search = Twitter::Search.new
28
- def initialize(*)
29
- clear
30
- super
31
- end
32
-
33
- alias :api_endpoint :search_endpoint
34
-
35
- # Clears all query filters and cached results
36
- #
37
- # @return [Twitter::Search] self
38
- # @example Clear a search for "twitter"
39
- # search = Twitter::Search.new
40
- # search.containing("twitter").fetch
41
- # search.clear
42
- # search.fetch_next_page #=> 403 Forbidden: You must enter a query.
43
- def clear
44
- @cache = nil
45
- @query = {}
46
- @query[:q] = []
47
- @query[:tude] = []
48
- self
49
- end
50
-
51
- # @group Generic filters
52
-
53
- # Search query
54
- #
55
- # @param query [String] The search query.
56
- # @return [Twitter::Search] self
57
- # @example Return an array of tweets containing "twitter"
58
- # Twitter::Search.new.containing("twitter").fetch
59
- # Twitter::Search.new.contains("twitter").fetch # Shortcut for the above
60
- # Twitter::Search.new.q("twitter").fetch # Even shorter-cut
61
- def containing(query)
62
- @query[:q] << query
63
- self
64
- end
65
- alias :contains :containing
66
- alias :q :containing
67
-
68
- # Negative search query
69
- #
70
- # @param query [String] The negative search query.
71
- # @return [Twitter::Search] self
72
- # @example Return an array of tweets containing "beer" but not "root"
73
- # Twitter::Search.new.containing("beer").not_containing("root").fetch
74
- # Twitter::Search.new.containing("beer").does_not_contain("root").fetch # Same as above
75
- # Twitter::Search.new.containing("beer").excluding("root").fetch # Shortcut for the above
76
- # Twitter::Search.new.contains("beer").excludes("root").fetch # Even shorter
77
- # Twitter::Search.new.q("beer").exclude("root").fetch # Shorter still
78
- def not_containing(query)
79
- @query[:q] << "-#{query}"
80
- self
81
- end
82
- alias :does_not_contain :not_containing
83
- alias :excluding :not_containing
84
- alias :excludes :not_containing
85
- alias :exclude :not_containing
86
-
87
- # Search for a specific phrase instead of a group of words
88
- #
89
- # @param phrase [String] The search phrase.
90
- # @return [Twitter::Search] self
91
- # @example Return an array of tweets containing the phrase "happy hour"
92
- # Twitter::Search.new.phrase("happy hour").fetch
93
- def phrase(phrase)
94
- @query[:phrase] = phrase
95
- self
96
- end
97
-
98
- # Only include tweets that contain URLs
99
- #
100
- # @param filter [String] A type of search filter. Only 'links' is currently effective.
101
- # @return [Twitter::Search] self
102
- # @example Return an array of tweets containing "twitter" and URLs
103
- # Twitter::Search.new.containing("twitter").filter.fetch
104
- def filter(filter='links')
105
- @query[:q] << "filter:#{filter}"
106
- self
107
- end
108
-
109
- # Only include tweets from after a given date
110
- #
111
- # @param date [String] A date in the format YYYY-MM-DD.
112
- # @return [Twitter::Search] self
113
- # @example Return an array of tweets containing "twitter" since October 1, 2010
114
- # Twitter::Search.new.containing("twitter").since_date("2010-10-01").fetch
115
- def since_date(date)
116
- @query[:since] = date
117
- self
118
- end
119
- alias :since :since_date
120
-
121
- # Only include tweets from before a given date
122
- #
123
- # @param date [String] A date in the format YYYY-MM-DD.
124
- # @return [Twitter::Search] self
125
- # @example Return an array of tweets containing "twitter" up until October 1, 2010
126
- # Twitter::Search.new.containing("twitter").since_date("2010-10-01").fetch
127
- def until_date(date)
128
- @query[:until] = date
129
- self
130
- end
131
- alias :until :until_date
132
-
133
- # Only include tweets with a positive attitude
134
- #
135
- # @return [Twitter::Search] self
136
- # @example Return an array of tweets containing happy emoticons
137
- # Twitter::Search.new.positive.fetch
138
- def positive
139
- @query[:tude] << ":)"
140
- self
141
- end
142
-
143
- # Only include tweets with a negative attitude
144
- #
145
- # @return [Twitter::Search] self
146
- # @example Return an array of tweets containing sad emoticons
147
- # Twitter::Search.new.negative.fetch
148
- def negative
149
- @query[:tude] << ":("
150
- self
151
- end
152
-
153
- # Only include tweets that are asking a question
154
- #
155
- # @return [Twitter::Search] self
156
- # @example Return an array of tweets containing question marks
157
- # Twitter::Search.new.question.fetch
158
- def question
159
- @query[:tude] << "?"
160
- self
161
- end
162
-
163
- # @group Demographic filters
164
-
165
- # Only include tweets in a given language, specified by an ISO 639-1 code
166
- #
167
- # @param code [String] An ISO 639-1 code.
168
- # @return [Twitter::Search] self
169
- # @example Return an array of French-language tweets containing "twitter"
170
- # Twitter::Search.new.containing("twitter").language("fr").fetch
171
- # Twitter::Search.new.containing("twitter").lang("fr").fetch # Shortcut for the above
172
- # @see http://en.wikipedia.org/wiki/ISO_639-1
173
- def language(code)
174
- @query[:lang] = code
175
- self
176
- end
177
- alias :lang :language
178
-
179
- # Specify the locale of the query you are sending
180
- #
181
- # @param code [String] An ISO 639-1 code (only 'ja' is currently effective).
182
- # @return [Twitter::Search] self
183
- # @example Return an array of tweets from Japan containing "twitter"
184
- # Twitter::Search.new.containing("twitter").locale("ja").fetch
185
- # @see http://en.wikipedia.org/wiki/ISO_639-1
186
- def locale(code)
187
- @query[:locale] = code
188
- self
189
- end
190
-
191
- # Only include tweets from users in a given radius of a given location
192
- #
193
- # @param lat [Float] A latitude.
194
- # @param long [Float] A longitude.
195
- # @param radius [String] A search radius, specified in either 'mi' (miles) or 'km' (kilometers).
196
- # @return [Twitter::Search] self
197
- # @example Return an array of tweets within a 1-mile radius of Twitter HQ
198
- # Twitter::Search.new.containing("twitter").geocode(37.781157, -122.398720, "1mi").fetch
199
- def geocode(lat, long, radius)
200
- @query[:geocode] = [lat, long, radius].join(",")
201
- self
202
- end
203
-
204
- # Only include tweets from users in a given place, specified by a place ID
205
- #
206
- # @param place_id [String] A place ID.
207
- # @return [Twitter::Search] self
208
- # @example Return an array of tweets from San Francisco
209
- # Twitter::Search.new.place("5a110d312052166f").fetch
210
- def place(place_id)
211
- @query[:q] << "place:#{place_id}"
212
- self
213
- end
214
-
215
- # Only include tweets from users near a given location
216
- #
217
- # @param location [String] A location name.
218
- # @return [Twitter::Search] self
219
- # @example Return an array of tweets near San Francisco
220
- # Twitter::Search.new.near("San Francisco").fetch
221
- def near(location)
222
- @query[:q] << "near:#{location.inspect}"
223
- self
224
- end
225
-
226
- # @group User filters
227
-
228
- # Only include tweets from a given user, specified by screen_name
229
- #
230
- # @param screen_name [String] A Twitter user name.
231
- # @return [Twitter::Search] self
232
- # @example Return an array of tweets containing "twitter" from @sferik
233
- # Twitter::Search.new.containing("twitter").from("sferik").fetch
234
- def from(screen_name)
235
- @query[:q] << "from:#{screen_name}"
236
- self
237
- end
238
-
239
- # Exclude tweets from a given user, specified by screen_name
240
- #
241
- # @param screen_name [String] A Twitter user name.
242
- # @return [Twitter::Search] self
243
- # @example Return an array of tweets containing "twitter" from everyone except @sferik
244
- # Twitter::Search.new.containing("twitter").not_from("sferik").fetch
245
- def not_from(screen_name)
246
- @query[:q] << "-from:#{screen_name}"
247
- self
248
- end
249
-
250
- # Only include tweets to a given user, specified by screen_name
251
- #
252
- # @param screen_name [String] A Twitter user name.
253
- # @return [Twitter::Search] self
254
- # @example Return an array of tweets containing "twitter" to @sferik
255
- # Twitter::Search.new.containing("twitter").to("sferik").fetch
256
- def to(screen_name)
257
- @query[:q] << "to:#{screen_name}"
258
- self
259
- end
260
-
261
- # Exclude tweets to a given user, specified by screen_name
262
- #
263
- # @param screen_name [String] A Twitter user name.
264
- # @return [Twitter::Search] self
265
- # @example Return an array of tweets containing "twitter" to everyone except @sferik
266
- # Twitter::Search.new.containing("twitter").not_to("sferik").fetch
267
- def not_to(screen_name)
268
- @query[:q] << "-to:#{screen_name}"
269
- self
270
- end
271
-
272
- # Only include tweets mentioning a given user, specified by screen_name
273
- #
274
- # @param screen_name [String] A Twitter user name.
275
- # @return [Twitter::Search] self
276
- # @example Return an array of tweets containing "twitter" and mentioning @sferik
277
- # Twitter::Search.new.containing("twitter").mentioning("sferik").fetch
278
- def mentioning(screen_name)
279
- @query[:q] << "@#{screen_name.gsub('@', '')}"
280
- self
281
- end
282
- alias :referencing :mentioning
283
- alias :mentions :mentioning
284
- alias :references :mentioning
285
-
286
- # Exclude tweets mentioning a given user, specified by screen_name
287
- #
288
- # @param screen_name [String] A Twitter user name.
289
- # @return [Twitter::Search] self
290
- # @example Return an array of tweets containing "twitter" but not mentioning @sferik
291
- # Twitter::Search.new.containing("twitter").not_mentioning("sferik").fetch
292
- def not_mentioning(screen_name)
293
- @query[:q] << "-@#{screen_name.gsub('@', '')}"
294
- self
295
- end
296
- alias :not_referencing :not_mentioning
297
- alias :does_not_mention :not_mentioning
298
- alias :does_not_reference :not_mentioning
299
-
300
- # @group Twitter filters
301
-
302
- # Only include retweets
303
- #
304
- # @return [Twitter::Search] self
305
- # @example Return an array of retweets containing "twitter"
306
- # Twitter::Search.new.containing("twitter").retweets.fetch
307
- def retweets
308
- @query[:q] << "rt"
309
- self
310
- end
311
-
312
- # Only include original status updates (i.e., not retweets)
313
- #
314
- # @return [Twitter::Search] self
315
- # @example Return an array of tweets containing "twitter", excluding retweets
316
- # Twitter::Search.new.containing("twitter").no_retweets.fetch
317
- def no_retweets
318
- @query[:q] << "-rt"
319
- self
320
- end
321
-
322
- # Only include tweets containing a given hashtag
323
- #
324
- # @param tag [String] A Twitter hashtag.
325
- # @return [Twitter::Search] self
326
- # @example Return an array of tweets containing the hashtag #FollowFriday
327
- # Twitter::Search.new.hashtag("FollowFriday").fetch
328
- def hashtag(tag)
329
- @query[:q] << "\##{tag.gsub('#', '')}"
330
- self
331
- end
332
-
333
- # Exclude tweets containing a given hashtag
334
- #
335
- # @param tag [String] A Twitter hashtag.
336
- # @return [Twitter::Search] self
337
- # @example Return an array of tweets containing the hashtag #FollowFriday but not #FF
338
- # Twitter::Search.new.hashtag("FollowFriday").excluding_hashtag("FF").fetch
339
- # Twitter::Search.new.hashtag("FollowFriday").excludes_hashtag("FF").fetch # Shortcut for the above
340
- # Twitter::Search.new.hashtag("FollowFriday").exclude_hashtag("FF").fetch # Even shorter
341
- def excluding_hashtag(tag)
342
- @query[:q] << "-\##{tag.gsub('#', '')}"
343
- self
344
- end
345
- alias :excludes_hashtag :excluding_hashtag
346
- alias :exclude_hashtag :excluding_hashtag
347
-
348
- # Only include tweets with an ID greater than the specified ID
349
- #
350
- # @param id [Integer] A Twitter status ID.
351
- # @return [Twitter::Search] self
352
- # @example Return an array of tweets containing "twitter" with an ID greater than 123456789
353
- # Twitter::Search.new.containing("twitter").since_id(123456789).fetch
354
- def since_id(id)
355
- @query[:since_id] = id
356
- self
357
- end
358
-
359
- # Only include tweets with an ID less than or equal to the specified ID
360
- #
361
- # @param id [Integer] A Twitter status ID.
362
- # @return [Twitter::Search] self
363
- # @example Return an array of tweets containing "twitter" with an ID less than or equal to 123456789
364
- # Twitter::Search.new.containing("twitter").max_id(123456789).fetch
365
- #
366
- def max_id(id)
367
- @query[:max_id] = id
368
- self
369
- end
370
- alias :max :max_id
371
-
372
- # Specify what type of search results you want to receive
373
- #
374
- # @param result_type [String] The type of results you want to receive ('recent', 'popular', or 'mixed').
375
- # @return [Twitter::Search] self
376
- # @example Return an array of recent tweets containing "twitter"
377
- # Twitter::Search.new.containing("twitter").result_type("recent").fetch
378
- def result_type(result_type="mixed")
379
- @query[:result_type] = result_type
380
- self
381
- end
382
-
383
- # Only include tweets from a given source
384
- #
385
- # @param source [String] A Twitter source.
386
- # @return [Twitter::Search] self
387
- # @example Return an array of tweets containing "twitter", posted from Hibari
388
- # Twitter::Search.new.containing("twitter").source("Hibari").fetch
389
- def source(source)
390
- @query[:q] << "source:#{source}"
391
- self
392
- end
393
-
394
- # @group Paging
395
-
396
- # Specify the number of tweets to return per page
397
- #
398
- # @param number [Integer] The number of tweets to return per page, up to a max of 100.
399
- # @return [Twitter::Search] self
400
- # @example Return an array of 100 tweets containing "twitter"
401
- # Twitter::Search.new.containing("twitter").per_page(100).fetch
402
- def per_page(number=15)
403
- @query[:rpp] = number
404
- self
405
- end
406
- alias :rpp :per_page
407
-
408
- # Specify the page number to return, up to a maximum of roughly 1500 results
409
- #
410
- # @param number [Integer] The page number (starting at 1) to return, up to a max of roughly 1500 results (based on {Twitter::Client::Search#per_page} * {Twitter::Client::Search#page}).
411
- # @return [Twitter::Search] self
412
- # @example Return the second page of tweets containing "twitter"
413
- # Twitter::Search.new.containing("twitter").page(2).fetch
414
- def page(number)
415
- @query[:page] = number
416
- self
417
- end
418
-
419
- # Indicates if there are additional results to be fetched
420
- #
421
- # @return [Boolean]
422
- # @example
423
- # search = Twitter::Search.new.containing("twitter").fetch
424
- # search.next_page? #=> true
425
- def next_page?
426
- fetch if @cache.nil?
427
- !!@cache["next_page"]
428
- end
429
-
430
- # @group Fetching
431
-
432
- # Fetch the next page of results of the query
433
- #
434
- # @return [Array] Tweets that match specified query.
435
- # @example Return the first two pages of results
436
- # search = Twitter::Search.new.containing("twitter").fetch
437
- # search.fetch_next_page
438
- def fetch_next_page
439
- if next_page?
440
- @cache = get("search", CGI.parse(@cache["next_page"][1..-1]))
441
- @cache.results
442
- end
443
- end
444
-
445
- # Fetch the results of the query
446
- #
447
- # @param force [Boolean] Ignore the cache and hit the API again.
448
- # @return [Array] Tweets that match specified query.
449
- # @example Return an array of tweets containing "twitter"
450
- # search = Twitter::Search.new.containing("twitter").fetch
451
- def fetch(force=false)
452
- if @cache.nil? || force
453
- options = query.dup
454
- options[:q] = options[:q].join(" ")
455
- @cache = get("search", options)
456
- end
457
- @cache.results
458
- end
459
-
460
- # Calls block once for each element in self, passing that element as a parameter
461
- #
462
- # @yieldparam [Hashie::Mash] result Tweet that matches specified query.
463
- # @return [Array] Tweets that match specified query.
464
- # @example
465
- # Twitter::Search.new.containing('marry me').to('justinbieber').each do |result|
466
- # puts "#{result.from_user}: #{result.text}"
467
- # end
468
- def each
469
- fetch.each{|result| yield result}
470
- end
471
-
472
- end
473
- end