marcspec 0.2.1

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.
Files changed (37) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +59 -0
  5. data/Rakefile +58 -0
  6. data/VERSION +1 -0
  7. data/lib/marcspec/customspec.rb +97 -0
  8. data/lib/marcspec/kvmap.rb +79 -0
  9. data/lib/marcspec/map.rb +67 -0
  10. data/lib/marcspec/marcfieldspec.rb +205 -0
  11. data/lib/marcspec/multivaluemap.rb +62 -0
  12. data/lib/marcspec/solrfieldspec.rb +123 -0
  13. data/lib/marcspec/specset.rb +58 -0
  14. data/lib/marcspec.rb +11 -0
  15. data/lib/orig.rb +288 -0
  16. data/spec/data/batch.dat +1 -0
  17. data/spec/data/one.dat +1 -0
  18. data/spec/data/umich/translation_maps/area_map.properties +1039 -0
  19. data/spec/data/umich/translation_maps/availability_map_ht.properties +9 -0
  20. data/spec/data/umich/translation_maps/availability_map_umich.properties +6 -0
  21. data/spec/data/umich/translation_maps/callnumber_map.properties +21 -0
  22. data/spec/data/umich/translation_maps/callnumber_subject_map.properties +214 -0
  23. data/spec/data/umich/translation_maps/country_map.properties +320 -0
  24. data/spec/data/umich/translation_maps/format_map.properties +47 -0
  25. data/spec/data/umich/translation_maps/format_map_umich.properties +35 -0
  26. data/spec/data/umich/translation_maps/ht_namespace_map.properties +10 -0
  27. data/spec/data/umich/translation_maps/institution_map.properties +11 -0
  28. data/spec/data/umich/translation_maps/language_map.properties +489 -0
  29. data/spec/data/umich/translation_maps/library_map.properties +48 -0
  30. data/spec/data/umich/translation_maps/location_map.properties +345 -0
  31. data/spec/data/umich/umich_index.properties +130 -0
  32. data/spec/maps_spec.rb +91 -0
  33. data/spec/marcfieldspecs_spec.rb +109 -0
  34. data/spec/marcspec_spec.rb +10 -0
  35. data/spec/solrfieldspec_spec.rb +177 -0
  36. data/spec/spec_helper.rb +16 -0
  37. metadata +166 -0
@@ -0,0 +1,177 @@
1
+ require 'spec_helper'
2
+
3
+ describe "SolrFieldSpec" do
4
+ before do
5
+ @one = MARC4J4R::Reader.new("#{DIR}/data/one.dat").first
6
+ # @batch = MARC4J4R::Reader.new("#{DIR}/batch.dat").collect
7
+ @opts = {:solrField=>'solrfield'}
8
+ @titleAC = MARCSpec::VariableFieldSpec.new('245', ['a', 'c'])
9
+ @titleACValue = "The Texas ranger Sung by Beale D. Taylor."
10
+ @twosixtyC = MARCSpec::VariableFieldSpec.new('260', 'c')
11
+ @twosixtyCValue = "1939."
12
+
13
+ @nonmatchingSpec = MARCSpec::VariableFieldSpec.new('999', ['a', 'c'])
14
+
15
+ @default = 'DEFAULT'
16
+
17
+
18
+ @mapValue = "twosixtyCMapValue"
19
+ @mapValueForDefault = 'mapValueForDefaultValue'
20
+ @noMapKeyDefault = 'noMapKeyDefault'
21
+
22
+ @map = MARCSpec::KVMap.new('nameOfTheMap', {@twosixtyCValue => @mapValue, @default=>@mapValueForDefault})
23
+
24
+ end
25
+
26
+ it "works with a single fieldspec" do
27
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
28
+ sfs << @titleAC
29
+ sfs.marc_values(@one).should.equal [@titleACValue]
30
+ end
31
+
32
+
33
+ it "works with a double fieldspec" do
34
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
35
+ sfs << @titleAC
36
+ sfs << @twosixtyC
37
+ sfs.marc_values(@one).should.equal [@titleACValue, @twosixtyCValue]
38
+ end
39
+
40
+ it "preserves order" do
41
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
42
+ sfs << @twosixtyC
43
+ sfs << @titleAC
44
+ sfs.marc_values(@one).should.equal [@twosixtyCValue, @titleACValue]
45
+ end
46
+
47
+
48
+ it "works with firstOnly" do
49
+ @opts[:firstOnly] = true
50
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
51
+ sfs << @titleAC
52
+ sfs << @twosixtyC
53
+ sfs.marc_values(@one).should.equal [@titleACValue]
54
+ end
55
+
56
+ it "returns nothing where there are no matches" do
57
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
58
+ sfs << @nonmatchingSpec
59
+ sfs.marc_values(@one).should.equal []
60
+ end
61
+
62
+ it "works with a default" do
63
+ @opts[:default] = @default
64
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
65
+ sfs << @nonmatchingSpec
66
+ sfs.marc_values(@one).should.equal [@default]
67
+ end
68
+
69
+ it "works with a KV Map and no defaults" do
70
+ @opts[:map] = @map
71
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
72
+ sfs << @titleAC
73
+ sfs << @twosixtyC
74
+ sfs.marc_values(@one).should.equal [@mapValue]
75
+ end
76
+
77
+ it "works with a KV Map and just a map default" do
78
+ @opts[:map] = @map
79
+ @opts[:noMapKeyDefault] = @noMapKeyDefault
80
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
81
+ sfs << @titleAC # not in map, get noMapKeyDefault
82
+ sfs << @twosixtyC # in map, get mapValue
83
+ sfs.marc_values(@one).should.equal [@noMapKeyDefault, @mapValue]
84
+ end
85
+
86
+ it "works with a KV Map and returns default value correctly" do
87
+ @opts[:map] = @map
88
+ @opts[:default] = @default
89
+ @opts[:noMapKeyDefault] = @noMapKeyDefault
90
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
91
+ sfs << @nonmatchingSpec
92
+ sfs.marc_values(@one).should.equal [@default]
93
+ end
94
+
95
+ it "returns multiple values from a kv map when appropriate" do
96
+ @map[@twosixtyCValue] = ['one', 'two']
97
+ @opts[:map] = @map
98
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
99
+ sfs << @twosixtyC
100
+ sfs.marc_values(@one).sort.should.equal ['one', 'two']
101
+ end
102
+
103
+ it "flattens things out when getting multiple values from a kv map" do
104
+ @map[@titleACValue] = ['one', 'two']
105
+ @map[@twosixtyCValue] = ['three', 'four']
106
+ @opts[:map] = @map
107
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
108
+ sfs << @twosixtyC
109
+ sfs << @titleAC
110
+ sfs.marc_values(@one).sort.should.equal ['one', 'two', 'three', 'four'].sort
111
+ end
112
+
113
+
114
+ it "round trips if you add the map by hand" do
115
+ @opts[:map] = @map
116
+ @opts[:noMapKeyDefault] = @noMapKeyDefault
117
+ sfs = MARCSpec::SolrFieldSpec.new(@opts)
118
+ sfs << @titleAC # not in map, get noMapKeyDefault
119
+ sfs << @twosixtyC # in map, get mapValue
120
+
121
+ newsfs = MARCSpec::SolrFieldSpec.fromPPString(sfs.asPPString)
122
+ newsfs.map = @map
123
+ sfs.should.equal newsfs
124
+ end
125
+ end
126
+
127
+ module A
128
+ module B
129
+ def self.titleUp r, codes=nil
130
+ title = r['245']
131
+ if codes
132
+ return [title.sub_values(codes).join(' ').upcase]
133
+ else
134
+ return [title.value.upcase]
135
+ end
136
+ end
137
+ end
138
+ end
139
+
140
+
141
+
142
+ describe "CustomSolrSpec" do
143
+ before do
144
+ @one = MARC4J4R::Reader.new("#{DIR}/data/one.dat").first
145
+ @opts = {:solrField=>'solrfield'}
146
+ @titleACValue = "The Texas ranger Sung by Beale D. Taylor."
147
+ @twosixtyCValue = "1939."
148
+ @mapValue = "titleACUppercaseValue"
149
+ @mapValueForDefault = 'mapValueForDefaultValue'
150
+ @noMapKeyDefault = 'noMapKeyDefault'
151
+
152
+ @map = MARCSpec::KVMap.new('nameOfTheMap', {@titleACValue.upcase => @mapValue, @default=>@mapValueForDefault})
153
+ end
154
+
155
+ it "works with no args or map" do
156
+ css = MARCSpec::CustomSolrSpec.new(:solrField=>'solrField', :module=>A::B, :methodSymbol=>:titleUp)
157
+ css.marc_values(@one).should.equal [@one['245'].value.upcase]
158
+ end
159
+
160
+ it "accepts nil for no args" do
161
+ css = MARCSpec::CustomSolrSpec.new(:solrField=>'solrField', :module=>A::B, :methodSymbol=>:titleUp, :methodArgs=>nil)
162
+ css.marc_values(@one).should.equal [@one['245'].value.upcase]
163
+ end
164
+
165
+
166
+ it "uses a custom method with args but no map" do
167
+ css = MARCSpec::CustomSolrSpec.new(:solrField=>'solrField', :module=>A::B, :methodSymbol=>:titleUp, :methodArgs=>[['a', 'c']])
168
+ css.marc_values(@one).should.equal [@titleACValue.upcase]
169
+ end
170
+
171
+ it "works with a map" do
172
+ css = MARCSpec::CustomSolrSpec.new(:solrField=>'solrField', :map=>@map, :module=>A::B, :methodSymbol=>:titleUp, :methodArgs=>[['a', 'c']])
173
+ css.marc_values(@one).should.equal [@mapValue]
174
+ end
175
+
176
+ end
177
+
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ require 'bacon'
3
+ require 'marc4j4r'
4
+ require 'tempfile'
5
+ begin
6
+ require 'greeneggs'
7
+ rescue LoadError
8
+ end
9
+
10
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
11
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
12
+ require 'marcspec'
13
+
14
+ DIR = File.dirname(__FILE__)
15
+
16
+ Bacon.summary_on_exit
metadata ADDED
@@ -0,0 +1,166 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: marcspec
3
+ version: !ruby/object:Gem::Version
4
+ hash: 21
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 1
10
+ version: 0.2.1
11
+ platform: ruby
12
+ authors:
13
+ - BillDueber
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-08-11 00:00:00 -04:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: bacon
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :development
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: yard
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: marc4j4r
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 59
58
+ segments:
59
+ - 0
60
+ - 9
61
+ - 0
62
+ version: 0.9.0
63
+ type: :runtime
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: jruby_streaming_update_solr_server
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 23
74
+ segments:
75
+ - 0
76
+ - 2
77
+ - 0
78
+ version: 0.2.0
79
+ type: :runtime
80
+ version_requirements: *id004
81
+ description: Relies on marc4j4r, based on work in solrmarc
82
+ email: bill@dueber.com
83
+ executables: []
84
+
85
+ extensions: []
86
+
87
+ extra_rdoc_files:
88
+ - LICENSE
89
+ - README.rdoc
90
+ files:
91
+ - .document
92
+ - .gitignore
93
+ - LICENSE
94
+ - README.rdoc
95
+ - Rakefile
96
+ - VERSION
97
+ - lib/marcspec.rb
98
+ - lib/marcspec/customspec.rb
99
+ - lib/marcspec/kvmap.rb
100
+ - lib/marcspec/map.rb
101
+ - lib/marcspec/marcfieldspec.rb
102
+ - lib/marcspec/multivaluemap.rb
103
+ - lib/marcspec/solrfieldspec.rb
104
+ - lib/marcspec/specset.rb
105
+ - lib/orig.rb
106
+ - spec/data/batch.dat
107
+ - spec/data/one.dat
108
+ - spec/data/umich/translation_maps/area_map.properties
109
+ - spec/data/umich/translation_maps/availability_map_ht.properties
110
+ - spec/data/umich/translation_maps/availability_map_umich.properties
111
+ - spec/data/umich/translation_maps/callnumber_map.properties
112
+ - spec/data/umich/translation_maps/callnumber_subject_map.properties
113
+ - spec/data/umich/translation_maps/country_map.properties
114
+ - spec/data/umich/translation_maps/format_map.properties
115
+ - spec/data/umich/translation_maps/format_map_umich.properties
116
+ - spec/data/umich/translation_maps/ht_namespace_map.properties
117
+ - spec/data/umich/translation_maps/institution_map.properties
118
+ - spec/data/umich/translation_maps/language_map.properties
119
+ - spec/data/umich/translation_maps/library_map.properties
120
+ - spec/data/umich/translation_maps/location_map.properties
121
+ - spec/data/umich/umich_index.properties
122
+ - spec/maps_spec.rb
123
+ - spec/marcfieldspecs_spec.rb
124
+ - spec/marcspec_spec.rb
125
+ - spec/solrfieldspec_spec.rb
126
+ - spec/spec_helper.rb
127
+ has_rdoc: true
128
+ homepage: http://github.com/billdueber/marcspec
129
+ licenses: []
130
+
131
+ post_install_message:
132
+ rdoc_options:
133
+ - --charset=UTF-8
134
+ require_paths:
135
+ - lib
136
+ required_ruby_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ hash: 3
142
+ segments:
143
+ - 0
144
+ version: "0"
145
+ required_rubygems_version: !ruby/object:Gem::Requirement
146
+ none: false
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ hash: 3
151
+ segments:
152
+ - 0
153
+ version: "0"
154
+ requirements: []
155
+
156
+ rubyforge_project:
157
+ rubygems_version: 1.3.7
158
+ signing_key:
159
+ specification_version: 3
160
+ summary: Extract data from MARC records and send to Solr
161
+ test_files:
162
+ - spec/maps_spec.rb
163
+ - spec/marcfieldspecs_spec.rb
164
+ - spec/marcspec_spec.rb
165
+ - spec/solrfieldspec_spec.rb
166
+ - spec/spec_helper.rb