marc_alephsequential 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- Yjk3YTZkMTY4Njg0NGY3ZTQ5ZGY2MzQ3MGIxMDA4NTdjMzEzZmNkNA==
5
- data.tar.gz: !binary |-
6
- NmMwMWQzMTIzMmQ3ZmNlOTM5YjRiMGFmZTI2MTA3NmM0Njk0ZTJiYg==
2
+ SHA1:
3
+ metadata.gz: 9fa0b67408536b4221359c3a268ea99925ba55c9
4
+ data.tar.gz: 5ab21aa3f34c6b24af9fddc7e64c4eeab7f5ddac
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NWE0M2NiM2M5MTcwOTJjNWJkN2JiMDk5OTJmNWIxYmVmNTg4NGY1ZTAxZGE1
10
- OTM4ZDBhMTA3ZDZiYmY0YWU3M2I5NWM5MzBlYjhkY2QxNGZhNDdhMDAyM2Qx
11
- MjQ4YWFiNTkxMjhmODk3Mzc0YjIzMGVlMzVmYzRlOTc0Y2Y3YmE=
12
- data.tar.gz: !binary |-
13
- OWZmOGVkYWVkZTM4ZGQ1YmM1NGMzNzBkM2IwY2I4NmZmMmI1OTYzN2FhMTQw
14
- NDcwMDQ0Zjk3MzdiZWQxN2M1ZmQzMGRhYWFkNTg5NGFiNTY4Yjk4N2JiMTFi
15
- ZWEyZjJkMThkY2RlM2VjYmZhNTQ1NmYxYzM5NDhlN2QyOGY3MGE=
6
+ metadata.gz: 85513438e1ba85f181543bf83b67b9f34f7d09b06f262c6f890a7d4bce95014e00cfded966a1294d9a9de341883e1f55a41d881e5c7c2cd4ee7e7fbb35f6776a
7
+ data.tar.gz: 901c12d9c9830fccc112ebe89f9d77cc4708dad2f91dff6c685902c92921975a5c32eaa3cc4f4118ffd31a0de17c58f38ea22c4ce39cc44a41070d540f3668f1
data/ChangeLog.md CHANGED
@@ -1,3 +1,7 @@
1
+ ### 0.1.1 / 2013-10-23
2
+
3
+ * Fixed bad call to respond_to in intializer
4
+
1
5
  ### 0.1.0 / 2013-08-12
2
6
 
3
7
  * Initial release:
data/Gemfile CHANGED
@@ -6,8 +6,10 @@ gem 'yell'
6
6
 
7
7
  group :test do
8
8
  gem 'minitest'
9
- gem "minitest-reporters", '>= 0.8.0'
10
- gem 'minitest-colorize'
9
+ end
10
+
11
+ group :test do
12
+ gem 'minitest'
11
13
  end
12
14
 
13
15
  group :development do
data/README.md CHANGED
@@ -100,4 +100,4 @@ The easy-to-see problems are:
100
100
 
101
101
  Copyright (c) 2013 Bill Dueber
102
102
 
103
- See {file:LICENSE.txt} for details.
103
+ See [LICENSE.txt] for details.
data/Rakefile CHANGED
@@ -1,7 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'rubygems'
4
-
5
3
  begin
6
4
  require 'bundler'
7
5
  rescue LoadError => e
@@ -4,64 +4,64 @@ require_relative 'log'
4
4
 
5
5
  module MARC
6
6
  module AlephSequential
7
-
8
-
7
+
8
+
9
9
  # A model of a line (field) in an alephsequential file.
10
10
  class ASLine
11
-
11
+
12
12
  include Log
13
13
 
14
14
  # Characters in leader/control fields that need to be turned (back) into spaces
15
- TURN_TO_SPACE = /\^/
15
+ TURN_TO_SPACE = /\^/
16
16
 
17
- # Pattern used to split data field values into subfield code/value pairs
17
+ # Pattern used to split data field values into subfield code/value pairs
18
18
  SUBFIELD_SPLIT_PATTERN = /\$\$([a-zA-Z0-9])/
19
-
19
+
20
20
  # How to know if we have a valid id? Must be 9 digits
21
- VALID_ID = /^\d{9}$/
22
-
21
+ VALID_ID = /^\d{9}$/
22
+
23
23
  # The passed in raw string, used for post-processing later on
24
24
  attr_accessor :rawstr
25
-
25
+
26
26
  # The line number in the file/stream, for error reporting
27
27
  attr_accessor :line_number
28
-
28
+
29
29
  # Either the value of a control/fiexed field, or a string representation of a datafield's subfield
30
30
  attr_accessor :value
31
-
31
+
32
32
  # The type of field (:leader, :control, :data, or :invalid_id)
33
33
  attr_accessor :type
34
-
35
- attr_accessor :id, :tag, :ind1, :ind2
34
+
35
+ attr_accessor :id, :tag, :ind1, :ind2
36
36
 
37
37
  # The MARC field's tag
38
38
  attr_reader :tag
39
-
40
-
39
+
40
+
41
41
  # Given a raw string and a line number, construct the appropriate ASLine.
42
- #
43
- # @param [String] rawstr The raw string from the file
42
+ #
43
+ # @param [String] rawstr The raw string from the file
44
44
  # @param [Number] line_number The line number from the file/stream, for error reporting
45
-
45
+
46
46
  def initialize(rawstr, line_number)
47
- @rawstr = rawstr.chomp
47
+ @rawstr = rawstr.chomp
48
48
  @line_number = line_number
49
-
50
- (self.id,self.tag,self.ind1,self.ind2,self.value) = *(parseline(@rawstr))
51
-
49
+
50
+ (self.id, self.tag, self.ind1, self.ind2, self.value) = *(parseline(@rawstr))
51
+
52
52
  # clean up the leader or fixed fields
53
53
  if [:leader, :control].include? self.type
54
54
  self.value = cleanup_fixed(self.value)
55
55
  end
56
-
56
+
57
57
  end
58
-
59
- # Does this line have a valid (-looking) id?
58
+
59
+ # Does this line have a valid (-looking) id?
60
60
  def valid_id?
61
61
  return VALID_ID.match(id) ? true : false
62
62
  end
63
-
64
-
63
+
64
+
65
65
  # Turn it into an actual MARC field (control or data)
66
66
  # Throw an error if called on a leader (LDR) line
67
67
  # @return [MARC::ControlField, MARC::DataField]
@@ -72,16 +72,16 @@ module MARC
72
72
  when :data
73
73
  self.to_data_field
74
74
  else
75
- raise MARC::AlephSequential::Error.new(id, line_number ), "Tried to call #to_field on line type '#{self.type}'", nil
75
+ raise MARC::AlephSequential::Error.new(id, line_number), "Tried to call #to_field on line type '#{self.type}'", nil
76
76
  end
77
77
  end
78
-
78
+
79
79
  # Turn the current object into a control field, without doing any checks
80
80
  # @return [MARC::ControlField]
81
81
  def to_control_field
82
82
  MARC::ControlField.new(tag, cleanup_fixed(self.value))
83
83
  end
84
-
84
+
85
85
  # Turn the current object into a datafield, without doing any checks
86
86
  # @return [MARC::DataField]
87
87
  def to_data_field
@@ -90,38 +90,38 @@ module MARC
90
90
  self.value = '$$a' + self.value
91
91
  end
92
92
 
93
- subfields = parse_string_into_subfields(value)
94
- f = MARC::DataField.new(tag, ind1, ind2)
93
+ subfields = parse_string_into_subfields(value)
94
+ f = MARC::DataField.new(tag, ind1, ind2)
95
95
  f.subfields = subfields
96
96
  return f
97
- end
98
-
97
+ end
98
+
99
99
  # Parse out a non-controlfield value string into a set of subfields
100
100
  # @param [String] val the value string, of the form "$$athis is the a$$band the b"
101
101
  # @return [Array<Subfield>] An array of MARC subfields
102
102
  #
103
103
  # If the first value in the array returned by the split isn't the empty string, then
104
- # the string didn't start with '$$' and we should throw a warning
104
+ # the string didn't start with '$$' and we should throw a warning
105
105
  # (and put the value into a subfield 'a' if we're running in flexible mode)
106
-
106
+
107
107
  def parse_string_into_subfields(val)
108
- sfpairs = val.split(SUBFIELD_SPLIT_PATTERN)
108
+ sfpairs = val.split(SUBFIELD_SPLIT_PATTERN)
109
109
  initial_null_string = sfpairs.shift
110
110
  unless initial_null_string == ''
111
111
  # do something about the error
112
112
  end
113
-
114
- sfpairs.each_slice(2).map {|code, val| MARC::Subfield.new(code, val) }
115
-
113
+
114
+ sfpairs.each_slice(2).map { |code, val| MARC::Subfield.new(code, val) }
115
+
116
116
  end
117
-
117
+
118
118
  # Clean up fixed fields/leader, turning Ex Libris characters back into normal characters
119
119
  # @param [String] val The string to clean
120
120
  # @return [String] The cleaned string
121
121
  def cleanup_fixed(val)
122
122
  return val.gsub(TURN_TO_SPACE, ' ')
123
123
  end
124
-
124
+
125
125
  # Set the tag. As a side effect, set the type when we set the tag
126
126
  # type will end up as :leader, :control, :data, or :invalid_id
127
127
  def tag=(t)
@@ -136,26 +136,23 @@ module MARC
136
136
  self.type = :invalid_id
137
137
  end
138
138
  end
139
-
140
-
139
+
140
+
141
141
  # Get a line and parse it out into its componant parts
142
142
  # @param [String] line the line to parse
143
143
  # @return [Array] An array of the form [id, tag, ind1, ind2, value]
144
-
144
+
145
145
  def parseline(line)
146
- id = line[0,9]
147
- tag = line[10,3]
148
- ind1 = line[13,1]
149
- ind2 = line[14,1]
146
+ id = line[0, 9]
147
+ tag = line[10, 3]
148
+ ind1 = line[13, 1]
149
+ ind2 = line[14, 1]
150
150
  value = line[18..-1]
151
- return [id,tag,ind1,ind2,value]
151
+ return [id, tag, ind1, ind2, value]
152
152
  end
153
-
154
-
155
-
156
-
153
+
154
+
157
155
  end # ASLine
158
156
  end
159
157
  end
160
-
161
-
158
+
@@ -5,48 +5,47 @@ require_relative 'log'
5
5
 
6
6
  module MARC
7
7
  module AlephSequential
8
-
8
+
9
9
  # A group of ASLine objects with logic to correctly turn them into a MARC::Record object
10
10
  # @see ASLine
11
-
11
+
12
12
  class ASLineGroup
13
-
13
+
14
14
  include Log
15
-
15
+
16
16
  # @!attribute aslines
17
17
  # @return [Array<MARC::Field>] Internal list of MARC field object
18
18
  attr_accessor :aslines
19
-
19
+
20
20
  # @!attribute [r] leader
21
21
  # @return [String] The leader string, pulled from whatever was passed in with a LDR tag
22
- attr_reader :leader
23
-
24
-
25
-
22
+ attr_reader :leader
23
+
24
+
26
25
  def initialize
27
26
  @aslines = []
28
- @leader = nil
27
+ @leader = nil
29
28
  end
30
-
29
+
31
30
  # Number of aslines already added
32
31
  # @return Integer
33
32
  def size
34
33
  aslines.size
35
34
  end
36
-
35
+
37
36
  # Is this group empty?
38
37
  def empty?
39
38
  aslines.empty?
40
39
  end
41
-
42
-
40
+
41
+
43
42
  # Add an ASLine object, turning it into the appropriate type of field as we go
44
43
  # An ASLine object with type :invalid_id will be treated as a string and appended to
45
44
  # the previous field (to deal with not-uncommon spurious newlines in data fields)
46
45
  # @return [Undefined] side effect only
47
46
  # @raise MARC::AlephSequential::Error when there's an invalid ID _and_ there's no previous
48
47
  # field to concatentate it to.
49
-
48
+
50
49
  def add(asline)
51
50
  case asline.type
52
51
  when :leader
@@ -57,23 +56,23 @@ module MARC
57
56
  when :invalid_id
58
57
  lastfield = @aslines.pop
59
58
  unless lastfield
60
- raise MARC::AlephSequential::Error.new('unknown', asline.line_number),
59
+ raise MARC::AlephSequential::Error.new('unknown', asline.line_number),
61
60
  "#{asline.line_number} has invalid id and no preivous line to concat it to (file starts bad?)"
62
- nil
61
+ nil
63
62
  end
64
63
  log.info "#{asline.line_number} #{lastfield.id} / #{lastfield.tag} Concatenating line #{asline.line_number} to previous line"
65
- @aslines.push ASLine.new(lastfield.rawstr + asline.rawstr, lastfield.line_number)
64
+ @aslines.push ASLine.new(lastfield.rawstr + asline.rawstr, lastfield.line_number)
66
65
  else
67
66
  @aslines.push asline
68
67
  end
69
68
  end
70
-
71
-
69
+
70
+
72
71
  # Add an asline as a raw string
73
72
  def add_string(asline_string, line_number)
74
73
  self.add(ASLine.new(asline_string, line_number))
75
74
  end
76
-
75
+
77
76
  # Turn this object into a MARC::Record
78
77
  # @return [MARC::Record]
79
78
  # @raise MARC::AlephSequential::Error if this object is empty
@@ -82,20 +81,20 @@ module MARC
82
81
  if empty?
83
82
  raise MARC::AlephSequential::Error.new('unknown', 'unknown'), "Can't turn an empty group into a record", nil
84
83
  end
85
-
84
+
86
85
  unless leader
87
86
  raise MARC::AlephSequential::Error.new(@aslines[0].id, @aslines[0].line_number),
88
87
  "Record #{@aslines[0].id} (near line #{ @aslines[0].line_number}) has no leader; can't turn into a record",
89
88
  nil
90
89
  end
91
- r = MARC::Record.new
90
+ r = MARC::Record.new
92
91
  r.leader = leader
93
- aslines.map {|f| r << f.to_field}
92
+ aslines.map { |f| r << f.to_field }
94
93
  return r
95
94
  end
96
-
95
+
97
96
  alias_method :to_record, :as_record
98
97
  end
99
98
  end
100
99
  end
101
-
100
+
@@ -9,8 +9,8 @@ module MARC
9
9
  super
10
10
  ASLine.new(raw, line_number)
11
11
  end
12
-
12
+
13
13
  end
14
14
  end
15
15
  end
16
-
16
+
@@ -3,52 +3,52 @@ require 'zlib'
3
3
  module MARC
4
4
  module AlephSequential
5
5
 
6
- # AlephSequential is a line-oriented format, with the first field of each line
6
+ # AlephSequential is a line-oriented format, with the first field of each line
7
7
  # indicating the record number. Rather than try to screw around with keeping track of
8
8
  # the last line read, checking to see if we have one, blah blah blah, I'm going to use
9
- # a buffered line reader class so I can #peek at the next line to know if its id
10
- # is different than the current record.
11
-
9
+ # a buffered line reader class so I can #peek at the next line to know if its id
10
+ # is different than the current record.
11
+
12
12
  class BufferedLineReader
13
-
13
+
14
14
  include Enumerable
15
-
15
+
16
16
  attr_accessor :buffer_size
17
17
  attr_reader :underlying_line_number
18
-
18
+
19
19
  def initialize(filename_or_io)
20
-
20
+
21
21
  @passed_in = filename_or_io
22
-
22
+
23
23
  @underlying_line_number = 0
24
- @buffer_size = 10
25
- @buffer = []
26
-
24
+ @buffer_size = 10
25
+ @buffer = []
26
+
27
27
  if filename_or_io.is_a? String
28
28
  @handle = File.open(filename_or_io, 'r:utf-8')
29
29
  if filename_or_io =~ /\.gz$/
30
30
  @handle = Zlib::GzipReader.new(@handle)
31
31
  end
32
- elsif filename_or_io.respond_to?("read", 5)
32
+ elsif filename_or_io.respond_to?("read")
33
33
  @handle = filename_or_io
34
34
  else
35
35
  raise ArgumentError.new("BufferedLineReader needs an IO object or filename, got #{filename_or_io} (#{filename_or_io.inspect})")
36
36
  end
37
-
38
- @iter = @handle.enum_for(:each_line)
37
+
38
+ @iter = @handle.enum_for(:each_line)
39
39
  @finished = false
40
40
  # Fill up the buffer
41
41
  self.fillbuffer
42
42
  end
43
-
43
+
44
44
  def has_next?
45
45
  return !(@finished && @buffer.size == 0)
46
46
  end
47
-
47
+
48
48
  def fillbuffer(buffer_size = @buffer_size)
49
49
  begin
50
50
  buffer_size.times do
51
- raw = @iter.next
51
+ raw = @iter.next
52
52
  @underlying_line_number += 1
53
53
  @buffer.push process_raw(raw, @underlying_line_number)
54
54
  end
@@ -56,25 +56,25 @@ module MARC
56
56
  @finished = true
57
57
  end
58
58
  end
59
-
59
+
60
60
  # Empty version here; can override for processing lines on the fly
61
61
  def process_raw(raw, line_number)
62
62
  raw
63
63
  end
64
-
64
+
65
65
  def next
66
66
  raise StopIteration, "End of #{@passed_in}", nil if @buffer.size == 0
67
67
  rv = @buffer.shift
68
68
  fillbuffer if @buffer.size == 0
69
69
  rv
70
70
  end
71
-
72
-
71
+
72
+
73
73
  def peek
74
74
  fillbuffer unless @buffer.size > 0
75
75
  @buffer[0]
76
76
  end
77
-
77
+
78
78
  def each
79
79
  begin
80
80
  while true
@@ -83,18 +83,17 @@ module MARC
83
83
  rescue StopIteration
84
84
  end
85
85
  end
86
-
86
+
87
87
  alias_method :each_line, :each
88
88
  end
89
89
  end
90
90
  end
91
-
92
-
93
-
94
-
95
-
96
-
97
-
98
-
99
-
100
-
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
@@ -1,13 +1,13 @@
1
1
  module MARC
2
2
  module AlephSequential
3
-
3
+
4
4
  class Error < RuntimeError
5
5
  attr_accessor :record_id, :line_number
6
-
6
+
7
7
  def initialize(record_id, line_number)
8
- @record_id = record_id
8
+ @record_id = record_id
9
9
  @line_number = line_number
10
10
  end
11
11
  end
12
12
  end
13
- end
13
+ end
@@ -1,20 +1,20 @@
1
1
  module MARC
2
2
  module AlephSequential
3
-
3
+
4
4
  module Log
5
-
5
+
6
6
  def self.log
7
7
  @log
8
8
  end
9
-
9
+
10
10
  def self.log=(log)
11
11
  @log = log
12
12
  end
13
-
13
+
14
14
  def log
15
- Log.log ||= Yell.new STDERR, :level => [ :warn, :error], :name=>'MAS'
15
+ Log.log ||= Yell.new STDERR, :level => [:warn, :error], :name => 'MAS'
16
16
  Log.log
17
17
  end
18
18
  end
19
19
  end
20
- end
20
+ end
@@ -6,32 +6,32 @@ require 'marc_alephsequential/log'
6
6
 
7
7
  module MARC
8
8
  module AlephSequential
9
-
9
+
10
10
  class Reader
11
11
 
12
12
  include Enumerable
13
13
  include Log
14
-
14
+
15
15
  attr_reader :lines
16
16
  attr_accessor :current_id
17
-
17
+
18
18
  def initialize(filename_or_io, opts={})
19
19
  @areader = ASLineReader.new(filename_or_io)
20
20
  end
21
-
21
+
22
22
  def each
23
-
23
+
24
24
  unless block_given?
25
25
  return enum_for(:each)
26
26
  end
27
-
27
+
28
28
  agroup = ASLineGroup.new
29
-
29
+
30
30
  while @areader.has_next?
31
31
  nextid = @areader.peek.id
32
- if nextid != @current_id && @areader.peek.valid_id?
32
+ if nextid != @current_id && @areader.peek.valid_id?
33
33
  yield agroup.to_record unless agroup.empty?
34
- agroup = ASLineGroup.new
34
+ agroup = ASLineGroup.new
35
35
  @current_id = nextid
36
36
  else
37
37
  agroup.add @areader.next
@@ -43,12 +43,11 @@ module MARC
43
43
  end
44
44
  end
45
45
  end
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
@@ -1,4 +1,5 @@
1
1
  module MarcAlephsequential
2
2
  # marc_alephsequential version
3
- VERSION = "0.1.0"
3
+ VERSION = "0.1.1"
4
4
  end
5
+
@@ -8,16 +8,17 @@ describe "ASLineGroup" do
8
8
  @single_lines.each_with_index {|l,i| @full.add_string(l,i ) }
9
9
 
10
10
  end
11
-
11
+
12
+
12
13
  describe "Create Group" do
13
14
  before do
14
15
  @ag = MARC::AlephSequential::ASLineGroup.new
15
16
  end
16
-
17
+
17
18
  it "should start empty" do
18
19
  @ag.must_be_empty
19
20
  end
20
-
21
+
21
22
  it "should read in a valid record" do
22
23
  @ag = MARC::AlephSequential::ASLineGroup.new
23
24
  File.open('spec/data/single.seq').each_with_index {|l,i| @ag.add_string(l,i ) }
@@ -27,7 +28,7 @@ describe "ASLineGroup" do
27
28
  @ag.aslines[1].tag.must_equal '003'
28
29
  @ag.aslines[1].type.must_equal :control
29
30
  end
30
-
31
+
31
32
  it "should deal with embedded newlines" do
32
33
  tinyrec = [
33
34
  "000000794 LDR L ^^^^^nam^a22003011^^4500",
@@ -37,23 +38,23 @@ describe "ASLineGroup" do
37
38
  "Curtis,$$d1859-1937.",
38
39
  "000000794 24514 L $$aThe descent of manuscripts"
39
40
  ]
40
-
41
+
41
42
  tinyrec.each_with_index {|l,i| @ag.add_string(l,i) }
42
43
  field = @ag.aslines[2].to_field
43
44
  field.tag.must_equal '100'
44
45
  field['a'].must_equal 'Clark, Albert Curtis,'
45
46
  end
46
-
47
+
47
48
  it "should produce a good record" do
48
49
  rec = @full.to_record
49
50
  rec['001'].value.must_equal '000000794'
50
51
  rec['998'].value.must_equal '9665'
51
52
  end
52
-
53
-
54
-
53
+
54
+
55
+
55
56
  end
56
-
57
-
58
-
57
+
58
+
59
+
59
60
  end
data/spec/asline_spec.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'helper'
2
2
  require 'marc_alephsequential'
3
3
 
4
+
4
5
  describe 'ASLine' do
5
6
  before do
6
7
  @leader = '000000794 LDR L ^^^^^nam^a22003011^^4500'
@@ -9,27 +10,27 @@ describe 'ASLine' do
9
10
  @d1 = '000000794 1001 L $$aClark, Albert Curtis,$$d1859-1937.'
10
11
  @d2 = '000000794 60000 L $$aPlato.$$tCritias$$xManuscripts.'
11
12
  end
12
-
13
-
13
+
14
+
14
15
  it "correctly parses a leader" do
15
16
  aline = MARC::AlephSequential::ASLine.new(@leader, 1)
16
17
  aline.type.must_equal :leader
17
18
  aline.value.must_equal ' nam a22003011 4500'
18
19
  end
19
-
20
+
20
21
  it "parses control fields" do
21
22
  aline = MARC::AlephSequential::ASLine.new(@c1, 1)
22
23
  aline.tag.must_equal '008'
23
24
  aline.value.must_equal '880715r19701918enk b |00100 eng '
24
25
  end
25
-
26
- it "parses datafield basics" do
26
+
27
+ it "parses datafield basics" do
27
28
  aline = MARC::AlephSequential::ASLine.new(@d1, 1)
28
29
  aline.tag.must_equal '100'
29
30
  aline.ind1.must_equal '1'
30
31
  aline.ind2.must_equal ' '
31
32
  end
32
-
33
+
33
34
  it "parses subfields" do
34
35
  aline = MARC::AlephSequential::ASLine.new(@d1, 1)
35
36
  subfields = aline.parse_string_into_subfields(aline.value)
@@ -37,10 +38,9 @@ describe 'ASLine' do
37
38
  subfields[1].code.must_equal 'd'
38
39
  subfields[0].value.must_equal 'Clark, Albert Curtis,'
39
40
  subfields[1].value.must_equal '1859-1937.'
40
-
41
+
41
42
  end
42
-
43
-
44
-
43
+
44
+
45
+
45
46
  end
46
-
data/spec/helper.rb CHANGED
@@ -1,5 +1,3 @@
1
- require 'rubygems'
2
-
3
1
  begin
4
2
  require 'bundler'
5
3
  rescue LoadError => e
@@ -18,5 +16,5 @@ end
18
16
 
19
17
  require "minitest/autorun"
20
18
  # require 'minitest/reporters'
21
- # MiniTest::Reporters.use!
22
- require 'minitest/hell' # parallelize testing
19
+ # MiniTest::Reporters.use!
20
+ require 'minitest/hell' # parallelize testing
data/spec/reader_spec.rb CHANGED
@@ -8,29 +8,29 @@ describe 'Reader' do
8
8
  @newline = 'spec/data/newline.seq'
9
9
  @noleader = 'spec/data/noleader.seq'
10
10
  @nosubfieldindicator = 'spec/data/no_initial_subfield.seq'
11
-
11
+
12
12
  end
13
-
13
+
14
14
  describe "empty reader" do
15
15
  it "doesn't blow up on an empty file" do
16
16
  iter = MARC::AlephSequential::Reader.new('/dev/null').each
17
17
  lambda{iter.next}.must_raise StopIteration
18
18
  end
19
19
  end
20
-
20
+
21
21
  it "reads a single record from a single-record file" do
22
22
  iter = MARC::AlephSequential::Reader.new(@single).each
23
23
  r = iter.next
24
24
  r['998'].value.must_equal '9665'
25
25
  r['100']['a'].must_equal 'Clark, Albert Curtis,'
26
26
  end
27
-
27
+
28
28
  it "reads a batch of records" do
29
29
  count = 0
30
30
  MARC::AlephSequential::Reader.new(@batch).each_with_index{|r, i| count = i + 1}
31
31
  count.must_equal 31
32
32
  end
33
-
33
+
34
34
  it "yells when there's no leader" do
35
35
  error = nil
36
36
  begin
@@ -41,13 +41,13 @@ describe 'Reader' do
41
41
  error.wont_be_nil
42
42
  error.message.must_match /leader/
43
43
  end
44
-
44
+
45
45
  it "deals ok with embedded newline" do
46
46
  r = MARC::AlephSequential::Reader.new(@newline).first
47
47
  r['600']['a'].must_equal 'Cicero, Marcus Tullius'
48
48
  r['600']['x'].must_equal 'Manuscripts.'
49
49
  end
50
-
50
+
51
51
  it "works with lack of beginning '$$'" do
52
52
  r = nil # capture_io creates a lexical closure, so we need to define it out here
53
53
  out,err = capture_io do
@@ -56,7 +56,6 @@ describe 'Reader' do
56
56
  err.must_match /Variable field 245 doesn\'t start with \'\$\$/m
57
57
  r['245']['a'].must_equal 'The descent of manuscripts.'
58
58
  end
59
-
60
-
59
+
60
+
61
61
  end
62
-
data/spec/version_spec.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  require 'helper'
2
2
  require 'marc_alephsequential'
3
3
 
4
-
5
4
  describe "version" do
6
5
  it "must exist" do
7
6
  version = MarcAlephsequential.const_get('VERSION')
metadata CHANGED
@@ -1,17 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marc_alephsequential
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bill Dueber
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-07 00:00:00.000000000 Z
11
+ date: 2013-10-23 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A ruby-marc reader for Aleph sequential files, a MARC serialization supported
14
- by Ex Libris' Aleph
13
+ description: A ruby-marc reader for Aleph sequential files, a MARC serialization supported by Ex Libris' Aleph
15
14
  email: bill@dueber.com
16
15
  executables: []
17
16
  extensions: []
@@ -50,24 +49,24 @@ homepage: https://github.com/billdueber/marc_alephsequential#readme
50
49
  licenses:
51
50
  - MIT
52
51
  metadata: {}
53
- post_install_message:
52
+ post_install_message:
54
53
  rdoc_options: []
55
54
  require_paths:
56
55
  - lib
57
56
  required_ruby_version: !ruby/object:Gem::Requirement
58
57
  requirements:
59
- - - ! '>='
58
+ - - '>='
60
59
  - !ruby/object:Gem::Version
61
60
  version: '0'
62
61
  required_rubygems_version: !ruby/object:Gem::Requirement
63
62
  requirements:
64
- - - ! '>='
63
+ - - '>='
65
64
  - !ruby/object:Gem::Version
66
65
  version: '0'
67
66
  requirements: []
68
- rubyforge_project:
69
- rubygems_version: 2.1.5
70
- signing_key:
67
+ rubyforge_project:
68
+ rubygems_version: 2.1.9
69
+ signing_key:
71
70
  specification_version: 4
72
71
  summary: ruby-marc reader for Aleph sequential files
73
72
  test_files:
@@ -81,4 +80,4 @@ test_files:
81
80
  - spec/helper.rb
82
81
  - spec/reader_spec.rb
83
82
  - spec/version_spec.rb
84
- has_rdoc:
83
+ has_rdoc: