twterm 1.3.0 → 2.0.0.beta1

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 (121) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +14 -18
  3. data/bin/twterm +1 -1
  4. data/lib/twterm/app.rb +120 -30
  5. data/lib/twterm/client.rb +10 -13
  6. data/lib/twterm/completion_mamanger.rb +11 -6
  7. data/lib/twterm/direct_message.rb +6 -28
  8. data/lib/twterm/direct_message_composer.rb +10 -5
  9. data/lib/twterm/direct_message_manager.rb +5 -6
  10. data/lib/twterm/event/notification/abstract_notification.rb +27 -0
  11. data/lib/twterm/event/notification/error.rb +13 -0
  12. data/lib/twterm/event/notification/info.rb +13 -0
  13. data/lib/twterm/event/notification/success.rb +13 -0
  14. data/lib/twterm/event/notification/warning.rb +13 -0
  15. data/lib/twterm/event_dispatcher.rb +1 -1
  16. data/lib/twterm/extensions/array.rb +5 -0
  17. data/lib/twterm/extensions/enumerator/lazy.rb +3 -0
  18. data/lib/twterm/extensions/string.rb +0 -4
  19. data/lib/twterm/friendship.rb +1 -85
  20. data/lib/twterm/image/between.rb +31 -0
  21. data/lib/twterm/image/blank_line.rb +21 -0
  22. data/lib/twterm/image/bold.rb +31 -0
  23. data/lib/twterm/image/brackets.rb +21 -0
  24. data/lib/twterm/image/color.rb +45 -0
  25. data/lib/twterm/image/empty.rb +21 -0
  26. data/lib/twterm/image/horizontal_sequential_image.rb +48 -0
  27. data/lib/twterm/image/parens.rb +21 -0
  28. data/lib/twterm/image/string_image.rb +38 -0
  29. data/lib/twterm/image/vertical_sequential_image.rb +43 -0
  30. data/lib/twterm/image.rb +107 -0
  31. data/lib/twterm/key_mapper/abstract_key_mapper.rb +51 -0
  32. data/lib/twterm/key_mapper/app_key_mapper.rb +13 -0
  33. data/lib/twterm/key_mapper/cursor_key_mapper.rb +13 -0
  34. data/lib/twterm/key_mapper/general_key_mapper.rb +18 -0
  35. data/lib/twterm/key_mapper/no_such_command.rb +20 -0
  36. data/lib/twterm/key_mapper/no_such_key.rb +16 -0
  37. data/lib/twterm/key_mapper/status_key_mapper.rb +18 -0
  38. data/lib/twterm/key_mapper/tab_key_mapper.rb +31 -0
  39. data/lib/twterm/key_mapper.rb +127 -0
  40. data/lib/twterm/list.rb +0 -31
  41. data/lib/twterm/notifier.rb +7 -7
  42. data/lib/twterm/repository/abstract_entity_repository.rb +41 -0
  43. data/lib/twterm/repository/abstract_expirable_entity_repository.rb +35 -0
  44. data/lib/twterm/repository/abstract_repository.rb +64 -0
  45. data/lib/twterm/repository/direct_message_repository.rb +14 -0
  46. data/lib/twterm/repository/friendship_repository.rb +108 -0
  47. data/lib/twterm/repository/hashtag_repository.rb +39 -0
  48. data/lib/twterm/repository/list_repository.rb +14 -0
  49. data/lib/twterm/repository/status_repository.rb +36 -0
  50. data/lib/twterm/repository/user_repository.rb +22 -0
  51. data/lib/twterm/rest_client.rb +107 -63
  52. data/lib/twterm/screen.rb +21 -15
  53. data/lib/twterm/search_query_window.rb +139 -0
  54. data/lib/twterm/status.rb +14 -108
  55. data/lib/twterm/streaming_client.rb +13 -12
  56. data/lib/twterm/tab/base.rb +48 -8
  57. data/lib/twterm/tab/direct_message/conversation.rb +53 -52
  58. data/lib/twterm/tab/direct_message/conversation_list.rb +46 -45
  59. data/lib/twterm/tab/dumpable.rb +3 -3
  60. data/lib/twterm/tab/key_assignments_cheatsheet.rb +58 -57
  61. data/lib/twterm/tab/loadable.rb +20 -0
  62. data/lib/twterm/tab/new/list.rb +32 -43
  63. data/lib/twterm/tab/new/search.rb +31 -44
  64. data/lib/twterm/tab/new/start.rb +44 -55
  65. data/lib/twterm/tab/new/user.rb +15 -12
  66. data/lib/twterm/tab/rate_limit_status.rb +84 -0
  67. data/lib/twterm/tab/scrollable.rb +39 -19
  68. data/lib/twterm/tab/searchable.rb +133 -0
  69. data/lib/twterm/tab/statuses/base.rb +139 -129
  70. data/lib/twterm/tab/statuses/conversation.rb +26 -15
  71. data/lib/twterm/tab/statuses/favorites.rb +10 -8
  72. data/lib/twterm/tab/statuses/home.rb +10 -9
  73. data/lib/twterm/tab/statuses/list_timeline.rb +12 -8
  74. data/lib/twterm/tab/statuses/mentions.rb +17 -11
  75. data/lib/twterm/tab/statuses/search.rb +8 -5
  76. data/lib/twterm/tab/statuses/user_timeline.rb +11 -8
  77. data/lib/twterm/tab/user_list_management.rb +109 -0
  78. data/lib/twterm/tab/user_tab.rb +125 -126
  79. data/lib/twterm/tab/users/base.rb +39 -41
  80. data/lib/twterm/tab/users/followers.rb +9 -6
  81. data/lib/twterm/tab/users/friends.rb +9 -6
  82. data/lib/twterm/tab_manager.rb +64 -40
  83. data/lib/twterm/tweetbox.rb +18 -13
  84. data/lib/twterm/uri_opener.rb +2 -1
  85. data/lib/twterm/user.rb +2 -110
  86. data/lib/twterm/version.rb +1 -1
  87. data/lib/twterm/view.rb +30 -0
  88. data/lib/twterm.rb +3 -9
  89. data/spec/fixtures/status.json +107 -0
  90. data/spec/fixtures/user.json +102 -0
  91. data/spec/spec_helper.rb +7 -0
  92. data/spec/supports/shared_examples/abstract_key_mapper.rb +17 -0
  93. data/spec/twterm/extension/enumerator/lazy_spec.rb +11 -0
  94. data/spec/twterm/friendship_spec.rb +0 -102
  95. data/spec/twterm/image/blank_line_spec.rb +11 -0
  96. data/spec/twterm/image/brackets_spec.rb +12 -0
  97. data/spec/twterm/image/color_spec.rb +22 -0
  98. data/spec/twterm/image/empry_spec.rb +11 -0
  99. data/spec/twterm/image/horizontal_sequential_image_spec.rb +15 -0
  100. data/spec/twterm/image/parens_spec.rb +12 -0
  101. data/spec/twterm/image/string_image_spec.rb +12 -0
  102. data/spec/twterm/image/vertical_sequential_image_spec.rb +14 -0
  103. data/spec/twterm/image_spec.rb +65 -0
  104. data/spec/twterm/key_mapper/abstract_key_mapper_spec.rb +21 -0
  105. data/spec/twterm/key_mapper/app_key_mapper_spec.rb +7 -0
  106. data/spec/twterm/key_mapper/status_key_mapper_spec.rb +7 -0
  107. data/spec/twterm/key_mapper/tab_key_mapper_spec.rb +7 -0
  108. data/spec/twterm/repository/friendship_repository_spec.rb +108 -0
  109. data/spec/twterm/status_spec.rb +58 -0
  110. data/spec/twterm/user_spec.rb +94 -0
  111. data/twterm.gemspec +13 -10
  112. metadata +129 -35
  113. data/lib/twterm/event/notification.rb +0 -33
  114. data/lib/twterm/extensions/integer.rb +0 -5
  115. data/lib/twterm/filter_query_window.rb +0 -91
  116. data/lib/twterm/filterable_list.rb +0 -41
  117. data/lib/twterm/history/base.rb +0 -21
  118. data/lib/twterm/history/hashtag.rb +0 -13
  119. data/lib/twterm/history/savable.rb +0 -37
  120. data/lib/twterm/history/screen_name.rb +0 -11
  121. data/lib/twterm/promise.rb +0 -143
@@ -1,37 +0,0 @@
1
- module Twterm
2
- module History
3
- module Savable
4
- include Base
5
-
6
- def initialize
7
- unless File.exist?(file)
8
- @history = []
9
- return
10
- end
11
-
12
- begin
13
- @history = YAML.load(File.read(file)) || []
14
- rescue
15
- @history = []
16
- end
17
-
18
- Scheduler.new(300) { save }
19
- end
20
-
21
- def add(item)
22
- @history << item unless @history.include?(item)
23
- @history = history.take(1000)
24
- end
25
-
26
- def save
27
- File.open(file, 'w', 0600) { |f| f.write(history.to_yaml) }
28
- end
29
-
30
- private
31
-
32
- def file
33
- fail NotImplementedError, 'file method must be implemented'
34
- end
35
- end
36
- end
37
- end
@@ -1,11 +0,0 @@
1
- module Twterm
2
- module History
3
- class ScreenName
4
- include Singleton, Base
5
-
6
- def history
7
- User.all.map(&:screen_name)
8
- end
9
- end
10
- end
11
- end
@@ -1,143 +0,0 @@
1
- module Twterm
2
- class Promise
3
- def initialize
4
- @state = :pending
5
- @callbacks = []
6
-
7
- Thread.new do
8
- yield method(:resolve), method(:reject)
9
- end if block_given?
10
- end
11
-
12
- def catch(on_rejected = nil, &block)
13
- if on_rejected.is_a?(Proc) && block_given?
14
- fail SyntaxError, 'both block arg and actual block given'
15
- end
16
-
17
- on_rejected ||= block
18
- self.then(nil, on_rejected)
19
- end
20
-
21
- def reject(reason)
22
- return if settled?
23
-
24
- @state = :rejected
25
- @reason = reason
26
-
27
- callbacks.each do |cb|
28
- cb.invoke_on_rejected(reason)
29
- end
30
- self
31
- end
32
-
33
- def rejected?
34
- state.eql? :rejected
35
- end
36
-
37
- def resolve(value)
38
- return if settled?
39
-
40
- @state = :fulfilled
41
- @value = value
42
-
43
- callbacks.each do |cb|
44
- cb.invoke_on_fulfilled(value)
45
- end
46
- self
47
- end
48
-
49
- def then(on_fulfilled = nil, on_rejected = nil, &block)
50
- if (on_fulfilled.is_a?(Proc) || on_rejected.is_a?(Proc)) && block_given?
51
- fail SyntaxError, 'both block arg and actual block given'
52
- end
53
-
54
- on_fulfilled ||= block
55
- next_promise = Promise.new
56
- callback = Callback.new(
57
- self,
58
- on_fulfilled.is_a?(Proc) ? on_fulfilled : nil,
59
- on_rejected.is_a?(Proc) ? on_rejected : nil,
60
- next_promise
61
- )
62
- @callbacks << callback
63
-
64
- callback.invoke_on_fulfilled(@value) if fulfilled?
65
- callback.invoke_on_rejected(@reason) if rejected?
66
-
67
- next_promise
68
- end
69
-
70
- def self.resolve(value)
71
- Promise.new { |resolve, _| resolve.(value) }
72
- end
73
-
74
- private
75
-
76
- attr_reader :callbacks, :errorbacks, :next_promises, :state
77
-
78
- def fulfilled?
79
- state.eql? :fulfilled
80
- end
81
-
82
- def pending?
83
- state.eql? :pending
84
- end
85
-
86
- def rejected?
87
- state.eql? :rejected
88
- end
89
-
90
- def settled?
91
- !pending?
92
- end
93
-
94
- class Callback
95
- def initialize(promise, on_fulfilled, on_rejected, next_promise)
96
- @promise = promise
97
- @on_fulfilled, @on_rejected = on_fulfilled, on_rejected
98
- @next_promise = next_promise
99
- end
100
-
101
- def has_on_fulfilled?
102
- !on_fulfilled.nil?
103
- end
104
-
105
- def has_on_rejected?
106
- !on_rejected.nil?
107
- end
108
-
109
- def invoke_on_fulfilled(value)
110
- if has_on_fulfilled?
111
- new_value = on_fulfilled.(value)
112
- next_promise.resolve(new_value)
113
- else
114
- next_promise.resolve(value)
115
- end
116
- rescue => reason
117
- next_promise.reject(reason)
118
- end
119
-
120
- def invoke_on_rejected(reason)
121
- unless has_on_rejected?
122
- if has_on_fulfilled?
123
- next_promise.reject(reason)
124
- else
125
- raise reason unless has_on_fulfilled?
126
- end
127
- return
128
- end
129
-
130
- begin
131
- new_value = on_rejected.(reason)
132
- next_promise.resolve(new_value)
133
- rescue => reason
134
- next_promise.reject(reason)
135
- end
136
- end
137
-
138
- private
139
-
140
- attr_reader :promise, :on_fulfilled, :on_rejected, :next_promise
141
- end
142
- end
143
- end