Class: Twterm::Status
- Inherits:
-
Object
- Object
- Twterm::Status
- Defined in:
- lib/twterm/status.rb
Constant Summary collapse
- MAX_CACHED_TIME =
3600
- @@instances =
{}
Instance Attribute Summary collapse
-
#appeared_at ⇒ Object
readonly
Returns the value of attribute appeared_at.
-
#created_at ⇒ Object
readonly
Returns the value of attribute created_at.
-
#favorite_count ⇒ Object
readonly
Returns the value of attribute favorite_count.
-
#favorited ⇒ Object
(also: #favorited?)
readonly
Returns the value of attribute favorited.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#in_reply_to_status_id ⇒ Object
readonly
Returns the value of attribute in_reply_to_status_id.
-
#media ⇒ Object
readonly
Returns the value of attribute media.
-
#retweet_count ⇒ Object
readonly
Returns the value of attribute retweet_count.
-
#retweeted ⇒ Object
(also: #retweeted?)
readonly
Returns the value of attribute retweeted.
-
#retweeted_by_user_id ⇒ Object
readonly
Returns the value of attribute retweeted_by_user_id.
-
#text ⇒ Object
readonly
Returns the value of attribute text.
-
#touched_at ⇒ Object
readonly
Returns the value of attribute touched_at.
-
#urls ⇒ Object
readonly
Returns the value of attribute urls.
-
#user_id ⇒ Object
readonly
Returns the value of attribute user_id.
Class Method Summary collapse
- .all ⇒ Object
- .cleanup ⇒ Object
- .delete(id) ⇒ Object
- .find(id) ⇒ Object
- .find_or_fetch(id) ⇒ Object
- .new(tweet) ⇒ Object
Instance Method Summary collapse
- #==(other) ⇒ Object
- #date ⇒ Object
- #expand_url! ⇒ Object
- #favorite! ⇒ Object
- #in_reply_to_status(&block) ⇒ Object
-
#initialize(tweet) ⇒ Status
constructor
A new instance of Status.
- #matches?(query) ⇒ Boolean
- #replies ⇒ Object
- #retweet! ⇒ Object
- #retweeted_by ⇒ Object
- #split(width) ⇒ Object
- #touch! ⇒ Object
- #unfavorite! ⇒ Object
- #update!(tweet) ⇒ Object
- #user ⇒ Object
Constructor Details
#initialize(tweet) ⇒ Status
Returns a new instance of Status.
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/twterm/status.rb', line 51 def initialize(tweet) unless tweet.retweeted_status.is_a? Twitter::NullObject @retweeted_by_user_id = tweet.user.id User.new(tweet.user) retweeted_at = tweet.created_at.dup.localtime tweet = tweet.retweeted_status end @id = tweet.id @text = CGI.unescapeHTML(tweet.full_text.dup) @created_at = tweet.created_at.dup.localtime @appeared_at = retweeted_at || @created_at @retweet_count = tweet.retweet_count @favorite_count = tweet.favorite_count @in_reply_to_status_id = tweet.in_reply_to_status_id @retweeted = tweet.retweeted? @favorited = tweet.favorited? @media = tweet.media @urls = tweet.urls @user_id = tweet.user.id User.new(tweet.user) @splitted_text = {} @touched_at = Time.now tweet..each do |hashtag| History::Hashtag.instance.add(hashtag.text) end @@instances[id] = self end |
Instance Attribute Details
#appeared_at ⇒ Object (readonly)
Returns the value of attribute appeared_at.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def appeared_at @appeared_at end |
#created_at ⇒ Object (readonly)
Returns the value of attribute created_at.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def created_at @created_at end |
#favorite_count ⇒ Object (readonly)
Returns the value of attribute favorite_count.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def favorite_count @favorite_count end |
#favorited ⇒ Object (readonly) Also known as: favorited?
Returns the value of attribute favorited.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def favorited @favorited end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def id @id end |
#in_reply_to_status_id ⇒ Object (readonly)
Returns the value of attribute in_reply_to_status_id.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def in_reply_to_status_id @in_reply_to_status_id end |
#media ⇒ Object (readonly)
Returns the value of attribute media.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def media @media end |
#retweet_count ⇒ Object (readonly)
Returns the value of attribute retweet_count.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def retweet_count @retweet_count end |
#retweeted ⇒ Object (readonly) Also known as: retweeted?
Returns the value of attribute retweeted.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def retweeted @retweeted end |
#retweeted_by_user_id ⇒ Object (readonly)
Returns the value of attribute retweeted_by_user_id.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def retweeted_by_user_id @retweeted_by_user_id end |
#text ⇒ Object (readonly)
Returns the value of attribute text.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def text @text end |
#touched_at ⇒ Object (readonly)
Returns the value of attribute touched_at.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def touched_at @touched_at end |
#urls ⇒ Object (readonly)
Returns the value of attribute urls.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def urls @urls end |
#user_id ⇒ Object (readonly)
Returns the value of attribute user_id.
5 6 7 |
# File 'lib/twterm/status.rb', line 5 def user_id @user_id end |
Class Method Details
.all ⇒ Object
127 128 129 |
# File 'lib/twterm/status.rb', line 127 def self.all @@instances.values end |
.cleanup ⇒ Object
131 132 133 134 135 136 137 138 139 |
# File 'lib/twterm/status.rb', line 131 def self.cleanup TabManager.instance.each_tab do |tab| tab.touch_statuses if tab.is_a?(Tab::Statuses::Base) end cond = -> (status) { status.touched_at > Time.now - MAX_CACHED_TIME } statuses = all.select(&cond) status_ids = statuses.map(&:id) @@instances = status_ids.zip(statuses).to_h end |
.delete(id) ⇒ Object
141 142 143 |
# File 'lib/twterm/status.rb', line 141 def self.delete(id) @@instances.delete(id) end |
.find(id) ⇒ Object
145 146 147 |
# File 'lib/twterm/status.rb', line 145 def self.find(id) @@instances[id] end |
.find_or_fetch(id) ⇒ Object
149 150 151 152 153 154 155 156 |
# File 'lib/twterm/status.rb', line 149 def self.find_or_fetch(id) Promise.new do |resolve, reject| instance = find(id) (resolve.(instance) && next) if instance Client.current.show_status(id) { |status| resolve.(status) } end end |
.new(tweet) ⇒ Object
158 159 160 161 |
# File 'lib/twterm/status.rb', line 158 def self.new(tweet) instance = find(tweet.id) instance.nil? ? super : instance.update!(tweet) end |
Instance Method Details
#==(other) ⇒ Object
13 14 15 |
# File 'lib/twterm/status.rb', line 13 def ==(other) other.is_a?(self.class) && id == other.id end |
#date ⇒ Object
17 18 19 20 |
# File 'lib/twterm/status.rb', line 17 def date format = Time.now - @created_at < 86_400 ? '%H:%M:%S' : '%Y-%m-%d %H:%M:%S' @created_at.strftime(format) end |
#expand_url! ⇒ Object
22 23 24 25 |
# File 'lib/twterm/status.rb', line 22 def sub = -> (x) { @text.sub!(x.url, x.display_url) } (@media + @urls).each(&sub) end |
#favorite! ⇒ Object
27 28 29 30 |
# File 'lib/twterm/status.rb', line 27 def favorite! @favorite_count += 1 @favorited = true end |
#in_reply_to_status(&block) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/twterm/status.rb', line 37 def in_reply_to_status(&block) Promise.new do |resolve, reject| (resolve.(nil) && next) if in_reply_to_status_id.nil? instance = Status.find(in_reply_to_status_id) (resolve.(instance) && next) if instance Client.current.show_status(in_reply_to_status_id) .then do |status| resolve.(status) end end end |
#matches?(query) ⇒ Boolean
32 33 34 35 |
# File 'lib/twterm/status.rb', line 32 def matches?(query) [text, user.screen_name, user.name] .any? { |x| x.downcase.include?(query.downcase) } end |
#replies ⇒ Object
89 90 91 |
# File 'lib/twterm/status.rb', line 89 def replies Status.all.select { |s| s.in_reply_to_status_id == id } end |
#retweet! ⇒ Object
93 94 95 96 |
# File 'lib/twterm/status.rb', line 93 def retweet! @retweet_count += 1 @retweeted = true end |
#retweeted_by ⇒ Object
98 99 100 |
# File 'lib/twterm/status.rb', line 98 def retweeted_by User.find(@retweeted_by_user_id) end |
#split(width) ⇒ Object
102 103 104 |
# File 'lib/twterm/status.rb', line 102 def split(width) @splitted_text[width] ||= @text.split_by_width(width) end |
#touch! ⇒ Object
106 107 108 |
# File 'lib/twterm/status.rb', line 106 def touch! @touched_at = Time.now end |
#unfavorite! ⇒ Object
110 111 112 113 |
# File 'lib/twterm/status.rb', line 110 def unfavorite! @favorite_count -= 1 @favorited = false end |
#update!(tweet) ⇒ Object
115 116 117 118 119 120 121 |
# File 'lib/twterm/status.rb', line 115 def update!(tweet) @retweet_count = tweet.retweet_count @favorite_count = tweet.favorite_count @retweeted = tweet.retweeted? @favorited = tweet.favorited? self end |