Module: Twitter::Rewriter

Extended by:
Deprecation, Rewriter
Included in:
Rewriter
Defined in:
lib/twitter-text-relative/rewriter.rb

Overview

A module provides base methods to rewrite usernames, lists, hashtags and URLs.

Instance Method Summary collapse

Methods included from Deprecation

deprecate

Instance Method Details

#rewrite(text, options = {}) ⇒ Object



24
25
26
27
28
# File 'lib/twitter-text-relative/rewriter.rb', line 24

def rewrite(text, options = {})
  [:hashtags, :urls, :usernames_or_lists].inject(text) do |key|
    options[key] ? send(:"rewrite_#{key}", text, &options[key]) : text
  end
end

#rewrite_entities(text, entities) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/twitter-text-relative/rewriter.rb', line 4

def rewrite_entities(text, entities)
  chars = text.to_s.to_char_a

  # sort by start index
  entities = entities.sort_by{|entity| entity[:indices].first}

  result = []
  last_index = entities.inject(0) do |last_index, entity|
    result << chars[last_index...entity[:indices].first]
    result << yield(entity, chars)
    entity[:indices].last
  end
  result << chars[last_index..-1]

  result.flatten.join
end

#rewrite_hashtags(text) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/twitter-text-relative/rewriter.rb', line 42

def rewrite_hashtags(text)
  entities = Extractor.extract_hashtags_with_indices(text)
  rewrite_entities(text, entities) do |entity, chars|
    hash = chars[entity[:indices].first]
    yield(hash, entity[:hashtag])
  end
end

#rewrite_urls(text) ⇒ Object



51
52
53
54
55
56
# File 'lib/twitter-text-relative/rewriter.rb', line 51

def rewrite_urls(text)
  entities = Extractor.extract_urls_with_indices(text, :extract_url_without_protocol => false)
  rewrite_entities(text, entities) do |entity, chars|
    yield(entity[:url])
  end
end

#rewrite_usernames_or_lists(text) ⇒ Object



31
32
33
34
35
36
37
38
39
# File 'lib/twitter-text-relative/rewriter.rb', line 31

def rewrite_usernames_or_lists(text)
  entities = Extractor.extract_mentions_or_lists_with_indices(text)
  rewrite_entities(text, entities) do |entity, chars|
    at = chars[entity[:indices].first]
    list_slug = entity[:list_slug]
    list_slug = nil if list_slug.empty?
    yield(at, entity[:screen_name], list_slug)
  end
end