-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
adds translation map generator for floor locations
- Loading branch information
Showing
8 changed files
with
310 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
149 changes: 149 additions & 0 deletions
149
umich_catalog_indexing/lib/jobs/translation_map_generator/floor_locations.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,149 @@ | ||
require "googleauth" | ||
require "google/apis/sheets_v4" | ||
|
||
module Jobs | ||
module TranslationMapGenerator | ||
module FloorLocations | ||
class << self | ||
include FileWriter | ||
# @returns [String] name of the translation map | ||
def name | ||
"Floor Locations" | ||
end | ||
|
||
# @returns [String] where in the translation map directory the file | ||
# should go | ||
def file_path | ||
File.join("umich", "floor_locations.json") | ||
end | ||
|
||
# @returns [String] YAML string of translation map | ||
def generate | ||
fetch.to_json | ||
end | ||
|
||
def fetch | ||
client = Google::Apis::SheetsV4::SheetsService.new | ||
scope = "https://www.googleapis.com/auth/spreadsheets.readonly" | ||
authorizer = Google::Auth::ServiceAccountCredentials.make_creds( | ||
json_key_io: StringIO.new(S.google_api_credentials), | ||
scope: scope | ||
) | ||
client.authorization = authorizer | ||
range = "Sheet1!A2:G100" | ||
data = client.get_spreadsheet_values(S.floor_location_spreadsheet_id, range).values | ||
_generate_data_structure(data) | ||
end | ||
|
||
def _generate_data_structure(data) | ||
output = {} | ||
data.each do |row| | ||
next if row[0].nil? | ||
fl = FloorLocation.new(row) | ||
output[fl.library] ||= {fl.location => []} | ||
output[fl.library][fl.location] ||= [] | ||
output[fl.library][fl.location].push(fl.to_h) | ||
end | ||
output | ||
end | ||
end | ||
|
||
class FloorLocation | ||
attr_reader :library, :location, :text, :code | ||
def initialize(data) | ||
@library = data[0].strip | ||
@location = data[1].strip | ||
@call_number_range = _clean_call_number_range(data[2]) | ||
@code = data[5].strip | ||
@text = data[6].strip | ||
@data = data | ||
end | ||
|
||
def call_number_start | ||
return nil if type == "Everything" | ||
|
||
cn = @call_number_range[0] | ||
return cn.to_f if type == "Dewey" | ||
|
||
if _music_match?(cn) | ||
cn = _music_call_number(cn) | ||
elsif _asia_match?(cn) | ||
cn = _asia_call_number(cn) | ||
elsif _number_ending?(cn) | ||
cn = _number_ending_call_number(cn) | ||
end | ||
cn.gsub(/\s+/, "") | ||
end | ||
|
||
def call_number_end | ||
return nil if type == "Everything" | ||
|
||
cn = @call_number_range[1] || @call_number_range[0] | ||
return (cn + ".9999").to_f if type == "Dewey" | ||
|
||
if _music_match?(cn) | ||
cn = _music_call_number(cn) | ||
elsif _asia_match?(cn) | ||
cn = _asia_call_number(cn) | ||
elsif _number_ending?(cn) | ||
cn = _number_ending_call_number(cn) | ||
end | ||
|
||
(cn + "z").gsub(/\s+/, "") | ||
end | ||
|
||
def type | ||
if @call_number_range.empty? | ||
"Everything" | ||
elsif @call_number_range[0].match?(/^\d/) | ||
"Dewey" | ||
else | ||
"LC" | ||
end | ||
end | ||
|
||
def to_h | ||
{ | ||
"library" => library, | ||
"collection" => location, | ||
"start" => call_number_start, | ||
"end" => call_number_end, | ||
"floor_key" => code, | ||
"text" => text, | ||
"type" => type | ||
} | ||
end | ||
|
||
def _clean_call_number_range(str) | ||
str.downcase.split(/\s+-\s+/).map { |x| x.strip } | ||
end | ||
|
||
def _music_match?(cn) | ||
library == "MUSIC" && cn.match?(/^m/) | ||
end | ||
|
||
def _music_call_number(cn) | ||
parts = cn.split(/\s+/) | ||
"#{parts[0]}000#{parts[1]}.00000#{parts[2]}" | ||
end | ||
|
||
def _asia_match?(cn) | ||
location == "ASIA" && cn.match?(".") | ||
end | ||
|
||
def _asia_call_number(cn) | ||
parts = cn.split(/\s+/) | ||
"#{parts[0]}0#{parts[1]}000" | ||
end | ||
|
||
def _number_ending?(cn) | ||
cn.match?(/\d$/) | ||
end | ||
|
||
def _number_ending_call_number(cn) | ||
cn + ".00000" | ||
end | ||
end | ||
end | ||
end | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
umich_catalog_indexing/lib/translation_maps/umich/new_floor_locations.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{"HATCH":{"GRAD":[{"library":"HATCH","collection":"GRAD","start":"ac","end":"amz","floor_key":"1N","text":"1 North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"ap","end":"azz","floor_key":"1N","text":"1 North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"b","end":"bdz","floor_key":"4A N","text":"4A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"bf","end":"bfz","floor_key":"6S","text":"6 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"bh","end":"bxz","floor_key":"4A N","text":"4A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"c","end":"ctz","floor_key":"4S","text":"4 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"d","end":"dbz","floor_key":"4S","text":"4 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"dc","end":"dxz","floor_key":"5S","text":"5 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"e","end":"ez","floor_key":"5S","text":"5 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"f","end":"fz","floor_key":"5S","text":"5 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"g","end":"gvz","floor_key":"6S","text":"6 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"h","end":"hd7999.00000z","floor_key":"BA N","text":"Basement A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"hd8000.00000","end":"hez","floor_key":"B N","text":"Basement North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"hf","end":"hjz","floor_key":"B N","text":"Basement North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"hm","end":"hmz","floor_key":"1A N","text":"1A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"hn","end":"hxz","floor_key":"1A N","text":"1A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"l","end":"ltz","floor_key":"6S","text":"6 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"m","end":"mtz","floor_key":"6S","text":"6 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"n","end":"nxz","floor_key":"6S","text":"6 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"p","end":"pmz","floor_key":"4S","text":"4 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"pn","end":"pnz","floor_key":"1N","text":"1 North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"pq","end":"pzz","floor_key":"4S","text":"4 South","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"q","end":"qrz","floor_key":"1A N","text":"1A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"r","end":"rzz","floor_key":"1A N","text":"1A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"s","end":"skz","floor_key":"1A N","text":"1A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"t","end":"txz","floor_key":"1A N","text":"1A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"u","end":"uhz","floor_key":"1A N","text":"1A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"v","end":"vmz","floor_key":"1A N","text":"1A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"z1.00000","end":"z1199.00000z","floor_key":"2A N","text":"2A North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":"z1200.00000","end":"zaz","floor_key":"2N","text":"2 North","type":"LC"},{"library":"HATCH","collection":"GRAD","start":350.0,"end":350.9999,"floor_key":"6S","text":"6 South","type":"Dewey"},{"library":"HATCH","collection":"GRAD","start":800.0,"end":899.9999,"floor_key":"3S","text":"3 South","type":"Dewey"}],"ASIA":[{"library":"HATCH","collection":"ASIA","start":"a0000","end":"bl0000z","floor_key":"3 N","text":"3 North","type":"LC"},{"library":"HATCH","collection":"ASIA","start":"bm0000","end":"ct0000z","floor_key":"3A N","text":"3A North","type":"LC"},{"library":"HATCH","collection":"ASIA","start":"d0000","end":"ds0856.7000z","floor_key":"3A N","text":"3A North","type":"LC"},{"library":"HATCH","collection":"ASIA","start":"ds0856.72000","end":"dx0000z","floor_key":"4 N","text":"4 North","type":"LC"},{"library":"HATCH","collection":"ASIA","start":"e0000","end":"z0000z","floor_key":"4 N","text":"4 North","type":"LC"}]},"AAEL":{"BKS":[{"library":"AAEL","collection":"BKS","start":"a","end":"na6999.00000z","floor_key":"3","text":"3rd Floor","type":"LC"},{"library":"AAEL","collection":"BKS","start":"na7000.00000","end":"zaz","floor_key":"2","text":"2nd Floor","type":"LC"}],"PER":[{"library":"AAEL","collection":"PER","start":"a","end":"na6999.00000z","floor_key":"3","text":"3rd Floor","type":"LC"},{"library":"AAEL","collection":"PER","start":"na7000.00000","end":"zaz","floor_key":"2","text":"2nd Floor","type":"LC"}],"OVR":[{"library":"AAEL","collection":"OVR","start":"a","end":"zaz","floor_key":"2","text":"2nd Floor","type":"LC"}]},"MUSIC":{"NONE":[{"library":"MUSIC","collection":"NONE","start":"ac","end":"lhz","floor_key":"4","text":"4th Floor","type":"LC"},{"library":"MUSIC","collection":"NONE","start":"m0001.00000","end":"m0003000.00000z","floor_key":"4","text":"4th Floor","type":"LC"},{"library":"MUSIC","collection":"NONE","start":"ml0001.00000","end":"ml0005.00000.m8443z","floor_key":"4","text":"4th Floor","type":"LC"},{"library":"MUSIC","collection":"NONE","start":"ml0005.00000.m8445","end":"zz","floor_key":"5","text":"5th Floor","type":"LC"}]},"FINE":{"FOLIO":[{"library":"FINE","collection":"FOLIO","start":"a","end":"zz","floor_key":"1","text":"1st Floor","type":"LC"}],"MAIN":[{"library":"FINE","collection":"MAIN","start":"nb","end":"nxz","floor_key":"1","text":"1st Floor","type":"LC"},{"library":"FINE","collection":"MAIN","start":"a","end":"naz","floor_key":"2","text":"2nd Floor","type":"LC"}],"PER":[{"library":"FINE","collection":"PER","start":"a","end":"zz","floor_key":"1","text":"1st Floor","type":"LC"}],"PERC":[{"library":"FINE","collection":"PERC","start":"a","end":"zz","floor_key":"2","text":"2nd Floor","type":"LC"}],"REF":[{"library":"FINE","collection":"REF","start":"a","end":"zz","floor_key":"2","text":"2nd Floor","type":"LC"}]},"Shapiro":{"UGL":[{"library":"Shapiro","collection":"UGL","start":"a","end":"bxz","floor_key":"B","text":"Basement","type":"LC"},{"library":"Shapiro","collection":"UGL","start":"c","end":"hz","floor_key":"B","text":"Basement","type":"LC"},{"library":"Shapiro","collection":"UGL","start":"j","end":"nz","floor_key":"B","text":"Basement","type":"LC"},{"library":"Shapiro","collection":"UGL","start":"p","end":"pzz","floor_key":"2","text":"2nd Floor","type":"LC"},{"library":"Shapiro","collection":"UGL","start":"q","end":"zaz","floor_key":"2","text":"2nd Floor","type":"LC"}],"SER":[{"library":"Shapiro","collection":"SER","start":"ae","end":"ta706.00000z","floor_key":"B","text":"Basement","type":"LC"}],"FLOW":[{"library":"Shapiro","collection":"FLOW","start":null,"end":null,"floor_key":"B","text":"Basement","type":"Everything"}]}} |
Oops, something went wrong.