class Smartling::Uri

Attributes

base[RW]
params[RW]
path[RW]
required[RW]

Public Class Methods

new(base, path = nil) click to toggle source
# File lib/smartling/uri.rb, line 19
def initialize(base, path = nil)
  @base = base
  @path = path
  @required = []
end

Public Instance Methods

format_query(params) click to toggle source
# File lib/smartling/uri.rb, line 49
def format_query(params)
# TODO: UTF-8 encode keys and values
# URI.encode_www_form(params)
  params.map {|k,v|
    if v.respond_to?(:to_ary)
      v.to_ary.map {|w|
        k.to_s + '[]=' + format_value(w)
      }.join('&')
    else
      k.to_s + '=' + format_value(v)
    end
  }.join('&')
end
format_time(t) click to toggle source
# File lib/smartling/uri.rb, line 68
def format_time(t)
  t.utc.iso8601
end
format_value(v) click to toggle source
# File lib/smartling/uri.rb, line 63
def format_value(v)
  v.is_a?(Time) ? format_time(v) :
    CGI.escape(v.to_s).gsub('+', '%20')
end
require(*args) click to toggle source
# File lib/smartling/uri.rb, line 25
def require(*args)
  @required += args
  return self
end
to_s() click to toggle source
# File lib/smartling/uri.rb, line 45
def to_s
  to_uri.to_s
end
to_uri() click to toggle source
# File lib/smartling/uri.rb, line 30
def to_uri
  params = @params || {}
  required = @required || []
  params.delete_if {|k,v| v.nil? || v.to_s.size <= 0 }
  missing = required - params.keys
  raise ArgumentError, "Missing parameters: " + missing.inspect if missing.size > 0

  uri = URI.parse(@base)
  uri.merge!(@path) if @path
  if params.size > 0
    uri.query = format_query(params)
  end
  return uri
end