traject_horizon 0.11.2 → 1.0.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/README.md +3 -0
- data/lib/traject/horizon_reader.rb +41 -12
- data/lib/traject_horizon/version.rb +1 -1
- data/test/horizon_unicode_escape_test.rb +21 -0
- metadata +42 -52
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2f8ac4a546bb69032c0da921fa9a749ef83a6d96
|
4
|
+
data.tar.gz: 530cc90de2a1eb2ffb52eda7601bbc5076be3bf7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d5e490f9706b94fa747b21c689255320b9cd96dfe6cd1b93c63d32952496e293a90f550d5a8449d87d4a05c39a8a59cd049399e004bd75f031a9a55048ffb718
|
7
|
+
data.tar.gz: a766c0d3a2418017d0dcfe562737b4b647bb28e8e9d05dad9fc55be617e6de69c53dcbdd415bb153e4e56de1ea8bdd3cb0599728ef5dc729f16c23049a00764b
|
data/README.md
CHANGED
@@ -54,6 +54,9 @@ settings do
|
|
54
54
|
# or "sqlserver:", including username on the end but not password:
|
55
55
|
provide "horizon.jdbc_url", "jdbc:jtds:sybase://horizonserver.university.edu:2025/horizon_db;user=esys"
|
56
56
|
|
57
|
+
# Instead of horizon.jdbc_url, you can also use individual
|
58
|
+
# horizon.host, horizon.port, horizon.database, horizon.user
|
59
|
+
|
57
60
|
# DB password in seperate setting
|
58
61
|
provide "horizon.jdbc_password", "drilg53"
|
59
62
|
|
@@ -18,7 +18,17 @@ module Traject
|
|
18
18
|
# it from logging. Eg: "jdbc:jtds:sybase://horizon.lib.univ.edu:2025/dbname;user=dbuser"
|
19
19
|
# * In command line, you'll have to use quotes: -s 'horizon.jdbc_url=jdbc:jtds:sybase://horizon.lib.univ.edu:2025/dbname;user=dbuser'
|
20
20
|
#
|
21
|
-
#
|
21
|
+
#
|
22
|
+
# [horizon.password] Password to use for JDBC connection. We'll try to suppress it from being logged.
|
23
|
+
#
|
24
|
+
# Instead of jdbc_url, you can provide all the other elements individually:
|
25
|
+
#
|
26
|
+
# [horizon.host]
|
27
|
+
# [horizon.port] (default 2025)
|
28
|
+
# [horizon.user]
|
29
|
+
# [horizon.database] (default 'horizon')
|
30
|
+
# [horizon.jtds_type] default 'sybase', or 'sqlserver'
|
31
|
+
#
|
22
32
|
#
|
23
33
|
# == What to export
|
24
34
|
#
|
@@ -129,7 +139,7 @@ module Traject
|
|
129
139
|
|
130
140
|
require_jars!
|
131
141
|
|
132
|
-
logger.info(" #{self.class.name} reading records from #{
|
142
|
+
logger.info(" #{self.class.name} reading records from #{jdbc_url(false)}")
|
133
143
|
end
|
134
144
|
|
135
145
|
# Requires marc4j and jtds, and java_import's some classes.
|
@@ -244,8 +254,8 @@ module Traject
|
|
244
254
|
|
245
255
|
# Turn Horizon's weird escaping into UTF8: <U+nnnn> where nnnn is a hex unicode
|
246
256
|
# codepoint, turn it UTF8 for that codepoint
|
247
|
-
if
|
248
|
-
text.gsub!(/\<U\+([0-9A-
|
257
|
+
if settings["horizon.codepoint_translate"].to_s == "true" && settings["horizon.destination_encoding"] == "UTF8"
|
258
|
+
text.gsub!(/\<U\+([0-9A-Fa-f]{4})\>/) do
|
249
259
|
[$1.hex].pack("U")
|
250
260
|
end
|
251
261
|
end
|
@@ -355,8 +365,7 @@ module Traject
|
|
355
365
|
record_batch.clear
|
356
366
|
|
357
367
|
rescue Exception => e
|
358
|
-
logger.fatal "HorizonReader, unexpected exception at bib id:#{current_bib_id}: #{
|
359
|
-
logger.fatal e.backtrace.join("/n")
|
368
|
+
logger.fatal "HorizonReader, unexpected exception at bib id:#{current_bib_id}: #{e}"
|
360
369
|
raise e
|
361
370
|
ensure
|
362
371
|
logger.info("HorizonReader: Closing all JDBC objects...")
|
@@ -623,16 +632,36 @@ module Traject
|
|
623
632
|
settings['horizon.source_encoding'] == "MARC8" && settings['horizon.destination_encoding'] == "UTF8"
|
624
633
|
end
|
625
634
|
|
635
|
+
# Looks up JDBC url from settings, either 'horizon.jdbc_url' if present,
|
636
|
+
# or individual settings. Will include password from `horizon.password`
|
637
|
+
# only if given a `true` arg -- leave false for output to logs, to keep
|
638
|
+
# password out of logs.
|
639
|
+
def jdbc_url(include_password=false)
|
640
|
+
url = if settings.has_key? "horizon.jdbc_url"
|
641
|
+
settings["horizon.jdbc_url"]
|
642
|
+
else
|
643
|
+
jtds_type = settings['horizon.jtds_type'] || 'sybase'
|
644
|
+
database = settings['horizon.database'] || 'horizon'
|
645
|
+
host = settings['horizon.host'] or raise ArgumentError.new("Need horizon.host setting, or horizon.jdbc_url")
|
646
|
+
port = settings['horizon.port'] || '2025'
|
647
|
+
user = settings['horizon.user'] or raise ArgumentError.new("Need horizon.user setting, or horizon.jdbc_url")
|
626
648
|
|
627
|
-
|
628
|
-
|
649
|
+
"jdbc:jtds:#{jtds_type}://#{host}:#{port}/#{database};user=#{user}"
|
650
|
+
end
|
629
651
|
|
630
|
-
|
631
|
-
|
632
|
-
url += ";password=#{
|
652
|
+
if include_password
|
653
|
+
password = settings['horizon.password'] or raise ArgumentError.new("Need horizon.password setting")
|
654
|
+
url += ";password=#{password}"
|
633
655
|
end
|
634
656
|
|
635
|
-
|
657
|
+
return url
|
658
|
+
end
|
659
|
+
|
660
|
+
|
661
|
+
def open_connection!
|
662
|
+
logger.debug("HorizonReader: Opening JDBC Connection at #{jdbc_url(false)} ...")
|
663
|
+
|
664
|
+
conn = java.sql.DriverManager.getConnection( jdbc_url(true) )
|
636
665
|
# If autocommit on, fetchSize later has no effect, and JDBC slurps
|
637
666
|
# the whole result set into memory, which we can not handle.
|
638
667
|
conn.setAutoCommit false
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Encoding: UTF-8
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
require 'traject'
|
6
|
+
require 'traject/horizon_reader'
|
7
|
+
|
8
|
+
describe "turning weird Horizon escape sequences into unicode" do
|
9
|
+
describe "convert_text" do
|
10
|
+
before do
|
11
|
+
@reader = Traject::HorizonReader.new(nil, {"horizon.host" => "example.com", "horizon.user" => "dummy"})
|
12
|
+
end
|
13
|
+
|
14
|
+
it "converts" do
|
15
|
+
converted = @reader.convert_text!("A hangul character: <U+1112>, okay<!>", org.marc4j.ErrorHandler.new)
|
16
|
+
assert_equal "A hangul character: ᄒ, okay<!>", converted
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
metadata
CHANGED
@@ -1,97 +1,86 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: traject_horizon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jonathan Rochkind
|
9
|
-
autorequire:
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2013-
|
11
|
+
date: 2013-10-21 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: traject
|
16
|
-
|
17
|
-
none: false
|
15
|
+
version_requirements: !ruby/object:Gem::Requirement
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
|
-
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
20
|
+
requirement: !ruby/object:Gem::Requirement
|
26
21
|
requirements:
|
27
|
-
- -
|
22
|
+
- - '>='
|
28
23
|
- !ruby/object:Gem::Version
|
29
24
|
version: '0'
|
25
|
+
prerelease: false
|
26
|
+
type: :runtime
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: marc-marc4j
|
32
|
-
|
33
|
-
none: false
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
|
-
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
42
35
|
requirements:
|
43
|
-
- -
|
36
|
+
- - '>='
|
44
37
|
- !ruby/object:Gem::Version
|
45
38
|
version: '0'
|
39
|
+
prerelease: false
|
40
|
+
type: :runtime
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: bundler
|
48
|
-
|
49
|
-
none: false
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
50
44
|
requirements:
|
51
45
|
- - ~>
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '1.3'
|
54
|
-
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
58
49
|
requirements:
|
59
50
|
- - ~>
|
60
51
|
- !ruby/object:Gem::Version
|
61
52
|
version: '1.3'
|
53
|
+
prerelease: false
|
54
|
+
type: :development
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
64
|
-
|
65
|
-
none: false
|
57
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
|
-
|
71
|
-
prerelease: false
|
72
|
-
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
62
|
+
requirement: !ruby/object:Gem::Requirement
|
74
63
|
requirements:
|
75
|
-
- -
|
64
|
+
- - '>='
|
76
65
|
- !ruby/object:Gem::Version
|
77
66
|
version: '0'
|
67
|
+
prerelease: false
|
68
|
+
type: :development
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: minitest
|
80
|
-
|
81
|
-
none: false
|
71
|
+
version_requirements: !ruby/object:Gem::Requirement
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
|
-
|
87
|
-
prerelease: false
|
88
|
-
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
90
77
|
requirements:
|
91
|
-
- -
|
78
|
+
- - '>='
|
92
79
|
- !ruby/object:Gem::Version
|
93
80
|
version: '0'
|
94
|
-
|
81
|
+
prerelease: false
|
82
|
+
type: :development
|
83
|
+
description:
|
95
84
|
email:
|
96
85
|
- jonathan@dnil.net
|
97
86
|
executables: []
|
@@ -108,6 +97,7 @@ files:
|
|
108
97
|
- lib/traject_horizon.rb
|
109
98
|
- lib/traject_horizon/version.rb
|
110
99
|
- test/horizon_bib_auth_merge_test.rb
|
100
|
+
- test/horizon_unicode_escape_test.rb
|
111
101
|
- test/test_helper.rb
|
112
102
|
- traject_horizon.gemspec
|
113
103
|
- vendor/jtds/.DS_Store
|
@@ -115,28 +105,28 @@ files:
|
|
115
105
|
homepage: http://github.com/jrochkind/traject_horizon
|
116
106
|
licenses:
|
117
107
|
- MIT
|
118
|
-
|
108
|
+
metadata: {}
|
109
|
+
post_install_message:
|
119
110
|
rdoc_options: []
|
120
111
|
require_paths:
|
121
112
|
- lib
|
122
113
|
required_ruby_version: !ruby/object:Gem::Requirement
|
123
|
-
none: false
|
124
114
|
requirements:
|
125
|
-
- -
|
115
|
+
- - '>='
|
126
116
|
- !ruby/object:Gem::Version
|
127
117
|
version: '0'
|
128
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
119
|
requirements:
|
131
|
-
- -
|
120
|
+
- - '>='
|
132
121
|
- !ruby/object:Gem::Version
|
133
122
|
version: '0'
|
134
123
|
requirements: []
|
135
|
-
rubyforge_project:
|
136
|
-
rubygems_version: 1.
|
137
|
-
signing_key:
|
138
|
-
specification_version:
|
124
|
+
rubyforge_project:
|
125
|
+
rubygems_version: 2.1.5
|
126
|
+
signing_key:
|
127
|
+
specification_version: 4
|
139
128
|
summary: Horizon ILS MARC Exporter, a plugin for the traject tool
|
140
129
|
test_files:
|
141
130
|
- test/horizon_bib_auth_merge_test.rb
|
131
|
+
- test/horizon_unicode_escape_test.rb
|
142
132
|
- test/test_helper.rb
|