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.
@@ -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
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
@@ -0,0 +1,8 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ AllCops:
4
+ TargetRubyVersion: 2.3
5
+
6
+ Style/MixinUsage:
7
+ Exclude:
8
+ - lib/rialto/etl/configs/stanford_organizations.rb
@@ -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
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ sudo: false
3
+ dist: trusty
4
+ cache:
5
+ bundler: true
6
+ rvm:
7
+ - 2.4.2
8
+ before_install: gem install bundler
data/Gemfile ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ # Specify your gem's dependencies in rialto-etl.gemspec
6
+ gemspec
7
+
8
+ gem 'pry'
9
+ gem 'pry-byebug'
@@ -0,0 +1,64 @@
1
+ # Rialto::Etl
2
+
3
+ [![Build Status](https://travis-ci.org/sul-dlss-labs/rialto-etl.svg?branch=master)](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.
@@ -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
@@ -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
@@ -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
@@ -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,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
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rialto/etl/version'
4
+ require 'rialto/etl/extractors'
5
+ require 'rialto/etl/transformers'
6
+
7
+ module Rialto
8
+ # The top-level Rialto::Etl module
9
+ module Etl
10
+ end
11
+ end
@@ -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,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rialto/etl/extractors/stanford_researchers'
4
+ require 'rialto/etl/extractors/stanford_organizations'
5
+
6
+ module Rialto
7
+ module Etl
8
+ # A module to hold extractors
9
+ module Extractors
10
+ end
11
+ end
12
+ end
@@ -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,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rialto/etl/transformers/stanford_organizations_to_vivo'
4
+
5
+ module Rialto
6
+ module Etl
7
+ # A module to hold transformers
8
+ module Transformers
9
+ end
10
+ end
11
+ 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,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Rialto
4
+ module Etl
5
+ VERSION = '0.0.1'
6
+ end
7
+ 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'
@@ -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
+
@@ -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: []