rialto-etl 0.0.1
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 +9 -0
- data/.rspec +2 -0
- data/.rubocop.yml +8 -0
- data/.rubocop_todo.yml +13 -0
- data/.travis.yml +8 -0
- data/Gemfile +9 -0
- data/README.md +64 -0
- data/Rakefile +18 -0
- data/bin/console +15 -0
- data/bin/extract +19 -0
- data/bin/setup +8 -0
- data/bin/transform +23 -0
- data/lib/rialto/etl.rb +11 -0
- data/lib/rialto/etl/configs/stanford_organizations.rb +26 -0
- data/lib/rialto/etl/extractors.rb +12 -0
- data/lib/rialto/etl/extractors/abstract_stanford_extractor.rb +86 -0
- data/lib/rialto/etl/extractors/stanford_organizations.rb +18 -0
- data/lib/rialto/etl/extractors/stanford_researchers.rb +18 -0
- data/lib/rialto/etl/stanford_organizations_json_reader.rb +27 -0
- data/lib/rialto/etl/transformers.rb +11 -0
- data/lib/rialto/etl/transformers/stanford_organizations_to_vivo.rb +33 -0
- data/lib/rialto/etl/version.rb +7 -0
- data/lib/translation_maps/stanford_organizations_to_vivo_types.yaml +5 -0
- data/mapping.md +22 -0
- data/rialto-etl.gemspec +29 -0
- metadata +167 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ce6dc39a28a8eaf343077ff27d0f8c2db190cdde
|
4
|
+
data.tar.gz: 0b0d5f057a895517ddd28948f474938b2bec9684
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: da68daa6efc58935ab2506d66a0331dd07806185d763f9eaa907df4280d349d6216264205a1c3e37da501f90a6cbbf11d1be819c08485875521c85f96f5fb417
|
7
|
+
data.tar.gz: 11d1b2a16c38e672a313f98caae41b1f0e43099062fd10af0ae2082d70d17b03974159cebd43d141d7bd43b94694f67ae11bbfa53800501692a6f9cd71fb3b63
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
data/.rubocop_todo.yml
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# This configuration was generated by
|
2
|
+
# `rubocop --auto-gen-config`
|
3
|
+
# on 2017-12-19 16:17:32 -0800 using RuboCop version 0.52.0.
|
4
|
+
# The point is for the user to remove these configuration records
|
5
|
+
# one by one as the offenses are removed from the code base.
|
6
|
+
# Note that changes in the inspected code, or installation of new
|
7
|
+
# versions of RuboCop, may require this file to be generated again.
|
8
|
+
|
9
|
+
# Offense count: 15
|
10
|
+
# Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
|
11
|
+
# URISchemes: http, https
|
12
|
+
Metrics/LineLength:
|
13
|
+
Max: 125
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
# Rialto::Etl
|
2
|
+
|
3
|
+
[](https://travis-ci.org/sul-dlss-labs/rialto-etl)
|
4
|
+
|
5
|
+
Rialto::Etl is a set of ETL tools for RIALTO, Stanford University Libraries' research intelligence project
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'rialto-etl'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install rialto-etl
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
### Extract
|
26
|
+
|
27
|
+
Run `bin/extract` to run a named extractor and print output to STDOUT:
|
28
|
+
|
29
|
+
$ bin/extract -s StanfordResearchers
|
30
|
+
{"count":10,"firstPage":true,"lastPage":false,"page":1,"totalCount":29089,"totalPages":2909,"values":[{"administrativeAppointments":[...
|
31
|
+
|
32
|
+
Note: if you need to run any of the extractors that inherit from `AbstractStanfordExtractor`, you will first need to obtain a token for the CAP API and set the `CAP_TOKEN` environment variable in your session.
|
33
|
+
|
34
|
+
### Transform
|
35
|
+
|
36
|
+
Run `bin/transform` to run a named transformer, based on [Traject](https://github.com/traject/traject), on a named input file and print output to STDOUT:
|
37
|
+
|
38
|
+
$ bin/transform -s StanfordOrganizationsToVivo -i stanford_organizations.json
|
39
|
+
{"@id":"http://authorities.stanford.edu/orgs#vice-provost-for-undergraduate-education/stanford-introductory-studies/freshman-and-sophomore-programs","@type":"http://vivoweb.org/ontology/core#Division","rdfs:label":"Freshman and Sophomore Programs","vivo:abbreviation":["FFQH"]}
|
40
|
+
|
41
|
+
### Load
|
42
|
+
|
43
|
+
TBD
|
44
|
+
|
45
|
+
## Help
|
46
|
+
|
47
|
+
$ bin/extract -h
|
48
|
+
Usage: bin/extract [options]
|
49
|
+
-n, --name NAME Name of the extractor to run (REQUIRED)
|
50
|
+
|
51
|
+
$ bin/transform -h
|
52
|
+
Usage: bin/transform [options]
|
53
|
+
-n, --name NAME Name of the transformer to run (REQUIRED)
|
54
|
+
-i, --input-file FILENAME Name of file holding data to be transformed (REQUIRED)
|
55
|
+
|
56
|
+
## Development
|
57
|
+
|
58
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
59
|
+
|
60
|
+
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).
|
61
|
+
|
62
|
+
## Contributing
|
63
|
+
|
64
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/sul-dlss-labs/rialto-etl.
|
data/Rakefile
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
require 'rubocop/rake_task'
|
6
|
+
|
7
|
+
desc 'Run style checker'
|
8
|
+
RuboCop::RakeTask.new(:rubocop) do |task|
|
9
|
+
task.fail_on_error = true
|
10
|
+
end
|
11
|
+
|
12
|
+
RSpec::Core::RakeTask.new(:spec)
|
13
|
+
|
14
|
+
task ci: [:rubocop] do
|
15
|
+
Rake::Task['spec'].invoke
|
16
|
+
end
|
17
|
+
|
18
|
+
task default: :ci
|
data/bin/console
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'rialto/etl'
|
6
|
+
|
7
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
8
|
+
# with your gem easier. You can also use a different console, if you like.
|
9
|
+
|
10
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
11
|
+
# require "pry"
|
12
|
+
# Pry.start
|
13
|
+
|
14
|
+
require 'irb'
|
15
|
+
IRB.start
|
data/bin/extract
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'optparse'
|
6
|
+
require 'rialto/etl'
|
7
|
+
|
8
|
+
options = {}
|
9
|
+
|
10
|
+
OptionParser.new do |parser|
|
11
|
+
parser.banner = 'Usage: bin/extract [options]'
|
12
|
+
parser.on('-n', '--name NAME', 'Name of the extractor to run (REQUIRED)') do |value|
|
13
|
+
options[:name] = value
|
14
|
+
end
|
15
|
+
end.parse!
|
16
|
+
|
17
|
+
raise OptionParser::MissingArgument, '-n NAME' unless options[:name]
|
18
|
+
|
19
|
+
puts Rialto::Etl::Extractors.const_get(options[:name]).new.extract
|
data/bin/setup
ADDED
data/bin/transform
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'bundler/setup'
|
5
|
+
require 'optparse'
|
6
|
+
require 'rialto/etl'
|
7
|
+
|
8
|
+
options = {}
|
9
|
+
|
10
|
+
OptionParser.new do |parser|
|
11
|
+
parser.banner = 'Usage: bin/transform [options]'
|
12
|
+
parser.on('-n', '--name NAME', 'Name of the transformer to run (REQUIRED)') do |value|
|
13
|
+
options[:name] = value
|
14
|
+
end
|
15
|
+
parser.on('-i', '--input-file FILENAME', 'Name of file holding data to be transformed (REQUIRED)') do |value|
|
16
|
+
options[:input] = value
|
17
|
+
end
|
18
|
+
end.parse!
|
19
|
+
|
20
|
+
raise OptionParser::MissingArgument, '-n NAME' unless options[:name]
|
21
|
+
raise OptionParser::MissingArgument, '-i FILENAME' unless options[:input]
|
22
|
+
|
23
|
+
Rialto::Etl::Transformers.const_get(options[:name]).new(input: options[:input]).transform
|
data/lib/rialto/etl.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
extend TrajectPlus::Macros
|
4
|
+
extend TrajectPlus::Macros::JSON
|
5
|
+
|
6
|
+
settings do
|
7
|
+
provide 'writer_class_name', 'JsonWriter'
|
8
|
+
provide 'reader_class_name', 'Rialto::Etl::StanfordOrganizationsJsonReader'
|
9
|
+
end
|
10
|
+
|
11
|
+
# context_object = {
|
12
|
+
# '@context' => {
|
13
|
+
# obo: 'http://purl.obolibrary.org/obo/',
|
14
|
+
# rdfs: 'http://www.w3.org/2000/01/rdf-schema#',
|
15
|
+
# vcard: 'http://www.w3.org/2006/vcard/ns#',
|
16
|
+
# vivo: 'http://vivoweb.org/ontology/core#',
|
17
|
+
# stanford: 'http://authorities.stanford.edu/orgs#'
|
18
|
+
# }
|
19
|
+
# }
|
20
|
+
|
21
|
+
# puts context_object.to_json
|
22
|
+
to_field '@id', extract_json('$.alias'), transform: transform(prepend: 'http://authorities.stanford.edu/orgs#'), single: true
|
23
|
+
to_field '@type', extract_json('$.type', translation_map: 'stanford_organizations_to_vivo_types'), single: true
|
24
|
+
to_field 'rdfs:label', extract_json('$.name'), single: true
|
25
|
+
to_field 'rdfs:seeAlso', extract_json('$.url'), single: true
|
26
|
+
to_field 'vivo:abbreviation', extract_json('$.orgCodes'), single: true
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'faraday'
|
4
|
+
require 'openssl'
|
5
|
+
require 'base64'
|
6
|
+
require 'json'
|
7
|
+
|
8
|
+
module Rialto
|
9
|
+
module Etl
|
10
|
+
module Extractors
|
11
|
+
# Abstract class hitting Stanford APIs using Stanford authz
|
12
|
+
class AbstractStanfordExtractor
|
13
|
+
attr_reader :access_token_expiry_time
|
14
|
+
|
15
|
+
def extract
|
16
|
+
raise NotImplementedError, 'Implement #extract in a child class'
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def client
|
22
|
+
connection(uri: 'https://api.stanford.edu').tap do |conn|
|
23
|
+
conn.headers['Authorization'] = access_token
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def connection(uri:)
|
28
|
+
Faraday.new(uri, headers: connection_headers) do |connection|
|
29
|
+
connection.request :retry, max: 3, interval: 0.8, interval_randomness: 0.2, backoff_factor: 2
|
30
|
+
connection.ssl.update(verify: true, verify_mode: OpenSSL::SSL::VERIFY_PEER)
|
31
|
+
connection.use Faraday::Response::RaiseError
|
32
|
+
connection.adapter :httpclient
|
33
|
+
connection.options.timeout = 500
|
34
|
+
connection.options.open_timeout = 10
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def connection_headers
|
39
|
+
{
|
40
|
+
accept: 'application/json',
|
41
|
+
content_type: 'application/json'
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def access_token
|
46
|
+
reset_access_token! if token_expired?
|
47
|
+
@access_token ||= begin
|
48
|
+
response = auth_client.get '?grant_type=client_credentials'
|
49
|
+
raise 'Failed to authenticate' unless response.success?
|
50
|
+
auth_data = JSON.parse(response.body)
|
51
|
+
reset_expiry_time!(expires_in: auth_data['expires_in'])
|
52
|
+
"Bearer #{auth_data['access_token']}"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def reset_access_token!
|
57
|
+
@access_token = nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def token_expired?
|
61
|
+
access_token_expiry_time < current_time
|
62
|
+
rescue NoMethodError
|
63
|
+
true
|
64
|
+
end
|
65
|
+
|
66
|
+
def reset_expiry_time!(expires_in:)
|
67
|
+
@access_token_expiry_time = current_time + expires_in.to_i
|
68
|
+
end
|
69
|
+
|
70
|
+
def current_time
|
71
|
+
Time.local(*Time.now).to_i
|
72
|
+
end
|
73
|
+
|
74
|
+
def auth_client
|
75
|
+
@auth_client ||= connection(uri: 'https://authz.stanford.edu/oauth/token').tap do |conn|
|
76
|
+
conn.headers['Authorization'] = "Basic #{auth_code}"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def auth_code
|
81
|
+
@auth_code ||= Base64.strict_encode64("sul:#{ENV['CAP_TOKEN']}")
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rialto/etl/extractors/abstract_stanford_extractor'
|
4
|
+
|
5
|
+
module Rialto
|
6
|
+
module Etl
|
7
|
+
module Extractors
|
8
|
+
# Stanford CAP API for orgs
|
9
|
+
class StanfordOrganizations < AbstractStanfordExtractor
|
10
|
+
def extract
|
11
|
+
client.get('/cap/v1/orgs/stanford?p=1&ps=10').body
|
12
|
+
rescue StandardError => exception
|
13
|
+
puts "Error: #{exception.message}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rialto/etl/extractors/abstract_stanford_extractor'
|
4
|
+
|
5
|
+
module Rialto
|
6
|
+
module Etl
|
7
|
+
module Extractors
|
8
|
+
# Stanford Profiles API
|
9
|
+
class StanfordResearchers < AbstractStanfordExtractor
|
10
|
+
def extract
|
11
|
+
client.get('/profiles/v1?p=1&ps=10').body
|
12
|
+
rescue StandardError => exception
|
13
|
+
puts "Error: #{exception.message}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Rialto
|
4
|
+
module Etl
|
5
|
+
# Read JSON that maps to Stanford orgs
|
6
|
+
class StanfordOrganizationsJsonReader < TrajectPlus::JsonReader
|
7
|
+
def each(&block)
|
8
|
+
yield_children(json, block)
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def yield_children(hash, block)
|
14
|
+
block.call(hash)
|
15
|
+
children = children_path(hash)
|
16
|
+
return if children.blank?
|
17
|
+
children.each do |child|
|
18
|
+
yield_children(child, block)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def children_path(hash)
|
23
|
+
JsonPath.on(hash, '$.children').first
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'traject_plus'
|
4
|
+
require 'rialto/etl/stanford_organizations_json_reader'
|
5
|
+
|
6
|
+
module Rialto
|
7
|
+
module Etl
|
8
|
+
module Transformers
|
9
|
+
# Transformer turning Stanford org info into Vivo format
|
10
|
+
class StanfordOrganizationsToVivo
|
11
|
+
attr_reader :input
|
12
|
+
|
13
|
+
def initialize(input:)
|
14
|
+
@input = input
|
15
|
+
end
|
16
|
+
|
17
|
+
def transform
|
18
|
+
File.open(input, 'r') do |stream|
|
19
|
+
transformer.process(stream)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def transformer
|
26
|
+
@transformer ||= Traject::Indexer.new.tap do |indexer|
|
27
|
+
indexer.load_config_file('lib/rialto/etl/configs/stanford_organizations.rb')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,5 @@
|
|
1
|
+
DIVISION: 'http://vivoweb.org/ontology/core#Division'
|
2
|
+
SUB_DIVISION: 'http://vivoweb.org/ontology/core#Division'
|
3
|
+
ROOT: 'http://vivoweb.org/ontology/core#University'
|
4
|
+
SCHOOL: 'http://vivoweb.org/ontology/core#School'
|
5
|
+
DEPARTMENT: 'http://vivoweb.org/ontology/core#Department'
|
data/mapping.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
TODO: wrap below mappings in @graph => {}
|
2
|
+
|
3
|
+
each mapping should include: @id, @type, rdfs:label, one or more obo:BFO\_0000050 or obo:BFO\_0000051
|
4
|
+
|
5
|
+
alias (string) => @id http://authorities.stanford.edu/orgs#{alias}
|
6
|
+
browsable (boolean) => ignore
|
7
|
+
children (array) => keep track of parent, iterate over values (for each obo:BFO\_0000050/partOf) and map, keep track of children for obo:BFO\_0000051/hasPart
|
8
|
+
name (string) => rdfs:label
|
9
|
+
onboarding (boolean) => ignore
|
10
|
+
orgCodes (array) => vivo:abbreviation
|
11
|
+
type (string) => see type mappings
|
12
|
+
url (string) => rdfs:seeAlso
|
13
|
+
|
14
|
+
type mappings
|
15
|
+
|
16
|
+
DIVISION @type: http://vivoweb.org/ontology/core#Division
|
17
|
+
SUB_DIVISION @type: http://vivoweb.org/ontology/core#Division
|
18
|
+
ROOT @type: http://vivoweb.org/ontology/core#University
|
19
|
+
SCHOOL @type: http://vivoweb.org/ontology/core#School
|
20
|
+
DEPARTMENT @type: http://vivoweb.org/ontology/core#Department
|
21
|
+
|
22
|
+
|
data/rialto-etl.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'rialto/etl/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'rialto-etl'
|
9
|
+
spec.version = Rialto::Etl::VERSION
|
10
|
+
spec.authors = ['Michael J. Giarlo']
|
11
|
+
spec.email = ['mjgiarlo@stanford.edu']
|
12
|
+
|
13
|
+
spec.summary = "ETL tools for RIALTO, Stanford University Libraries' research intelligence project"
|
14
|
+
spec.homepage = 'https://github.com/sul-dlss-labs/rialto-etl'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = 'exe'
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'faraday'
|
22
|
+
spec.add_dependency 'httpclient'
|
23
|
+
spec.add_dependency 'traject_plus', '>= 0.0.2'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.11'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
27
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
28
|
+
spec.add_development_dependency 'rubocop', '~> 0.52.0'
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,167 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rialto-etl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael J. Giarlo
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-12-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: httpclient
|
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: traject_plus
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.0.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.0.2
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.11'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.11'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 0.52.0
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 0.52.0
|
111
|
+
description:
|
112
|
+
email:
|
113
|
+
- mjgiarlo@stanford.edu
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- ".rspec"
|
120
|
+
- ".rubocop.yml"
|
121
|
+
- ".rubocop_todo.yml"
|
122
|
+
- ".travis.yml"
|
123
|
+
- Gemfile
|
124
|
+
- README.md
|
125
|
+
- Rakefile
|
126
|
+
- bin/console
|
127
|
+
- bin/extract
|
128
|
+
- bin/setup
|
129
|
+
- bin/transform
|
130
|
+
- lib/rialto/etl.rb
|
131
|
+
- lib/rialto/etl/configs/stanford_organizations.rb
|
132
|
+
- lib/rialto/etl/extractors.rb
|
133
|
+
- lib/rialto/etl/extractors/abstract_stanford_extractor.rb
|
134
|
+
- lib/rialto/etl/extractors/stanford_organizations.rb
|
135
|
+
- lib/rialto/etl/extractors/stanford_researchers.rb
|
136
|
+
- lib/rialto/etl/stanford_organizations_json_reader.rb
|
137
|
+
- lib/rialto/etl/transformers.rb
|
138
|
+
- lib/rialto/etl/transformers/stanford_organizations_to_vivo.rb
|
139
|
+
- lib/rialto/etl/version.rb
|
140
|
+
- lib/translation_maps/stanford_organizations_to_vivo_types.yaml
|
141
|
+
- mapping.md
|
142
|
+
- rialto-etl.gemspec
|
143
|
+
homepage: https://github.com/sul-dlss-labs/rialto-etl
|
144
|
+
licenses: []
|
145
|
+
metadata: {}
|
146
|
+
post_install_message:
|
147
|
+
rdoc_options: []
|
148
|
+
require_paths:
|
149
|
+
- lib
|
150
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - ">="
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: '0'
|
155
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
requirements: []
|
161
|
+
rubyforge_project:
|
162
|
+
rubygems_version: 2.6.13
|
163
|
+
signing_key:
|
164
|
+
specification_version: 4
|
165
|
+
summary: ETL tools for RIALTO, Stanford University Libraries' research intelligence
|
166
|
+
project
|
167
|
+
test_files: []
|