assembly-objectfile 1.11.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +14 -0
  3. data/.github/pull_request_template.md +3 -5
  4. data/.gitignore +0 -1
  5. data/.rubocop.yml +87 -15
  6. data/.rubocop_todo.yml +19 -74
  7. data/Gemfile +2 -0
  8. data/Gemfile.lock +106 -0
  9. data/README.md +1 -1
  10. data/assembly-objectfile.gemspec +5 -6
  11. data/lib/assembly-objectfile/object_file.rb +253 -3
  12. data/lib/assembly-objectfile/version.rb +2 -2
  13. data/lib/assembly-objectfile.rb +0 -5
  14. data/spec/object_file_spec.rb +411 -167
  15. data/spec/spec_helper.rb +3 -31
  16. data/spec/test_data/empty.txt +0 -0
  17. metadata +35 -121
  18. data/.travis.yml +0 -20
  19. data/lib/assembly-objectfile/content_metadata/config.rb +0 -26
  20. data/lib/assembly-objectfile/content_metadata/file.rb +0 -63
  21. data/lib/assembly-objectfile/content_metadata/file_set.rb +0 -73
  22. data/lib/assembly-objectfile/content_metadata/file_set_builder.rb +0 -65
  23. data/lib/assembly-objectfile/content_metadata/nokogiri_builder.rb +0 -57
  24. data/lib/assembly-objectfile/content_metadata.rb +0 -117
  25. data/lib/assembly-objectfile/object_fileable.rb +0 -278
  26. data/spec/content_metadata_spec.rb +0 -791
  27. data/spec/test_data/input/oo000oo0001/00/oo000oo0001_00_001.tif +0 -0
  28. data/spec/test_data/input/oo000oo0001/00/oo000oo0001_00_002.tif +0 -0
  29. data/spec/test_data/input/oo000oo0001/05/oo000oo0001_05_001.jp2 +0 -0
  30. data/spec/test_data/input/oo000oo0001/05/oo000oo0001_05_002.jp2 +0 -0
  31. data/spec/test_data/input/oo000oo0001/15/oo000oo0001_15_001.pdf +0 -1
  32. data/spec/test_data/input/oo000oo0001/15/oo000oo0001_15_002.pdf +0 -1
  33. data/spec/test_data/input/oo000oo0001/31/oo000oo0001_31_001.pdf +0 -1
  34. data/spec/test_data/input/oo000oo0001/50/oo000oo0001_50_001.tif +0 -0
  35. data/spec/test_data/input/oo000oo0001/oo000oo0001_book.pdf +0 -1
  36. data/spec/test_data/input/res1_image1.jp2 +0 -0
  37. data/spec/test_data/input/res1_image2.jp2 +0 -0
  38. data/spec/test_data/input/res1_image2.tif +0 -0
  39. data/spec/test_data/input/res1_teifile.txt +0 -1
  40. data/spec/test_data/input/res2_image1.jp2 +0 -0
  41. data/spec/test_data/input/res2_image1.tif +0 -0
  42. data/spec/test_data/input/res2_image2.jp2 +0 -0
  43. data/spec/test_data/input/res2_image2.tif +0 -0
  44. data/spec/test_data/input/res2_teifile.txt +0 -1
  45. data/spec/test_data/input/res2_textfile.txt +0 -1
  46. data/spec/test_data/input/res3_image1.jp2 +0 -0
  47. data/spec/test_data/input/res3_image1.tif +0 -0
  48. data/spec/test_data/input/res3_teifile.txt +0 -1
  49. data/spec/test_data/input/test.pdf +0 -1
  50. data/spec/test_data/input/test2.jp2 +0 -0
  51. data/spec/test_data/input/test2.tif +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0f0c15e9e8be693ac604d4f4f440a62b8c91d4e10e1605d78ecf487b45aa231b
4
- data.tar.gz: 1441b9f02785c6397cfee954382b4b0de92e006457b0a5bfce42111b4f1ee634
3
+ metadata.gz: c3c456d372ab0804ebcaad06ac2b8695376f9ffe57ccb8a23b8a57d711df5561
4
+ data.tar.gz: 1797606727f148ee128dedc102ad68480fbd9f55983c318b91c8f5f52a546a9b
5
5
  SHA512:
6
- metadata.gz: b12637ddf0e5110ada401dfd04f35072a42046c02fabd1446139f5c387f31bf82fb82ff6b95621f1f182f839ad50b2f66f529ddff61c79979a0c248659dd7947
7
- data.tar.gz: f2bf8dcce09af5ac5f499ffff3abafd8ef01b03a30ceb249a590da75b594fd96dcd8a0e73b295ff37ca52825941c5b2892ed05c1746a9de5d85e048138f7e67b
6
+ metadata.gz: c927cb2cffef41a699c0f2e1f0fa0d8e6d4b1cc92c9fdb26b80ca5c9e851d7de0a9b1204cc4a4290213a9d7a642c2d3233db56396efb3b626cdd4d6e7b3bfdda
7
+ data.tar.gz: 473f2ead345feaf0afd518da399751a86f526f27b19dd0bfd75fb55354bd055d00ccbbb06a96ca905f2e0de6fcdbf25d4e42e8da23fc167225afb8a9958038e3
@@ -0,0 +1,14 @@
1
+ version: 2.1
2
+ orbs:
3
+ ruby-rails: sul-dlss/ruby-rails@3.0.1
4
+ workflows:
5
+ build:
6
+ jobs:
7
+ - ruby-rails/lint-gem:
8
+ name: lint
9
+ - ruby-rails/test-gem:
10
+ name: test
11
+ before-test:
12
+ - run:
13
+ name: Install exiftool
14
+ command: curl -L http://cpanmin.us | perl - --sudo Image::ExifTool
@@ -1,12 +1,10 @@
1
- ## Why was this change made?
1
+ ## Why was this change made? 🤔
2
2
 
3
3
 
4
4
 
5
- ## How was this change tested?
5
+ ## How was this change tested? 🤨
6
6
 
7
-
8
-
9
- ## Which documentation and/or configurations were updated?
7
+ ⚡ ⚠ If this change has cross service impact, ***run [integration tests](https://github.com/sul-dlss/infrastructure-integration-test) that do file accessioning*** (e.g. create_preassembly_image_spec) and/or test in [stage|qa] environment, in addition to specs. ⚡
10
8
 
11
9
 
12
10
 
data/.gitignore CHANGED
@@ -10,4 +10,3 @@ log/*
10
10
  pkg/*
11
11
  tags
12
12
  tmp
13
- Gemfile.lock
data/.rubocop.yml CHANGED
@@ -2,27 +2,19 @@ inherit_from: .rubocop_todo.yml
2
2
  require: rubocop-rspec
3
3
 
4
4
  AllCops:
5
- TargetRubyVersion: 2.5
6
-
7
- RSpec/ContextWording:
8
- Enabled: false # too dogmatic
9
-
10
- RSpec/ExampleLength:
11
- Max: 25
12
-
13
- # we like 'expect(x).to receive' better than 'have_received'
14
- RSpec/MessageSpies:
15
- Enabled: false
16
-
17
- RSpec/NestedGroups:
18
- Max: 4 # default: 3
5
+ TargetRubyVersion: 3.0
6
+ DisplayCopNames: true
7
+ Exclude:
8
+ - 'Gemfile.lock'
9
+ - '**/*.md'
10
+ - 'vendor/**/*' # avoid running rubocop on cached bundler
19
11
 
20
12
  Metrics/BlockLength:
21
13
  Exclude:
22
14
  - 'spec/**/*.rb'
23
15
  - '**/*.gemspec'
24
16
 
25
- Gemspec/DateAssignment: # (new in 1.10)
17
+ Gemspec/DeprecatedAttributeAssignment: # (new in 1.10)
26
18
  Enabled: true
27
19
 
28
20
  Layout/SpaceAroundMethodCallOperator:
@@ -135,3 +127,83 @@ Style/RedundantArgument: # (new in 1.4)
135
127
 
136
128
  Style/SwapValues: # (new in 1.1)
137
129
  Enabled: true
130
+
131
+ Gemspec/RequireMFA: # new in 1.23
132
+ Enabled: true
133
+ Layout/LineEndStringConcatenationIndentation: # new in 1.18
134
+ Enabled: true
135
+ Lint/AmbiguousOperatorPrecedence: # new in 1.21
136
+ Enabled: true
137
+ Lint/AmbiguousRange: # new in 1.19
138
+ Enabled: true
139
+ Lint/EmptyInPattern: # new in 1.16
140
+ Enabled: true
141
+ Lint/IncompatibleIoSelectWithFiberScheduler: # new in 1.21
142
+ Enabled: true
143
+ Lint/RequireRelativeSelfPath: # new in 1.22
144
+ Enabled: true
145
+ Lint/UselessRuby2Keywords: # new in 1.23
146
+ Enabled: true
147
+ Naming/BlockForwarding: # new in 1.24
148
+ Enabled: true
149
+ Security/IoMethods: # new in 1.22
150
+ Enabled: true
151
+ Style/FileRead: # new in 1.24
152
+ Enabled: true
153
+ Style/FileWrite: # new in 1.24
154
+ Enabled: true
155
+ Style/InPatternThen: # new in 1.16
156
+ Enabled: true
157
+ Style/MapToHash: # new in 1.24
158
+ Enabled: true
159
+ Style/MultilineInPatternThen: # new in 1.16
160
+ Enabled: true
161
+ Style/NumberedParameters: # new in 1.22
162
+ Enabled: true
163
+ Style/NumberedParametersLimit: # new in 1.22
164
+ Enabled: true
165
+ Style/OpenStructUse: # new in 1.23
166
+ Enabled: true
167
+ Style/QuotedSymbols: # new in 1.16
168
+ Enabled: true
169
+ Style/RedundantSelfAssignmentBranch: # new in 1.19
170
+ Enabled: true
171
+ Style/SelectByRegexp: # new in 1.22
172
+ Enabled: true
173
+ Style/StringChars: # new in 1.12
174
+ Enabled: true
175
+ RSpec/BeEq: # new in 2.9.0
176
+ Enabled: true
177
+ RSpec/BeNil: # new in 2.9.0
178
+ Enabled: true
179
+ RSpec/ExcessiveDocstringSpacing: # new in 2.5
180
+ Enabled: true
181
+ RSpec/IdenticalEqualityAssertion: # new in 2.4
182
+ Enabled: true
183
+ RSpec/SubjectDeclaration: # new in 2.5
184
+ Enabled: true
185
+ RSpec/FactoryBot/SyntaxMethods: # new in 2.7
186
+ Enabled: true
187
+ RSpec/Rails/AvoidSetupHook: # new in 2.4
188
+ Enabled: true
189
+
190
+ Lint/RefinementImportMethods: # new in 1.27
191
+ Enabled: true
192
+ Security/CompoundHash: # new in 1.28
193
+ Enabled: true
194
+ Style/EnvHome: # new in 1.29
195
+ Enabled: true
196
+ Style/FetchEnvVar: # new in 1.28
197
+ Enabled: true
198
+ Style/MapCompactWithConditionalBlock: # new in 1.30
199
+ Enabled: true
200
+ Style/NestedFileDirname: # new in 1.26
201
+ Enabled: true
202
+ Style/ObjectThen: # new in 1.28
203
+ Enabled: true
204
+ Style/RedundantInitialize: # new in 1.27
205
+ Enabled: true
206
+ RSpec/ChangeByZero: # new in 2.11.0
207
+ Enabled: true
208
+ RSpec/VerifiedDoubleReference: # new in 2.10.0
209
+ Enabled: true
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2021-04-26 18:43:37 UTC using RuboCop version 1.11.0.
3
+ # on 2022-07-07 21:26:21 UTC using RuboCop version 1.31.0.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -11,44 +11,14 @@ Lint/UselessAssignment:
11
11
  Exclude:
12
12
  - 'config/boot.rb'
13
13
 
14
- # Offense count: 3
15
- # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
16
- Metrics/AbcSize:
17
- Max: 55
18
-
19
- # Offense count: 1
20
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
21
- # IgnoredMethods: refine
22
- Metrics/BlockLength:
23
- Max: 27
24
-
25
- # Offense count: 2
26
- # Configuration parameters: IgnoredMethods.
27
- Metrics/CyclomaticComplexity:
28
- Max: 14
29
-
30
- # Offense count: 4
31
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
32
- Metrics/MethodLength:
33
- Max: 31
34
-
35
14
  # Offense count: 1
36
15
  # Configuration parameters: CountComments, CountAsOne.
37
- Metrics/ModuleLength:
38
- Max: 120
16
+ Metrics/ClassLength:
17
+ Max: 122
39
18
 
40
19
  # Offense count: 1
41
- # Configuration parameters: CountKeywordArgs, MaxOptionalParameters.
42
- Metrics/ParameterLists:
43
- Max: 12
44
-
45
- # Offense count: 2
46
- # Configuration parameters: IgnoredMethods.
47
- Metrics/PerceivedComplexity:
48
- Max: 15
49
-
50
- # Offense count: 1
51
- # Configuration parameters: ExpectMatchingDefinition, CheckDefinitionPathHierarchy, Regex, IgnoreExecutableScripts, AllowedAcronyms.
20
+ # Configuration parameters: ExpectMatchingDefinition, CheckDefinitionPathHierarchy, CheckDefinitionPathHierarchyRoots, Regex, IgnoreExecutableScripts, AllowedAcronyms.
21
+ # CheckDefinitionPathHierarchyRoots: lib, spec, test, src
52
22
  # AllowedAcronyms: CLI, DSL, ACL, API, ASCII, CPU, CSS, DNS, EOF, GUID, HTML, HTTP, HTTPS, ID, IP, JSON, LHS, QPS, RAM, RHS, RPC, SLA, SMTP, SQL, SSH, TCP, TLS, TTL, UDP, UI, UID, UUID, URI, URL, UTF8, VM, XML, XMPP, XSRF, XSS
53
23
  Naming/FileName:
54
24
  Exclude:
@@ -63,56 +33,31 @@ Naming/FileName:
63
33
  Naming/PredicateName:
64
34
  Exclude:
65
35
  - 'spec/**/*'
66
- - 'lib/assembly-objectfile/object_fileable.rb'
36
+ - 'lib/assembly-objectfile/object_file.rb'
67
37
 
68
- # Offense count: 9
69
- # Configuration parameters: Max.
38
+ # Offense count: 2
39
+ # Configuration parameters: CountAsOne.
70
40
  RSpec/ExampleLength:
71
- Exclude:
72
- - 'spec/content_metadata_spec.rb'
41
+ Max: 7
73
42
 
74
- # Offense count: 2
43
+ # Offense count: 1
75
44
  # Configuration parameters: Include, CustomTransform, IgnoreMethods, SpecSuffixOnly.
76
45
  # Include: **/*_spec*rb*, **/spec/**/*
77
46
  RSpec/FilePath:
78
- Exclude:
79
- - 'spec/content_metadata_spec.rb'
80
- - 'spec/object_file_spec.rb'
81
-
82
- # Offense count: 74
83
- # Configuration parameters: AssignmentOnly.
84
- RSpec/InstanceVariable:
85
- Exclude:
86
- - 'spec/object_file_spec.rb'
87
-
88
- # Offense count: 40
89
- RSpec/MultipleExpectations:
90
- Max: 29
91
-
92
- # Offense count: 2
93
- RSpec/RepeatedDescription:
94
- Exclude:
95
- - 'spec/object_file_spec.rb'
96
-
97
- # Offense count: 2
98
- RSpec/RepeatedExample:
99
47
  Exclude:
100
48
  - 'spec/object_file_spec.rb'
101
49
 
102
50
  # Offense count: 8
103
- RSpec/RepeatedExampleGroupDescription:
104
- Exclude:
105
- - 'spec/content_metadata_spec.rb'
51
+ RSpec/MultipleExpectations:
52
+ Max: 6
106
53
 
107
- # Offense count: 2
108
- # Cop supports --auto-correct.
109
- Style/CommentedKeyword:
110
- Exclude:
111
- - 'lib/assembly-objectfile/content_metadata.rb'
54
+ # Offense count: 3
55
+ RSpec/NestedGroups:
56
+ Max: 4
112
57
 
113
- # Offense count: 122
114
- # Cop supports --auto-correct.
115
- # Configuration parameters: AutoCorrect, AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
58
+ # Offense count: 24
59
+ # This cop supports safe autocorrection (--autocorrect).
60
+ # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, AllowedPatterns, IgnoredPatterns.
116
61
  # URISchemes: http, https
117
62
  Layout/LineLength:
118
- Max: 277
63
+ Max: 187
data/Gemfile CHANGED
@@ -4,3 +4,5 @@ source 'http://rubygems.org'
4
4
 
5
5
  # Specify your gem's dependencies in .gemspec
6
6
  gemspec
7
+
8
+ gem 'byebug'
data/Gemfile.lock ADDED
@@ -0,0 +1,106 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ assembly-objectfile (2.0.0)
5
+ activesupport (>= 5.2.0)
6
+ deprecation
7
+ mime-types (> 3)
8
+ mini_exiftool
9
+ nokogiri
10
+
11
+ GEM
12
+ remote: http://rubygems.org/
13
+ specs:
14
+ activesupport (7.0.3)
15
+ concurrent-ruby (~> 1.0, >= 1.0.2)
16
+ i18n (>= 1.6, < 2)
17
+ minitest (>= 5.1)
18
+ tzinfo (~> 2.0)
19
+ ast (2.4.2)
20
+ byebug (11.1.3)
21
+ coderay (1.1.3)
22
+ concurrent-ruby (1.1.10)
23
+ deprecation (1.1.0)
24
+ activesupport
25
+ diff-lcs (1.5.0)
26
+ docile (1.4.0)
27
+ i18n (1.10.0)
28
+ concurrent-ruby (~> 1.0)
29
+ json (2.6.2)
30
+ method_source (1.0.0)
31
+ mime-types (3.4.1)
32
+ mime-types-data (~> 3.2015)
33
+ mime-types-data (3.2022.0105)
34
+ mini_exiftool (2.10.2)
35
+ mini_portile2 (2.8.0)
36
+ minitest (5.16.2)
37
+ nokogiri (1.13.6)
38
+ mini_portile2 (~> 2.8.0)
39
+ racc (~> 1.4)
40
+ parallel (1.22.1)
41
+ parser (3.1.2.0)
42
+ ast (~> 2.4.1)
43
+ pry (0.13.1)
44
+ coderay (~> 1.1)
45
+ method_source (~> 1.0)
46
+ pry-byebug (3.9.0)
47
+ byebug (~> 11.0)
48
+ pry (~> 0.13.0)
49
+ racc (1.6.0)
50
+ rainbow (3.1.1)
51
+ rake (13.0.6)
52
+ regexp_parser (2.5.0)
53
+ rexml (3.2.5)
54
+ rspec (3.11.0)
55
+ rspec-core (~> 3.11.0)
56
+ rspec-expectations (~> 3.11.0)
57
+ rspec-mocks (~> 3.11.0)
58
+ rspec-core (3.11.0)
59
+ rspec-support (~> 3.11.0)
60
+ rspec-expectations (3.11.0)
61
+ diff-lcs (>= 1.2.0, < 2.0)
62
+ rspec-support (~> 3.11.0)
63
+ rspec-mocks (3.11.1)
64
+ diff-lcs (>= 1.2.0, < 2.0)
65
+ rspec-support (~> 3.11.0)
66
+ rspec-support (3.11.0)
67
+ rubocop (1.31.0)
68
+ parallel (~> 1.10)
69
+ parser (>= 3.1.0.0)
70
+ rainbow (>= 2.2.2, < 4.0)
71
+ regexp_parser (>= 1.8, < 3.0)
72
+ rexml (>= 3.2.5, < 4.0)
73
+ rubocop-ast (>= 1.18.0, < 2.0)
74
+ ruby-progressbar (~> 1.7)
75
+ unicode-display_width (>= 1.4.0, < 3.0)
76
+ rubocop-ast (1.18.0)
77
+ parser (>= 3.1.1.0)
78
+ rubocop-rspec (2.11.1)
79
+ rubocop (~> 1.19)
80
+ ruby-progressbar (1.11.0)
81
+ simplecov (0.21.2)
82
+ docile (~> 1.1)
83
+ simplecov-html (~> 0.11)
84
+ simplecov_json_formatter (~> 0.1)
85
+ simplecov-html (0.12.3)
86
+ simplecov_json_formatter (0.1.4)
87
+ tzinfo (2.0.4)
88
+ concurrent-ruby (~> 1.0)
89
+ unicode-display_width (2.2.0)
90
+
91
+ PLATFORMS
92
+ ruby
93
+
94
+ DEPENDENCIES
95
+ assembly-objectfile!
96
+ byebug
97
+ json
98
+ pry-byebug
99
+ rake
100
+ rspec (~> 3.0)
101
+ rubocop (~> 1.25)
102
+ rubocop-rspec
103
+ simplecov
104
+
105
+ BUNDLED WITH
106
+ 2.3.4
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Build Status](https://travis-ci.com/sul-dlss/assembly-objectfile.svg?branch=main)](https://travis-ci.com/sul-dlss/assembly-objectfile)
1
+ [![CircleCI](https://circleci.com/gh/sul-dlss/assembly-objectfile/tree/main.svg?style=svg)](https://circleci.com/gh/sul-dlss/assembly-objectfile/tree/main)
2
2
  [![Test Coverage](https://api.codeclimate.com/v1/badges/2310962acce78d78e76c/test_coverage)](https://codeclimate.com/github/sul-dlss/assembly-objectfile/test_coverage)
3
3
  [![Maintainability](https://api.codeclimate.com/v1/badges/2310962acce78d78e76c/maintainability)](https://codeclimate.com/github/sul-dlss/assembly-objectfile/maintainability)
4
4
  [![Gem Version](https://badge.fury.io/rb/assembly-objectfile.svg)](https://badge.fury.io/rb/assembly-objectfile)
@@ -13,27 +13,26 @@ Gem::Specification.new do |s|
13
13
  s.summary = 'Ruby immplementation of file services needed to prepare objects to be accessioned in SULAIR digital library'
14
14
  s.description = 'Get exif data, file sizes and more.'
15
15
  s.license = 'ALv2'
16
+ s.metadata['rubygems_mfa_required'] = 'true'
16
17
 
17
18
  s.files = `git ls-files`.split("\n")
18
- s.test_files = `git ls-files -- spec/*`.split("\n")
19
19
  s.bindir = 'exe'
20
20
  s.executables = s.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  s.require_paths = ['lib']
22
22
 
23
- s.required_ruby_version = '>= 2.5', '< 4'
23
+ s.required_ruby_version = '>= 3.0'
24
24
 
25
25
  s.add_dependency 'activesupport', '>= 5.2.0'
26
26
  s.add_dependency 'deprecation'
27
- s.add_dependency 'dry-struct', '~> 1.0'
28
- s.add_dependency 'dry-types', '~> 1.1'
29
27
  s.add_dependency 'mime-types', '> 3'
30
28
  s.add_dependency 'mini_exiftool'
31
29
  s.add_dependency 'nokogiri'
32
30
 
33
31
  s.add_development_dependency 'json'
32
+ s.add_development_dependency 'pry-byebug'
34
33
  s.add_development_dependency 'rake'
35
34
  s.add_development_dependency 'rspec', '~> 3.0'
36
- s.add_development_dependency 'rubocop'
35
+ s.add_development_dependency 'rubocop', '~> 1.25'
37
36
  s.add_development_dependency 'rubocop-rspec'
38
- s.add_development_dependency 'simplecov', '~> 0.17.0' # CodeClimate cannot use SimpleCov >= 0.18.0 for generating test coverage
37
+ s.add_development_dependency 'simplecov'
39
38
  end