Class: TicketEvolution::Connection
- Defined in:
- lib/ticket_evolution/core/connection.rb
Constant Summary collapse
- DEFAULT_SUBDOMAIN =
'api'
- DEFAULT_URL_BASE =
'ticketevolution.com'
- DEFAULT_PROTOCOL =
'https'
- @@oldest_version_in_service =
8
- @@default_options =
HashWithIndifferentAccess.new({ :version => @@oldest_version_in_service, :mode => :sandbox, :ssl_verify => true, :test_responses => false, :logger => nil })
- @@expected_options =
[ 'version', 'mode', 'token', 'secret', 'ssl_verify', 'test_responses', 'logger' ]
- @@subdomain =
DEFAULT_SUBDOMAIN
- @@url_base =
DEFAULT_URL_BASE
- @@protocol =
DEFAULT_PROTOCOL
- @@adapter =
:net_http
Instance Method Summary collapse
- #build_request(method, path, params = nil) ⇒ Object
- #config ⇒ Object
-
#initialize(opts = {}) ⇒ Connection
constructor
A new instance of Connection.
- #logger ⇒ Object
- #sign(method, path, content = nil) ⇒ Object
- #uri(path) ⇒ Object
- #url ⇒ Object
Methods inherited from Base
Constructor Details
#initialize(opts = {}) ⇒ Connection
Returns a new instance of Connection.
38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/ticket_evolution/core/connection.rb', line 38 def initialize(opts = {}) @adapter = self.class.adapter @config = self.class..merge(opts) @config.delete_if{|k, v| ! TicketEvolution::Connection..include?(k)} # Error Notification if @config.keys.sort_by{|x|x} == TicketEvolution::Connection..sort_by{|x|x} raise InvalidConfiguration.new("Invalid Token Format") unless @config[:token] =~ /^[a-zA-Z0-9]{32}$/ raise InvalidConfiguration.new("Invalid Secret Format") unless @config[:secret] =~ /^\S{40}$/ raise InvalidConfiguration.new("Please Use API Version #{TicketEvolution::Connection.oldest_version_in_service} or Above") unless @config[:version] >= TicketEvolution::Connection.oldest_version_in_service else raise InvalidConfiguration.new("Missing: #{(self.class. - @config.keys).join(', ')}") end end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method in the class TicketEvolution::Base
Instance Method Details
#build_request(method, path, params = nil) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/ticket_evolution/core/connection.rb', line 84 def build_request(method, path, params = nil) = { :headers => { "X-Signature" => sign(method, self.uri(path), params), "X-Token" => @config[:token], "Content-Type" => "application/json" }, :ssl => { :verify => @config[:ssl_verify] } } [:params] = params if method == :GET [:headers]["Accept"] = "application/vnd.ticketevolution.api+json; version=#{@config[:version]}" unless @config[:version] > 8 Faraday.new(self.uri(path), ) do |builder| builder.use Faraday::Response::VerboseLogger, self.logger if self.logger.present? builder.use FaradayLocalhostHeader, [ /(?:^|\.)lvh\.me$/i, /(?:^|\.)((?:\d+\.){4})xip\.io$/i ] builder.adapter @adapter builder.[:timeout] = 120 builder.[:open_timeout] = 120 end end |
#config ⇒ Object
53 54 55 |
# File 'lib/ticket_evolution/core/connection.rb', line 53 def config @config end |
#logger ⇒ Object
106 107 108 |
# File 'lib/ticket_evolution/core/connection.rb', line 106 def logger @config[:logger] end |
#sign(method, path, content = nil) ⇒ Object
74 75 76 77 78 79 80 81 82 |
# File 'lib/ticket_evolution/core/connection.rb', line 74 def sign(method, path, content = nil) d = "#{method} #{process_params(method, path, content).gsub(TicketEvolution::Connection.protocol+'://', '').gsub(/\:\d{2,5}\//, '/')}" Base64.encode64( OpenSSL::HMAC.digest( OpenSSL::Digest::Digest.new('sha256'), @config[:secret], d )).chomp end |
#uri(path) ⇒ Object
66 67 68 69 70 71 72 |
# File 'lib/ticket_evolution/core/connection.rb', line 66 def uri(path) parts = [].tap do |parts| parts << self.url parts << "/v#{@config[:version]}" if @config[:version] > 8 parts << path end.join end |
#url ⇒ Object
57 58 59 60 61 62 63 64 |
# File 'lib/ticket_evolution/core/connection.rb', line 57 def url @url ||= [].tap do |parts| parts << TicketEvolution::Connection.protocol parts << "://#{ TicketEvolution::Connection.subdomain }." parts << "#{@config[:mode]}." if @config[:mode].present? && @config[:mode].to_sym != :production parts << TicketEvolution::Connection.url_base end.join end |