Class: RubyIsds::Request
- Inherits:
-
Object
- Object
- RubyIsds::Request
- Defined in:
- lib/ruby_isds/request.rb
Direct Known Subclasses
WebServices::DbSearch::Request, WebServices::DmInfo::Request, WebServices::DmOperations::Request
Class Method Summary collapse
Instance Method Summary collapse
-
#api_url ⇒ Object
relative part of url because they differ…
-
#body ⇒ Object
Each subclass must implement this is whole body of message which differs and also needs to be accompanied with att_accessors.
-
#call ⇒ Object
rubocop:disable Metrics/AbcSize.
-
#call_reponse_wrapper(response) ⇒ Object
rubocop:enable Metrics/AbcSize.
- #default_headers ⇒ Object
- #envelope_namespaces ⇒ Object
- #full_url ⇒ Object
-
#initialize(params = {}) ⇒ Request
constructor
A new instance of Request.
-
#response_wrapper ⇒ Object
Here you can change which response object will wrap the reponse reponse object has to inherit from ‘::RubyIsds::Response`.
- #to_xml ⇒ Object
-
#values(xml) ⇒ Object
each subclass needs to have availbale attrs put in constant ‘ATTRS`.
-
#xml_url ⇒ Object
URL will differ based on endpoint that it accesses.
Constructor Details
#initialize(params = {}) ⇒ Request
Returns a new instance of Request.
3 4 5 6 7 |
# File 'lib/ruby_isds/request.rb', line 3 def initialize(params = {}) params.each do |k, v| instance_variable_set("@#{k}", v) end if params.any? end |
Class Method Details
.call(params = {}) ⇒ Object
9 10 11 |
# File 'lib/ruby_isds/request.rb', line 9 def self.call(params = {}) new(params).call end |
Instance Method Details
#api_url ⇒ Object
relative part of url because they differ…
domain such as https://ws1.czebox.cz is take from config as such:
`RubyIsds.configuration.api_domain`
it includes `https://` so only ending is supposed to be here
88 89 90 |
# File 'lib/ruby_isds/request.rb', line 88 def api_url raise NotImplementedError, "#{self.class} must implement #api_url!" end |
#body ⇒ Object
Each subclass must implement
this is whole body of which differs and also needs to be
accompanied with att_accessors
78 79 80 |
# File 'lib/ruby_isds/request.rb', line 78 def body raise NotImplementedError, "#{self.class} must implement #body!" end |
#call ⇒ Object
rubocop:disable Metrics/AbcSize
14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/ruby_isds/request.rb', line 14 def call uri = URI(full_url) request = Net::HTTP::Post.new(uri) default_headers.each { |k, v| request[k] = v } request.body = to_xml request.basic_auth RubyIsds.configuration.username, RubyIsds.configuration.password https = Net::HTTP.new(uri.hostname, uri.port) https.use_ssl = true https.ssl_version = :TLSv1_2_client response = https.request(request) call_reponse_wrapper(response) end |
#call_reponse_wrapper(response) ⇒ Object
rubocop:enable Metrics/AbcSize
30 31 32 |
# File 'lib/ruby_isds/request.rb', line 30 def call_reponse_wrapper(response) response_wrapper.new(response) end |
#default_headers ⇒ Object
34 35 36 37 38 39 |
# File 'lib/ruby_isds/request.rb', line 34 def default_headers { 'Content-Type' => 'text/xml;charset=UTF-8', 'Accept-Encoding' => 'gzip,deflate' } end |
#envelope_namespaces ⇒ Object
52 53 54 55 56 57 |
# File 'lib/ruby_isds/request.rb', line 52 def envelope_namespaces { 'xmlns:soapenv' => 'http://schemas.xmlsoap.org/soap/envelope/', 'xmlns:v20' => xml_url } end |
#full_url ⇒ Object
59 60 61 |
# File 'lib/ruby_isds/request.rb', line 59 def full_url "#{RubyIsds.configuration.api_domain}#{api_url}" end |
#response_wrapper ⇒ Object
Here you can change which response object will wrap the reponse
reponse object has to inherit from `::RubyIsds::Response`
103 104 105 |
# File 'lib/ruby_isds/request.rb', line 103 def response_wrapper ::RubyIsds::Response end |
#to_xml ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/ruby_isds/request.rb', line 41 def to_xml Nokogiri::XML::Builder.new(encoding: 'utf-8') do |xml| xml[:soapenv].Envelope(envelope_namespaces) do xml[:soapenv].Header xml[:soapenv].Body do body(xml) end end end.to_xml end |
#values(xml) ⇒ Object
each subclass needs to have availbale attrs put in constant ‘ATTRS`
66 67 68 69 70 71 |
# File 'lib/ruby_isds/request.rb', line 66 def values(xml) self.class::ATTRS.each do |attribute| value = instance_variable_get("@#{attribute}") || '' xml[:v20].public_send(attribute, value) end end |
#xml_url ⇒ Object
URL will differ based on endpoint that it accesses
95 96 97 |
# File 'lib/ruby_isds/request.rb', line 95 def xml_url "https://#{RubyIsds.configuration.xml_url}" end |