sqed 0.3.2 → 0.4.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.
- checksums.yaml +4 -4
- data/.ruby-version +1 -1
- data/Guardfile +66 -0
- data/lib/sqed.rb +120 -68
- data/lib/sqed/boundaries.rb +30 -25
- data/lib/sqed/boundary_finder.rb +221 -212
- data/lib/sqed/boundary_finder/color_line_finder.rb +50 -42
- data/lib/sqed/boundary_finder/cross_finder.rb +3 -3
- data/lib/sqed/boundary_finder/stage_finder.rb +8 -3
- data/lib/sqed/extractor.rb +23 -25
- data/lib/sqed/parser.rb +4 -7
- data/lib/sqed/parser/barcode_parser.rb +5 -5
- data/lib/sqed/parser/ocr_parser.rb +46 -46
- data/lib/sqed/result.rb +60 -57
- data/lib/sqed/version.rb +1 -1
- data/lib/sqed_config.rb +52 -56
- data/spec/lib/sqed/boundaries_spec.rb +1 -1
- data/spec/lib/sqed/boundary_finder/color_line_finder_spec.rb +24 -24
- data/spec/lib/sqed/boundary_finder/cross_finder_spec.rb +1 -1
- data/spec/lib/sqed/boundary_finder/stage_finder_spec.rb +1 -1
- data/spec/lib/sqed/boundary_finder_spec.rb +73 -45
- data/spec/lib/sqed/extractor_spec.rb +4 -4
- data/spec/lib/sqed/parser/ocr_spec.rb +2 -2
- data/spec/lib/sqed_spec.rb +39 -39
- data/spec/lib/stage_handling/seven_slot_spec.rb +45 -9
- data/spec/support/files/stage_images/inhs_7_slot2.jpg +0 -0
- data/spec/support/image_helpers.rb +10 -9
- metadata +6 -3
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Sqed::BoundaryFinder::CrossFinder do
|
4
4
|
let(:image) { ImageHelpers.of_size(800, 600) }
|
5
|
-
let(:b) {Sqed::BoundaryFinder::CrossFinder.new(
|
5
|
+
let(:b) {Sqed::BoundaryFinder::CrossFinder.new(image: image)}
|
6
6
|
let(:c) {b.boundaries}
|
7
7
|
|
8
8
|
specify '#boundaries returns a Sqed::Boundaries instance' do
|
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe Sqed::BoundaryFinder::StageFinder do
|
4
|
-
let(:b) {Sqed::BoundaryFinder::StageFinder.new(
|
4
|
+
let(:b) {Sqed::BoundaryFinder::StageFinder.new(image: ImageHelpers.cross_green )}
|
5
5
|
|
6
6
|
specify '#is border contains a proc' do
|
7
7
|
expect(b.is_border.class).to eq(Proc)
|
@@ -7,7 +7,7 @@ describe Sqed::BoundaryFinder do
|
|
7
7
|
end
|
8
8
|
|
9
9
|
context 'when initiated with an image' do
|
10
|
-
let(:b) {Sqed::BoundaryFinder.new(
|
10
|
+
let(:b) {Sqed::BoundaryFinder.new(image: ImageHelpers.cross_green, layout: :vertical_offset_cross)}
|
11
11
|
|
12
12
|
context 'attributes' do
|
13
13
|
specify '#image' do
|
@@ -20,16 +20,16 @@ describe Sqed::BoundaryFinder do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
-
context '.color_boundary_finder(
|
23
|
+
context '.color_boundary_finder(image: image)' do
|
24
24
|
context 'with sample_subdivision_size: 10' do
|
25
25
|
specify 'finds the vertical dividing line in a standard cross, with border still present' do
|
26
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
26
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.cross_green, sample_subdivision_size: 10 )[1]
|
27
27
|
expect(center).to be > 492
|
28
28
|
expect(center).to be < 504
|
29
29
|
end
|
30
30
|
|
31
31
|
specify 'finds the vertical dividing line in a right t green cross, with border still present' do
|
32
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
32
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.right_t_green, sample_subdivision_size: 10)[1]
|
33
33
|
expect(center).to be > 695
|
34
34
|
expect(center).to be < 705
|
35
35
|
end
|
@@ -37,59 +37,59 @@ describe Sqed::BoundaryFinder do
|
|
37
37
|
|
38
38
|
context 'with sample_subdivision_size auto set' do
|
39
39
|
specify 'finds the vertical dividing line in a standard cross, with border still present, when more precise' do
|
40
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
40
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.cross_green, sample_cutoff_factor: 0.7)[1]
|
41
41
|
expect(center).to be > 492
|
42
42
|
expect(center).to be < 504
|
43
43
|
end
|
44
44
|
|
45
45
|
specify 'finds the vertical dividing line a real image, with border still present' do
|
46
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
46
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.crossy_green_line_specimen)[1]
|
47
47
|
expect(center).to be > 2452
|
48
48
|
expect(center).to be < 2495
|
49
49
|
end
|
50
50
|
|
51
51
|
specify 'finds the vertical dividing line a real image, with border still present, with 10x fewer subsamples' do
|
52
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
52
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.crossy_green_line_specimen, sample_subdivision_size: 100 )[1]
|
53
53
|
expect(center).to be > 2452
|
54
54
|
expect(center).to be < 2495
|
55
55
|
end
|
56
56
|
|
57
57
|
specify 'finds the vertical dividing line a real image, with border still present, with 50x fewer subsamples' do
|
58
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
58
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.crossy_green_line_specimen, sample_subdivision_size: 500 )[1]
|
59
59
|
expect(center).to be > 2452
|
60
60
|
expect(center).to be < 2495
|
61
61
|
end
|
62
62
|
|
63
63
|
specify 'FAILS to find the vertical dividing line a real image, with border still present, with 200x fewer subsamples' do
|
64
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
64
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.crossy_green_line_specimen, sample_subdivision_size: 2000 )
|
65
65
|
expect(center).to be nil
|
66
66
|
end
|
67
67
|
|
68
68
|
specify 'finds the vertical dividing line another real image, with border still present' do
|
69
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
69
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.greenline_image)[1]
|
70
70
|
expect(center).to be > 2445
|
71
71
|
expect(center).to be < 2495
|
72
72
|
end
|
73
73
|
|
74
74
|
specify 'finds the vertical dividing line another real image, with border still present, and 20x fewer subsamples' do
|
75
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
75
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.greenline_image, sample_subdivision_size: 200)[1]
|
76
76
|
expect(center).to be > 2445
|
77
77
|
expect(center).to be < 2495
|
78
78
|
end
|
79
79
|
|
80
80
|
specify 'finds the vertical dividing line another real image, with border still present, and 50x fewer subsamples' do
|
81
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
81
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.greenline_image, sample_subdivision_size: 500)[1]
|
82
82
|
expect(center).to be > 2445
|
83
83
|
expect(center).to be < 2495
|
84
84
|
end
|
85
85
|
|
86
86
|
specify 'FAILS to find the vertical dividing line in a standard cross, with border still present, when even more precise' do
|
87
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
87
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.cross_green, sample_cutoff_factor: 1)
|
88
88
|
expect(center).to be nil
|
89
89
|
end
|
90
90
|
|
91
91
|
specify 'finds the horizontal dividing line another real image, with border still present' do
|
92
|
-
center = Sqed::BoundaryFinder.color_boundary_finder(
|
92
|
+
center = Sqed::BoundaryFinder.color_boundary_finder(image: ImageHelpers.greenline_image, scan: :columns)[1]
|
93
93
|
expect(center).to be > 1282
|
94
94
|
expect(center).to be < 1332
|
95
95
|
end
|
@@ -104,33 +104,42 @@ describe Sqed::BoundaryFinder do
|
|
104
104
|
end
|
105
105
|
|
106
106
|
specify 'returns estimated borders if only one hit greater than samples taken' do
|
107
|
-
expect( Sqed::BoundaryFinder.frequency_stats(i, 15)).to eq([2,3,4])
|
107
|
+
expect( Sqed::BoundaryFinder.frequency_stats(i, 15)).to eq([2, 3, 4])
|
108
108
|
end
|
109
109
|
|
110
110
|
specify 'returns nil if no count is greater than samples taken' do
|
111
111
|
expect( Sqed::BoundaryFinder.frequency_stats(i, 20)).to eq(nil)
|
112
112
|
end
|
113
|
-
|
114
113
|
|
115
114
|
end
|
116
115
|
|
117
116
|
context 'offset boundaries from crossy_black_line_specimen image ' do
|
118
|
-
before(:all)
|
119
|
-
@s = Sqed.new(
|
117
|
+
before(:all) do
|
118
|
+
@s = Sqed.new(image: ImageHelpers.crossy_black_line_specimen, pattern: :vertical_offset_cross, boundary_color: :black)
|
120
119
|
@s.crop_image
|
121
120
|
@offset_boundaries = @s.boundaries.offset(@s.stage_boundary)
|
122
121
|
true
|
123
|
-
|
122
|
+
end
|
123
|
+
|
124
|
+
specify 'boundaries are complete' do
|
125
|
+
expect(@s.boundaries.complete).to be(true)
|
126
|
+
end
|
127
|
+
|
128
|
+
specify 'stage_boundaries are complete' do
|
129
|
+
expect(@offset_boundaries.complete).to be(true)
|
130
|
+
end
|
131
|
+
|
132
|
+
specify 'four co-ordinates are returned' do
|
133
|
+
expect(@s.boundaries.coordinates.length).to eq(4)
|
134
|
+
end
|
124
135
|
|
125
|
-
|
126
|
-
specify
|
136
|
+
## **** actually fails (?!)
|
137
|
+
specify 'offset and size should match internal found areas' do
|
127
138
|
sbx = @s.stage_boundary.x_for(0)
|
128
139
|
sby = @s.stage_boundary.y_for(0)
|
129
140
|
|
130
|
-
sl = @s.boundaries.coordinates.length
|
131
|
-
|
132
|
-
expect(@s.boundaries.complete).to be(true)
|
133
|
-
expect(@offset_boundaries.complete).to be(true)
|
141
|
+
sl = @s.boundaries.coordinates.length # may be convenient to clone this model for other than 4 boundaries found
|
142
|
+
|
134
143
|
(0..sl - 1).each do |i|
|
135
144
|
# check all the x/y
|
136
145
|
expect(@offset_boundaries.x_for(i)).to eq(@s.boundaries.x_for(i) + sbx)
|
@@ -143,22 +152,31 @@ describe Sqed::BoundaryFinder do
|
|
143
152
|
end
|
144
153
|
end
|
145
154
|
|
146
|
-
context 'offset boundaries from black_green_line_specimen image
|
147
|
-
before(:all)
|
148
|
-
@s = Sqed.new(
|
155
|
+
context 'offset boundaries from black_green_line_specimen image' do
|
156
|
+
before(:all) do
|
157
|
+
@s = Sqed.new(image: ImageHelpers.black_stage_green_line_specimen, pattern: :vertical_offset_cross)
|
149
158
|
@s.crop_image
|
150
159
|
@offset_boundaries = @s.boundaries.offset(@s.stage_boundary)
|
151
|
-
|
152
|
-
|
160
|
+
end
|
161
|
+
|
162
|
+
specify 'boundaries are complete' do
|
163
|
+
expect(@s.boundaries.complete).to be(true)
|
164
|
+
end
|
153
165
|
|
154
|
-
specify
|
166
|
+
specify 'stage_boundaries are complete' do
|
167
|
+
expect(@offset_boundaries.complete).to be(true)
|
168
|
+
end
|
169
|
+
|
170
|
+
specify 'three co-ordinates are returned' do
|
171
|
+
expect(@s.boundaries.coordinates.length).to eq(4) # for offset cross pattern and valid image
|
172
|
+
end
|
173
|
+
|
174
|
+
specify 'offset and size should match internal found areas' do
|
155
175
|
sbx = @s.stage_boundary.x_for(0)
|
156
176
|
sby = @s.stage_boundary.y_for(0)
|
157
177
|
|
158
178
|
sl = @s.boundaries.coordinates.count # may be convenient to clone this model for other than 4 boundaries found
|
159
|
-
|
160
|
-
expect(@s.boundaries.complete).to be(true)
|
161
|
-
expect(@offset_boundaries.complete).to be(true)
|
179
|
+
|
162
180
|
(0..sl - 1).each do |i|
|
163
181
|
# check all the x/y
|
164
182
|
expect(@offset_boundaries.x_for(i)).to eq(@s.boundaries.x_for(i) + sbx)
|
@@ -169,26 +187,36 @@ describe Sqed::BoundaryFinder do
|
|
169
187
|
expect(@offset_boundaries.height_for(i)).to eq(@s.boundaries.height_for(i))
|
170
188
|
end
|
171
189
|
end
|
172
|
-
end
|
190
|
+
end
|
173
191
|
|
174
|
-
context 'offset boundaries from original red_line image
|
192
|
+
context 'offset boundaries from original red_line image' do
|
175
193
|
before(:all) {
|
176
|
-
@s = Sqed.new(
|
194
|
+
@s = Sqed.new(image: ImageHelpers.vertical_offset_cross_red, pattern: :right_t, boundary_color: :red)
|
177
195
|
@s.crop_image
|
178
196
|
@offset_boundaries = @s.boundaries.offset(@s.stage_boundary)
|
179
197
|
}
|
180
198
|
|
181
|
-
specify
|
182
|
-
|
199
|
+
specify 'boundaries are complete' do
|
200
|
+
expect(@s.boundaries.complete).to be(true)
|
201
|
+
end
|
202
|
+
|
203
|
+
specify 'stage_boundaries are complete' do
|
204
|
+
expect(@offset_boundaries.complete).to be(true)
|
205
|
+
end
|
206
|
+
|
207
|
+
specify 'three co-ordinates are returned' do
|
208
|
+
expect(@s.boundaries.coordinates.length).to eq(3)
|
209
|
+
end
|
210
|
+
|
211
|
+
specify 'offset and size should match internal found areas' do
|
212
|
+
sbx = @s.stage_boundary.x_for(0) # only a single boundary
|
183
213
|
sby = @s.stage_boundary.y_for(0)
|
184
214
|
pct = 0.02
|
185
215
|
|
186
|
-
sl = @s.boundaries.coordinates.count
|
187
|
-
|
188
|
-
expect(@s.
|
189
|
-
expect(@
|
190
|
-
expect(@s.stage_boundary.width_for(0)).to be_within(pct*800).of(800)
|
191
|
-
expect(@s.stage_boundary.height_for(0)).to be_within(pct*600).of(600)
|
216
|
+
sl = @s.boundaries.coordinates.count
|
217
|
+
|
218
|
+
expect(@s.stage_boundary.width_for(0)).to be_within(pct * 800).of(800)
|
219
|
+
expect(@s.stage_boundary.height_for(0)).to be_within(pct * 600).of(600)
|
192
220
|
(0..sl - 1).each do |i|
|
193
221
|
# check all the x/y
|
194
222
|
expect(@offset_boundaries.x_for(i)).to eq(@s.boundaries.x_for(i) + sbx)
|
@@ -9,15 +9,15 @@ describe Sqed::Extractor do
|
|
9
9
|
|
10
10
|
let(:boundaries) {
|
11
11
|
Sqed::BoundaryFinder::CrossFinder.new(
|
12
|
-
|
12
|
+
image: image
|
13
13
|
).boundaries
|
14
14
|
}
|
15
15
|
|
16
16
|
let(:e) {
|
17
17
|
Sqed::Extractor.new(
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
boundaries: boundaries,
|
19
|
+
image: image,
|
20
|
+
metadata_map: metadata_map
|
21
21
|
)
|
22
22
|
}
|
23
23
|
|
data/spec/lib/sqed_spec.rb
CHANGED
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Sqed do
|
4
4
|
|
5
|
-
let(:s) {Sqed.new}
|
5
|
+
let(:s) { Sqed.new }
|
6
6
|
|
7
7
|
context 'attributes' do
|
8
8
|
|
@@ -30,13 +30,18 @@ describe Sqed do
|
|
30
30
|
expect(s).to respond_to(:boundaries)
|
31
31
|
end
|
32
32
|
|
33
|
-
specify '#has_border' do
|
34
|
-
expect(s).to
|
33
|
+
specify '#has_border defaults to `true`' do
|
34
|
+
expect(s.has_border).to eq(true)
|
35
35
|
end
|
36
36
|
|
37
|
-
specify '#boundary_color' do
|
38
|
-
expect(s).to
|
37
|
+
specify '#boundary_color defaults to :green' do
|
38
|
+
expect(s.boundary_color).to eq(:green)
|
39
39
|
end
|
40
|
+
|
41
|
+
specify '#use_thumbnail defaults to `true`' do
|
42
|
+
expect(s.use_thumbnail).to eq(true)
|
43
|
+
end
|
44
|
+
|
40
45
|
end
|
41
46
|
|
42
47
|
context 'initialization' do
|
@@ -51,10 +56,10 @@ describe Sqed do
|
|
51
56
|
end
|
52
57
|
end
|
53
58
|
|
54
|
-
#
|
59
|
+
# Intent is to just test wrapping functionality, see
|
55
60
|
# other tests for specifics on finders
|
56
|
-
context '#crop_image (with bordered stage)' do
|
57
|
-
specify 'finds a cropped image smaller than original' do
|
61
|
+
context '#crop_image (with bordered stage)' do
|
62
|
+
specify 'finds a cropped image smaller than original' do
|
58
63
|
s.image = ImageHelpers.test3_image
|
59
64
|
expect(s.crop_image).to be_truthy
|
60
65
|
expect(s.stage_image.columns < s.image.columns).to be(true)
|
@@ -63,7 +68,7 @@ describe Sqed do
|
|
63
68
|
|
64
69
|
specify 'properly sets stage boundaries ' do
|
65
70
|
s.image = ImageHelpers.cross_green
|
66
|
-
s.crop_image
|
71
|
+
s.crop_image
|
67
72
|
# ~ (100,94, 800, 600)
|
68
73
|
expect(s.stage_boundary.x_for(0)).to be_within(2).of 100
|
69
74
|
expect(s.stage_boundary.y_for(0)).to be_within(2).of 94
|
@@ -74,81 +79,76 @@ describe Sqed do
|
|
74
79
|
|
75
80
|
context 'all together, without border' do
|
76
81
|
let(:image) { ImageHelpers.frost_stage }
|
77
|
-
let(:
|
78
|
-
let(:s) { Sqed.new(target_image: image, target_pattern: pattern, has_border: false) }
|
82
|
+
let(:s1) { Sqed.new(image: image, pattern: :vertical_offset_cross, has_border: false) }
|
79
83
|
|
80
84
|
specify '#boundaries returns a Sqed::Boundaries instance' do
|
81
|
-
expect(
|
85
|
+
expect(s1.boundaries.class.name).to eq('Sqed::Boundaries')
|
82
86
|
end
|
83
87
|
|
84
88
|
specify '#stage_image returns an Magick::Image' do
|
85
|
-
expect(
|
89
|
+
expect(s1.stage_image.class.name).to eq('Magick::Image')
|
86
90
|
end
|
87
91
|
|
88
92
|
specify '#crop_image returns an Magick::Image' do
|
89
|
-
expect(
|
93
|
+
expect(s1.crop_image.class.name).to eq('Magick::Image')
|
90
94
|
end
|
91
95
|
|
92
96
|
specify '#crop_image returns #stage_image' do
|
93
|
-
expect(
|
97
|
+
expect(s1.crop_image).to eq(s1.stage_image)
|
94
98
|
end
|
95
99
|
|
96
100
|
context '#result' do
|
97
|
-
let(:
|
101
|
+
let(:rz) { s1.result }
|
98
102
|
|
99
103
|
specify 'returns a Sqed::Result' do
|
100
|
-
expect(
|
104
|
+
expect(rz.class.name).to eq('Sqed::Result')
|
101
105
|
end
|
102
106
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
end
|
107
|
+
specify '#text_for an :identifier section' do
|
108
|
+
expect(rz.text_for(:identifier)).to match('000041196')
|
109
|
+
end
|
107
110
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
# end
|
111
|
+
specify '#text_for an :annotated_specimen section' do
|
112
|
+
expect(rz.text_for(:annotated_specimen)).to match('Saucier Creek')
|
113
|
+
end
|
112
114
|
|
113
|
-
|
114
|
-
|
115
|
-
end
|
115
|
+
specify '#text_for a :curator_metadata section' do
|
116
|
+
expect(rz.text_for(:curator_metadata)).to match('Frost Entomological Museum')
|
116
117
|
end
|
117
118
|
end
|
118
119
|
end
|
119
120
|
|
120
121
|
context 'all together, with border' do
|
121
122
|
let(:image) { ImageHelpers.greenline_image }
|
122
|
-
let(:
|
123
|
-
let(:s) { Sqed.new(target_image: image, target_pattern: pattern, has_border: true) }
|
123
|
+
let(:s2) { Sqed.new(image: image, pattern: :right_t, has_border: true) }
|
124
124
|
|
125
125
|
specify '#boundaries returns a Sqed::Boundaries instance' do
|
126
|
-
expect(
|
126
|
+
expect(s2.boundaries.class.name).to eq('Sqed::Boundaries')
|
127
127
|
end
|
128
128
|
|
129
129
|
specify '#stage_image returns an Magick::Image' do
|
130
|
-
expect(
|
130
|
+
expect(s2.stage_image.class.name).to eq('Magick::Image')
|
131
131
|
end
|
132
132
|
|
133
133
|
specify '#crop_image returns an Magick::Image' do
|
134
|
-
expect(
|
134
|
+
expect(s2.crop_image.class.name).to eq('Magick::Image')
|
135
135
|
end
|
136
136
|
|
137
137
|
specify '#crop_image returns #stage_image' do
|
138
|
-
expect(
|
138
|
+
expect(s2.crop_image).to eq(s2.stage_image)
|
139
139
|
end
|
140
140
|
|
141
141
|
context '#result' do
|
142
|
-
let(:r) {
|
142
|
+
let(:r) { s2.result }
|
143
143
|
specify 'returns a Sqed::Result' do
|
144
144
|
expect(r.class.name).to eq('Sqed::Result')
|
145
145
|
end
|
146
146
|
|
147
147
|
context 'extracted data' do
|
148
|
-
# Default settings return nothing, though some combinations of this worked
|
149
|
-
|
150
|
-
|
151
|
-
|
148
|
+
# Default settings return nothing, though some combinations of this worked previously
|
149
|
+
specify 'text for an :identifier section' do
|
150
|
+
expect(r.text_for(:identifier)).to match('000085067')
|
151
|
+
end
|
152
152
|
|
153
153
|
specify 'text for a specimen section' do
|
154
154
|
expect(r.text_for(:annotated_specimen)).to match('Aeshna')
|