Module: PhraseApp

Defined in:
lib/auth.rb,
lib/version.rb,
lib/phraseapp-ruby.rb,
lib/phraseapp-ruby.rb,
lib/request_handler.rb

Defined Under Namespace

Modules: Auth, ParamsHelpers, RequestErrors, RequestParams, ResponseObjects Classes: Client

Constant Summary collapse

VERSION =
'1.0.10'
MULTIPART_BOUNDARY =
"{PHRASE!!EOF}"
URL =
"https://api.phraseapp.com"
API_CLIENT_IDENTIFIER =
"PhraseApp Ruby " + VERSION

Class Method Summary collapse

Class Method Details

.handle_times(obj) ⇒ Object



12
13
14
15
16
17
18
# File 'lib/phraseapp-ruby.rb', line 12

def self.handle_times(obj)
  obj.each_pair do |k, v|
    if is_a_date?(v)
      obj.send(:"#{k}=", DateTime.parse(v))
    end
  end    
end

.handleResponseStatus(resp, expectedStatus) ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
# File 'lib/request_handler.rb', line 129

def self.handleResponseStatus(resp, expectedStatus)
  case resp.code.to_i
    when expectedStatus
   	return
    when 400
  		e = PhraseApp::RequestErrors::ErrorResponse.new(resp)
    return e
    when 404
  		return raise("not found")
    when 422
  		e = PhraseApp::RequestErrors::ValidationErrorResponse.new(resp)
    if e != nil
  			return e
    end
  		return e
    when 429
    e, err = PhraseApp::RequestErrors::RateLimitError.new(resp)
      if err != nil
  			return err
      end
  		return e
    else
    return raise("unexpected status code (#{resp.code}) received; expected #{expectedStatus}")
  end
end

.is_a_date?(str) ⇒ Boolean

Returns:

  • (Boolean)


20
21
22
23
24
# File 'lib/phraseapp-ruby.rb', line 20

def self.is_a_date?(str)
  if !str.nil? && str.is_a?(String)
    str.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/)
  end
end

.multipart(hash) ⇒ Object



59
60
61
62
63
64
65
66
67
68
# File 'lib/request_handler.rb', line 59

def self.multipart(hash)
  hash.inject("") do |res, (k, v)|
    res << "--#{PhraseApp::MULTIPART_BOUNDARY}\r\n"
    res << "Content-Disposition: form-data; name=\"#{k}\"\r\n"
    # res << "Content-Type: #{headers["Content-Type"]}\r\n" if headers["Content-Type"]
    res << "\r\n"
    res << "#{v}\r\n"
    res
  end
end

.send(req, status) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'lib/request_handler.rb', line 105

def self.send(req, status)
  err = PhraseApp::Auth.authenticate(req)
  if err != nil
    return nil, err
  end
  
  req["User-Agent"] = API_CLIENT_IDENTIFIER

  uri = URI.parse(PhraseApp::URL)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER
  if ENV['DEBUG']
    puts "#{req.method} #{req.path}"
    puts req.body.inspect
    puts "-------"
  end
  resp = http.request(req)

	err = handleResponseStatus(resp, status)

  return resp, err
end

.send_request(method, path, ctype, data, status) ⇒ Object



83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/request_handler.rb', line 83

def self.send_request(method, path, ctype, data, status)
  req = Net::HTTPGenericRequest.new(method, 
      Module.const_get("Net::HTTP::#{method.capitalize}::REQUEST_HAS_BODY"), 
      Module.const_get("Net::HTTP::#{method.capitalize}::RESPONSE_HAS_BODY"), 
      path)



  puts "data:"
  puts data.inspect
  req.body = data

  if ctype != ""
    req["Content-Type"] = ctype
  end

  resp, err = send(req, status)

  
  return resp, err
end

.send_request_paginated(method, path_with_query, ctype, body, status, page, per_page) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
# File 'lib/request_handler.rb', line 70

def self.send_request_paginated(method, path_with_query, ctype, body, status, page, per_page)
  uri = URI.parse(path_with_query)

  hash = if uri.query then CGI::parse(uri.query) else {} end
  hash["page"] = page
  hash["per_page"] = per_page
  
  query_str = URI.encode_www_form(hash)
  path = [uri.path, query_str].compact.join('?')

  return send_request(method, path, ctype, body, status)
end