ayadn 1.8.2 → 2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -0
  3. data/CHANGELOG.md +73 -52
  4. data/README.md +17 -3
  5. data/ayadn.gemspec +3 -4
  6. data/doc/01-index.md +6 -5
  7. data/doc/02-install.md +23 -1
  8. data/doc/03-first-steps.md +22 -28
  9. data/doc/04-options.md +1 -1
  10. data/doc/05-streams.md +29 -9
  11. data/doc/06-post.md +13 -5
  12. data/doc/07-actions.md +63 -1
  13. data/doc/08-listings.md +112 -4
  14. data/doc/09-accounts.md +17 -3
  15. data/doc/10-nicerank.md +5 -5
  16. data/doc/11-blacklist.md +8 -14
  17. data/doc/12-alias.md +1 -13
  18. data/doc/14-set.md +8 -110
  19. data/doc/15-nowplaying.md +16 -4
  20. data/doc/18-contact.md +14 -13
  21. data/doc/19-examples.md +2 -0
  22. data/lib/ayadn/action.rb +322 -183
  23. data/lib/ayadn/alias.rb +17 -45
  24. data/lib/ayadn/annotations.rb +1 -1
  25. data/lib/ayadn/api.rb +7 -8
  26. data/lib/ayadn/app.rb +99 -12
  27. data/lib/ayadn/authorize.rb +92 -57
  28. data/lib/ayadn/blacklist.rb +52 -62
  29. data/lib/ayadn/check.rb +81 -74
  30. data/lib/ayadn/cnx.rb +77 -26
  31. data/lib/ayadn/databases.rb +890 -105
  32. data/lib/ayadn/debug.rb +30 -89
  33. data/lib/ayadn/descriptions.rb +876 -329
  34. data/lib/ayadn/endpoints.rb +2 -2
  35. data/lib/ayadn/errors.rb +9 -9
  36. data/lib/ayadn/extend.rb +8 -1
  37. data/lib/ayadn/fileops.rb +10 -8
  38. data/lib/ayadn/mark.rb +79 -56
  39. data/lib/ayadn/migration.rb +427 -0
  40. data/lib/ayadn/nicerank.rb +74 -72
  41. data/lib/ayadn/nowplaying.rb +123 -60
  42. data/lib/ayadn/nowwatching.rb +26 -10
  43. data/lib/ayadn/pinboard.rb +12 -7
  44. data/lib/ayadn/post.rb +40 -37
  45. data/lib/ayadn/profile.rb +5 -2
  46. data/lib/ayadn/scroll.rb +20 -5
  47. data/lib/ayadn/search.rb +30 -22
  48. data/lib/ayadn/set.rb +146 -50
  49. data/lib/ayadn/settings.rb +66 -67
  50. data/lib/ayadn/status.rb +459 -234
  51. data/lib/ayadn/stream.rb +80 -46
  52. data/lib/ayadn/switch.rb +51 -47
  53. data/lib/ayadn/tvshow.rb +47 -15
  54. data/lib/ayadn/version.rb +1 -1
  55. data/lib/ayadn/view.rb +119 -60
  56. data/lib/ayadn/workers.rb +144 -92
  57. data/lib/ayadn.rb +7 -8
  58. data/spec/mock/ayadn/accounts.sqlite +0 -0
  59. data/spec/mock/ayadn.sqlite +0 -0
  60. data/spec/unit/annotations_spec.rb +12 -13
  61. data/spec/unit/api_spec.rb +3 -4
  62. data/spec/unit/blacklistworkers_spec.rb +18 -23
  63. data/spec/unit/databases_spec.rb +51 -36
  64. data/spec/unit/endpoints_spec.rb +5 -2
  65. data/spec/unit/extend_spec.rb +24 -0
  66. data/spec/unit/nicerank_spec.rb +13 -13
  67. data/spec/unit/post_spec.rb +47 -36
  68. data/spec/unit/set_spec.rb +67 -96
  69. data/spec/unit/view_spec.rb +12 -6
  70. data/spec/unit/workers_spec.rb +38 -12
  71. data/tags +1285 -0
  72. metadata +29 -39
  73. data/spec/mock/aliases.db +0 -0
  74. data/spec/mock/blacklist.db +0 -0
  75. data/spec/mock/bookmarks.db +0 -0
  76. data/spec/mock/channels.db +0 -0
  77. data/spec/mock/index.db +0 -0
  78. data/spec/mock/nicerank.db +0 -0
  79. data/spec/mock/pagination.db +0 -0
  80. data/spec/mock/users.db +0 -0
  81. data/spec/unit/status_spec.rb +0 -9
data/lib/ayadn/workers.rb CHANGED
@@ -3,23 +3,44 @@ module Ayadn
3
3
  class Workers
4
4
 
5
5
  def initialize
6
- @shell = Thor::Shell::Color.new
6
+ @thor = Thor::Shell::Color.new
7
+ @status = Status.new
8
+ end
9
+
10
+ def table_borders
11
+ if Settings.options[:formats][:table][:borders] == true
12
+ { :width => Settings.options[:formats][:table][:width], border_x: '—', border_i: '+', border_y: '|' }
13
+ else
14
+ { :width => Settings.options[:formats][:table][:width], border_x: ' ', border_i: ' ', border_y: ' ' }
15
+ end
7
16
  end
8
17
 
9
18
  def build_aliases_list(list)
10
19
  table = init_table
11
20
  table.title = "List of your channel aliases".color(:cyan) + "".color(:white)
12
- table.style = {border_x: '~', border_i: '+', border_y: ':'}
13
- list.each {|k,v| table << ["#{k}".color(:green), "#{v}".color(:red)]}
21
+ table.style = table_borders()
22
+ table.headings = [ 'Channel', 'Alias' ]
23
+ list.each_with_index do |obj, index|
24
+ table << [obj[0].to_s.color(:green), obj[1].color(:red)]
25
+ if index + 1 != list.length && Settings.options[:timeline][:compact] == false
26
+ table << :separator
27
+ end
28
+ end
14
29
  table
15
30
  end
16
31
 
17
32
  def build_blacklist_list(list)
18
33
  table = init_table
19
34
  table.title = "Your blacklist".color(:cyan) + "".color(:white)
20
- table.style = {border_x: '~', border_i: '+', border_y: ':'}
21
- list = list.sort_by {|k,v| v} # no sort_by! for Daybreak dbs
22
- list.each {|k,v| table << ["#{v.capitalize}".color(:green), "#{k}".color(:red)]}
35
+ table.style = table_borders()
36
+ table.headings = [ 'Name', 'Type' ]
37
+ list.sort!
38
+ list.each_with_index do |obj, index|
39
+ table << ["#{obj[1].capitalize}".color(:green), "#{obj[0]}".color(:red)]
40
+ if index + 1 != list.length && Settings.options[:timeline][:compact] == false
41
+ table << :separator
42
+ end
43
+ end
23
44
  table
24
45
  end
25
46
 
@@ -29,9 +50,9 @@ module Ayadn
29
50
  users_list = []
30
51
  list.each do |obj|
31
52
  obj['name'].nil? ? name = "" : name = obj['name']
32
- users_list << {:username => obj['username'], :name => name, :you_follow => obj['you_follow'], :follows_you => obj['follows_you'], :id => obj['id']}
53
+ users_list << {:username => obj['username'], :name => name, :you_follow => obj['you_follow'], :follows_you => obj['follows_you'], :id => obj['id'], :posts => obj['counts']['posts']}
33
54
  end
34
- table.style = {border_x: ' ', border_i: ' ', border_y: ' '}
55
+ table.style = table_borders()
35
56
  return users_list, table
36
57
  end
37
58
 
@@ -41,50 +62,50 @@ module Ayadn
41
62
  users_list = []
42
63
  list.each do |obj|
43
64
  obj['name'].nil? ? name = "" : name = obj['name']
44
- users_list << {:username => obj['username'], :name => name, :you_follow => obj['you_follow'], :follows_you => obj['follows_you'], :id => obj['id']}
65
+ users_list << {:username => obj['username'], :name => name, :you_follow => obj['you_follow'], :follows_you => obj['follows_you'], :id => obj['id'], :posts => obj['counts']['posts']}
45
66
  end
46
- table.style = {border_x: ' ', border_i: ' ', border_y: ' '}
67
+ table.style = table_borders()
47
68
  return users_list, table
48
69
  end
49
70
 
50
- def build_followings_list(list, target) #takes a hash of users with ayadn format
71
+ def build_followings_list(list, target, options = {}) #takes a hash of users with ayadn format
51
72
  table = init_table
52
73
  table.title = if target == "me"
53
74
  "List of users you're following".color(:cyan) + "".color(:white)
54
75
  else
55
76
  "List of users ".color(:cyan) + "#{target}".color(:red) + " is following ".color(:cyan) + "".color(:white)
56
77
  end
57
- table.style = {border_x: ' ', border_i: ' ', border_y: ' '}
78
+ table.style = table_borders()
58
79
  users_list = build_users_array(list)
59
- build_users_list(users_list, table)
80
+ build_users_list(users_list, table, options)
60
81
  end
61
82
 
62
- def build_followers_list(list, target)
83
+ def build_followers_list(list, target, options = {})
63
84
  table = init_table
64
85
  table.title = if target == "me"
65
86
  "List of your followers".color(:cyan) + "".color(:white)
66
87
  else
67
88
  "List of users following ".color(:cyan) + "#{target}".color(:red) + "".color(:white)
68
89
  end
69
- table.style = {border_x: ' ', border_i: ' ', border_y: ' '}
70
- build_users_list(build_users_array(list), table)
90
+ table.style = table_borders()
91
+ build_users_list(build_users_array(list), table, options)
71
92
  end
72
93
 
73
- def build_muted_list(list)
94
+ def build_muted_list(list, options = {})
74
95
  table = init_table
75
96
  table.title = "List of users you muted".color(:cyan) + "".color(:white)
76
- table.style = {border_x: ' ', border_i: ' ', border_y: ' '}
77
- build_users_list(build_users_array(list), table)
97
+ table.style = table_borders()
98
+ build_users_list(build_users_array(list), table, options)
78
99
  end
79
100
 
80
- def build_blocked_list(list)
101
+ def build_blocked_list(list, options = {})
81
102
  table = init_table
82
103
  table.title = "List of users you blocked".color(:cyan) + "".color(:white)
83
- table.style = {border_x: ' ', border_i: ' ', border_y: ' '}
84
- build_users_list(build_users_array(list), table)
104
+ table.style = table_borders()
105
+ build_users_list(build_users_array(list), table, options)
85
106
  end
86
107
 
87
- def build_users_list(list, table)
108
+ def build_users_list(list, table, options = {})
88
109
  users = at(list.map {|obj| obj[:username]})
89
110
  ids = list.map {|obj| obj[:id].to_i}
90
111
  ranks = NiceRank.new.from_ids(ids)
@@ -97,9 +118,18 @@ module Ayadn
97
118
  indexed_ranks[r['user_id']] = r
98
119
  end
99
120
  end
100
- table << ['USERNAME'.color(:red), 'NAME'.color(:red), 'POSTS/DAY'.color(:red)]
121
+ table << ['USERNAME'.color(:red), 'NAME'.color(:red), 'POSTS'.color(:red), 'POSTS/DAY'.color(:red)]
101
122
  table << :separator
102
- list.each_with_index do |obj, index|
123
+ arr = []
124
+ if options[:username]
125
+ list.sort_by! { |obj| obj[:username] }
126
+ elsif options[:name]
127
+ list.sort_by! { |obj| obj[:name].downcase }
128
+ elsif options[:posts]
129
+ list.sort_by! { |obj| [obj[:posts], obj[:username]] }
130
+ end
131
+ list.each do |obj|
132
+ obj[:name] = "" if obj[:name].nil?
103
133
  unless indexed_ranks == false
104
134
  details = indexed_ranks[obj[:id].to_i]
105
135
  if details['user']['posts_day'] == -1
@@ -111,13 +141,21 @@ module Ayadn
111
141
  posts_day = 'unknown'
112
142
  end
113
143
  obj[:username].length > 23 ? username = "#{obj[:username][0..20]}..." : username = obj[:username]
114
- unless obj[:name].nil? || obj[:name].empty?
115
- obj[:name].length > 23 ? name = "#{obj[:name][0..20]}..." : name = obj[:name]
116
- table << [ "@#{username} ".color(Settings.options[:colors][:username]), "#{name}", posts_day ]
117
- else
118
- table << [ "@#{username} ".color(Settings.options[:colors][:username]), "", posts_day ]
119
- end
120
- if index + 1 != list.length && Settings.options[:timeline][:compact] == false
144
+ obj[:name].length > 23 ? name = "#{obj[:name][0..20]}..." : name = obj[:name]
145
+ arr << [ "@#{username} ".color(Settings.options[:colors][:username]), "#{name}", obj[:posts], posts_day ]
146
+ end
147
+ if options[:posts_day]
148
+ arr.sort_by! { |obj| obj[3].to_f }
149
+ end
150
+ if options[:reverse]
151
+ arr.reverse!
152
+ end
153
+ if Settings.options[:formats][:list][:reverse] == true
154
+ arr.reverse!
155
+ end
156
+ arr.each_with_index do |obj, index|
157
+ table << arr[index]
158
+ if index + 1 != arr.length && Settings.options[:timeline][:compact] == false
121
159
  table << :separator
122
160
  end
123
161
  end
@@ -129,38 +167,46 @@ module Ayadn
129
167
  # skip objects in blacklist unless force
130
168
  posts = {}
131
169
  data.each.with_index(1) do |post, index|
132
- unless Settings.options[:force]
133
- if Databases.blacklist[post['source']['name'].downcase]
134
- Debug.skipped({source: post['source']['name']})
135
- next
170
+ unless Settings.global[:force] == true
171
+ if Settings.options[:blacklist][:active] == true
172
+ if Databases.is_in_blacklist?('client', post['source']['name'].downcase)
173
+ Debug.skipped({source: post['source']['name']})
174
+ next
175
+ end
136
176
  end
137
177
  end
138
- unless Settings.options[:force]
139
- if Databases.blacklist["-@#{post['user']['username'].downcase}"]
140
- Debug.skipped({user: post['user']['username']})
141
- next
178
+ unless Settings.global[:force] == true
179
+ if Settings.options[:blacklist][:active] == true
180
+ if Databases.is_in_blacklist?('user', post['user']['username'].downcase)
181
+ Debug.skipped({user: post['user']['username']})
182
+ next
183
+ end
142
184
  end
143
185
  end
144
186
  hashtags = extract_hashtags(post)
145
187
  @skip = false
146
- unless Settings.options[:force]
147
- hashtags.each do |h|
148
- if Databases.blacklist[h.downcase]
149
- @skip = true
150
- Debug.skipped({hashtag: h})
151
- break
188
+ unless Settings.global[:force] == true
189
+ if Settings.options[:blacklist][:active] == true
190
+ hashtags.each do |h|
191
+ if Databases.is_in_blacklist?('hashtag', h.downcase)
192
+ @skip = true
193
+ Debug.skipped({hashtag: h})
194
+ break
195
+ end
152
196
  end
153
197
  end
154
198
  end
155
199
  next if @skip
156
200
  mentions= []
157
201
  post['entities']['mentions'].each { |m| mentions << m['name'] }
158
- unless Settings.options[:force]
159
- mentions.each do |m|
160
- if Databases.blacklist["@#{m.downcase}"]
161
- @skip = true
162
- Debug.skipped({mention: m})
163
- break
202
+ unless Settings.global[:force] == true
203
+ if Settings.options[:blacklist][:active] == true
204
+ mentions.each do |m|
205
+ if Databases.is_in_blacklist?('mention', m.downcase)
206
+ @skip = true
207
+ Debug.skipped({mention: m})
208
+ break
209
+ end
164
210
  end
165
211
  end
166
212
  end
@@ -174,7 +220,7 @@ module Ayadn
174
220
  else
175
221
  rank = false
176
222
  is_human = 'unknown'
177
- real_person = nil
223
+ real_person = 'unknown'
178
224
  end
179
225
 
180
226
  if post['user'].has_key?('name')
@@ -198,6 +244,7 @@ module Ayadn
198
244
  handle: "@#{post['user']['username']}",
199
245
  type: post['user']['type'],
200
246
  date: parsed_time(post['created_at']),
247
+ date_short: parsed_time_short(post['created_at']),
201
248
  you_starred: post['you_starred'],
202
249
  source_name: source,
203
250
  source_link: post['source']['link'],
@@ -258,6 +305,7 @@ module Ayadn
258
305
  posts[post['id'].to_i] = values
259
306
 
260
307
  end
308
+
261
309
  posts
262
310
  end
263
311
 
@@ -268,7 +316,7 @@ module Ayadn
268
316
  if ann['type'] == "net.app.core.oembed"
269
317
  if ann['value']['embeddable_url']
270
318
  links << ann['value']['embeddable_url']
271
- elsif ann['value']['url'] && Settings.options[:timeline][:show_channel_oembed] == true
319
+ elsif ann['value']['url'] && Settings.options[:channels][:links] == true
272
320
  links << ann['value']['url']
273
321
  end
274
322
  end
@@ -291,7 +339,7 @@ module Ayadn
291
339
  }
292
340
  filename = "#{Settings.config[:identity][:handle]}_#{origin}_links.json"
293
341
  FileOps.save_links(obj, filename)
294
- puts Status.links_saved(filename)
342
+ @status.links_saved(filename)
295
343
  end
296
344
 
297
345
  def extract_hashtags(post)
@@ -302,37 +350,41 @@ module Ayadn
302
350
  bucket = []
303
351
  data = [data] unless data.is_a?(Array)
304
352
  if options[:channels]
305
- puts "Downloading list of channels and their users credentials.\n\nPlease wait, it could take a while if there are many results and users...".color(:cyan)
353
+ @thor.say_status :downloading, "list of channels and their users credentials", :yellow
354
+ @thor.say_status :info, "it could take a while if there are many results and users", :cyan
306
355
  else
307
- puts "Downloading the channels and recording their users attributes (owners, writers, editors and readers).\n\nThe users are recorded in a database for later filtering and analyzing.\n\nPlease wait, it could take a while the first time if you have many channels.\n\n".color(:cyan)
356
+ @thor.say_status :downloading, "the channels and their users attributes (owners, writers, editors and readers)", :yellow
357
+ @thor.say_status :info, "users are recorded in a database for later filtering and analyzing", :cyan
358
+ @thor.say_status :info, "it could take a while if there are many results", :cyan
308
359
  end
309
360
  chan = Struct.new(:id, :num_messages, :subscribers, :type, :owner, :annotations, :readers, :editors, :writers, :you_subscribed, :unread, :recent_message_id, :recent_message)
310
361
  no_user = {}
362
+ @api = API.new
311
363
  data.each do |ch|
312
364
  unless ch['writers']['user_ids'].empty?
313
- @shell.say_status :parsing, "channel #{ch['id']}", :cyan
365
+ @thor.say_status :parsing, "channel #{ch['id']}", :cyan
314
366
  usernames = []
315
367
  ch['writers']['user_ids'].each do |id|
316
368
  next if no_user[id]
317
- db = Databases.users[id]
369
+ db = Databases.find_user_by_id(id)
318
370
  if db.nil?
319
- @shell.say_status :downloading, "user #{id}"
320
- resp = API.new.get_user(id)
371
+ @thor.say_status :downloading, "user #{id}", :yellow
372
+ resp = @api.get_user(id)
321
373
 
322
374
  if resp['meta']['code'] != 200
323
- @shell.say_status :error, "can't get user #{id}'s data, skipping", :red
375
+ @thor.say_status :error, "can't get user #{id}'s data, skipping", :red
324
376
  no_user[id] = true
325
377
  next
326
378
  end
327
379
 
328
380
  the_username = resp['data']['username']
329
- @shell.say_status :recording, "@#{the_username}", :green
381
+ @thor.say_status :recording, "@#{the_username}", :yellow
330
382
 
331
383
  usernames << "@" + the_username
332
384
  Databases.add_to_users_db(id, the_username, resp['data']['name'])
333
385
  else
334
- the_username = "@" + db.keys.first
335
- @shell.say_status :match, "#{the_username} is already in the database", :blue
386
+ the_username = "@#{db}"
387
+ @thor.say_status :match, "#{the_username} is already in the database", :blue
336
388
 
337
389
  usernames << the_username
338
390
  end
@@ -347,8 +399,6 @@ module Ayadn
347
399
  else
348
400
  unread = "No unread messages"
349
401
  end
350
- @shell.say_status :recording, "channel #{ch['id']}", :green
351
- Databases.add_channel_object(ch)
352
402
  bucket << chan.new(ch['id'], ch['counts']['messages'], ch['counts']['subscribers'], ch['type'], ch['owner'], ch['annotations'], ch['readers'], ch['editors'], writers, ch['you_subscribed'], unread, ch['recent_message_id'], ch['recent_message'])
353
403
  end
354
404
  puts "\e[H\e[2J"
@@ -359,21 +409,13 @@ module Ayadn
359
409
  "#{string[0...10]} #{string[11...19]}"
360
410
  end
361
411
 
362
- def at usernames #TODO: consolidate
363
- usernames.map do |user|
364
- if user == 'me'
365
- 'me'
366
- elsif user[0] == '@'
367
- user
368
- else
369
- "@#{user}"
370
- end
371
- end
412
+ def parsed_time_short(string)
413
+ "#{string[11...19]}"
372
414
  end
373
415
 
374
416
  def get_original_id(post_id, resp)
375
417
  if resp['data']['repost_of']
376
- puts Status.redirecting
418
+ @status.redirecting
377
419
  id = resp['data']['repost_of']['id']
378
420
  Errors.repost(post_id, id)
379
421
  return id
@@ -388,7 +430,7 @@ module Ayadn
388
430
  channel_id = Databases.get_channel_id(orig)
389
431
  if channel_id.nil?
390
432
  Errors.warn("Alias '#{orig}' doesn't exist.")
391
- puts Status.no_alias
433
+ @status.no_alias
392
434
  exit
393
435
  end
394
436
  end
@@ -405,9 +447,9 @@ module Ayadn
405
447
 
406
448
  def get_real_post_id post_id
407
449
  id = post_id.to_i
408
- if id > 0 && id <= length_of_index
450
+ if id <= 200
409
451
  resp = get_post_from_index(id)
410
- post_id = resp[:id]
452
+ post_id = resp['id']
411
453
  end
412
454
  post_id
413
455
  end
@@ -435,7 +477,7 @@ module Ayadn
435
477
  args
436
478
  end
437
479
 
438
- def add_arobases_to_usernames args #TODO: replace all these arobase legacy methods by a unique one
480
+ def add_arobases_to_usernames args
439
481
  args.map do |username|
440
482
  if username == 'me'
441
483
  who_am_i
@@ -447,16 +489,26 @@ module Ayadn
447
489
  end
448
490
  end
449
491
 
492
+ def at usernames
493
+ usernames.map do |user|
494
+ if user == 'me'
495
+ 'me'
496
+ elsif user[0] == '@'
497
+ user
498
+ else
499
+ "@#{user}"
500
+ end
501
+ end
502
+ end
503
+
450
504
  def who_am_i
451
- db = Databases.init(Dir.home + "/ayadn/accounts.db")
452
- active = db['ACTIVE']
453
- db[active][:handle]
505
+ Databases.active_account(Amalgalite::Database.new(Dir.home + "/ayadn/accounts.sqlite"))[2]
454
506
  end
455
507
 
456
508
  def extract_users(resp)
457
509
  users_hash = {}
458
510
  resp['data'].each do |item|
459
- users_hash[item['id']] = [item['username'], item['name'], item['you_follow'], item['follows_you']]
511
+ users_hash[item['id']] = [item['username'], item['name'], item['you_follow'], item['follows_you'], item['counts']['posts']]
460
512
  end
461
513
  users_hash
462
514
  end
@@ -543,6 +595,10 @@ module Ayadn
543
595
  at(arr)
544
596
  end
545
597
 
598
+ def self.epoch_to_date(epoch)
599
+ Time.at(epoch).to_time
600
+ end
601
+
546
602
  private
547
603
 
548
604
  def def_str(word, reg_split)
@@ -564,13 +620,9 @@ module Ayadn
564
620
 
565
621
  def build_users_array(list)
566
622
  users = list.map do |key, value|
567
- {:username => value[0], :name => value[1], :you_follow => value[2], :follows_you => value[3], :id => key}
568
- end
569
- if Settings.options[:formats][:list][:reverse]
570
- return users.reverse
571
- else
572
- return users
623
+ {:username => value[0], :name => value[1], :you_follow => value[2], :follows_you => value[3], :id => key, :posts => value[4]}
573
624
  end
625
+ return users
574
626
  end
575
627
 
576
628
  def extract_checkins(post)
data/lib/ayadn.rb CHANGED
@@ -1,13 +1,12 @@
1
1
  # encoding: utf-8
2
2
  require_relative 'ayadn/version'
3
3
 
4
- %w{rest_client json thor rainbow/ext/string terminal-table yaml logger daybreak fileutils io/console unicode_utils/char_type readline}.each { |r| require "#{r}" }
5
-
6
- # winPlatforms = ['mswin', 'mingw', 'mingw_18', 'mingw_19', 'mingw_20', 'mingw32']
7
- # case Gem::Platform.local.os
8
- # when *winPlatforms
9
- # require 'win32console'
10
- # require 'pstore'
11
- # end
4
+ begin
5
+ %w{rest_client json thor rainbow/ext/string terminal-table yaml logger fileutils io/console unicode_utils/char_type readline amalgalite fast_cache}.each { |r| require "#{r}" }
6
+ rescue LoadError => e
7
+ puts "\nAYADN: Error while loading Gems\n\n"
8
+ puts "RUBY: #{e}\n\n"
9
+ exit
10
+ end
12
11
 
13
12
  require_relative 'ayadn/app'
Binary file
Binary file
@@ -9,15 +9,13 @@ describe Ayadn::Annotations do
9
9
  {
10
10
  timeline: {
11
11
  directed: 1,
12
- deleted: 0,
13
12
  html: 0,
14
- annotations: 1,
15
- show_source: true,
16
- show_symbols: true,
17
- show_real_name: true,
18
- show_date: true,
19
- show_spinner: true,
20
- show_debug: false
13
+ source: true,
14
+ symbols: true,
15
+ name: true,
16
+ date: true,
17
+ spinner: true,
18
+ debug: false
21
19
  },
22
20
  counts: {
23
21
  default: 50,
@@ -54,12 +52,13 @@ describe Ayadn::Annotations do
54
52
  mentions: :red,
55
53
  source: :cyan,
56
54
  symbols: :green,
57
- debug: :red
55
+ debug: :red,
56
+ excerpt: :green
58
57
  },
59
58
  backup: {
60
- auto_save_sent_posts: false,
61
- auto_save_sent_messages: false,
62
- auto_save_lists: false
59
+ posts: false,
60
+ messages: false,
61
+ lists: false
63
62
  },
64
63
  scroll: {
65
64
  timer: 3
@@ -68,7 +67,7 @@ describe Ayadn::Annotations do
68
67
  threshold: 2.1,
69
68
  cache: 48,
70
69
  filter: true,
71
- filter_unranked: false
70
+ unranked: false
72
71
  },
73
72
  nowplaying: {},
74
73
  movie: {
@@ -8,7 +8,6 @@ describe Ayadn::API do
8
8
  },
9
9
  timeline: {
10
10
  directed: 1,
11
- deleted: 0,
12
11
  html: 0,
13
12
  annotations: 1
14
13
  }
@@ -19,10 +18,10 @@ describe Ayadn::API do
19
18
  expect(Ayadn::API.build_query({count: 12})).to match /count=12/
20
19
  end
21
20
  it 'returns a URL with directed=0' do
22
- expect(Ayadn::API.build_query({directed: 0})).to match /directed=0/
21
+ expect(Ayadn::API.build_query({directed: 0})).to match /directed_posts=0/
23
22
  end
24
- it 'returns a URL with html=1' do
25
- expect(Ayadn::API.build_query({html: 1})).to match /html=1/
23
+ it 'returns a URL with html=0 anyway' do
24
+ expect(Ayadn::API.build_query({html: 1})).to match /html=0/
26
25
  end
27
26
  end
28
27
  describe "#check_response_meta_code" do
@@ -14,13 +14,14 @@ describe Ayadn::BlacklistWorkers do
14
14
  symbols: :green,
15
15
  index: :blue,
16
16
  date: :cyan,
17
- link: :magenta
17
+ link: :magenta,
18
+ excerpt: :green
18
19
  },
19
20
  timeline: {
20
- show_real_name: true,
21
- show_date: true,
22
- show_symbols: true,
23
- show_source: true
21
+ name: true,
22
+ date: true,
23
+ symbols: true,
24
+ source: true
24
25
  },
25
26
  formats: {table: {width: 75}},
26
27
  counts: {
@@ -37,7 +38,6 @@ describe Ayadn::BlacklistWorkers do
37
38
  version: 'wee',
38
39
  paths: {
39
40
  db: 'spec/mock/',
40
- pagination: 'spec/mock/',
41
41
  log: 'spec/mock'
42
42
  }
43
43
  })
@@ -53,17 +53,17 @@ describe Ayadn::BlacklistWorkers do
53
53
  it "adds a client to the blacklist" do
54
54
  k = Ayadn::BlacklistWorkers.new
55
55
  k.add(['source', 'Zapier'])
56
- expect(Ayadn::Databases.blacklist['zapier']).to eq :client
56
+ expect(Ayadn::Databases.is_in_blacklist?('client', 'zapier')).to eq true
57
57
  end
58
58
  it "adds a hashtag to the blacklist" do
59
59
  k = Ayadn::BlacklistWorkers.new
60
60
  k.add(['tag', 'tv'])
61
- expect(Ayadn::Databases.blacklist['tv']).to eq :hashtag
61
+ expect(Ayadn::Databases.is_in_blacklist?('hashtag', 'tv')).to eq true
62
62
  end
63
63
  it "adds a mention to the blacklist" do
64
64
  k = Ayadn::BlacklistWorkers.new
65
65
  k.add(['mentions', 'yolo'])
66
- expect(Ayadn::Databases.blacklist['@yolo']).to eq :mention
66
+ expect(Ayadn::Databases.is_in_blacklist?('mention', 'yolo')).to eq true
67
67
  end
68
68
  end
69
69
 
@@ -71,49 +71,44 @@ describe Ayadn::BlacklistWorkers do
71
71
  it "removes a client from the blacklist" do
72
72
  k = Ayadn::BlacklistWorkers.new
73
73
  k.add(['client', 'IFTTT'])
74
- expect(Ayadn::Databases.blacklist['ifttt']).to eq :client
74
+ expect(Ayadn::Databases.is_in_blacklist?('client', 'ifttt')).to eq true
75
75
 
76
76
  k = Ayadn::BlacklistWorkers.new
77
77
  k.remove(['client', 'IFTTT'])
78
- expect(Ayadn::Databases.blacklist['ifttt']).to eq nil
78
+ expect(Ayadn::Databases.is_in_blacklist?('client', 'ifttt')).to eq false
79
79
  end
80
80
  it "removes a hashtag from the blacklist" do
81
81
  k = Ayadn::BlacklistWorkers.new
82
82
  k.add(['hashtag', 'Sports'])
83
- expect(Ayadn::Databases.blacklist['sports']).to eq :hashtag
83
+ expect(Ayadn::Databases.is_in_blacklist?('hashtag', 'sports')).to eq true
84
84
 
85
85
  k = Ayadn::BlacklistWorkers.new
86
86
  k.remove(['hashtag', 'Sports'])
87
- expect(Ayadn::Databases.blacklist['sports']).to eq nil
87
+ expect(Ayadn::Databases.is_in_blacklist?('hashtag', 'sports')).to eq false
88
88
  end
89
89
  it "removes a mention from the blacklist" do
90
90
  k = Ayadn::BlacklistWorkers.new
91
91
  k.add(['mention', 'mrTest'])
92
- expect(Ayadn::Databases.blacklist['@mrtest']).to eq :mention
92
+ expect(Ayadn::Databases.is_in_blacklist?('mention', 'mrtest')).to eq true
93
93
 
94
94
  k = Ayadn::BlacklistWorkers.new
95
95
  k.remove(['mention', 'mrTest'])
96
- expect(Ayadn::Databases.blacklist['@mrtest']).to eq nil
96
+ expect(Ayadn::Databases.is_in_blacklist?('mention', 'mrtest')).to eq false
97
97
  end
98
98
  it "removes a user from the blacklist" do
99
99
  k = Ayadn::BlacklistWorkers.new
100
100
  k.add(['user', 'mrTest'])
101
- expect(Ayadn::Databases.blacklist['-@mrtest']).to eq :user
101
+ expect(Ayadn::Databases.is_in_blacklist?('user', 'mrtest')).to eq true
102
102
 
103
103
  k = Ayadn::BlacklistWorkers.new
104
104
  k.remove(['account', 'mrTest'])
105
- expect(Ayadn::Databases.blacklist['-@mrtest']).to eq nil
105
+ expect(Ayadn::Databases.is_in_blacklist?('user', 'mrtest')).to eq false
106
106
  end
107
107
  end
108
108
 
109
109
  after do
110
110
  File.delete('spec/mock/ayadn.log')
111
111
  Ayadn::Databases.open_databases
112
- Ayadn::Databases.blacklist.clear
113
- Ayadn::Databases.users.clear
114
- Ayadn::Databases.pagination.clear
115
- Ayadn::Databases.index.clear
116
- Ayadn::Databases.aliases.clear
117
- Ayadn::Databases.close_all
112
+ Ayadn::Databases.clear_blacklist
118
113
  end
119
114
  end