ayadn 0.6.4 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +20 -0
  3. data/.rspec +2 -0
  4. data/.travis.yml +17 -0
  5. data/Gemfile +14 -0
  6. data/Guardfile +26 -0
  7. data/LICENSE.txt +22 -0
  8. data/MANUAL.md +946 -0
  9. data/README.md +26 -411
  10. data/Rakefile +6 -0
  11. data/ayadn.gemspec +39 -0
  12. data/bin/ayadn +3 -3
  13. data/lib/ayadn.rb +12 -25
  14. data/lib/ayadn/action.rb +1121 -0
  15. data/lib/ayadn/alias.rb +106 -0
  16. data/lib/ayadn/api.rb +312 -301
  17. data/lib/ayadn/app.rb +429 -365
  18. data/lib/ayadn/authorize.rb +127 -28
  19. data/lib/ayadn/blacklist.rb +116 -0
  20. data/lib/ayadn/cnx.rb +105 -0
  21. data/lib/ayadn/databases.rb +110 -0
  22. data/lib/ayadn/descriptions.rb +1043 -0
  23. data/lib/ayadn/endpoints.rb +220 -153
  24. data/lib/ayadn/errors.rb +37 -0
  25. data/lib/ayadn/extend.rb +4 -10
  26. data/lib/ayadn/fileops.rb +48 -0
  27. data/lib/ayadn/logs.rb +32 -0
  28. data/lib/ayadn/pinboard.rb +46 -35
  29. data/lib/ayadn/post.rb +229 -212
  30. data/lib/ayadn/scroll.rb +251 -0
  31. data/lib/ayadn/set.rb +377 -0
  32. data/lib/ayadn/settings.rb +195 -0
  33. data/lib/ayadn/status.rb +226 -165
  34. data/lib/ayadn/switch.rb +72 -0
  35. data/lib/ayadn/version.rb +4 -0
  36. data/lib/ayadn/view.rb +506 -269
  37. data/lib/ayadn/workers.rb +362 -0
  38. data/spec/helpers.rb +19 -0
  39. data/spec/mock/@ericd.json +160 -0
  40. data/spec/mock/@m.json +45 -0
  41. data/spec/mock/checkins.json +1856 -0
  42. data/spec/mock/fwr_@ayadn.json +1077 -0
  43. data/spec/mock/posted.json +1 -0
  44. data/spec/mock/stream.json +1 -0
  45. data/spec/spec_helper.rb +14 -0
  46. data/spec/unit/api_spec.rb +61 -0
  47. data/spec/unit/databases_spec.rb +5 -0
  48. data/spec/unit/descriptions_spec.rb +9 -0
  49. data/spec/unit/endpoints_spec.rb +35 -0
  50. data/spec/unit/post_spec.rb +136 -0
  51. data/spec/unit/status_spec.rb +9 -0
  52. data/spec/unit/view_spec.rb +119 -0
  53. data/spec/unit/workers_spec.rb +147 -0
  54. metadata +216 -40
  55. data/CHANGELOG.md +0 -250
  56. data/CONTRIBUTORS.md +0 -5
  57. data/LICENSE.md +0 -14
  58. data/lib/ayadn/adn_files.rb +0 -84
  59. data/lib/ayadn/client-http.rb +0 -226
  60. data/lib/ayadn/colors.rb +0 -62
  61. data/lib/ayadn/config.yml +0 -35
  62. data/lib/ayadn/debug.rb +0 -36
  63. data/lib/ayadn/files.rb +0 -184
  64. data/lib/ayadn/get-api.rb +0 -43
  65. data/lib/ayadn/help.rb +0 -152
  66. data/lib/ayadn/list.rb +0 -89
  67. data/lib/ayadn/main.rb +0 -542
  68. data/lib/ayadn/requires.rb +0 -12
  69. data/lib/ayadn/skip.rb +0 -27
  70. data/lib/ayadn/tools.rb +0 -208
  71. data/lib/ayadn/user-stream.rb +0 -91
  72. data/lib/ayadn/view-channels.rb +0 -120
  73. data/lib/ayadn/view-interactions.rb +0 -57
  74. data/lib/ayadn/view-object.rb +0 -195
  75. data/lib/experiments.rb +0 -109
@@ -1,57 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: utf-8
3
- class AyaDN
4
- class View
5
- def buildInteractions(hash)
6
- inter_string = ""
7
- hash.each do |item|
8
- action = item['action']
9
- created_day = item['event_date'][0...10]
10
- created_hour = item['event_date'][11...19]
11
- objects_names, users_list, post_ids, post_text = [], [], [], [] # not the same as var1 = var2 = []
12
- item['objects'].each do |o|
13
- case action
14
- when "follow", "unfollow", "mute", "unmute"
15
- objects_names.push("@" + o['username'])
16
- when "star", "unstar", "repost", "unrepost", "reply"
17
- post_ids.push(o['id'])
18
- #text = o['text']
19
- post_info = buildPostInfo(o, false)
20
- post_text.push(post_info.chomp("\n\n"))
21
- #post_text << text
22
- end
23
- end
24
- item['users'].each do |u|
25
- if u != nil
26
- users_list.push("@" + u['username'])
27
- end
28
- end
29
- joined_users_list = users_list.join(", ")
30
- joined_post_text = post_text.join(" ")
31
- inter_string << "-----\n\n".blue
32
- inter_string << "Date: ".green + "#{created_day} #{created_hour}\n".cyan
33
- case action
34
- when "follow", "unfollow"
35
- inter_string << "#{joined_users_list} ".green + "#{action}ed ".magenta + "you\n".brown
36
- when "mute", "unmute"
37
- inter_string << "#{joined_users_list} ".green + "#{action}d ".magenta + "#{objects_names.join(", ")}\n".brown
38
- when "repost", "unrepost"
39
- inter_string << "#{joined_users_list} ".green + "#{action}ed:\n".magenta
40
- inter_string << joined_post_text
41
- when "star", "unstar"
42
- inter_string << "#{joined_users_list} ".green + "#{action}red:\n".magenta
43
- inter_string << joined_post_text
44
- when "reply"
45
- inter_string << "#{joined_users_list} ".green + "#{action}ed to:\n".magenta
46
- inter_string << joined_post_text
47
- when "welcome"
48
- inter_string << "App.net ".green + "welcomed ".magenta + "you.\n".green
49
- else
50
- inter_string << "Unknown data.\n".red
51
- end
52
- inter_string << "\n"
53
- end
54
- return inter_string
55
- end
56
- end
57
- end
@@ -1,195 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: utf-8
3
- class AyaDN
4
- class View
5
- def create_content_string(item, annotations, me_mentioned)
6
- if item['user']
7
- user_name, user_real_name, user_handle = objectNames(item['user']).values_at(:user_name, :user_real_name, :user_handle)
8
- else
9
- user_name, user_real_name, user_handle = ""
10
- end
11
- created_day, created_hour = objectDate(item)
12
- view_params = {
13
- id: item['id'],
14
- created_day: created_day,
15
- created_hour: created_hour,
16
- user_name: user_name,
17
- user_handle: user_handle,
18
- user_real_name: user_real_name,
19
- text: coloredText(item),
20
- source: item['source']['name'],
21
- links: objectLinks(item),
22
- annotations: annotations,
23
- me_mentioned: me_mentioned,
24
- num_replies: item['num_replies'],
25
- reply_to: item['reply_to']
26
- }
27
- if item['repost_of'] != nil
28
- view_params.merge!({repost_of: item['repost_of'], num_reposts: item['repost_of']['num_reposts']})
29
- end
30
- object_view(view_params)
31
- end
32
- def skip_hashtags(item, saved_tags)
33
- skipped_hashtags_encountered = false
34
- for post_tag in item['entities']['hashtags'] do
35
- case post_tag['name']
36
- when *saved_tags
37
- skipped_hashtags_encountered = true
38
- next
39
- end
40
- end
41
- return skipped_hashtags_encountered
42
- end
43
- def coloredText(item)
44
- obj_text = item['text']
45
- obj_text != nil ? (colored_post = $tools.colorize(obj_text)) : (colored_post = "\n--Post deleted--".red)
46
- end
47
- def objectDate(item)
48
- created_at = item['created_at']
49
- return created_at[0...10], created_at[11...19]
50
- end
51
- def objectLinks(item)
52
- links = item['entities']['links']
53
- links_string = ""
54
- if !links.empty?
55
- links_string << "\n" if item['annotations'] == nil
56
- for link in links do
57
- links_string << "Link: ".cyan + link['url'].brown + "\n"
58
- end
59
- end
60
- return links_string
61
- end
62
- def objectSource(item)
63
- {name: item['source']['name'], link: item['source']['link']}
64
- end
65
- def objectNames(item)
66
- user_id = item['id']
67
- user_name = item['username']
68
- $files.users_write(user_id, user_name) if $files.users_read(user_id) == nil
69
- user_handle = "@" + user_name
70
- {user_name: user_name, user_real_name: item['name'], user_handle: user_handle}
71
- end
72
- def checkins_annotations(item)
73
- anno_string = ""
74
- annotations_list = item['annotations']
75
- xxx = 0
76
- if annotations_list != nil
77
- annotations_list.each do
78
- annotation_type = annotations_list[xxx]['type']
79
- annotation_value = annotations_list[xxx]['value']
80
- if annotation_type == "net.app.core.checkin" or annotation_type == "net.app.ohai.location"
81
- checkins_name = annotation_value['name']
82
- if checkins_name.nil?
83
- checkins_name = ""
84
- end
85
- checkins_address = annotation_value['address']
86
- checkins_locality = annotation_value['locality']
87
- checkins_region = annotation_value['region']
88
- checkins_postcode = annotation_value['postcode']
89
- checkins_country_code = annotation_value['country_code']
90
- anno_string << "\n" + ("." * (checkins_name.length + 6))
91
- anno_string << ("\nName: ".cyan + checkins_name.upcase.reddish)
92
- anno_string << ("\nAddress: ".cyan + checkins_address.green) unless checkins_address.nil?
93
- anno_string << ("\nLocality: ".cyan + checkins_locality.green) unless checkins_locality.nil?
94
- anno_string << (" (#{checkins_postcode})".green) unless checkins_postcode.nil?
95
- anno_string << ("\nState/Region: ".cyan + checkins_region.green) unless checkins_region.nil?
96
- anno_string << (" (#{checkins_country_code})".upcase.green) unless checkins_country_code.nil?
97
- unless @source_name_and_link[:name].nil? or $tools.config['timeline']['show_client']
98
- anno_string << "\nPosted with: ".cyan + "#{@source_name_and_link[:name]} [#{@source_name_and_link[:link]}]".green + " "
99
- end
100
- #anno_string += "\n"
101
- end
102
- if annotation_type == "net.app.core.oembed"
103
- @same_link = false
104
- photo_link = annotation_value['embeddable_url']
105
- if photo_link != nil
106
- photo_link_parsed = URI.parse(photo_link)
107
- photo_link_to_compare = photo_link_parsed.host + photo_link_parsed.path
108
- item['entities']['links'].each do |link|
109
- in_entities_parsed = URI.parse(link['url'])
110
- in_entities_to_compare = in_entities_parsed.host + in_entities_parsed.path
111
- @same_link = true if in_entities_to_compare == photo_link_to_compare
112
- end
113
- anno_string << ("\nLink: ".cyan + photo_link.brown) if @same_link == false
114
- end
115
- end
116
- xxx += 1
117
- end
118
- return anno_string
119
- end
120
- end
121
- def object_view(params)
122
- if params[:me_mentioned]
123
- obj_view = "\n" + params[:id].to_s.red.reverse_color.ljust(14)
124
- else
125
- if params[:user_name] == $tools.config['identity']['prefix']
126
- obj_view = "\n" + params[:id].to_s.green.reverse_color.ljust(14)
127
- else
128
- obj_view = "\n" + params[:id].to_s.cyan.ljust(14)
129
- end
130
- end
131
- obj_view << ' '
132
- obj_view << params[:user_handle].green if params[:user_handle]
133
- obj_view << ' '
134
- obj_view << "[#{params[:user_real_name]}]".magenta if params[:user_real_name]
135
- obj_view << ' '
136
- obj_view << params[:created_day].cyan + ' ' + params[:created_hour].cyan
137
- obj_view << ' '
138
- obj_view << "[#{params[:source]}]".cyan if $tools.config['timeline']['show_client']
139
- if params[:repost_of] && $tools.config['timeline']['show_reposters']
140
- obj_view << " [x#{params[:num_reposts]}]".blue
141
- end
142
- if $tools.config['timeline']['show_symbols']
143
- obj_view << " <".blue if params[:reply_to] != nil
144
- obj_view << " >".blue if params[:num_replies] > 0
145
- end
146
- obj_view << "\n"
147
- obj_view << params[:text]
148
- obj_view << "\n" if params[:links]
149
- obj_view << (params[:annotations] + "\n") if params[:annotations] != nil
150
- obj_view << params[:links] + "\n"
151
- obj_view
152
- end
153
- def file_view(params)
154
- file_elements = "\nName: ".cyan + params[:name].green
155
- file_elements << "\nKind: ".cyan + params[:kind].pink
156
- file_elements << "\nSize: ".cyan + params[:file_size_converted].reddish unless params[:file_size] == nil
157
- file_elements << "\nDate: ".cyan + params[:created_day].green + " " + params[:created_hour].green
158
- file_elements << "\nSource: ".cyan + params[:source_name].brown + " - #{params[:source_link]}".brown
159
- end
160
- def filesDetails(item)
161
- created_day, created_hour = objectDate(item)
162
- file_size = item['size']
163
- file_size_converted = file_size.to_filesize unless file_size == nil
164
- {
165
- name: item['name'],
166
- file_token: item['file_token'],
167
- source_name: item['source']['name'],
168
- source_link: item['source']['link'],
169
- kind: item['kind'],
170
- id: item['id'],
171
- file_size: file_size,
172
- file_size_converted: file_size_converted,
173
- file_is_public: item['public'],
174
- file_url: item['url_permanent'],
175
- created_day: created_day,
176
- created_hour: created_hour
177
- }
178
- end
179
- def derivedFilesDetails(derived_files)
180
- if derived_files != nil
181
- if derived_files['image_thumb_960r'] != nil
182
- #file_derived_bigthumb_name = derived_files['image_thumb_960r']['name']
183
- file_derived_bigthumb_url = derived_files['image_thumb_960r']['url']
184
- end
185
- if derived_files['image_thumb_200s'] != nil
186
- #file_derived_smallthumb_name = derived_files['image_thumb_200s']['name']
187
- file_derived_smallthumb_url = derived_files['image_thumb_200s']['url']
188
- end
189
- list_string += "\nBig thumbnail: ".cyan + file_derived_bigthumb_url unless file_derived_bigthumb_url == nil
190
- list_string += "\nSmall thumbnail: ".cyan + file_derived_smallthumb_url unless file_derived_smallthumb_url == nil
191
- end
192
- return list_string
193
- end
194
- end
195
- end
data/lib/experiments.rb DELETED
@@ -1,109 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: utf-8
3
- class AyaDN
4
- # experimenting without curl
5
- # def ayadnFileUpload(file_name)
6
- # # puts "\nUploading ".green + file_name.brown + "\n"
7
- # # response = @api.createIncompleteFileUpload(file_name)
8
- # # puts response.inspect #SUCCESS
9
- # # THEN multipart => #FAIL
10
- # end
11
-
12
-
13
- # def ayadnDeactivateChannel(channel_id)
14
- # resp = @api.deactivateChannel(channel_id)
15
- # puts resp
16
- # end
17
-
18
-
19
- ### experiment
20
- ### not DRY at all, this is ok, chill out
21
- # def ayadnRecord(item)
22
- # # first create with curl -i -H 'Authorization: BEARER xxx' "https://stream-channel.app.net/stream/user?auto_delete=1&include_annotations=1"
23
- # # it stays open and returns a stream_id in the headers
24
- # # TODO: replace curl with a good connection system with HTTP or Rest-Client
25
-
26
- # command = "sleep 1; curl -i -H 'Authorization: BEARER #{@token}' 'https://stream-channel.app.net/stream/user?auto_delete=1&include_annotations=1'"
27
- # pid = Process.spawn(command)
28
- # Process.detach(pid)
29
-
30
- # puts "Enter stream id: "
31
- # stream_id = STDIN.gets.chomp
32
- # last_page_id = nil
33
- # start = Time.now
34
- # case item
35
- # when "global" # works :)
36
- # @url = "https://alpha-api.app.net/stream/0/posts/stream/global?connection_id=#{stream_id}&since_id=#{last_page_id}"
37
- # when "unified" # doesn't work, have to implement some sort of real keep-alive connection
38
- # @url = "https://alpha-api.app.net/stream/0/posts/stream/unified?connection_id=#{stream_id}&since_id=#{last_page_id}&include_directed_posts=1"
39
- # end
40
- # puts "\nRecording stream in #{$tools.ayadn_configuration[:files_path]}/rec-#{item}.json\n\n"
41
- # uri = URI.parse(@url)
42
- # https = Net::HTTP.new(uri.host,uri.port)
43
- # https.use_ssl = true
44
- # https.verify_mode = OpenSSL::SSL::VERIFY_NONE
45
- # request = Net::HTTP::Get.new(uri.request_uri)
46
- # request["Authorization"] = "Bearer #{@token}"
47
- # request["Content-Type"] = "application/json"
48
- # response = https.request(request)
49
- # @hash = JSON.parse(response.body)
50
- # big_stream = @hash['data']
51
- # f = File.new($tools.ayadn_configuration[:files_path] + "/rec-#{item}.json", 'w')
52
- # f.puts(big_stream.to_json)
53
- # f.close
54
- # stream, last_page_id = completeStream
55
- # displayScrollStream(stream)
56
- # number_of_connections = 1
57
- # file_operations_timer = 0
58
- # loop do
59
- # begin
60
- # case item
61
- # when "global"
62
- # @url = "https://alpha-api.app.net/stream/0/posts/stream/global?connection_id=#{stream_id}&since_id=#{last_page_id}"
63
- # when "unified"
64
- # @url = "https://alpha-api.app.net/stream/0/posts/stream/unified?connection_id=#{stream_id}&since_id=#{last_page_id}&include_directed_posts=1"
65
- # end
66
- # uri = URI.parse(@url)
67
- # request = Net::HTTP::Get.new(uri.request_uri)
68
- # request["Authorization"] = "Bearer #{@token}"
69
- # request["Content-Type"] = "application/json"
70
- # before_request_id = last_page_id
71
- # response = https.request(request)
72
- # @hash = JSON.parse(response.body)
73
- # stream, last_page_id = completeStream
74
- # displayScrollStream(stream)
75
- # if last_page_id == nil
76
- # last_page_id = before_request_id
77
- # sleep 0.5 # trying to play nice with the API limits
78
- # number_of_connections += 1
79
- # next
80
- # end
81
- # # don't let it run for days, it will eat your RAM
82
- # # + the simple file dump isn't ok in the long run
83
- # big_stream << @hash['data']
84
- # number_of_connections += 1
85
- # file_operations_timer += 1
86
- # sleep 0.2 # trying to play nice with the API limits
87
- # if file_operations_timer == 10
88
- # puts "\nRecording stream in #{$tools.ayadn_configuration[:files_path]}/rec-#{item}.json\n\n".green
89
- # #big_json = JSON.parse(IO.read($tools.ayadn_configuration[:files_path] + "/rec-#{item}.json"))
90
- # f = File.new($tools.ayadn_configuration[:files_path] + "/rec-#{item}.json", 'w')
91
- # f.puts(big_stream.to_json)
92
- # f.close
93
- # file_operations_timer = 0
94
- # end
95
- # rescue Exception => e
96
- # puts e.inspect
97
- # puts e.to_s
98
- # finish = Time.now
99
- # elapsed = finish.to_f - start.to_f
100
- # mins, secs = elapsed.divmod 60.0
101
- # puts "\nRequests: #{number_of_connections}\n"
102
- # puts "Elapsed time (min:secs.msecs): "
103
- # puts("%3d:%04.2f"%[mins.to_i, secs])
104
- # puts "\nStream recorded in #{$tools.ayadn_configuration[:files_path]}/rec-#{item}.json"
105
- # exit
106
- # end
107
- # end
108
- # end
109
- end