Class: Ayadn::Post

Inherits:
Object show all
Defined in:
lib/ayadn/post.rb

Instance Method Summary collapse

Constructor Details

#initialize(status = Status.new) ⇒ Post

Returns a new instance of Post.



7
8
9
10
# File 'lib/ayadn/post.rb', line 7

def initialize status = Status.new
  @status = status
  @markdown_link_regex = /\[([^\]]+)\]\(([^)]+)\)/
end

Instance Method Details

#auto_readlineObject



88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/ayadn/post.rb', line 88

def auto_readline
  loop do
    begin
      while buffer = Readline.readline(">> ".color(:red))
        resp = post({text: buffer})
        FileOps.save_post(resp) if Settings.options.backup.posts
        @status.done
      end
    rescue Interrupt
      @status.canceled
      exit
    end
  end
end

#bad_text_size(post, size, max_size) ⇒ Object



141
142
143
144
145
146
147
148
149
150
151
# File 'lib/ayadn/post.rb', line 141

def bad_text_size(post, size, max_size)
  if size < 1
    error_text_empty()
  elsif size > max_size
    Errors.warn "Canceled: too long (#{size - max_size}chars)"
    @status.info("info", "your text:", "cyan")
    puts post
    @status.too_long(size, max_size)
    exit
  end
end

#composeObject




84
85
86
# File 'lib/ayadn/post.rb', line 84

def compose
  readline()
end

#entitiesObject



68
69
70
71
72
73
# File 'lib/ayadn/post.rb', line 68

def entities
  {
    "parse_markdown_links" => true,
    "parse_links" => true
  }
end

#error_text_emptyObject



162
163
164
165
166
# File 'lib/ayadn/post.rb', line 162

def error_text_empty
  @status.no_text
  Errors.warn "-No text-"
  exit
end


153
154
155
# File 'lib/ayadn/post.rb', line 153

def keep_text_from_markdown_links(str)
  str.gsub(@markdown_link_regex, '\1')
end

#markdown_extract(str) ⇒ Object



157
158
159
160
# File 'lib/ayadn/post.rb', line 157

def markdown_extract(str)
  result = str.gsub(@markdown_link_regex, '\1|||\2')
  result.split('|||') #=> [text, link]
end

#message(dic) ⇒ Object



36
37
38
# File 'lib/ayadn/post.rb', line 36

def message(dic)
  send_content(Endpoints.new.messages(dic[:id]), payload_basic(dic))
end

#message_size_error(message) ⇒ Object



135
136
137
138
139
# File 'lib/ayadn/post.rb', line 135

def message_size_error(message)
  text = keep_text_from_markdown_links(message)
  size, max_size = text.length, Settings.config.message_max_length
  bad_text_size(message, size, max_size)
end

#message_size_ok?(message) ⇒ Boolean

works on a string, returns boolean

Returns:

  • (Boolean)


123
124
125
126
127
# File 'lib/ayadn/post.rb', line 123

def message_size_ok?(message) # works on a string, returns boolean
  text = keep_text_from_markdown_links(message)
  size, max_size = text.length, Settings.config.message_max_length
  (size >= 1 && size <= max_size)
end

#payload_basic(dic) ⇒ Object




42
43
44
45
46
47
48
# File 'lib/ayadn/post.rb', line 42

def payload_basic(dic)
  {
    "text" => dic[:text],
    "entities" => entities(),
    "annotations" => Annotations.new(dic).content
  }
end

#payload_pm(dic) ⇒ Object



50
51
52
53
54
55
56
57
# File 'lib/ayadn/post.rb', line 50

def payload_pm(dic)
  {
    "text" => dic[:text],
    "entities" => entities(),
    "destinations" => dic[:username],
    "annotations" => Annotations.new(dic).content
  }
end

#payload_reply(dic) ⇒ Object



59
60
61
62
63
64
65
66
# File 'lib/ayadn/post.rb', line 59

def payload_reply(dic)
  {
    "text" => dic[:text],
    "reply_to" => dic[:reply_to],
    "entities" => entities(),
    "annotations" => Annotations.new(dic).content
  }
end

#pm(dic) ⇒ Object



32
33
34
# File 'lib/ayadn/post.rb', line 32

def pm(dic)
  send_content(Endpoints.new.pm_url, payload_pm(dic))
end

#post(dic) ⇒ Object



12
13
14
# File 'lib/ayadn/post.rb', line 12

def post(dic)
  send_content(Endpoints.new.posts_url, payload_basic(dic))
end

#post_size_error(post) ⇒ Object



129
130
131
132
133
# File 'lib/ayadn/post.rb', line 129

def post_size_error(post)
  text = keep_text_from_markdown_links(post)
  size, max_size = text.length, Settings.config.post_max_length
  bad_text_size(post, size, max_size)
end

#post_size_ok?(post) ⇒ Boolean

works on a string, returns boolean

Returns:

  • (Boolean)


117
118
119
120
121
# File 'lib/ayadn/post.rb', line 117

def post_size_ok?(post) # works on a string, returns boolean
  text = keep_text_from_markdown_links(post)
  size, max_size = text.length, Settings.config.post_max_length
  (size >= 1 && size <= max_size)
end

#readlineObject



103
104
105
106
107
108
109
110
111
112
113
114
115
# File 'lib/ayadn/post.rb', line 103

def readline
  @status.readline
  post = []
  begin
    while buffer = Readline.readline("> ")
      post << buffer
    end
  rescue Interrupt
    @status.canceled
    exit
  end
  post
end

#reply(dic) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ayadn/post.rb', line 16

def reply(dic)
  replied_to = dic[:reply_to]
  reply = replied_to.handle.dup
  reply << " #{dic[:text]}"
  replied_to.mentions.uniq!
  replied_to.mentions.each do |m|
    next if m == replied_to.username
    next if m == Settings.config.identity.username
    reply << " @#{m}"
  end
  post_size_error(reply) if !post_size_ok?(reply)
  dic[:text] = reply
  dic[:reply_to] = dic[:id]
  send_content(Endpoints.new.posts_url, payload_reply(dic))
end

#send_content(url, payload) ⇒ Object




77
78
79
80
# File 'lib/ayadn/post.rb', line 77

def send_content(url, payload)
  url << "?include_annotations=1&access_token=#{Ayadn::Settings.user_token}"
  JSON.parse(CNX.post(url, payload))
end