Class: Usps::Imis::Api

Inherits:
Object
  • Object
show all
Defined in:
lib/usps/imis/api.rb

Defined Under Namespace

Classes: PANELS

Constant Summary collapse

AUTHENTICATION_PATH =
'Token'
API_PATH =
'api'
QUERY_PATH =
'api/Query'

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(skip_authentication: false, imis_id: nil) ⇒ Api

Returns a new instance of Api.



13
14
15
16
# File 'lib/usps/imis/api.rb', line 13

def initialize(skip_authentication: false, imis_id: nil)
  authenticate unless skip_authentication
  self.imis_id = imis_id if imis_id
end

Instance Attribute Details

#imis_idObject

Returns the value of attribute imis_id.



11
12
13
# File 'lib/usps/imis/api.rb', line 11

def imis_id
  @imis_id
end

#tokenObject (readonly)

Returns the value of attribute token.



11
12
13
# File 'lib/usps/imis/api.rb', line 11

def token
  @token
end

#token_expirationObject (readonly)

Returns the value of attribute token_expiration.



11
12
13
# File 'lib/usps/imis/api.rb', line 11

def token_expiration
  @token_expiration
end

Instance Method Details

#delete(business_object_name, url_id: nil) ⇒ Object

Remove a business object for the current member

Returns empty string on success



87
88
89
90
91
92
# File 'lib/usps/imis/api.rb', line 87

def delete(business_object_name, url_id: nil)
  uri = uri_for(business_object_name, url_id:)
  request = Net::HTTP::Delete.new(uri)
  result = submit(uri, authorize(request))
  result.body
end

#get(business_object_name, url_id: nil) ⇒ Object

Get a business object for the current member



47
48
49
50
51
52
# File 'lib/usps/imis/api.rb', line 47

def get(business_object_name, url_id: nil)
  uri = uri_for(business_object_name, url_id:)
  request = Net::HTTP::Get.new(uri)
  result = submit(uri, authorize(request))
  JSON.parse(result.body)
end

#imis_id_for(certificate) ⇒ Object

Convert a member’s certificate number into an iMIS ID number



26
27
28
29
30
31
# File 'lib/usps/imis/api.rb', line 26

def imis_id_for(certificate)
  result = query(Imis.configuration.imis_id_query_name, { certificate: })
  @imis_id = result['Items']['$values'][0]['ID']
rescue StandardError
  raise Error::Api, 'Member not found'
end

#instance_variables_to_inspectObject



123
# File 'lib/usps/imis/api.rb', line 123

def instance_variables_to_inspect = %i[@token_expiration @imis_id]

#mapperObject



108
109
110
# File 'lib/usps/imis/api.rb', line 108

def mapper
  @mapper ||= Mapper.new(self)
end

#panelsObject



112
113
114
115
116
117
# File 'lib/usps/imis/api.rb', line 112

def panels
  @panels ||= PANELS.new(
    Panel::Vsc.new(self),
    Panel::Education.new(self)
  )
end

#post(business_object_name, body, url_id: nil) ⇒ Object

Create a business object for the current member



75
76
77
78
79
80
81
# File 'lib/usps/imis/api.rb', line 75

def post(business_object_name, body, url_id: nil)
  uri = uri_for(business_object_name, url_id:)
  request = Net::HTTP::Post.new(uri)
  request.body = JSON.dump(body)
  result = submit(uri, authorize(request))
  JSON.parse(result.body)
end

#put(business_object_name, body, url_id: nil) ⇒ Object

Update a business object for the current member



65
66
67
68
69
70
71
# File 'lib/usps/imis/api.rb', line 65

def put(business_object_name, body, url_id: nil)
  uri = uri_for(business_object_name, url_id:)
  request = Net::HTTP::Put.new(uri)
  request.body = JSON.dump(body)
  result = submit(uri, authorize(request))
  JSON.parse(result.body)
end

#put_fields(business_object_name, fields, url_id: nil) ⇒ Object

Update only specific fields on a business object for the current member

fields - hash of shape: { field_name => new_value }


58
59
60
61
# File 'lib/usps/imis/api.rb', line 58

def put_fields(business_object_name, fields, url_id: nil)
  updated = filter_fields(business_object_name, fields)
  put(business_object_name, updated, url_id:)
end

#query(query_name, query_params = {}) ⇒ Object

Run an IQA Query

query_name   - the full path of the query in IQA, e.g. `$/_ABC/Fiander/iMIS_ID`
query_params - hash of shape: { param_name => param_value }


99
100
101
102
103
104
105
106
# File 'lib/usps/imis/api.rb', line 99

def query(query_name, query_params = {})
  query_params[:QueryName] = query_name
  path = "#{QUERY_PATH}?#{query_params.to_query}"
  uri = URI(File.join(imis_hostname, path))
  request = Net::HTTP::Get.new(uri)
  result = submit(uri, authorize(request))
  JSON.parse(result.body)
end

#update(data) ⇒ Object



119
120
121
# File 'lib/usps/imis/api.rb', line 119

def update(data)
  mapper.update(data)
end

#with(id) ⇒ Object

Run requests as DSL, with specific iMIS ID only maintained for this scope

This should be used with methods that do not change the value of ‘imis_id`



37
38
39
40
41
42
43
# File 'lib/usps/imis/api.rb', line 37

def with(id, &)
  old_id = imis_id
  self.imis_id = id
  instance_eval(&)
ensure
  self.imis_id = old_id
end