twitter-vanity-suite 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/bin/twitter-algebra +42 -2
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 796f4561f08b8abd32e4e80be99be9bdfba20d77
4
- data.tar.gz: f557e7886e21838d21004d8fe1849a47b2399479
3
+ metadata.gz: fbd02cf81a60ba76aeb715ef2115218f27e763e3
4
+ data.tar.gz: 9f4b6a591e71bcc7b6044a5a237b044335a4db51
5
5
  SHA512:
6
- metadata.gz: 2375e785bdaa027a8b480f940d7d269375e4fc4d01fac60e7cd7bd2c7a7059f212b95155071eb29e1f6c2a5e711ada2b9afe9a3e55ebccba5c7fde0da6277d86
7
- data.tar.gz: 6a7507c9ff71dbd6b6116b5dabfe4abe6a2d85d246ad4e745bfe9bd8e1ddcb0e06cb3a5d4ce58b57acba39aacb885f9335fb15a1631af016b8e25cc986b4ecbd
6
+ metadata.gz: ae8beb95085b0b3c7feeb12052c6a81b2775020a243a75c6d4e25bc718266ec116ab62f4efd62f55d691a7e2dc7c9e56f0706942be7d1655f429fac3aa5d2716
7
+ data.tar.gz: 2dde746691b773122a20cacc62563b5de7b3e35bbddc58ad171c6c9ba8fac7acebe663207142a414b26fc53027ccbe031218a70d41c45e2cd164cdea7ba49467
data/bin/twitter-algebra CHANGED
@@ -8,6 +8,8 @@
8
8
  #
9
9
  # A.followers - returns the set of users that follow @A on twitter
10
10
  #
11
+ # A/B - returns the set of users in the @A/B list
12
+ #
11
13
  # {A, B, C} - returns a set containing the users @A, @B, and @C
12
14
  #
13
15
  # You may use the following operators in your expression:
@@ -50,8 +52,9 @@ end
50
52
 
51
53
  class Lexer
52
54
  TOKENS = [
53
- [:BAREWORD, /[a-z0-9_]+/],
55
+ [:BAREWORD, /[a-z0-9_-]+/],
54
56
  [:DOT, /\./],
57
+ [:SLASH, /\//],
55
58
  [:INTERSECTION, /&/],
56
59
  [:UNION, /\|/],
57
60
  [:COMPLEMENT, /~/],
@@ -214,6 +217,25 @@ module AST
214
217
  end
215
218
  end
216
219
 
220
+ class ListMembers
221
+ include LoadableSet
222
+
223
+ attr_reader :handle, :list_name
224
+
225
+ def initialize(handle, list_name)
226
+ @handle = handle
227
+ @list_name = list_name
228
+ end
229
+
230
+ def key
231
+ "#{handle}/#{list_name}"
232
+ end
233
+
234
+ def fetch_data
235
+ $client.list_members(handle, list_name).map(&:id)
236
+ end
237
+ end
238
+
217
239
  class Binary
218
240
  attr_reader :left, :right
219
241
 
@@ -351,6 +373,16 @@ private
351
373
 
352
374
  def handle_expression
353
375
  handle = expect_token(:BAREWORD).value
376
+ if peek_token.type == :DOT
377
+ handle_command_expression(handle)
378
+ elsif peek_token.type == :SLASH
379
+ list_expression(handle)
380
+ else
381
+ raise SyntaxError, "Unexpected #{peek_token.value.inspect}"
382
+ end
383
+ end
384
+
385
+ def handle_command_expression(handle)
354
386
  expect_token(:DOT)
355
387
  command = expect_token(:BAREWORD).value
356
388
  if klass = COMMANDS[command]
@@ -359,6 +391,12 @@ private
359
391
  raise SyntaxError, "Unknown command #{command.inspect}"
360
392
  end
361
393
  end
394
+
395
+ def list_expression(handle)
396
+ expect_token(:SLASH)
397
+ list_name = expect_token(:BAREWORD).value
398
+ AST::ListMembers.new(handle, list_name)
399
+ end
362
400
  end
363
401
 
364
402
  expr = ARGV.first
@@ -384,7 +422,9 @@ if result_set.values.empty?
384
422
  $stderr.puts "(nobody)"
385
423
  end
386
424
  else
387
- $client.users(result_set.values).each do |user|
425
+ $client.users(result_set.values).sort_by { |user|
426
+ user.screen_name.downcase
427
+ }.each do |user|
388
428
  puts "#{complement ? "NOT " : ""}#{user.screen_name}"
389
429
  end
390
430
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter-vanity-suite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Charlie Somerville
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-04 00:00:00.000000000 Z
11
+ date: 2014-01-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: twitter