Class: Imis::Api
- Inherits:
-
Object
- Object
- Imis::Api
- Defined in:
- lib/imis/api.rb
Constant Summary collapse
- AUTHENTICATION_PATH =
'Token'- API_PATH =
'api'- QUERY_PATH =
'api/Query'
Instance Attribute Summary collapse
-
#imis_id ⇒ Object
Returns the value of attribute imis_id.
-
#token ⇒ Object
readonly
Returns the value of attribute token.
-
#token_expiration ⇒ Object
readonly
Returns the value of attribute token_expiration.
Instance Method Summary collapse
-
#delete(business_object_name, url_id: nil) ⇒ Object
Remove a business object for the current member.
-
#get(business_object_name, url_id: nil) ⇒ Object
Get a business object for the current member.
-
#imis_id_for(certificate) ⇒ Object
Convert a member’s certificate number into an iMIS ID number.
-
#initialize(skip_authentication: false) ⇒ Api
constructor
A new instance of Api.
- #mapper ⇒ Object
-
#post(business_object_name, body, url_id: nil) ⇒ Object
Create a business object for the current member.
-
#put(business_object_name, body, url_id: nil) ⇒ Object
Update a business object for the current member.
-
#put_fields(business_object_name, fields, url_id: nil) ⇒ Object
Update only specific fields on a business object for the current member.
-
#query(query_name, query_params = {}) ⇒ Object
Run an IQA Query.
- #update(data) ⇒ Object
-
#with(id, &block) ⇒ Object
Run requests as DSL, with specific iMIS ID only maintained for this scope.
Constructor Details
#initialize(skip_authentication: false) ⇒ Api
Returns a new instance of Api.
11 12 13 |
# File 'lib/imis/api.rb', line 11 def initialize(skip_authentication: false) authenticate unless skip_authentication end |
Instance Attribute Details
#imis_id ⇒ Object
Returns the value of attribute imis_id.
9 10 11 |
# File 'lib/imis/api.rb', line 9 def imis_id @imis_id end |
#token ⇒ Object (readonly)
Returns the value of attribute token.
9 10 11 |
# File 'lib/imis/api.rb', line 9 def token @token end |
#token_expiration ⇒ Object (readonly)
Returns the value of attribute token_expiration.
9 10 11 |
# File 'lib/imis/api.rb', line 9 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
82 83 84 85 86 87 |
# File 'lib/imis/api.rb', line 82 def delete(business_object_name, url_id: nil) uri = uri_for(business_object_name, url_id: url_id) request = Net::HTTP::Delete.new(uri) result = submit(uri, (request)) result.body end |
#get(business_object_name, url_id: nil) ⇒ Object
Get a business object for the current member
42 43 44 45 46 47 |
# File 'lib/imis/api.rb', line 42 def get(business_object_name, url_id: nil) uri = uri_for(business_object_name, url_id: url_id) request = Net::HTTP::Get.new(uri) result = submit(uri, (request)) JSON.parse(result.body) end |
#imis_id_for(certificate) ⇒ Object
Convert a member’s certificate number into an iMIS ID number
23 24 25 26 |
# File 'lib/imis/api.rb', line 23 def imis_id_for(certificate) result = query(Imis.configuration.imis_id_query_name, { certificate: certificate }) @imis_id = result['Items']['$values'][0]['ID'] end |
#mapper ⇒ Object
103 104 105 |
# File 'lib/imis/api.rb', line 103 def mapper @mapper ||= Mapper.new(self) end |
#post(business_object_name, body, url_id: nil) ⇒ Object
Create a business object for the current member
70 71 72 73 74 75 76 |
# File 'lib/imis/api.rb', line 70 def post(business_object_name, body, url_id: nil) uri = uri_for(business_object_name, url_id: url_id) request = Net::HTTP::Post.new(uri) request.body = JSON.dump(body) result = submit(uri, (request)) JSON.parse(result.body) end |
#put(business_object_name, body, url_id: nil) ⇒ Object
Update a business object for the current member
60 61 62 63 64 65 66 |
# File 'lib/imis/api.rb', line 60 def put(business_object_name, body, url_id: nil) uri = uri_for(business_object_name, url_id: url_id) request = Net::HTTP::Put.new(uri) request.body = JSON.dump(body) result = submit(uri, (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 }
53 54 55 56 |
# File 'lib/imis/api.rb', line 53 def put_fields(business_object_name, fields, url_id: nil) updated = filter_fields(business_object_name, fields) put(business_object_name, updated, url_id: 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 }
94 95 96 97 98 99 100 101 |
# File 'lib/imis/api.rb', line 94 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, (request)) JSON.parse(result.body) end |
#update(data) ⇒ Object
107 108 109 |
# File 'lib/imis/api.rb', line 107 def update(data) mapper.update(data) end |
#with(id, &block) ⇒ 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`
32 33 34 35 36 37 38 |
# File 'lib/imis/api.rb', line 32 def with(id, &block) old_id = imis_id self.imis_id = id instance_eval(&block) ensure self.imis_id = old_id end |