nostos-target-voyager 0.0.2 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
data/README.md
CHANGED
@@ -12,14 +12,23 @@ Add the following to your Gemfile and run `bundle install`
|
|
12
12
|
|
13
13
|
## Configuration
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
15
|
+
You can interactively configure the Voyager target driver by running `rails generate target_voyager:install`. This will prompt you for the necessariy values.
|
16
|
+
|
17
|
+
You can manually configure the Voyager target driver in `config/target_voyager.rb`:
|
18
|
+
|
19
|
+
db:
|
20
|
+
adapter: 'oracle_enhanced'
|
21
|
+
database: # This is most likely VGER
|
22
|
+
username:
|
23
|
+
password:
|
24
|
+
|
25
|
+
sip:
|
26
|
+
host:
|
27
|
+
port:
|
28
|
+
username:
|
29
|
+
password:
|
30
|
+
operator:
|
31
|
+
location:
|
23
32
|
|
24
33
|
Note that `username` and `location` is the operator id and location code used to sign into the SIP server (or Circulation module). `operator` is the operator id used for creating items. Theoretically they should be identical, however it is not required.
|
25
34
|
|
@@ -1,9 +1,8 @@
|
|
1
1
|
require 'voyager'
|
2
|
-
require 'nostos-target-voyager/railtie'
|
2
|
+
require 'nostos-target-voyager/railtie' if defined?(Rails)
|
3
3
|
require 'nostos-target-voyager/config'
|
4
4
|
require 'nostos-target-voyager/record'
|
5
|
-
|
6
|
-
VoyagerGem = Voyager
|
5
|
+
require 'nostos-target-voyager/generators/target_voyager_generator' if defined?(Rails)
|
7
6
|
|
8
7
|
module Target
|
9
8
|
module Voyager
|
@@ -19,35 +18,30 @@ module Target
|
|
19
18
|
def self.find(id)
|
20
19
|
id = id.to_s unless id.is_a?(String)
|
21
20
|
|
22
|
-
|
23
|
-
sip.login(config.sip[:username], config.sip[:password], config.sip[:location]) do |response|
|
24
|
-
if response[:ok] != '1' # Login failed
|
25
|
-
Rails::logger.error "Failed to sign in to SIP server"
|
26
|
-
return false
|
27
|
-
end
|
28
|
-
|
29
|
-
if response[:ok] == '1' # Login successful
|
30
|
-
sip.item_status(id) do |item_status|
|
31
|
-
return nil unless item_status[:AF] == 'Item Info retrieved successfully.'
|
21
|
+
item_barcode = ::Voyager::AR::Item::Barcode.includes(:item => [:circ_transaction, :bib_text]).where(:item_barcode => id).first
|
32
22
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
23
|
+
if item_barcode
|
24
|
+
Target::Voyager::Record.new(:id => item_barcode.item_barcode,
|
25
|
+
:title => item_barcode.item.bib_text.title,
|
26
|
+
:due_date => item_barcode.item.circ_transaction.try(:current_due_date),
|
27
|
+
:charged => !item_barcode.item.circ_transaction.nil?)
|
28
|
+
else
|
29
|
+
nil
|
43
30
|
end
|
44
|
-
|
45
|
-
nil
|
46
31
|
end
|
47
32
|
|
48
33
|
def self.create(item = {})
|
49
34
|
return nil if item.id.nil? || item.title.nil?
|
50
35
|
|
36
|
+
# Check if the item already exists.
|
37
|
+
if ::Voyager::AR::Item::Barcode.where(:item_barcode => item.id.to_s).exists?
|
38
|
+
item_barcode = ::Voyager::AR::Item::Barcode.includes(:item => [:circ_transaction, :bib_text]).where(:item_barcode => item.id.to_s).first
|
39
|
+
return Target::Voyager::Record.new(:id => item_barcode.item_barcode,
|
40
|
+
:title => item_barcode.item.bib_text.title,
|
41
|
+
:due_date => item_barcode.item.circ_transaction.try(:current_due_date),
|
42
|
+
:charged => !item_barcode.item.circ_transaction.nil?)
|
43
|
+
end
|
44
|
+
|
51
45
|
# Title should truncate to 32 characters and append "/ *12345*"
|
52
46
|
title = "#{item.title[0..31]} / *#{item.id}*"
|
53
47
|
|
@@ -57,19 +51,20 @@ module Target
|
|
57
51
|
end
|
58
52
|
# Illiad encodes strings in Windows-1252, but Voyager SIP requires all messages be ASCII.
|
59
53
|
|
60
|
-
|
61
|
-
sip.login(config.sip[
|
54
|
+
::Voyager::SIP::Client.new(config.sip["host"], config.sip["port"]) do |sip|
|
55
|
+
sip.login(config.sip["username"], config.sip["password"], config.sip["location"]) do |response|
|
62
56
|
# First be sure that an item doesn't already exist.
|
63
57
|
sip.item_status(item.id) do |item_status|
|
64
58
|
unless item_status[:AF] == 'Item barcode not found. Please consult library personnel for assistance.'
|
65
59
|
# Item already exists
|
60
|
+
# This should pretty much never happen since we check above for existence.
|
66
61
|
return Target::Voyager::Record.new(:id => item.id,
|
67
62
|
:title => item_status[:AJ],
|
68
63
|
:due_date => item_status[:AH],
|
69
64
|
:charged => !item_status[:AH].empty?)
|
70
65
|
else
|
71
66
|
# Item doesn't exist
|
72
|
-
sip.create_bib(config.sip[
|
67
|
+
sip.create_bib(config.sip["operator"], title, item.id) do |response|
|
73
68
|
# Bib/MFHD/Item created. Store values.
|
74
69
|
#
|
75
70
|
# Values must be stored in order to delete the items via SIP.
|
@@ -88,7 +83,7 @@ module Target
|
|
88
83
|
end
|
89
84
|
|
90
85
|
def self.charged
|
91
|
-
|
86
|
+
::Voyager::AR::Item.joins(:circ_transaction).includes(:circ_transaction, :bib_text, :barcode).where(:item_type_id => 24).all.map do |item|
|
92
87
|
Target::Voyager::Record.new(:id => item.barcode.item_barcode,
|
93
88
|
:title => item.bib_item.bib_text.title,
|
94
89
|
:due_date => item.circ_transaction.current_due_date,
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module TargetVoyager
|
4
|
+
class InstallGenerator < Rails::Generators::Base
|
5
|
+
def configure
|
6
|
+
# Ask DB Questions
|
7
|
+
puts "Database Configuration:"
|
8
|
+
puts "The following fields are required to establish a connection with your Voyager server."
|
9
|
+
db = {}
|
10
|
+
db[:database] = ask('database: [VGER]')
|
11
|
+
db[:database] = 'VGER' if db[:database].blank?
|
12
|
+
db[:username] = ask('username (e.g. ro_XXXDB): []')
|
13
|
+
db[:password] = ask('password: []')
|
14
|
+
|
15
|
+
# Ask SIP Questions
|
16
|
+
puts "SIP Configuration:"
|
17
|
+
sip = {}
|
18
|
+
sip[:host] = ask('Host: []')
|
19
|
+
sip[:port] = ask('Port: [7031]')
|
20
|
+
sip[:port] = '7031' if sip[:port].blank?
|
21
|
+
sip[:username] = ask('Username (the operator used to sign into SIP. This will determine the allowed privleges and will be the operator used for circulation transactions): []')
|
22
|
+
sip[:password] = ask('Password: []')
|
23
|
+
sip[:operator] = ask('Operator (the operator used to create short records. This overrides the operator used to sign in. It is recommended that you create a cataloging operator for this driver so that you can easily identify records created in your ILS): []')
|
24
|
+
sip[:location] = ask('Location: []')
|
25
|
+
|
26
|
+
# Configure application settings
|
27
|
+
create_file File.join(Rails.root, 'config', 'target_voyager.yml'), <<CONFIG
|
28
|
+
# Target Voyager Configuration
|
29
|
+
|
30
|
+
# Database
|
31
|
+
db:
|
32
|
+
adapter: 'oracle_enhanced'
|
33
|
+
database: '#{db[:database]}'
|
34
|
+
username: '#{db[:username]}'
|
35
|
+
password: '#{db[:password]}'
|
36
|
+
|
37
|
+
# SIP
|
38
|
+
sip:
|
39
|
+
host: '#{sip[:host]}'
|
40
|
+
port: '#{sip[:port]}'
|
41
|
+
username: '#{sip[:username]}'
|
42
|
+
password: '#{sip[:password]}'
|
43
|
+
operator: '#{sip[:operator]}'
|
44
|
+
location: '#{sip[:location]}'
|
45
|
+
CONFIG
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -8,14 +8,18 @@ module Target
|
|
8
8
|
config.target_voyager.db = ActiveSupport::OrderedOptions.new
|
9
9
|
|
10
10
|
initializer "target_voyager.configure" do |app|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
end
|
11
|
+
config_file = File.join(Rails.root, 'config', 'target_voyager.yml')
|
12
|
+
|
13
|
+
if File.exists?(config_file)
|
14
|
+
CONFIG = YAML::load(File.open(config_file))
|
16
15
|
|
17
|
-
|
18
|
-
|
16
|
+
Target::Voyager.configure do |config|
|
17
|
+
config.sip = CONFIG["sip"]
|
18
|
+
config.db = CONFIG["db"]
|
19
|
+
end
|
20
|
+
|
21
|
+
::Voyager::AR::Base.establish_connection(Target::Voyager.config.db)
|
22
|
+
end
|
19
23
|
end
|
20
24
|
end
|
21
25
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: nostos-target-voyager
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.4
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Brice Stacey
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-04-
|
13
|
+
date: 2011-04-22 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: voyager
|
@@ -50,6 +50,7 @@ files:
|
|
50
50
|
- Rakefile
|
51
51
|
- lib/nostos-target-voyager.rb
|
52
52
|
- lib/nostos-target-voyager/config.rb
|
53
|
+
- lib/nostos-target-voyager/generators/target_voyager_generator.rb
|
53
54
|
- lib/nostos-target-voyager/railtie.rb
|
54
55
|
- lib/nostos-target-voyager/record.rb
|
55
56
|
- lib/nostos-target-voyager/version.rb
|