idzebra 0.1.1 → 0.2.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.
- data/bin/zebraidx_record +7 -5
- data/lib/idzebra.rb +65 -2
- metadata +35 -3
data/bin/zebraidx_record
CHANGED
@@ -45,11 +45,13 @@ data = case file
|
|
45
45
|
end
|
46
46
|
|
47
47
|
IdZebra::API(global_opts[:config]) do |repo|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
48
|
+
repo.transaction do
|
49
|
+
case cmd
|
50
|
+
when "add"
|
51
|
+
repo.add_record(data)
|
52
|
+
when "remove"
|
53
|
+
repo.delete_record(data)
|
54
|
+
end
|
53
55
|
end
|
54
56
|
repo.commit if global_opts[:commit]
|
55
57
|
end
|
data/lib/idzebra.rb
CHANGED
@@ -20,15 +20,21 @@ module IdZebra
|
|
20
20
|
|
21
21
|
typedef :pointer, :zebra_handle
|
22
22
|
typedef :pointer, :zebra_service
|
23
|
+
typedef :pointer, :res
|
23
24
|
typedef :short, :zebra_res
|
24
25
|
|
25
26
|
# Yaz functions to set logging level
|
26
27
|
attach_function :yaz_log_init_level, [:int], :void
|
27
28
|
attach_function :yaz_log_mask_str, [:string], :int
|
28
29
|
|
30
|
+
# Res function for resource handling
|
31
|
+
attach_function :res_open, [:res, :res], :res
|
32
|
+
|
29
33
|
attach_function :zebra_start, [:string], :zebra_service
|
30
34
|
attach_function :zebra_stop, [:zebra_service], :zebra_res
|
31
|
-
attach_function :zebra_open, [:zebra_service, :
|
35
|
+
attach_function :zebra_open, [:zebra_service, :res], :zebra_handle
|
36
|
+
attach_function :zebra_begin_trans, [:zebra_handle, :short], :zebra_res
|
37
|
+
attach_function :zebra_end_trans, [:zebra_handle], :zebra_res
|
32
38
|
attach_function :zebra_close, [:zebra_handle], :zebra_res
|
33
39
|
|
34
40
|
attach_function :zebra_init, [:zebra_handle], :zebra_res
|
@@ -36,6 +42,18 @@ module IdZebra
|
|
36
42
|
attach_function :zebra_commit, [:zebra_handle], :zebra_res
|
37
43
|
attach_function :zebra_compact, [:zebra_handle], :zebra_res
|
38
44
|
|
45
|
+
attach_function :zebra_get_resource, [
|
46
|
+
:zebra_handle,
|
47
|
+
:string, # name
|
48
|
+
:string], # default value
|
49
|
+
:string
|
50
|
+
|
51
|
+
attach_function :zebra_set_resource, [
|
52
|
+
:zebra_handle,
|
53
|
+
:string, # name
|
54
|
+
:string], # value
|
55
|
+
:string
|
56
|
+
|
39
57
|
attach_function :zebra_add_record, [
|
40
58
|
:zebra_handle,
|
41
59
|
:string, # buf
|
@@ -55,6 +73,7 @@ module IdZebra
|
|
55
73
|
|
56
74
|
class << self
|
57
75
|
|
76
|
+
# Create a new {Repository} connection.
|
58
77
|
def API(config_file, &block)
|
59
78
|
extend Native
|
60
79
|
log_level = :error
|
@@ -67,6 +86,7 @@ module IdZebra
|
|
67
86
|
zebra_stop zs
|
68
87
|
end
|
69
88
|
|
89
|
+
# Get the current logging level
|
70
90
|
def log_level
|
71
91
|
extend Native
|
72
92
|
mask = yaz_log_mask_str('')
|
@@ -84,6 +104,7 @@ module IdZebra
|
|
84
104
|
end
|
85
105
|
end
|
86
106
|
|
107
|
+
# Set the logging level
|
87
108
|
def log_level=(log_level)
|
88
109
|
extend Native
|
89
110
|
case log_level
|
@@ -96,29 +117,66 @@ module IdZebra
|
|
96
117
|
when :info, :default
|
97
118
|
yaz_log_init_level(yaz_log_mask_str('log'))
|
98
119
|
when :debug, :all
|
99
|
-
yaz_log_init_level(yaz_log_mask_str('all'))
|
120
|
+
yaz_log_init_level(yaz_log_mask_str('all,zebraapi,flock'))
|
100
121
|
end
|
101
122
|
end
|
102
123
|
|
103
124
|
end
|
104
125
|
|
126
|
+
# Raised when transactions are unable to be started.
|
127
|
+
class TransactionError < StandardError; end
|
128
|
+
|
129
|
+
# Class representing a Zebra handle to a repository.
|
130
|
+
#
|
131
|
+
# Operations are named to directly correspond to their counterparts in api.h
|
132
|
+
# and zebraidx, and so are not particularly Ruby-like.
|
133
|
+
#
|
134
|
+
# @see http://www.indexdata.com/zebra/dox/html/api_8h.html Zebra API
|
135
|
+
# @see http://www.indexdata.com/zebra/doc/zebraidx.html zebraidx
|
105
136
|
class Repository < Struct.new(:zebra_handle)
|
106
137
|
include Native
|
107
138
|
|
139
|
+
# Create a new repository (wiping any existing data).
|
108
140
|
def init
|
109
141
|
zebra_init(zebra_handle)
|
110
142
|
end
|
111
143
|
|
144
|
+
# Attempt to save some space by compacting existing data files.
|
112
145
|
def compact
|
113
146
|
zebra_compact(zebra_handle)
|
114
147
|
end
|
115
148
|
|
149
|
+
# Rollback changes in shadow files and forget changes.
|
116
150
|
def clean
|
117
151
|
zebra_clean(zebra_handle)
|
118
152
|
end
|
119
153
|
|
154
|
+
# Commit the shadow files. Not designed to be run inside a transaction, but
|
155
|
+
# instead should be run after it.
|
120
156
|
def commit
|
157
|
+
transaction
|
121
158
|
zebra_commit(zebra_handle)
|
159
|
+
rescue TransactionError
|
160
|
+
raise TransactionError, "Commit cannot occur inside a transaction."
|
161
|
+
end
|
162
|
+
|
163
|
+
# Encapsulates the operation with `zebra_begin_trans` and `zebra_end_trans`
|
164
|
+
def transaction(read_only = false)
|
165
|
+
zebra_res = zebra_begin_trans(zebra_handle, read_only ? 0 : 1)
|
166
|
+
if zebra_res != 0
|
167
|
+
raise TransactionError,
|
168
|
+
"Unable to start transaction - probably a locking issue."
|
169
|
+
end
|
170
|
+
yield if block_given?
|
171
|
+
zebra_end_trans(zebra_handle)
|
172
|
+
end
|
173
|
+
|
174
|
+
def get_resource(name, default = nil)
|
175
|
+
zebra_get_resource(zebra_handle, name, default)
|
176
|
+
end
|
177
|
+
|
178
|
+
def set_resource(name, value)
|
179
|
+
zebra_set_resource(zebra_handle, name, value)
|
122
180
|
end
|
123
181
|
|
124
182
|
def add_record(record_str)
|
@@ -135,6 +193,11 @@ module IdZebra
|
|
135
193
|
:action_delete, nil, 0, nil, nil, record_str, 0)
|
136
194
|
end
|
137
195
|
|
196
|
+
alias :<< :update_record
|
197
|
+
alias :[] :get_resource
|
198
|
+
alias :[]= :set_resource
|
199
|
+
alias :rollback :clean
|
200
|
+
|
138
201
|
end
|
139
202
|
|
140
203
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: idzebra
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ffi
|
@@ -59,6 +59,22 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: redcarpet
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: rspec
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -75,6 +91,22 @@ dependencies:
|
|
75
91
|
- - ! '>='
|
76
92
|
- !ruby/object:Gem::Version
|
77
93
|
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: yard
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
78
110
|
description: Ruby bindings for the Zebra open-source Z39.50/SRU server.
|
79
111
|
email: tim@dettrick.net
|
80
112
|
executables:
|
@@ -105,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
137
|
version: '0'
|
106
138
|
segments:
|
107
139
|
- 0
|
108
|
-
hash: -
|
140
|
+
hash: -4571173317423406803
|
109
141
|
requirements:
|
110
142
|
- idzebra-2.0
|
111
143
|
rubyforge_project:
|