Class: Usps::Imis::Api
- Inherits:
-
Object
- Object
- Usps::Imis::Api
- Includes:
- Requests
- Defined in:
- lib/usps/imis/api.rb
Overview
The core API wrapper
Constant Summary collapse
- AUTHENTICATION_PATH =
Endpoint for (re-)authentication requests
'Token'
Instance Attribute Summary collapse
-
#imis_id ⇒ Object
Currently selected iMIS ID for API requests.
-
#lock_imis_id ⇒ Object
readonly
Whether to lock changes to the selected iMIS ID.
-
#token ⇒ Object
readonly
API bearer token.
-
#token_expiration ⇒ Object
readonly
Expiration time for the API bearer token.
Instance Method Summary collapse
-
#business_objects ⇒ Hash<Symbol, Array<String>>
List of available Business Object names.
-
#fetch(field_key) ⇒ Object
(also: #[])
Convenience alias for reading mapped fields.
-
#fetch_all(*fields) ⇒ Array
Convenience alias for reading multiple mapped fields.
-
#imis_id_for(certificate) ⇒ Integer
Convert a member’s certificate number into an iMIS ID number.
-
#initialize(imis_id: nil) ⇒ Api
constructor
A new instance of
Api. -
#instance_variables_to_inspect ⇒ Object
Ruby 3.5 instance variable filter.
-
#mapper ⇒ Object
An instance of
Mapper, using this instance as its parentApi. -
#on(business_object_name, ordinal: nil) ⇒ Usps::Imis::BusinessObject
Run requests as DSL, with specific
BusinessObjectonly maintained for this scope. -
#panels ⇒ Object
Convenience accessor for available Panel objects, each using this instance as its parent
Api. -
#put_field(field_key, value) ⇒ Array
(also: #[]=)
Convenience alias for updating mapped fields.
-
#query(query_name, query_params = {}) ⇒ Usps::Imis::Query
Build a Query interface.
-
#update(data) ⇒ Usps::Imis::Data
Convenience alias for updating mapped fields.
-
#with(id) ⇒ Usps::Imis::Api
Run requests as DSL, with specific iMIS ID only maintained for this scope.
Constructor Details
#initialize(imis_id: nil) ⇒ Api
A new instance of Api
41 42 43 |
# File 'lib/usps/imis/api.rb', line 41 def initialize(imis_id: nil) self.imis_id = imis_id if imis_id end |
Instance Attribute Details
#imis_id ⇒ Object
Currently selected iMIS ID for API requests
31 32 33 |
# File 'lib/usps/imis/api.rb', line 31 def imis_id @imis_id end |
#lock_imis_id ⇒ Object (readonly)
Whether to lock changes to the selected iMIS ID
35 36 37 |
# File 'lib/usps/imis/api.rb', line 35 def lock_imis_id @lock_imis_id end |
#token ⇒ Object (readonly)
API bearer token
21 22 23 |
# File 'lib/usps/imis/api.rb', line 21 def token @token end |
#token_expiration ⇒ Object (readonly)
Expiration time for the API bearer token
Used to automatically re-authenticate as needed
27 28 29 |
# File 'lib/usps/imis/api.rb', line 27 def token_expiration @token_expiration end |
Instance Method Details
#business_objects ⇒ Hash<Symbol, Array<String>>
List of available Business Object names
169 170 171 172 173 |
# File 'lib/usps/imis/api.rb', line 169 def business_objects abc, other = query('BOEntityDefinition').map(&:entity).partition { it.include?('ABC') } { abc:, other: } end |
#fetch(field_key) ⇒ Object Also known as: []
Convenience alias for reading mapped fields
143 |
# File 'lib/usps/imis/api.rb', line 143 def fetch(field_key) = mapper.fetch(field_key) |
#fetch_all(*fields) ⇒ Array
Convenience alias for reading multiple mapped fields
150 |
# File 'lib/usps/imis/api.rb', line 150 def fetch_all(*fields) = mapper.fetch_all(*fields) |
#imis_id_for(certificate) ⇒ Integer
Convert a member’s certificate number into an iMIS ID number
63 64 65 66 67 68 69 70 71 72 73 74 75 |
# File 'lib/usps/imis/api.rb', line 63 def imis_id_for(certificate) raise Errors::LockedIdError if lock_imis_id logger.debug "Fetching iMIS ID for #{certificate}" begin result = query(Imis.configuration.imis_id_query_name, { certificate: }).tap { logger.debug it } page = result.page.tap { logger.debug it } self.imis_id = page.first['ID'].to_i rescue StandardError raise Errors::NotFoundError, 'Member not found' end end |
#instance_variables_to_inspect ⇒ Object
Ruby 3.5 instance variable filter
184 |
# File 'lib/usps/imis/api.rb', line 184 def instance_variables_to_inspect = %i[@token_expiration @imis_id] |
#mapper ⇒ Object
An instance of Mapper, using this instance as its parent Api
135 136 137 |
# File 'lib/usps/imis/api.rb', line 135 def mapper @mapper ||= Mapper.new(self) end |
#on(business_object_name, ordinal: nil) ⇒ Usps::Imis::BusinessObject
Run requests as DSL, with specific BusinessObject only maintained for this scope
If no block is given, this returns the specified BusinessObject.
126 127 128 129 130 131 |
# File 'lib/usps/imis/api.rb', line 126 def on(business_object_name, ordinal: nil, &) object = BusinessObject.new(self, business_object_name, ordinal:) return object unless block_given? object.instance_eval(&) end |
#panels ⇒ Object
Convenience accessor for available Panel objects, each using this instance as its parent Api
178 179 180 |
# File 'lib/usps/imis/api.rb', line 178 def panels @panels ||= Panels.all(self) end |
#put_field(field_key, value) ⇒ Array Also known as: []=
Convenience alias for updating mapped fields
156 |
# File 'lib/usps/imis/api.rb', line 156 def put_field(field_key, value) = update(field_key => value) |
#query(query_name, query_params = {}) ⇒ Usps::Imis::Query
Build a Query interface
Works with IQA queries and Business Objects
115 |
# File 'lib/usps/imis/api.rb', line 115 def query(query_name, query_params = {}) = Query.new(self, query_name, **query_params) |
#update(data) ⇒ Usps::Imis::Data
Convenience alias for updating mapped fields
163 |
# File 'lib/usps/imis/api.rb', line 163 def update(data) = mapper.update(data) |
#with(id) ⇒ Usps::Imis::Api
Run requests as DSL, with specific iMIS ID only maintained for this scope
While in this block, changes to the value of imis_id are not allowed
If no block is given, this sets the iMIS ID and returns self.
92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/usps/imis/api.rb', line 92 def with(id, &) old_id = imis_id self.imis_id = id return self unless block_given? @lock_imis_id = true instance_eval(&) ensure if block_given? @lock_imis_id = false self.imis_id = old_id end end |