twterm 2.3.0 → 2.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/lib/twterm.rb +4 -4
  4. data/lib/twterm/app.rb +4 -1
  5. data/lib/twterm/direct_message_composer.rb +2 -1
  6. data/lib/twterm/environment.rb +5 -0
  7. data/lib/twterm/event/{base.rb → abstract_event.rb} +1 -1
  8. data/lib/twterm/event/direct_message/fetched.rb +2 -2
  9. data/lib/twterm/event/message/abstract_message.rb +2 -2
  10. data/lib/twterm/event/notification/abstract_notification.rb +2 -2
  11. data/lib/twterm/event/open_photo.rb +13 -0
  12. data/lib/twterm/event/open_uri.rb +2 -2
  13. data/lib/twterm/event/screen/refresh.rb +13 -0
  14. data/lib/twterm/event/screen/resize.rb +2 -2
  15. data/lib/twterm/event/status/{base.rb → abstract_status_event.rb} +2 -2
  16. data/lib/twterm/event/status/delete.rb +2 -2
  17. data/lib/twterm/event/status/mention.rb +2 -2
  18. data/lib/twterm/event/status/timeline.rb +2 -2
  19. data/lib/twterm/event/status_garbage_collected.rb +2 -2
  20. data/lib/twterm/event/user_garbage_collected.rb +2 -2
  21. data/lib/twterm/event_dispatcher.rb +2 -2
  22. data/lib/twterm/photo_viewer.rb +36 -0
  23. data/lib/twterm/photo_viewer_backend/abstract_photo_viewer_backend.rb +46 -0
  24. data/lib/twterm/photo_viewer_backend/browser_backend.rb +16 -0
  25. data/lib/twterm/photo_viewer_backend/imgcat_backend.rb +33 -0
  26. data/lib/twterm/photo_viewer_backend/quick_look_backend.rb +13 -0
  27. data/lib/twterm/preferences.rb +10 -0
  28. data/lib/twterm/publisher.rb +2 -2
  29. data/lib/twterm/rest_client.rb +5 -5
  30. data/lib/twterm/screen.rb +8 -6
  31. data/lib/twterm/status.rb +7 -1
  32. data/lib/twterm/tab/{base.rb → abstract_tab.rb} +1 -1
  33. data/lib/twterm/tab/direct_message/conversation.rb +2 -2
  34. data/lib/twterm/tab/direct_message/conversation_list.rb +2 -2
  35. data/lib/twterm/tab/key_assignments_cheatsheet.rb +2 -2
  36. data/lib/twterm/tab/new/{start.rb → index.rb} +2 -2
  37. data/lib/twterm/tab/new/list.rb +2 -2
  38. data/lib/twterm/tab/new/search.rb +6 -3
  39. data/lib/twterm/tab/new/user.rb +8 -7
  40. data/lib/twterm/tab/preferences/index.rb +9 -3
  41. data/lib/twterm/tab/preferences/notification_backend.rb +2 -2
  42. data/lib/twterm/tab/preferences/photo_viewer_backend.rb +86 -0
  43. data/lib/twterm/tab/rate_limit_status.rb +1 -1
  44. data/lib/twterm/tab/status_tab.rb +4 -3
  45. data/lib/twterm/tab/statuses/{base.rb → abstract_statuses_tab.rb} +2 -2
  46. data/lib/twterm/tab/statuses/conversation.rb +2 -2
  47. data/lib/twterm/tab/statuses/favorites.rb +2 -2
  48. data/lib/twterm/tab/statuses/home.rb +2 -2
  49. data/lib/twterm/tab/statuses/list_timeline.rb +2 -2
  50. data/lib/twterm/tab/statuses/mentions.rb +2 -2
  51. data/lib/twterm/tab/statuses/search.rb +2 -2
  52. data/lib/twterm/tab/statuses/user_timeline.rb +2 -2
  53. data/lib/twterm/tab/user_list_management.rb +1 -1
  54. data/lib/twterm/tab/user_tab.rb +2 -2
  55. data/lib/twterm/tab/users/{base.rb → abstract_users_tab.rb} +2 -2
  56. data/lib/twterm/tab/users/followers.rb +2 -2
  57. data/lib/twterm/tab/users/friends.rb +2 -2
  58. data/lib/twterm/tab_manager.rb +2 -2
  59. data/lib/twterm/tweetbox.rb +20 -16
  60. data/lib/twterm/version.rb +1 -1
  61. data/spec/twterm/event_dispatcher_spec.rb +1 -1
  62. data/twterm.gemspec +1 -1
  63. metadata +20 -13
  64. data/lib/twterm/tab/favorites.rb +0 -7
@@ -2,7 +2,7 @@ require 'twterm/tab/loadable'
2
2
 
3
3
  module Twterm
4
4
  module Tab
5
- class RateLimitStatus < Tab::Base
5
+ class RateLimitStatus < AbstractTab
6
6
  include Loadable
7
7
  include Scrollable
8
8
 
@@ -1,18 +1,19 @@
1
1
  require 'addressable/uri'
2
2
 
3
+ require 'twterm/event/open_photo'
3
4
  require 'twterm/event/open_uri'
4
5
  require 'twterm/hashtag'
5
6
  require 'twterm/image'
6
7
  require 'twterm/image_builder/user_name_image_builder'
7
8
  require 'twterm/publisher'
8
- require 'twterm/tab/base'
9
+ require 'twterm/tab/abstract_tab'
9
10
  require 'twterm/tab/dumpable'
10
11
  require 'twterm/tab/loadable'
11
12
  require 'twterm/tab/scrollable'
12
13
 
13
14
  module Twterm
14
15
  module Tab
15
- class StatusTab < Tab::Base
16
+ class StatusTab < AbstractTab
16
17
  include Dumpable
17
18
  include Publisher
18
19
  include Tab::Scrollable
@@ -184,7 +185,7 @@ module Twterm
184
185
  when Twitter::Entity::URI
185
186
  publish(Event::OpenURI.new(item.expanded_url))
186
187
  when Twitter::Media::Photo
187
- publish(Event::OpenURI.new(item.media_url_https))
188
+ publish(Event::OpenPhoto.new(item))
188
189
  when Twitter::Media::AnimatedGif, Twitter::Media::Video
189
190
  url = item.video_info.variants.max { |v| v.bitrate }.url
190
191
  publish(Event::OpenURI.new(url))
@@ -6,7 +6,7 @@ require 'twterm/event/status_garbage_collected'
6
6
  require 'twterm/image_builder/user_name_image_builder'
7
7
  require 'twterm/publisher'
8
8
  require 'twterm/subscriber'
9
- require 'twterm/tab/base'
9
+ require 'twterm/tab/abstract_tab'
10
10
  require 'twterm/tab/loadable'
11
11
  require 'twterm/tab/status_tab'
12
12
  require 'twterm/utils'
@@ -14,7 +14,7 @@ require 'twterm/utils'
14
14
  module Twterm
15
15
  module Tab
16
16
  module Statuses
17
- class Base < Tab::Base
17
+ class AbstractStatusesTab < AbstractTab
18
18
  include Publisher
19
19
  include Searchable
20
20
  include Subscriber
@@ -1,13 +1,13 @@
1
1
  require 'concurrent'
2
2
 
3
3
  require 'twterm/tab/dumpable'
4
- require 'twterm/tab/statuses/base'
4
+ require 'twterm/tab/statuses/abstract_statuses_tab'
5
5
  require 'twterm/tab/statuses/cacheable'
6
6
 
7
7
  module Twterm
8
8
  module Tab
9
9
  module Statuses
10
- class Conversation < Base
10
+ class Conversation < AbstractStatusesTab
11
11
  include Cacheable
12
12
  include Dumpable
13
13
 
@@ -1,9 +1,9 @@
1
- require 'twterm/tab/statuses/base'
1
+ require 'twterm/tab/statuses/abstract_statuses_tab'
2
2
 
3
3
  module Twterm
4
4
  module Tab
5
5
  module Statuses
6
- class Favorites < Base
6
+ class Favorites < AbstractStatusesTab
7
7
  include Dumpable
8
8
 
9
9
  attr_reader :user, :user_id
@@ -1,12 +1,12 @@
1
1
  require 'twterm/subscriber'
2
2
  require 'twterm/event/status/timeline'
3
- require 'twterm/tab/statuses/base'
3
+ require 'twterm/tab/statuses/abstract_statuses_tab'
4
4
  require 'twterm/utils'
5
5
 
6
6
  module Twterm
7
7
  module Tab
8
8
  module Statuses
9
- class Home < Base
9
+ class Home < AbstractStatusesTab
10
10
  include Subscriber
11
11
  include Utils
12
12
 
@@ -1,9 +1,9 @@
1
- require 'twterm/tab/statuses/base'
1
+ require 'twterm/tab/statuses/abstract_statuses_tab'
2
2
 
3
3
  module Twterm
4
4
  module Tab
5
5
  module Statuses
6
- class ListTimeline < Base
6
+ class ListTimeline < AbstractStatusesTab
7
7
  include Dumpable
8
8
 
9
9
  attr_reader :list_id
@@ -1,9 +1,9 @@
1
- require 'twterm/tab/statuses/base'
1
+ require 'twterm/tab/statuses/abstract_statuses_tab'
2
2
 
3
3
  module Twterm
4
4
  module Tab
5
5
  module Statuses
6
- class Mentions < Base
6
+ class Mentions < AbstractStatusesTab
7
7
  include Subscriber
8
8
 
9
9
  def close
@@ -1,9 +1,9 @@
1
- require 'twterm/tab/statuses/base'
1
+ require 'twterm/tab/statuses/abstract_statuses_tab'
2
2
 
3
3
  module Twterm
4
4
  module Tab
5
5
  module Statuses
6
- class Search < Base
6
+ class Search < AbstractStatusesTab
7
7
  include Dumpable
8
8
 
9
9
  attr_reader :query
@@ -1,10 +1,10 @@
1
- require 'twterm/tab/statuses/base'
1
+ require 'twterm/tab/statuses/abstract_statuses_tab'
2
2
  require 'twterm/tab/statuses/cacheable'
3
3
 
4
4
  module Twterm
5
5
  module Tab
6
6
  module Statuses
7
- class UserTimeline < Base
7
+ class UserTimeline < AbstractStatusesTab
8
8
  include Cacheable
9
9
  include Dumpable
10
10
 
@@ -9,7 +9,7 @@ require 'twterm/tab/searchable'
9
9
 
10
10
  module Twterm
11
11
  module Tab
12
- class UserListManagement < Base
12
+ class UserListManagement < AbstractTab
13
13
  include Dumpable
14
14
  include Loadable
15
15
  include Publisher
@@ -1,12 +1,12 @@
1
1
  require 'twterm/event/open_uri'
2
2
  require 'twterm/publisher'
3
3
  require 'twterm/image_builder/user_name_image_builder'
4
- require 'twterm/tab/base'
4
+ require 'twterm/tab/abstract_tab'
5
5
  require 'twterm/tab/user_list_management'
6
6
 
7
7
  module Twterm
8
8
  module Tab
9
- class UserTab < Base
9
+ class UserTab < AbstractTab
10
10
  include Dumpable
11
11
  include Publisher
12
12
  include Scrollable
@@ -2,13 +2,13 @@ require 'concurrent'
2
2
 
3
3
  require 'twterm/event/user_garbage_collected'
4
4
  require 'twterm/image_builder/user_name_image_builder'
5
- require 'twterm/tab/base'
5
+ require 'twterm/tab/abstract_tab'
6
6
  require 'twterm/tab/loadable'
7
7
 
8
8
  module Twterm
9
9
  module Tab
10
10
  module Users
11
- class Base < Tab::Base
11
+ class AbstractUsersTab < AbstractTab
12
12
  include Loadable
13
13
  include Searchable
14
14
 
@@ -1,9 +1,9 @@
1
- require 'twterm/tab/users/base'
1
+ require 'twterm/tab/users/abstract_users_tab'
2
2
 
3
3
  module Twterm
4
4
  module Tab
5
5
  module Users
6
- class Followers < Base
6
+ class Followers < AbstractUsersTab
7
7
  include Dumpable
8
8
 
9
9
  attr_reader :user_id
@@ -1,9 +1,9 @@
1
- require 'twterm/tab/users/base'
1
+ require 'twterm/tab/users/abstract_users_tab'
2
2
 
3
3
  module Twterm
4
4
  module Tab
5
5
  module Users
6
- class Friends < Base
6
+ class Friends < AbstractUsersTab
7
7
  include Dumpable
8
8
 
9
9
  attr_reader :user_id
@@ -14,7 +14,7 @@ module Twterm
14
14
  DUMPED_TABS_FILE = "#{ENV['HOME']}/.twterm/dumped_tabs"
15
15
 
16
16
  def add(tab_to_add)
17
- check_type Tab::Base, tab_to_add
17
+ check_type Tab::AbstractTab, tab_to_add
18
18
 
19
19
  @tabs.each.with_index do |tab, i|
20
20
  next unless tab == tab_to_add
@@ -88,7 +88,7 @@ module Twterm
88
88
  end
89
89
 
90
90
  def open_new
91
- tab = Tab::New::Start.new(app, client)
91
+ tab = Tab::New::Index.new(app, client)
92
92
  add_and_show(tab)
93
93
  end
94
94
 
@@ -1,11 +1,19 @@
1
1
  require 'twterm/publisher'
2
2
  require 'twterm/event/message/error'
3
+ require 'twterm/event/screen/refresh'
3
4
 
4
5
  module Twterm
5
6
  class Tweetbox
6
7
  class EmptyTextError < StandardError; end
7
- class InvalidCharactersError < StandardError; end
8
- class TextTooLongError < StandardError; end
8
+ class TextTooLongError < StandardError
9
+ def initialize(parse_result)
10
+ @parse_result = parse_result
11
+ end
12
+
13
+ def message
14
+ "Text is too long (weighted length: #{@parse_result[:weighted_length]} / 280)"
15
+ end
16
+ end
9
17
 
10
18
  include Readline
11
19
  include Curses
@@ -67,10 +75,8 @@ module Twterm
67
75
  break
68
76
  rescue EmptyTextError
69
77
  break
70
- rescue InvalidCharactersError
71
- puts 'Text contains invalid characters'
72
- rescue TextTooLongError
73
- puts "Text is too long (#{text_length(text)} / 140 characters)"
78
+ rescue TextTooLongError => e
79
+ puts e.message
74
80
  end
75
81
 
76
82
  puts "\n"
@@ -99,22 +105,20 @@ module Twterm
99
105
  def reset
100
106
  reset_prog_mode
101
107
  sleep 0.1
102
- app.screen.refresh
108
+ publish(Event::Screen::Refresh.new)
103
109
  end
104
110
 
105
111
  def text_length(text)
106
- Twitter::Validation.tweet_length(text)
112
+ Twitter::TwitterText::Validation.tweet_length(text)
107
113
  end
108
114
 
109
115
  def validate!(text)
110
- case Twitter::Validation.tweet_invalid?(text)
111
- when :empty
112
- fail EmptyTextError
113
- when :invalid_characters
114
- fail InvalidCharactersError
115
- when :too_long
116
- fail TextTooLongError
117
- end
116
+ raise EmptyTextError if text.empty?
117
+
118
+ result = Twitter::TwitterText::Validation.parse_tweet(text)
119
+ valid = result[:valid]
120
+
121
+ raise TextTooLongError.new(result) unless valid
118
122
  end
119
123
  end
120
124
  end
@@ -1,3 +1,3 @@
1
1
  module Twterm
2
- VERSION = '2.3.0'
2
+ VERSION = '2.4.0'
3
3
  end
@@ -6,7 +6,7 @@ RSpec.describe Twterm::EventDispatcher do
6
6
  describe '#dispatch' do
7
7
  subject { event_dispatcher.dispatch(event) }
8
8
 
9
- let(:event) { Twterm::Event::Base.new }
9
+ let(:event) { Twterm::Event::AbstractEvent.new }
10
10
 
11
11
  it { is_expected.to eq event_dispatcher }
12
12
  end
data/twterm.gemspec CHANGED
@@ -25,7 +25,7 @@ Gem::Specification.new do |spec|
25
25
  spec.add_dependency 'terminal-notifier', '~> 2.0.0'
26
26
  spec.add_dependency 'toml-rb', '~> 0.3.14'
27
27
  spec.add_dependency 'twitter', '~> 6.2.0'
28
- spec.add_dependency 'twitter-text', '1.14.5'
28
+ spec.add_dependency 'twitter-text', '~> 2.1.0'
29
29
 
30
30
  spec.add_development_dependency 'bundler', '~> 1.8'
31
31
  spec.add_development_dependency 'hashie', '~> 3.5.6'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twterm
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.0
4
+ version: 2.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryota Kameoka
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-03 00:00:00.000000000 Z
11
+ date: 2018-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: curses
@@ -112,16 +112,16 @@ dependencies:
112
112
  name: twitter-text
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - '='
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 1.14.5
117
+ version: 2.1.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - '='
122
+ - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 1.14.5
124
+ version: 2.1.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: bundler
127
127
  requirement: !ruby/object:Gem::Requirement
@@ -238,7 +238,7 @@ files:
238
238
  - lib/twterm/direct_message_composer.rb
239
239
  - lib/twterm/direct_message_manager.rb
240
240
  - lib/twterm/environment.rb
241
- - lib/twterm/event/base.rb
241
+ - lib/twterm/event/abstract_event.rb
242
242
  - lib/twterm/event/direct_message/fetched.rb
243
243
  - lib/twterm/event/message/abstract_message.rb
244
244
  - lib/twterm/event/message/error.rb
@@ -253,9 +253,11 @@ files:
253
253
  - lib/twterm/event/notification/mention.rb
254
254
  - lib/twterm/event/notification/quote.rb
255
255
  - lib/twterm/event/notification/retweet.rb
256
+ - lib/twterm/event/open_photo.rb
256
257
  - lib/twterm/event/open_uri.rb
258
+ - lib/twterm/event/screen/refresh.rb
257
259
  - lib/twterm/event/screen/resize.rb
258
- - lib/twterm/event/status/base.rb
260
+ - lib/twterm/event/status/abstract_status_event.rb
259
261
  - lib/twterm/event/status/delete.rb
260
262
  - lib/twterm/event/status/mention.rb
261
263
  - lib/twterm/event/status/timeline.rb
@@ -297,6 +299,11 @@ files:
297
299
  - lib/twterm/notification_backend/tmux_backend.rb
298
300
  - lib/twterm/notification_dispatcher.rb
299
301
  - lib/twterm/persistable_configuration_proxy.rb
302
+ - lib/twterm/photo_viewer.rb
303
+ - lib/twterm/photo_viewer_backend/abstract_photo_viewer_backend.rb
304
+ - lib/twterm/photo_viewer_backend/browser_backend.rb
305
+ - lib/twterm/photo_viewer_backend/imgcat_backend.rb
306
+ - lib/twterm/photo_viewer_backend/quick_look_backend.rb
300
307
  - lib/twterm/preferences.rb
301
308
  - lib/twterm/publisher.rb
302
309
  - lib/twterm/repository/abstract_entity_repository.rb
@@ -315,25 +322,25 @@ files:
315
322
  - lib/twterm/status.rb
316
323
  - lib/twterm/streaming_client.rb
317
324
  - lib/twterm/subscriber.rb
318
- - lib/twterm/tab/base.rb
325
+ - lib/twterm/tab/abstract_tab.rb
319
326
  - lib/twterm/tab/direct_message/conversation.rb
320
327
  - lib/twterm/tab/direct_message/conversation_list.rb
321
328
  - lib/twterm/tab/dumpable.rb
322
329
  - lib/twterm/tab/exceptions.rb
323
- - lib/twterm/tab/favorites.rb
324
330
  - lib/twterm/tab/key_assignments_cheatsheet.rb
325
331
  - lib/twterm/tab/loadable.rb
332
+ - lib/twterm/tab/new/index.rb
326
333
  - lib/twterm/tab/new/list.rb
327
334
  - lib/twterm/tab/new/search.rb
328
- - lib/twterm/tab/new/start.rb
329
335
  - lib/twterm/tab/new/user.rb
330
336
  - lib/twterm/tab/preferences/index.rb
331
337
  - lib/twterm/tab/preferences/notification_backend.rb
338
+ - lib/twterm/tab/preferences/photo_viewer_backend.rb
332
339
  - lib/twterm/tab/rate_limit_status.rb
333
340
  - lib/twterm/tab/scrollable.rb
334
341
  - lib/twterm/tab/searchable.rb
335
342
  - lib/twterm/tab/status_tab.rb
336
- - lib/twterm/tab/statuses/base.rb
343
+ - lib/twterm/tab/statuses/abstract_statuses_tab.rb
337
344
  - lib/twterm/tab/statuses/cacheable.rb
338
345
  - lib/twterm/tab/statuses/conversation.rb
339
346
  - lib/twterm/tab/statuses/favorites.rb
@@ -344,7 +351,7 @@ files:
344
351
  - lib/twterm/tab/statuses/user_timeline.rb
345
352
  - lib/twterm/tab/user_list_management.rb
346
353
  - lib/twterm/tab/user_tab.rb
347
- - lib/twterm/tab/users/base.rb
354
+ - lib/twterm/tab/users/abstract_users_tab.rb
348
355
  - lib/twterm/tab/users/followers.rb
349
356
  - lib/twterm/tab/users/friends.rb
350
357
  - lib/twterm/tab_manager.rb