dmao-json-ingesters 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c22b68788e8a965c942d77d4bacf57cebfe02f04
4
+ data.tar.gz: ad8adcd8d0381e56ffe5a956d17fd203e1399091
5
+ SHA512:
6
+ metadata.gz: e83095aa70991c0e88d9ac7bd2ce6fe10d3740dba9557f775a8d369e22a1523fc48e416a42eff6f32817a4c0e06cbd4c015d441fd9114179d64009bb6598d225
7
+ data.tar.gz: 8b8b64670231c9ca01822bd4e468a4ca07470a3c21bd565b803c6257d96b5b09faefe60cdc58d64f713aeb2e77ab13e084b694ea8a58da9896bfc33d2904ca0d
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ .rbenv-gemsets
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in dmao-json-ingesters.gemspec
4
+ gemspec
@@ -0,0 +1,36 @@
1
+ # DMAO::Ingesters::JSON::OrganisationIngester
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/json/organisation/ingester`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'dmao-json-organisation-ingester'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install dmao-json-organisation-ingester
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ Bug reports and pull requests are welcome on GitHub at https://github.com/lulibrary/DMAO-JSON-Organisation-Ingester.
36
+
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ task :default => :test
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "dmao/ingesters/json/ingesters"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,42 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'dmao/ingesters/json/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "dmao-json-ingesters"
8
+ spec.version = DMAO::Ingesters::JSON::VERSION
9
+ spec.authors = ["Stephen Robinson"]
10
+ spec.email = ["library.dit@lancaster.ac.uk"]
11
+
12
+ spec.summary = %q{JSON ingesters for DMA Online}
13
+ spec.description = %q{}
14
+ spec.homepage = "https://github.com/lulibrary/dmao-json-ingesters"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata['allowed_push_host'] = "https://rubygems.org"
20
+ else
21
+ raise "RubyGems 2.0 or newer is required to protect against " \
22
+ "public gem pushes."
23
+ end
24
+
25
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
26
+ f.match(%r{^(test|spec|features)/})
27
+ end
28
+ spec.bindir = "exe"
29
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
+ spec.require_paths = ["lib"]
31
+
32
+ spec.add_dependency "dmao-generic-ingesters", "~> 0.2.1"
33
+ spec.add_dependency "rest-client"
34
+
35
+ spec.add_development_dependency "bundler", "~> 1.13"
36
+ spec.add_development_dependency "rake", "~> 10.0"
37
+ spec.add_development_dependency "minitest", "~> 5.0"
38
+ spec.add_development_dependency "mocha", "~> 1.1"
39
+ spec.add_development_dependency "codeclimate-test-reporter", "~> 1.0"
40
+ spec.add_development_dependency "vcr", "~> 3.0.3"
41
+ spec.add_development_dependency "webmock", "~> 2.1"
42
+ end
@@ -0,0 +1,17 @@
1
+ module DMAO
2
+ module Ingesters
3
+ module JSON
4
+ module Errors
5
+
6
+ class IngestFileError < StandardError
7
+
8
+ def initialize(msg="Error with specified ingest file.")
9
+ super(msg)
10
+ end
11
+
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,12 @@
1
+ require "dmao/ingesters/json/version"
2
+ require "dmao/ingesters/json/organisation_ingester"
3
+
4
+ module DMAO
5
+ module Ingesters
6
+ module JSON
7
+ module Ingesters
8
+
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,126 @@
1
+ require 'dmao/ingesters/generic/organisation_ingester'
2
+ require 'dmao/ingesters/json/errors/ingest_file_error'
3
+ require 'dmao/ingesters/logging/ingest_error_log'
4
+ require 'json'
5
+ require 'securerandom'
6
+
7
+ module DMAO
8
+ module Ingesters
9
+ module JSON
10
+
11
+ class OrganisationIngester < DMAO::Ingesters::Generic::OrganisationIngester
12
+
13
+ include DMAO::Ingesters::Logging::IngestErrorLog
14
+
15
+ VALID_INGESTER_OPTIONS = [:file]
16
+
17
+ def initialize(api_url=nil, api_token=nil, institution_id=nil)
18
+ super(api_url, api_token, institution_id)
19
+ @ignore_for_linking_uuids = []
20
+ create_logger
21
+ end
22
+
23
+ def ingest options={}
24
+
25
+ options.keep_if { |k, _v| VALID_INGESTER_OPTIONS.include? k }
26
+
27
+ raise ArgumentError.new("No ingest options passed in, file option is required") if options.nil? || options.empty?
28
+ raise ArgumentError.new("No ingest options passed in, file option is required") if options[:file].nil? || options[:file].empty?
29
+
30
+ organisation_units = parse_json_file options[:file]
31
+
32
+ ingest_organisation_units organisation_units
33
+ link_organisation_units organisation_units
34
+
35
+ close_log_file
36
+
37
+ ingest_successful?
38
+
39
+ end
40
+
41
+ private
42
+
43
+ def ingest_successful?
44
+ logged_errors? ? false : true
45
+ end
46
+
47
+ def parse_json_file filepath
48
+
49
+ begin
50
+
51
+ file = File.read(filepath)
52
+
53
+ organisation_units = ::JSON.parse(file)["organisation_units"]
54
+
55
+ rescue Errno::ENOENT
56
+ raise DMAO::Ingesters::JSON::Errors::IngestFileError.new "Error reading file no such file or directory @ #{filepath}"
57
+ rescue ::JSON::ParserError
58
+ raise DMAO::Ingesters::JSON::Errors::IngestFileError.new "Error reading file, invalid json data in #{filepath}"
59
+ end
60
+
61
+ if organisation_units.nil? || organisation_units.empty?
62
+ raise DMAO::Ingesters::JSON::Errors::IngestFileError.new "Error with JSON data, no organisation units array defined in #{filepath}"
63
+ end
64
+
65
+ organisation_units
66
+
67
+ end
68
+
69
+ def ingest_organisation_units organisation_units
70
+
71
+ organisation_units.each do |unit|
72
+
73
+ details = {
74
+ name: unit["details"]["name"],
75
+ description: unit["details"]["description"],
76
+ url: unit["details"]["url"],
77
+ system_uuid: unit["system"]["uuid"],
78
+ system_modified_at: unit["system"]["modified_at"],
79
+ isni: unit["details"]["isni"],
80
+ unit_type: unit["details"]["type"]
81
+ }
82
+
83
+ begin
84
+ ingest_organisation_unit details
85
+ rescue ::DMAO::Ingesters::Errors::EmptyAttributes, ::DMAO::Ingesters::Errors::IngestOrganisationUnitError => e
86
+ log_ingest_error details[:system_uuid], e.message
87
+ ignore_for_linking details[:system_uuid]
88
+ end
89
+
90
+ end
91
+
92
+ end
93
+
94
+ def link_organisation_units organisation_units
95
+
96
+ organisation_units.each do |unit|
97
+
98
+ next if ignore_for_linking? unit["system"]["uuid"]
99
+
100
+ next if unit["parent"]["uuid"].nil? || unit["parent"]["uuid"].empty?
101
+
102
+ next if ignore_for_linking? unit["parent"]["uuid"]
103
+
104
+ begin
105
+ link_child_to_parent unit["system"]["uuid"], unit["parent"]["uuid"]
106
+ rescue ::DMAO::Ingesters::Errors::LinkOrganisationUnitError, ::DMAO::Ingesters::Errors::IngestOrganisationUnitError => e
107
+ log_ingest_error unit["system"]["uuid"], e.message
108
+ end
109
+
110
+ end
111
+
112
+ end
113
+
114
+ def ignore_for_linking system_uuid
115
+ @ignore_for_linking_uuids << system_uuid
116
+ end
117
+
118
+ def ignore_for_linking? system_uuid
119
+ @ignore_for_linking_uuids.include? system_uuid
120
+ end
121
+
122
+ end
123
+
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,7 @@
1
+ module DMAO
2
+ module Ingesters
3
+ module JSON
4
+ VERSION = "0.1.0"
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,15 @@
1
+ module DMAO
2
+ module Ingesters
3
+ module JWTErrors
4
+
5
+ class InvalidJWTApiBaseUrl < StandardError
6
+
7
+ def initialize(msg="JWT Api base url is not set please check the config file.")
8
+ super(msg)
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module DMAO
2
+ module Ingesters
3
+ module JWTErrors
4
+
5
+ class InvalidJWTApiToken < StandardError
6
+
7
+ def initialize(msg="JWT Api token is not set please check the config file.")
8
+ super(msg)
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module DMAO
2
+ module Ingesters
3
+ module JWTErrors
4
+
5
+ class InvalidJWTIssuer < StandardError
6
+
7
+ def initialize(msg="JWT Issuer is not set please check the config file.")
8
+ super(msg)
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ module DMAO
2
+ module Ingesters
3
+ module JWTErrors
4
+
5
+ class UnableToIssueToken < StandardError
6
+
7
+ def initialize()
8
+ super
9
+ end
10
+
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,51 @@
1
+ require 'json'
2
+ require 'rest-client'
3
+ require 'dmao/ingesters/jwt_errors/invalid_jwt_api_base_url'
4
+ require 'dmao/ingesters/jwt_errors/invalid_jwt_api_token'
5
+ require 'dmao/ingesters/jwt_errors/invalid_jwt_issuer'
6
+ require 'dmao/ingesters/jwt_errors/unable_to_issue_token'
7
+
8
+ module DMAO
9
+ module Ingesters
10
+
11
+ class JWTService
12
+
13
+ def self.request_jwt_for_institution_ingest institution_id, ingest_id
14
+
15
+ api_base_url = ENV['DMAO_JWT_API_URL']
16
+ api_token = ENV['DMAO_JWT_API_TOKEN']
17
+ jwt_issuer = ENV['DMAO_JWT_ISSUER']
18
+
19
+ raise DMAO::Ingesters::JWTErrors::InvalidJWTApiBaseUrl if api_base_url.nil? || api_base_url.empty?
20
+ raise DMAO::Ingesters::JWTErrors::InvalidJWTApiToken if api_token.nil? || api_token.empty?
21
+ raise DMAO::Ingesters::JWTErrors::InvalidJWTIssuer if jwt_issuer.nil? || jwt_issuer.empty?
22
+
23
+ subject = "dmao_ingest_#{ingest_id}"
24
+ custom_claims = {
25
+ institution_id: institution_id,
26
+ roles: ['institution_admin']
27
+ }
28
+
29
+ request_attributes = {
30
+ subject: subject,
31
+ custom_claims: custom_claims
32
+ }
33
+
34
+ rest_client = RestClient::Resource.new(api_base_url, headers: { content_type: :json, authorization: "Bearer #{api_token}" })
35
+
36
+ begin
37
+ response = rest_client["#{jwt_issuer}/tokens"].post request_attributes.to_json
38
+ rescue RestClient::NotFound
39
+ raise DMAO::Ingesters::JWTErrors::InvalidJWTIssuer.new('JWT Issuer not found at JWT Service')
40
+ rescue RestClient::UnprocessableEntity, RestClient::InternalServerError
41
+ raise DMAO::Ingesters::JWTErrors::UnableToIssueToken
42
+ end
43
+
44
+ ::JSON.parse(response.body)["token"]
45
+
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+ end
@@ -0,0 +1,17 @@
1
+ module DMAO
2
+ module Ingesters
3
+ module Logging
4
+ module Errors
5
+
6
+ class BadFileName < StandardError
7
+
8
+ def initialize(msg="Filename not specified")
9
+ super(msg)
10
+ end
11
+
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,17 @@
1
+ module DMAO
2
+ module Ingesters
3
+ module Logging
4
+ module Errors
5
+
6
+ class LoggerNotInitialized < StandardError
7
+
8
+ def initialize(msg="Logger is not initialized")
9
+ super(msg)
10
+ end
11
+
12
+ end
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,46 @@
1
+ require 'dmao/ingesters/logging/ingest_logger'
2
+ require 'dmao/ingesters/logging/errors/logger_not_initialized'
3
+
4
+ module DMAO
5
+ module Ingesters
6
+ module Logging
7
+
8
+ module IngestErrorLog
9
+
10
+ def create_logger
11
+ time = Time.now
12
+ time_formatted = time.strftime("%Y-%m-%d_%H:%M:%S")
13
+ filename = "ingest_#{time_formatted}"
14
+ @logged_errors = false
15
+ @logger = DMAO::Ingesters::Logging::IngestLogger.new filename
16
+ end
17
+
18
+ def log_ingest_error system_uuid, error_message
19
+
20
+ raise DMAO::Ingesters::Logging::Errors::LoggerNotInitialized.new if @logger.nil?
21
+
22
+ @logged_errors = true
23
+
24
+ @logger.error("#{system_uuid} - #{error_message}")
25
+
26
+ end
27
+
28
+ def close_log_file
29
+ raise DMAO::Ingesters::Logging::Errors::LoggerNotInitialized.new if @logger.nil?
30
+ @logger.close
31
+ end
32
+
33
+ def get_log_file_path
34
+ raise DMAO::Ingesters::Logging::Errors::LoggerNotInitialized.new if @logger.nil?
35
+ @logger.log_file_path
36
+ end
37
+
38
+ def logged_errors?
39
+ @logged_errors
40
+ end
41
+
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,40 @@
1
+ require 'logger'
2
+ require 'dmao/ingesters/logging/errors/bad_file_name'
3
+
4
+ module DMAO
5
+ module Ingesters
6
+ module Logging
7
+
8
+ class IngestLogger < Logger
9
+
10
+ attr_reader :log_file_path
11
+
12
+ def initialize filename=nil
13
+
14
+ raise DMAO::Ingesters::Logging::Errors::BadFileName.new("Filename needs to be specified for ingest logger") if filename.nil? || filename.empty?
15
+
16
+ log_directory = ENV['TEMP_INGEST_LOG_DIRECTORY'] || '/tmp/'
17
+
18
+ @log_file_path = log_directory + filename + '.log'
19
+
20
+ super(@log_file_path)
21
+
22
+ self.formatter = formatter
23
+
24
+ self
25
+
26
+ end
27
+
28
+ def formatter
29
+ Proc.new{|severity, time, _progname, msg|
30
+ formatted_severity = sprintf("%-5s", severity.to_s)
31
+ formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")
32
+ "[#{formatted_severity} #{formatted_time}] #{msg.to_s.strip}\n"
33
+ }
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+ end
40
+ end
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dmao-json-ingesters
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Stephen Robinson
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-03-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: dmao-generic-ingesters
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.2.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.2.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: rest-client
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.13'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.13'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '5.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: mocha
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.1'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.1'
97
+ - !ruby/object:Gem::Dependency
98
+ name: codeclimate-test-reporter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: vcr
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 3.0.3
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 3.0.3
125
+ - !ruby/object:Gem::Dependency
126
+ name: webmock
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '2.1'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '2.1'
139
+ description: ''
140
+ email:
141
+ - library.dit@lancaster.ac.uk
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - ".gitignore"
147
+ - Gemfile
148
+ - README.md
149
+ - Rakefile
150
+ - bin/console
151
+ - bin/setup
152
+ - dmao-json-ingesters.gemspec
153
+ - lib/dmao/ingesters/json/errors/ingest_file_error.rb
154
+ - lib/dmao/ingesters/json/ingesters.rb
155
+ - lib/dmao/ingesters/json/organisation_ingester.rb
156
+ - lib/dmao/ingesters/json/version.rb
157
+ - lib/dmao/ingesters/jwt_errors/invalid_jwt_api_base_url.rb
158
+ - lib/dmao/ingesters/jwt_errors/invalid_jwt_api_token.rb
159
+ - lib/dmao/ingesters/jwt_errors/invalid_jwt_issuer.rb
160
+ - lib/dmao/ingesters/jwt_errors/unable_to_issue_token.rb
161
+ - lib/dmao/ingesters/jwt_service.rb
162
+ - lib/dmao/ingesters/logging/errors/bad_file_name.rb
163
+ - lib/dmao/ingesters/logging/errors/logger_not_initialized.rb
164
+ - lib/dmao/ingesters/logging/ingest_error_log.rb
165
+ - lib/dmao/ingesters/logging/ingest_logger.rb
166
+ homepage: https://github.com/lulibrary/dmao-json-ingesters
167
+ licenses: []
168
+ metadata:
169
+ allowed_push_host: https://rubygems.org
170
+ post_install_message:
171
+ rdoc_options: []
172
+ require_paths:
173
+ - lib
174
+ required_ruby_version: !ruby/object:Gem::Requirement
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: '0'
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - ">="
182
+ - !ruby/object:Gem::Version
183
+ version: '0'
184
+ requirements: []
185
+ rubyforge_project:
186
+ rubygems_version: 2.5.1
187
+ signing_key:
188
+ specification_version: 4
189
+ summary: JSON ingesters for DMA Online
190
+ test_files: []