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.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/Gemfile +4 -0
- data/README.md +36 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/dmao-json-ingesters.gemspec +42 -0
- data/lib/dmao/ingesters/json/errors/ingest_file_error.rb +17 -0
- data/lib/dmao/ingesters/json/ingesters.rb +12 -0
- data/lib/dmao/ingesters/json/organisation_ingester.rb +126 -0
- data/lib/dmao/ingesters/json/version.rb +7 -0
- data/lib/dmao/ingesters/jwt_errors/invalid_jwt_api_base_url.rb +15 -0
- data/lib/dmao/ingesters/jwt_errors/invalid_jwt_api_token.rb +15 -0
- data/lib/dmao/ingesters/jwt_errors/invalid_jwt_issuer.rb +15 -0
- data/lib/dmao/ingesters/jwt_errors/unable_to_issue_token.rb +15 -0
- data/lib/dmao/ingesters/jwt_service.rb +51 -0
- data/lib/dmao/ingesters/logging/errors/bad_file_name.rb +17 -0
- data/lib/dmao/ingesters/logging/errors/logger_not_initialized.rb +17 -0
- data/lib/dmao/ingesters/logging/ingest_error_log.rb +46 -0
- data/lib/dmao/ingesters/logging/ingest_logger.rb +40 -0
- metadata +190 -0
checksums.yaml
ADDED
@@ -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
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -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
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -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
|
data/bin/setup
ADDED
@@ -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,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,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,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: []
|