ayadn 1.8.2 → 2.0

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.
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
@@ -5,39 +5,72 @@ module Ayadn
5
5
 
6
6
  require 'rss'
7
7
 
8
- def initialize api, view, workers
8
+ def initialize api, view, workers, options = {}
9
9
  @api = api
10
10
  @view = view
11
11
  @workers = workers
12
+ @status = Status.new
13
+ unless options[:hashtag]
14
+ @hashtag = "#nowplaying"
15
+ else
16
+ @hashtag = "##{options[:hashtag].join()}"
17
+ end
18
+ unless options[:text]
19
+ @custom_text = nil
20
+ else
21
+ @custom_text = "\n \n#{options[:text].join(' ')}"
22
+ end
12
23
  end
13
24
 
14
25
  def lastfm options
15
26
  begin
16
27
  user = Settings.options[:nowplaying][:lastfm] || create_lastfm_user()
17
- puts Status.fetching_from('Last.fm')
28
+ @status.fetching_from('Last.fm')
18
29
  artist, track = get_lastfm_track_infos(user)
19
- puts Status.itunes_store
20
- store = lastfm_istore_request(artist, track) unless options['no_url']
21
- text_to_post = "#nowplaying\n \nTitle: ‘#{track}’\nArtist: #{artist}"
30
+ @status.itunes_store
31
+ store = []
32
+ unless options['no_url']
33
+ store = lastfm_istore_request(artist, track)
34
+ if store['code'] == 404 && artist =~ /(and)/
35
+ artist.gsub!('and', '&')
36
+ store = lastfm_istore_request(artist, track)
37
+ end
38
+ end
39
+ text_to_post = "#{@hashtag}\n \nTitle: ‘#{track}’\nArtist: #{artist}#{@custom_text}"
22
40
  post_nowplaying(text_to_post, store, options)
23
41
  rescue => e
24
- puts Status.wtf
42
+ @status.wtf
25
43
  Errors.global_error({error: e, caller: caller, data: [store, options]})
26
44
  end
27
45
  end
28
46
 
29
47
  def itunes options
30
48
  begin
31
- abort(Status.error_only_osx) unless Settings.config[:platform] =~ /darwin/
32
- puts Status.fetching_from('iTunes')
49
+ unless Settings.config[:platform] =~ /darwin/
50
+ @status.error_only_osx
51
+ exit
52
+ end
53
+ @status.fetching_from('iTunes')
33
54
  itunes = get_itunes_track_infos()
34
- itunes.each {|el| abort(Status.empty_fields) if el.length == 0}
35
- puts Status.itunes_store
36
- store = itunes_istore_request(itunes) unless options['no_url']
37
- text_to_post = "#nowplaying\n \nTitle: ‘#{itunes.track}’\nArtist: #{itunes.artist}\nfrom ‘#{itunes.album}’"
55
+ itunes.each do |el|
56
+ if el.length == 0
57
+ @status.empty_fields
58
+ exit
59
+ end
60
+ end
61
+ @status.itunes_store
62
+ store = []
63
+ unless options['no_url']
64
+ store = itunes_istore_request(itunes)
65
+ if store['code'] == 404 && itunes.artist =~ /(and)/
66
+ itunes.artist.gsub!('and', '&')
67
+ store = itunes_istore_request(itunes)
68
+ end
69
+ end
70
+ text_to_post = "#{@hashtag}\n \nTitle: ‘#{itunes.track}’\nArtist: #{itunes.artist}\nfrom ‘#{itunes.album}’#{@custom_text}"
38
71
  post_nowplaying(text_to_post, store, options)
39
72
  rescue => e
40
- puts Status.wtf
73
+ @status.wtf
41
74
  Errors.global_error({error: e, caller: caller, data: [itunes, store, options]})
42
75
  end
43
76
  end
@@ -51,24 +84,39 @@ module Ayadn
51
84
  lfm = feed.items[0].title.split(' – ')
52
85
  return lfm[0], lfm[1]
53
86
  rescue Interrupt
54
- abort(Status.canceled)
87
+ @status.canceled
88
+ exit
55
89
  end
56
90
  end
57
91
 
58
92
  def post_nowplaying text_to_post, store, options
59
93
  begin
60
- @view.clear_screen
61
- puts Status.writing
62
- show_nowplaying("\n#{text_to_post}", options, store)
94
+ before = text_to_post
63
95
  unless options[:no_url] || store.nil?
64
96
  text_to_post += "\n \n[iTunes Store](#{store['link']})"
65
97
  end
66
- abort(Status.canceled) unless STDIN.getch == ("y" || "Y")
67
- puts "\n#{Status.yourpost}"
98
+ poster = Post.new
99
+ poster.post_size_error(text_to_post) if poster.post_size_ok?(text_to_post) == false
100
+ @view.clear_screen
101
+ @status.writing
102
+ show_nowplaying("\n#{before}", options, store)
103
+ unless STDIN.getch == ("y" || "Y")
104
+ @status.canceled
105
+ exit
106
+ end
107
+ @view.clear_screen
108
+ @status.yourpost
109
+ puts "\n\n"
68
110
  if store.nil? || options[:no_url]
111
+ text_to_post = before
69
112
  visible, track, artwork, artwork_thumb, link, artist = false
70
113
  else
71
- visible, track, artwork, artwork_thumb, link, artist = true, store['track'], store['artwork'], store['artwork_thumb'], store['link'], store['artist']
114
+ if store['link'].nil? || store['code'] == 404
115
+ text_to_post = before
116
+ visible, track, artwork, artwork_thumb, link, artist = false
117
+ else
118
+ visible, track, artwork, artwork_thumb, link, artist = true, store['track'], store['artwork'], store['artwork_thumb'], store['link'], store['artist']
119
+ end
72
120
  end
73
121
  options = options.dup
74
122
  options[:nowplaying] = true
@@ -92,21 +140,23 @@ module Ayadn
92
140
  source: source,
93
141
  visible: visible
94
142
  }
95
- resp = Post.new.post(dic)
96
- FileOps.save_post(resp) if Settings.options[:backup][:auto_save_sent_posts]
143
+ resp = poster.post(dic)
144
+ FileOps.save_post(resp) if Settings.options[:backup][:posts]
97
145
  @view.show_posted(resp)
98
146
  rescue => e
99
- puts Status.wtf
147
+ @status.wtf
100
148
  Errors.global_error({error: e, caller: caller, data: [dic, store, options]})
101
149
  end
102
150
  end
103
151
 
104
152
  def ask_lastfm_user
105
- puts "\nPlease enter your Last.fm username:\n".color(:cyan)
153
+ @status.info("please", "enter your Last.fm username", "yellow")
154
+ print "> "
106
155
  begin
107
156
  STDIN.gets.chomp!
108
157
  rescue Interrupt
109
- abort(Status.canceled)
158
+ @status.canceled
159
+ exit
110
160
  end
111
161
  end
112
162
 
@@ -117,49 +167,60 @@ module Ayadn
117
167
  end
118
168
 
119
169
  def itunes_istore_request itunes
120
- infos = itunes_reg([itunes.artist, itunes.track, itunes.album])
121
- itunes_url = "https://itunes.apple.com/search?term=#{infos[0]}&term=#{infos[1]}&term=#{infos[2]}&media=music&entity=musicTrack"
170
+ itunes_url = "https://itunes.apple.com/search?term=#{itunes.artist}&term=#{itunes.track}&term=#{itunes.album}&media=music&entity=musicTrack"
122
171
  get_itunes_store(itunes_url, itunes.artist, itunes.track)
123
172
  end
124
173
 
125
174
  def lastfm_istore_request artist, track
126
- infos = itunes_reg([artist, track])
127
- itunes_url = "https://itunes.apple.com/search?term=#{infos[0]}&term=#{infos[1]}&media=music&entity=musicTrack"
175
+ itunes_url = "https://itunes.apple.com/search?term=#{artist}&term=#{track}&media=music&entity=musicTrack"
128
176
  get_itunes_store(itunes_url, artist, track)
129
177
  end
130
178
 
131
179
  def get_itunes_store url, artist, track
132
180
  results = JSON.load(CNX.download(URI.escape(url)))['results']
133
-
181
+ # puts results.inspect
134
182
  unless results.empty? || results.nil?
135
-
136
- results.keep_if do |obj|
137
- unless obj['artistName'].nil?
183
+ # results.each {|obj| puts obj['trackName']}
184
+ # puts "-"
185
+ # puts track
186
+ one = results.select do |obj|
187
+ next if obj['trackName'].nil?
188
+ obj['trackName'].downcase == track.downcase
189
+ end
190
+ # puts one.inspect
191
+ if one.empty?
192
+ by_artist = results.select do |obj|
193
+ next if obj['artistName'].nil?
138
194
  obj['artistName'].downcase == artist.downcase
139
195
  end
140
- end
141
-
142
- if results.empty?
143
- return {
144
- 'code' => 404,
145
- 'request' => url
146
- }
147
- end
196
+ # puts by_artist
197
+ by_exact_track = by_artist.select do |obj|
198
+ next if obj['trackName'].nil?
199
+ obj['trackName'].downcase == track.downcase
200
+ end
201
+ # puts by_exact_track
202
+ if by_exact_track.empty?
203
+ splitted = track.split(" ").first.downcase
204
+ results = by_artist.select do |obj|
205
+ next if obj['trackName'].nil?
206
+ obj['trackName'].split(" ").first.downcase == splitted
207
+ end
208
+ else
209
+ results = by_exact_track
210
+ end
148
211
 
149
- if results.length > 1
150
- resp = results.select {|obj| obj['trackName'].downcase == track.downcase}
151
212
  else
152
- resp = results
213
+ results = one
153
214
  end
154
215
 
155
- if resp.empty?
216
+ if results.empty?
156
217
  return {
157
218
  'code' => 404,
158
219
  'request' => url
159
220
  }
160
221
  end
161
222
 
162
- candidate = resp[0] || results[0]
223
+ candidate = results[0]
163
224
 
164
225
  return {
165
226
  'code' => 200,
@@ -180,17 +241,10 @@ module Ayadn
180
241
  end
181
242
  end
182
243
 
183
- def itunes_reg arr_of_itunes
184
- regex_exotics = /[~:-;,?!\'&`^=+<>*%()\/"“”’°£$€.…]/
185
- arr_of_itunes.map do |itune|
186
- itune.gsub(regex_exotics, ' ').split(' ').join('+')
187
- end
188
- end
189
-
190
244
  def get_itunes_track_infos
191
245
  track = `osascript -e 'tell application "iTunes"' -e 'set trackName to name of current track' -e 'return trackName' -e 'end tell'`
192
246
  if track.empty?
193
- puts Status.no_itunes
247
+ @status.no_itunes
194
248
  Errors.warn "Nowplaying canceled: unable to get info from iTunes."
195
249
  exit
196
250
  end
@@ -201,13 +255,22 @@ module Ayadn
201
255
  end
202
256
 
203
257
  def show_nowplaying(text, options, store)
204
- puts "\nYour post:\n".color(:cyan)
205
- if options['no_url'] || store['code'] != 200
206
- puts text + "\n\n\n"
207
- else
208
- puts text + "\n\n\nThe iTunes Store thinks this track is: ".color(:green) + "'#{store['track']}'".color(:magenta) + " by ".color(:green) + "'#{store['artist']}'".color(:magenta) + ".\n\nAyadn will use these elements to insert album artwork and a link to the track.\n\n".color(:green)
258
+ # @status.to_be_posted
259
+ thor = Thor::Shell::Basic.new
260
+ text.split("\n").each do |line|
261
+ thor.say_status(nil, line.color(Settings.options[:colors][:excerpt]))
262
+ end
263
+ puts "\n"
264
+ unless options['no_url'] || store['code'] != 200
265
+ thor.say_status(nil, "[iTunes link](#1)")
266
+ thor.say_status(nil, "[album art](#2)")
267
+ puts "\n\n"
268
+ thor.say_status(:'#1', store['link'])
269
+ thor.say_status(:'#2', store['artwork'])
270
+ puts "\n"
271
+ @status.itunes_store_track(store)
209
272
  end
210
- puts "Is it ok? (y/N) ".color(:yellow)
273
+ @status.ok?
211
274
  end
212
275
 
213
276
  end
@@ -3,11 +3,18 @@ module Ayadn
3
3
 
4
4
  class NowWatching
5
5
 
6
- require 'spotlite'
6
+ begin
7
+ require 'spotlite'
8
+ rescue LoadError => e
9
+ puts "\nAYADN: Error while loading Gems\n\n"
10
+ puts "RUBY: #{e}\n\n"
11
+ exit
12
+ end
7
13
 
8
14
  def initialize view = nil
9
15
  @view = view
10
16
  @spotlite = Spotlite::Movie
17
+ @status = Status.new
11
18
  end
12
19
 
13
20
  # -----
@@ -36,14 +43,14 @@ module Ayadn
36
43
 
37
44
  def post args, options
38
45
  options = options.dup
39
- puts "\nContacting IMDb.com...".color(:cyan)
46
+ @status.info("connected", "IMDb", "yellow")
40
47
  response = find_by_title(args, options)
41
48
  text = format_post(response)
42
49
  show_post(text)
43
50
  filename = create_filename(response)
44
51
  FileOps.download_url(filename, response.poster_url)
45
52
  @view.clear_screen
46
- puts "\nPosting and uploading the movie poster...\n".color(:green)
53
+ @status.info("uploading", "movie poster", "yellow")
47
54
  options[:embed] = ["#{Settings.config[:paths][:downloads]}/#{filename}"]
48
55
  options[:movie] = true
49
56
  dic = {
@@ -53,9 +60,10 @@ module Ayadn
53
60
  source: 'IMDb'
54
61
  }
55
62
  resp = Post.new.post(dic)
56
- FileOps.save_post(resp) if Settings.options[:backup][:auto_save_sent_posts]
63
+ FileOps.save_post(resp) if Settings.options[:backup][:posts]
57
64
  @view.clear_screen
58
- puts Status.yourpost
65
+ @status.yourpost
66
+ puts "\n\n"
59
67
  @view.show_posted(resp)
60
68
  end
61
69
 
@@ -91,11 +99,19 @@ module Ayadn
91
99
 
92
100
  def show_post text
93
101
  @view.clear_screen
94
- puts Status.writing
95
- puts "\nYour post:\n\n".color(:cyan)
96
- puts text
97
- puts "\nIs it ok? (y/N)".color(:yellow)
98
- abort(Status.canceled) unless STDIN.getch == ("y" || "Y")
102
+ @status.writing
103
+ @status.to_be_posted
104
+ thor = Thor::Shell::Basic.new
105
+ puts "\n"
106
+ text.split("\n").each do |line|
107
+ thor.say_status(nil, line.color(Settings.options[:colors][:excerpt]))
108
+ end
109
+ puts "\n"
110
+ @status.ok?
111
+ unless STDIN.getch == ("y" || "Y")
112
+ @status.canceled
113
+ exit
114
+ end
99
115
  end
100
116
 
101
117
  end
@@ -2,27 +2,32 @@
2
2
  module Ayadn
3
3
  class PinBoard
4
4
 
5
+ def initialize
6
+ @status = Status.new
7
+ end
8
+
5
9
  def has_credentials_file?
6
- File.exist?(Ayadn::Settings.config[:paths][:db] + '/ayadn_pinboard.db')
10
+ File.exist?(Ayadn::Settings.config[:paths][:auth] + '/pinboard.data')
7
11
  end
8
12
 
9
13
  def ask_credentials
10
14
  begin
11
- puts Status.pin_username
15
+ @status.pin_username
12
16
  pin_username = STDIN.gets.chomp()
13
- puts Status.pin_password
17
+ @status.pin_password
14
18
  pin_password = STDIN.noecho(&:gets).chomp()
15
19
  rescue Interrupt
16
- abort(Status.canceled)
20
+ @status.canceled
21
+ exit
17
22
  rescue => e
18
- puts Status.wtf
23
+ @status.wtf
19
24
  Errors.global_error({error: e, caller: caller, data: [pin_username]})
20
25
  end
21
26
  save_credentials(encode(pin_username, pin_password))
22
27
  end
23
28
 
24
29
  def load_credentials
25
- decode(File.read(Ayadn::Settings.config[:paths][:db] + '/ayadn_pinboard.db'))
30
+ decode(File.read(Ayadn::Settings.config[:paths][:auth] + '/pinboard.data'))
26
31
  end
27
32
 
28
33
  def pin(data)
@@ -37,7 +42,7 @@ module Ayadn
37
42
  end
38
43
 
39
44
  def save_credentials(encoded_pinboard_credentials)
40
- File.write(Ayadn::Settings.config[:paths][:db] + '/ayadn_pinboard.db', encoded_pinboard_credentials)
45
+ File.write(Ayadn::Settings.config[:paths][:auth] + '/pinboard.data', encoded_pinboard_credentials)
41
46
  end
42
47
 
43
48
  def encode(username, password)
data/lib/ayadn/post.rb CHANGED
@@ -2,6 +2,10 @@
2
2
  module Ayadn
3
3
  class Post
4
4
 
5
+ def initialize
6
+ @status = Status.new
7
+ end
8
+
5
9
  def post(dic)
6
10
  send_content(Endpoints.new.posts_url, payload_basic(dic))
7
11
  end
@@ -16,7 +20,7 @@ module Ayadn
16
20
  next if m == Settings.config[:identity][:username]
17
21
  reply << " @#{m}"
18
22
  end
19
- post_size(reply)
23
+ post_size_error(reply) if post_size_ok?(reply) == false
20
24
  dic[:text] = reply
21
25
  dic[:reply_to] = dic[:id]
22
26
  send_content(Endpoints.new.posts_url, payload_reply(dic))
@@ -84,65 +88,67 @@ module Ayadn
84
88
  #while buffer = Readline.readline("#{Settings.config[:identity][:handle]} >> ".color(:red))
85
89
  while buffer = Readline.readline(">> ".color(:red))
86
90
  resp = post({text: buffer})
87
- FileOps.save_post(resp) if Settings.options[:backup][:auto_save_sent_posts]
88
- puts Status.done
91
+ FileOps.save_post(resp) if Settings.options[:backup][:posts]
92
+ @status.done
89
93
  end
90
94
  rescue Interrupt
91
- abort(Status.canceled)
95
+ @status.canceled
96
+ exit
92
97
  end
93
98
  end
94
99
  end
95
100
 
96
101
  def readline
97
- puts Status.readline
102
+ @status.readline
98
103
  post = []
99
104
  begin
100
105
  while buffer = Readline.readline("> ")
101
106
  post << buffer
102
107
  end
103
108
  rescue Interrupt
104
- abort(Status.canceled)
109
+ @status.canceled
110
+ exit
105
111
  end
106
112
  post
107
113
  end
108
114
 
109
- def post_size(post) # works on a string
110
- words = post.split(" ")
111
- result = []
112
- words.each { |word| result << get_markdown_text(word) }
113
- post = result.join(" ")
114
- size, max_size = post.length, Settings.config[:post_max_length]
115
- if size < 1
116
- abort(error_text_empty)
117
- elsif size > max_size
118
- Errors.warn "Canceled: too long (#{size - max_size}chars)"
119
- puts "\nYour text was: \n\n#{post}\n\n".color(:yellow)
120
- abort(Status.too_long(size, max_size))
121
- end
115
+ def post_size_ok?(post) # works on a string, returns boolean
116
+ text = keep_text_from_markdown_links(post)
117
+ size, max_size = text.length, Settings.config[:post_max_length]
118
+ (size >= 1 && size <= max_size)
122
119
  end
123
120
 
124
- def check_post_length(lines_array) # works on an array
125
- check_length(lines_array, Settings.config[:post_max_length])
121
+ def message_size_ok?(message) # works on a string, returns boolean
122
+ text = keep_text_from_markdown_links(message)
123
+ size, max_size = text.length, Settings.config[:message_max_length]
124
+ (size >= 1 && size <= max_size)
126
125
  end
127
126
 
128
- def check_message_length(lines_array) # works on an array
129
- check_length(lines_array, Settings.config[:message_max_length])
127
+ def post_size_error(post)
128
+ text = keep_text_from_markdown_links(post)
129
+ size, max_size = text.length, Settings.config[:post_max_length]
130
+ bad_text_size(post, size, max_size)
130
131
  end
131
132
 
132
- def check_length(lines_array, max_size)
133
- words_array = []
134
- lines_array.each { |word| words_array << get_markdown_text(word) }
135
- size = words_array.join.length
133
+ def message_size_error(message)
134
+ text = keep_text_from_markdown_links(message)
135
+ size, max_size = text.length, Settings.config[:message_max_length]
136
+ bad_text_size(message, size, max_size)
137
+ end
138
+
139
+ def bad_text_size(post, size, max_size)
136
140
  if size < 1
137
- error_text_empty
138
- exit
141
+ error_text_empty()
139
142
  elsif size > max_size
140
143
  Errors.warn "Canceled: too long (#{size - max_size}chars)"
141
- abort(Status.too_long(size, max_size))
144
+ @status.info("info", "your text:", "cyan")
145
+ puts post
146
+ @status.too_long(size, max_size)
147
+ exit
142
148
  end
143
149
  end
144
150
 
145
- def get_markdown_text(str)
151
+ def keep_text_from_markdown_links(str)
146
152
  str.gsub(/\[([^\]]+)\]\(([^)]+)\)/, '\1')
147
153
  end
148
154
 
@@ -151,13 +157,10 @@ module Ayadn
151
157
  result.split('|||') #=> [text, link]
152
158
  end
153
159
 
154
- def text_is_empty?(args)
155
- args.empty? || args[0] == ""
156
- end
157
-
158
160
  def error_text_empty
159
- puts Status.no_text
160
- Errors.warn "-Post without text-"
161
+ @status.no_text
162
+ Errors.warn "-No text-"
163
+ exit
161
164
  end
162
165
 
163
166
  end
data/lib/ayadn/profile.rb CHANGED
@@ -5,7 +5,10 @@ module Ayadn
5
5
  attr_reader :options, :text, :payload
6
6
 
7
7
  def initialize options
8
- abort(Status.profile_options) if options.empty?
8
+ if options.empty?
9
+ @status.profile_options
10
+ exit
11
+ end
9
12
  @options = options
10
13
  end
11
14
 
@@ -23,8 +26,8 @@ module Ayadn
23
26
  unless @options[:delete] || @options[:avatar] || @options[:cover]
24
27
  writer = Post.new
25
28
  input = writer.compose()
26
- writer.check_post_length(input)
27
29
  @text = input.join("\n")
30
+ writer.post_size_error(@text) if writer.post_size_ok?(@text) == false
28
31
  end
29
32
  end
30
33