traject 2.3.4 → 3.0.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +16 -9
  3. data/CHANGES.md +74 -1
  4. data/Gemfile +2 -1
  5. data/README.md +104 -53
  6. data/Rakefile +8 -1
  7. data/doc/indexing_rules.md +79 -63
  8. data/doc/programmatic_use.md +218 -0
  9. data/doc/settings.md +28 -1
  10. data/doc/xml.md +134 -0
  11. data/lib/traject.rb +5 -0
  12. data/lib/traject/array_writer.rb +34 -0
  13. data/lib/traject/command_line.rb +18 -22
  14. data/lib/traject/debug_writer.rb +2 -5
  15. data/lib/traject/experimental_nokogiri_streaming_reader.rb +276 -0
  16. data/lib/traject/hashie/indifferent_access_fix.rb +25 -0
  17. data/lib/traject/indexer.rb +321 -92
  18. data/lib/traject/indexer/context.rb +39 -13
  19. data/lib/traject/indexer/marc_indexer.rb +30 -0
  20. data/lib/traject/indexer/nokogiri_indexer.rb +30 -0
  21. data/lib/traject/indexer/settings.rb +36 -53
  22. data/lib/traject/indexer/step.rb +27 -33
  23. data/lib/traject/macros/marc21.rb +37 -12
  24. data/lib/traject/macros/nokogiri_macros.rb +43 -0
  25. data/lib/traject/macros/transformation.rb +162 -0
  26. data/lib/traject/marc_extractor.rb +2 -0
  27. data/lib/traject/ndj_reader.rb +1 -1
  28. data/lib/traject/nokogiri_reader.rb +179 -0
  29. data/lib/traject/oai_pmh_nokogiri_reader.rb +159 -0
  30. data/lib/traject/solr_json_writer.rb +19 -12
  31. data/lib/traject/thread_pool.rb +13 -0
  32. data/lib/traject/util.rb +14 -2
  33. data/lib/traject/version.rb +1 -1
  34. data/test/debug_writer_test.rb +3 -3
  35. data/test/delimited_writer_test.rb +3 -3
  36. data/test/experimental_nokogiri_streaming_reader_test.rb +169 -0
  37. data/test/indexer/context_test.rb +23 -13
  38. data/test/indexer/error_handler_test.rb +59 -0
  39. data/test/indexer/macros/macros_marc21_semantics_test.rb +46 -46
  40. data/test/indexer/macros/marc21/extract_all_marc_values_test.rb +1 -1
  41. data/test/indexer/macros/marc21/extract_marc_test.rb +19 -9
  42. data/test/indexer/macros/marc21/serialize_marc_test.rb +4 -4
  43. data/test/indexer/macros/to_field_test.rb +2 -2
  44. data/test/indexer/macros/transformation_test.rb +177 -0
  45. data/test/indexer/map_record_test.rb +2 -3
  46. data/test/indexer/nokogiri_indexer_test.rb +103 -0
  47. data/test/indexer/process_record_test.rb +55 -0
  48. data/test/indexer/process_with_test.rb +148 -0
  49. data/test/indexer/read_write_test.rb +52 -2
  50. data/test/indexer/settings_test.rb +34 -24
  51. data/test/indexer/to_field_test.rb +27 -2
  52. data/test/marc_extractor_test.rb +7 -7
  53. data/test/marc_reader_test.rb +4 -4
  54. data/test/nokogiri_reader_test.rb +158 -0
  55. data/test/oai_pmh_nokogiri_reader_test.rb +23 -0
  56. data/test/solr_json_writer_test.rb +24 -28
  57. data/test/test_helper.rb +8 -2
  58. data/test/test_support/namespace-test.xml +7 -0
  59. data/test/test_support/nokogiri_demo_config.rb +17 -0
  60. data/test/test_support/oai-pmh-one-record-2.xml +24 -0
  61. data/test/test_support/oai-pmh-one-record-first.xml +24 -0
  62. data/test/test_support/sample-oai-no-namespace.xml +197 -0
  63. data/test/test_support/sample-oai-pmh.xml +197 -0
  64. data/test/thread_pool_test.rb +38 -0
  65. data/test/translation_map_test.rb +3 -3
  66. data/test/translation_maps/ruby_map.rb +2 -1
  67. data/test/translation_maps/yaml_map.yaml +2 -1
  68. data/traject.gemspec +4 -11
  69. metadata +92 -6
@@ -22,16 +22,16 @@ describe "Traject::Macros::Marc21Semantics" do
22
22
  end
23
23
 
24
24
  it "oclcnum" do
25
- @indexer.instance_eval do
25
+ @indexer.configure do
26
26
  to_field "oclcnum", oclcnum
27
27
  end
28
28
  output = @indexer.map_record(@record)
29
29
 
30
30
  assert_equal %w{47971712}, output["oclcnum"]
31
-
31
+
32
32
  assert_equal({}, @indexer.map_record(empty_record))
33
33
  end
34
-
34
+
35
35
  it "deals with all prefixed OCLC nunbers" do
36
36
  @record.append(MARC::DataField.new('035', ' ', ' ', ['a', '(OCoLC)ocm111111111']))
37
37
  @record.append(MARC::DataField.new('035', ' ', ' ', ['a', '(OCoLC)222222222']))
@@ -40,21 +40,21 @@ describe "Traject::Macros::Marc21Semantics" do
40
40
  @record.append(MARC::DataField.new('035', ' ', ' ', ['a', '(OCoLC)ocn555555555']))
41
41
  @record.append(MARC::DataField.new('035', ' ', ' ', ['a', '(OCoLC)on666666666']))
42
42
  @record.append(MARC::DataField.new('035', ' ', ' ', ['a', '777777777'])) # not OCLC number
43
-
44
- @indexer.instance_eval do
43
+
44
+ @indexer.configure do
45
45
  to_field "oclcnum", oclcnum
46
46
  end
47
47
  output = @indexer.map_record(@record)
48
48
 
49
49
  assert_equal %w{47971712 111111111 222222222 333333333 444444444 555555555 666666666}, output["oclcnum"]
50
50
  end
51
-
52
-
51
+
52
+
53
53
 
54
54
  it "#marc_series_facet" do
55
55
  @record = MARC::Reader.new(support_file_path "louis_armstrong.marc").to_a.first
56
56
 
57
- @indexer.instance_eval do
57
+ @indexer.configure do
58
58
  to_field "series_facet", marc_series_facet
59
59
  end
60
60
  output = @indexer.map_record(@record)
@@ -62,14 +62,14 @@ describe "Traject::Macros::Marc21Semantics" do
62
62
  # trims punctuation too
63
63
  assert_equal ["Big bands"], output["series_facet"]
64
64
  assert_equal({}, @indexer.map_record(empty_record))
65
-
65
+
66
66
  end
67
67
 
68
68
  describe "marc_sortable_author" do
69
69
  # these probably should be taking only certain subfields, but we're copying
70
70
  # from SolrMarc that didn't do so either and nobody noticed, so not bothering for now.
71
71
  before do
72
- @indexer.instance_eval do
72
+ @indexer.configure do
73
73
  to_field "author_sort", marc_sortable_author
74
74
  end
75
75
  end
@@ -78,7 +78,7 @@ describe "Traject::Macros::Marc21Semantics" do
78
78
 
79
79
  assert_equal ["Herman, Edward S. Manufacturing consent the political economy of the mass media Edward S. Herman and Noam Chomsky ; with a new introduction by the authors"], output["author_sort"]
80
80
  assert_equal [""], @indexer.map_record(empty_record)['author_sort']
81
-
81
+
82
82
  end
83
83
  it "respects non-filing" do
84
84
  @record = MARC::Reader.new(support_file_path "the_business_ren.marc").to_a.first
@@ -87,19 +87,19 @@ describe "Traject::Macros::Marc21Semantics" do
87
87
 
88
88
  assert_equal ["Business renaissance quarterly [electronic resource]."], output["author_sort"]
89
89
  assert_equal [""], @indexer.map_record(empty_record)['author_sort']
90
-
90
+
91
91
  end
92
92
  end
93
93
 
94
94
  describe "marc_sortable_title" do
95
95
  before do
96
- @indexer.instance_eval { to_field "title_sort", marc_sortable_title }
96
+ @indexer.configure { to_field "title_sort", marc_sortable_title }
97
97
  end
98
98
  it "works" do
99
99
  output = @indexer.map_record(@record)
100
100
  assert_equal ["Manufacturing consent : the political economy of the mass media"], output["title_sort"]
101
101
  assert_equal({}, @indexer.map_record(empty_record))
102
-
102
+
103
103
  end
104
104
  it "respects non-filing" do
105
105
  @record = MARC::Reader.new(support_file_path "the_business_ren.marc").to_a.first
@@ -116,7 +116,7 @@ describe "Traject::Macros::Marc21Semantics" do
116
116
 
117
117
  describe "marc_languages" do
118
118
  before do
119
- @indexer.instance_eval {to_field "languages", marc_languages() }
119
+ @indexer.configure {to_field "languages", marc_languages() }
120
120
  end
121
121
 
122
122
  it "unpacks packed 041a and translates" do
@@ -125,14 +125,14 @@ describe "Traject::Macros::Marc21Semantics" do
125
125
 
126
126
  assert_equal ["English", "French", "German", "Italian", "Spanish", "Russian"], output["languages"]
127
127
  assert_equal({}, @indexer.map_record(empty_record))
128
-
128
+
129
129
  end
130
130
  end
131
131
 
132
132
  describe "marc_instrumentation_humanized" do
133
133
  before do
134
134
  @record = MARC::Reader.new(support_file_path "musical_cage.marc").to_a.first
135
- @indexer.instance_eval {to_field "instrumentation", marc_instrumentation_humanized }
135
+ @indexer.configure {to_field "instrumentation", marc_instrumentation_humanized }
136
136
  end
137
137
 
138
138
  it "translates, de-duping" do
@@ -140,14 +140,14 @@ describe "Traject::Macros::Marc21Semantics" do
140
140
 
141
141
  assert_equal ["Larger ensemble, Unspecified", "Piano", "Soprano voice", "Tenor voice", "Violin", "Larger ensemble, Ethnic", "Guitar", "Voices, Unspecified"], output["instrumentation"]
142
142
  assert_equal({}, @indexer.map_record(empty_record))
143
-
143
+
144
144
  end
145
145
  end
146
146
 
147
147
  describe "marc_instrument_codes_normalized" do
148
148
  before do
149
149
  @record = MARC::Reader.new(support_file_path "musical_cage.marc").to_a.first
150
- @indexer.instance_eval {to_field "instrument_codes", marc_instrument_codes_normalized }
150
+ @indexer.configure {to_field "instrument_codes", marc_instrument_codes_normalized }
151
151
  end
152
152
  it "normalizes, de-duping" do
153
153
  output = @indexer.map_record(@record)
@@ -161,27 +161,27 @@ describe "Traject::Macros::Marc21Semantics" do
161
161
 
162
162
  assert_equal ["bb01", "bb01.s", "bb", "bb.s", "oe"], output["instrument_codes"]
163
163
  assert_equal({}, @indexer.map_record(empty_record))
164
-
164
+
165
165
  end
166
166
  end
167
167
 
168
168
  describe "publication_date" do
169
169
  # there are way too many edge cases for us to test em all, but we'll test some of em.
170
-
170
+
171
171
  it "works when there's no date information" do
172
172
  assert_nil Marc21Semantics.publication_date(empty_record)
173
173
  end
174
-
174
+
175
175
  it "uses macro correctly with no date info" do
176
- @indexer.instance_eval {to_field "date", marc_publication_date }
176
+ @indexer.configure {to_field "date", marc_publication_date }
177
177
  assert_equal({}, @indexer.map_record(empty_record))
178
178
  end
179
-
180
-
179
+
180
+
181
181
  it "pulls out 008 date_type s" do
182
182
  @record = MARC::Reader.new(support_file_path "manufacturing_consent.marc").to_a.first
183
183
  assert_equal 2002, Marc21Semantics.publication_date(@record)
184
-
184
+
185
185
  end
186
186
  it "uses start date for date_type c continuing resource" do
187
187
  @record = MARC::Reader.new(support_file_path "the_business_ren.marc").to_a.first
@@ -221,14 +221,14 @@ describe "Traject::Macros::Marc21Semantics" do
221
221
 
222
222
  describe "marc_lcc_to_broad_category" do
223
223
  before do
224
- @indexer.instance_eval {to_field "discipline_facet", marc_lcc_to_broad_category }
224
+ @indexer.configure { to_field "discipline_facet", marc_lcc_to_broad_category }
225
225
  end
226
226
  it "maps a simple example" do
227
227
  @record = MARC::Reader.new(support_file_path "manufacturing_consent.marc").to_a.first
228
228
  output = @indexer.map_record(@record)
229
229
 
230
230
  assert_equal ["Language & Literature"], output["discipline_facet"]
231
-
231
+
232
232
  end
233
233
  it "maps to default" do
234
234
  @record = MARC::Reader.new(support_file_path "musical_cage.marc").to_a.first
@@ -238,14 +238,14 @@ describe "Traject::Macros::Marc21Semantics" do
238
238
  end
239
239
 
240
240
  it "maps to nothing if none and no default" do
241
- @indexer.instance_eval {to_field "discipline_no_default", marc_lcc_to_broad_category(:default => nil)}
241
+ @indexer.configure { to_field "discipline_no_default", marc_lcc_to_broad_category(:default => nil) }
242
242
  @record = MARC::Reader.new(support_file_path "musical_cage.marc").to_a.first
243
243
  output = @indexer.map_record(@record)
244
244
 
245
245
  assert_nil output["discipline_no_default"]
246
-
246
+
247
247
  assert_nil @indexer.map_record(empty_record)["discipline_no_default"]
248
-
248
+
249
249
  end
250
250
 
251
251
  describe "LCC_REGEX" do
@@ -258,7 +258,7 @@ describe "Traject::Macros::Marc21Semantics" do
258
258
 
259
259
  describe "marc_geo_facet" do
260
260
  before do
261
- @indexer.instance_eval {to_field "geo_facet", marc_geo_facet }
261
+ @indexer.configure { to_field "geo_facet", marc_geo_facet }
262
262
  end
263
263
  it "maps a complicated record" do
264
264
  @record = MARC::Reader.new(support_file_path "multi_geo.marc").to_a.first
@@ -272,13 +272,13 @@ describe "Traject::Macros::Marc21Semantics" do
272
272
  output = @indexer.map_record(@record)
273
273
  assert_nil output["geo_facet"]
274
274
  assert_equal({}, @indexer.map_record(empty_record))
275
-
275
+
276
276
  end
277
277
  end
278
278
 
279
279
  describe "marc_era_facet" do
280
280
  before do
281
- @indexer.instance_eval {to_field "era_facet", marc_era_facet}
281
+ @indexer.configure { to_field "era_facet", marc_era_facet }
282
282
  end
283
283
  it "maps a complicated record" do
284
284
  @record = MARC::Reader.new(support_file_path "multi_era.marc").to_a.first
@@ -287,12 +287,12 @@ describe "Traject::Macros::Marc21Semantics" do
287
287
  assert_equal ["Early modern, 1500-1700", "17th century", "Great Britain: Puritan Revolution, 1642-1660", "Great Britain: Civil War, 1642-1649", "1642-1660"],
288
288
  output["era_facet"]
289
289
  assert_equal({}, @indexer.map_record(empty_record))
290
-
290
+
291
291
  end
292
292
  end
293
293
 
294
294
  describe "marc_lcsh_display" do
295
- it "formats typical field" do
295
+ it "formats typical field" do
296
296
  field = MARC::DataField.new('650', ' ', ' ', ['a', 'Psychoanalysis and literature'], ['z', 'England'], ['x', 'History'], ['y', '19th century.'])
297
297
  str = Marc21Semantics.assemble_lcsh(field)
298
298
 
@@ -307,7 +307,7 @@ describe "Traject::Macros::Marc21Semantics" do
307
307
  assert_equal "Psychoanalysis and literature — History", str
308
308
  end
309
309
 
310
- it "doesn't put subdivision in wrong place" do
310
+ it "doesn't put subdivision in wrong place" do
311
311
  field = MARC::DataField.new('600', ' ', ' ', ['a', 'Eliot, George,'],['d', '1819-1880.'], ['t', 'Middlemarch'])
312
312
  str = Marc21Semantics.assemble_lcsh(field)
313
313
 
@@ -329,14 +329,14 @@ describe "Traject::Macros::Marc21Semantics" do
329
329
  describe "marc_lcsh_formatted macro" do
330
330
  it "smoke test" do
331
331
  @record = MARC::Reader.new(support_file_path "george_eliot.marc").to_a.first
332
- @indexer.instance_eval {to_field "lcsh", marc_lcsh_formatted}
332
+ @indexer.configure { to_field "lcsh", marc_lcsh_formatted }
333
333
  output = @indexer.map_record(@record)
334
334
 
335
335
  assert output["lcsh"].length > 0, "outputs data"
336
336
  assert output["lcsh"].include?("Eliot, George, 1819-1880 — Characters"), "includes a string its supposed to"
337
-
337
+
338
338
  assert_equal({}, @indexer.map_record(empty_record))
339
-
339
+
340
340
  end
341
341
  end
342
342
  end
@@ -347,17 +347,17 @@ describe "Traject::Macros::Marc21Semantics" do
347
347
  end
348
348
 
349
349
  it "works as expected" do
350
- @indexer.instance_eval do
350
+ @indexer.configure do
351
351
  to_field 'title_phrase', extract_marc_filing_version('245ab')
352
352
  end
353
353
  output = @indexer.map_record(@record)
354
354
  assert_equal ['Business renaissance quarterly'], output['title_phrase']
355
355
  assert_equal({}, @indexer.map_record(empty_record))
356
-
356
+
357
357
  end
358
358
 
359
359
  it "works with :include_original" do
360
- @indexer.instance_eval do
360
+ @indexer.configure do
361
361
  to_field 'title_phrase', extract_marc_filing_version('245ab', :include_original=>true)
362
362
  end
363
363
  output = @indexer.map_record(@record)
@@ -366,19 +366,19 @@ describe "Traject::Macros::Marc21Semantics" do
366
366
  end
367
367
 
368
368
  it "doesn't do anything if you don't include the first subfield" do
369
- @indexer.instance_eval do
369
+ @indexer.configure do
370
370
  to_field 'title_phrase', extract_marc_filing_version('245h')
371
371
  end
372
372
  output = @indexer.map_record(@record)
373
373
  assert_equal ['[electronic resource].'], output['title_phrase']
374
374
  assert_equal({}, @indexer.map_record(empty_record))
375
-
375
+
376
376
  end
377
377
 
378
378
 
379
379
  it "dies if you pass it something else" do
380
380
  assert_raises(RuntimeError) do
381
- @indexer.instance_eval do
381
+ @indexer.configure do
382
382
  to_field 'title_phrase', extract_marc_filing_version('245ab', :include_original=>true, :uniq => true)
383
383
  end
384
384
  end
@@ -31,7 +31,7 @@ describe "The extract_all_marc_values macro" do
31
31
  end
32
32
 
33
33
  it "#extract_all_marc_values" do
34
- @indexer.instance_eval do
34
+ @indexer.configure do
35
35
  to_field "text", extract_all_marc_values
36
36
  end
37
37
  output = @indexer.map_record(@record)
@@ -17,7 +17,7 @@ describe "extract_marc" do
17
17
 
18
18
 
19
19
  it "extracts marc" do
20
- @indexer.instance_eval do
20
+ @indexer.configure do
21
21
  to_field "title", extract_marc("245ab")
22
22
  end
23
23
 
@@ -29,7 +29,7 @@ describe "extract_marc" do
29
29
  end
30
30
 
31
31
  it "respects :first=>true option" do
32
- @indexer.instance_eval do
32
+ @indexer.configure do
33
33
  to_field "other_id", extract_marc("035a", :first => true)
34
34
  end
35
35
 
@@ -40,7 +40,7 @@ describe "extract_marc" do
40
40
  end
41
41
 
42
42
  it "trims punctuation with :trim_punctuation => true" do
43
- @indexer.instance_eval do
43
+ @indexer.configure do
44
44
  to_field "title", extract_marc("245ab", :trim_punctuation => true)
45
45
  end
46
46
 
@@ -48,11 +48,21 @@ describe "extract_marc" do
48
48
 
49
49
  assert_equal ["Manufacturing consent : the political economy of the mass media"], output["title"]
50
50
  assert_equal({}, @indexer.map_record(empty_record))
51
+ end
52
+
53
+ it "can use trim_punctuation as transformation macro" do
54
+ @indexer.configure do
55
+ to_field "title", extract_marc("245ab"), trim_punctuation
56
+ end
51
57
 
58
+ output = @indexer.map_record(@record)
59
+
60
+ assert_equal ["Manufacturing consent : the political economy of the mass media"], output["title"]
61
+ assert_equal({}, @indexer.map_record(empty_record))
52
62
  end
53
63
 
54
64
  it "respects :default option" do
55
- @indexer.instance_eval do
65
+ @indexer.configure do
56
66
  to_field "only_default", extract_marc("9999", :default => "DEFAULT VALUE")
57
67
  end
58
68
  output = @indexer.map_record(@record)
@@ -65,7 +75,7 @@ describe "extract_marc" do
65
75
  f = @record.fields('008').first
66
76
  @record.append(f)
67
77
 
68
- @indexer.instance_eval do
78
+ @indexer.configure do
69
79
  to_field "lang1", extract_marc('008[35-37]')
70
80
  to_field "lang2", extract_marc('008[35-37]', :allow_duplicates => true)
71
81
  end
@@ -78,7 +88,7 @@ describe "extract_marc" do
78
88
 
79
89
  it "fails on an extra/misspelled argument to extract_marc" do
80
90
  assert_raises(RuntimeError) do
81
- @indexer.instance_eval do
91
+ @indexer.configure do
82
92
  to_field "foo", extract_marc("9999", :misspelled => "Who cares")
83
93
  end
84
94
  end
@@ -86,7 +96,7 @@ describe "extract_marc" do
86
96
 
87
97
 
88
98
  it "throws away nil values unless settings['allow_nil_values]'" do
89
- @indexer.instance_eval do
99
+ @indexer.configure do
90
100
  to_field 'default_nil', extract_marc('9999', :default => nil)
91
101
  end
92
102
  output = @indexer.map_record(@record)
@@ -98,7 +108,7 @@ describe "extract_marc" do
98
108
  @indexer.settings do |s|
99
109
  s['allow_nil_values'] = true
100
110
  end
101
- @indexer.instance_eval do
111
+ @indexer.configure do
102
112
  to_field 'default_nil', extract_marc('9999', :default => nil)
103
113
  end
104
114
  output = @indexer.map_record(@record)
@@ -109,7 +119,7 @@ describe "extract_marc" do
109
119
 
110
120
 
111
121
  it "uses :translation_map" do
112
- @indexer.instance_eval do
122
+ @indexer.configure do
113
123
  to_field "cataloging_agency", extract_marc("040a", :separator => nil, :translation_map => "marc_040a_translate_test")
114
124
  end
115
125
  output = @indexer.map_record(@record)
@@ -15,7 +15,7 @@ describe "serialized_marc" do
15
15
  end
16
16
 
17
17
  it "serializes xml" do
18
- @indexer.instance_eval do
18
+ @indexer.configure do
19
19
  to_field "marc_record", serialized_marc(:format => "xml")
20
20
  end
21
21
  output = @indexer.map_record(@record)
@@ -27,7 +27,7 @@ describe "serialized_marc" do
27
27
  end
28
28
 
29
29
  it "serializes binary UUEncoded" do
30
- @indexer.instance_eval do
30
+ @indexer.configure do
31
31
  to_field "marc_record", serialized_marc(:format => "binary")
32
32
  end
33
33
  output = @indexer.map_record(@record)
@@ -42,7 +42,7 @@ describe "serialized_marc" do
42
42
  end
43
43
 
44
44
  it "serializes binary raw" do
45
- @indexer.instance_eval do
45
+ @indexer.configure do
46
46
  to_field "marc_record", serialized_marc(:format => "binary", :binary_escape => false)
47
47
  end
48
48
  output = @indexer.map_record(@record)
@@ -55,7 +55,7 @@ describe "serialized_marc" do
55
55
  end
56
56
 
57
57
  it "serializes json" do
58
- @indexer.instance_eval do
58
+ @indexer.configure do
59
59
  to_field "marc_record", serialized_marc(:format => "json")
60
60
  end
61
61
  output = @indexer.map_record(@record)
@@ -7,7 +7,7 @@ describe "Indexer Macros#to_field" do
7
7
  end
8
8
 
9
9
  it "works with simple literal" do
10
- @indexer.instance_eval do
10
+ @indexer.configure do
11
11
  extend Traject::Macros::Basic
12
12
 
13
13
  to_field "source", literal("MY LIBRARY")
@@ -21,7 +21,7 @@ describe "Indexer Macros#to_field" do
21
21
  it "works with macro AND block" do
22
22
  called = false
23
23
 
24
- @indexer.instance_eval do
24
+ @indexer.configure do
25
25
  extend Traject::Macros::Basic
26
26
  to_field "source", literal("MY LIBRARY") do |record, accumulator, context|
27
27
  called = true