twterm 2.3.0 → 2.4.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 (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