exiftool_vendored 12.15.0 → 12.22.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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +96 -2
  3. data/bin/MANIFEST +1 -0
  4. data/bin/META.json +1 -1
  5. data/bin/META.yml +1 -1
  6. data/bin/README +2 -2
  7. data/bin/config_files/example.config +1 -8
  8. data/bin/exiftool +104 -59
  9. data/bin/fmt_files/gpx.fmt +1 -1
  10. data/bin/fmt_files/gpx_wpt.fmt +1 -1
  11. data/bin/fmt_files/kml.fmt +1 -1
  12. data/bin/fmt_files/kml_track.fmt +1 -1
  13. data/bin/lib/Image/ExifTool.pm +74 -24
  14. data/bin/lib/Image/ExifTool.pod +34 -24
  15. data/bin/lib/Image/ExifTool/Apple.pm +3 -2
  16. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +24 -13
  17. data/bin/lib/Image/ExifTool/Canon.pm +26 -2
  18. data/bin/lib/Image/ExifTool/CanonCustom.pm +19 -1
  19. data/bin/lib/Image/ExifTool/DJI.pm +6 -6
  20. data/bin/lib/Image/ExifTool/DPX.pm +3 -3
  21. data/bin/lib/Image/ExifTool/Exif.pm +35 -16
  22. data/bin/lib/Image/ExifTool/FITS.pm +13 -2
  23. data/bin/lib/Image/ExifTool/FujiFilm.pm +2 -1
  24. data/bin/lib/Image/ExifTool/GPS.pm +24 -13
  25. data/bin/lib/Image/ExifTool/H264.pm +20 -5
  26. data/bin/lib/Image/ExifTool/ICC_Profile.pm +2 -2
  27. data/bin/lib/Image/ExifTool/M2TS.pm +40 -4
  28. data/bin/lib/Image/ExifTool/MIE.pm +2 -2
  29. data/bin/lib/Image/ExifTool/Microsoft.pm +296 -82
  30. data/bin/lib/Image/ExifTool/Nikon.pm +5 -5
  31. data/bin/lib/Image/ExifTool/NikonSettings.pm +16 -16
  32. data/bin/lib/Image/ExifTool/Olympus.pm +2 -2
  33. data/bin/lib/Image/ExifTool/QuickTime.pm +58 -30
  34. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +27 -8
  35. data/bin/lib/Image/ExifTool/README +5 -4
  36. data/bin/lib/Image/ExifTool/RIFF.pm +2 -2
  37. data/bin/lib/Image/ExifTool/Shortcuts.pm +9 -0
  38. data/bin/lib/Image/ExifTool/Sony.pm +63 -29
  39. data/bin/lib/Image/ExifTool/TagInfoXML.pm +1 -0
  40. data/bin/lib/Image/ExifTool/TagLookup.pm +4032 -3981
  41. data/bin/lib/Image/ExifTool/TagNames.pod +261 -104
  42. data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
  43. data/bin/lib/Image/ExifTool/WriteQuickTime.pl +7 -5
  44. data/bin/lib/Image/ExifTool/WriteXMP.pl +9 -6
  45. data/bin/lib/Image/ExifTool/Writer.pl +49 -14
  46. data/bin/lib/Image/ExifTool/XMP.pm +31 -5
  47. data/bin/perl-Image-ExifTool.spec +1 -1
  48. data/lib/exiftool_vendored/version.rb +1 -1
  49. metadata +48 -6
@@ -548,7 +548,7 @@ sub WriteExif($$$)
548
548
  my $mustRead;
549
549
  if ($dirStart < 0 or $dirStart > $dataLen-2) {
550
550
  $mustRead = 1;
551
- } elsif ($dirLen > 2) {
551
+ } elsif ($dirLen >= 2) {
552
552
  my $len = 2 + 12 * Get16u($dataPt, $dirStart);
553
553
  $mustRead = 1 if $dirStart + $len > $dataLen;
554
554
  }
@@ -17,6 +17,7 @@ my %movMap = (
17
17
  Keys => 'Movie', # MOV-Movie-Meta-Keys !! (hack due to different Meta location)
18
18
  Meta => 'UserData',
19
19
  XMP => 'UserData', # MOV-Movie-UserData-XMP
20
+ Microsoft => 'UserData', # MOV-Movie-UserData-Microsoft
20
21
  UserData => 'Movie', # MOV-Movie-UserData
21
22
  Movie => 'MOV',
22
23
  GSpherical => 'SphericalVideoXML', # MOV-Movie-Track-SphericalVideoXML
@@ -30,6 +31,7 @@ my %mp4Map = (
30
31
  Keys => 'Movie', # MOV-Movie-Meta-Keys !! (hack due to different Meta location)
31
32
  Meta => 'UserData',
32
33
  UserData => 'Movie', # MOV-Movie-UserData
34
+ Microsoft => 'UserData', # MOV-Movie-UserData-Microsoft
33
35
  Movie => 'MOV',
34
36
  XMP => 'MOV', # MOV-XMP
35
37
  GSpherical => 'SphericalVideoXML', # MOV-Movie-Track-SphericalVideoXML
@@ -76,8 +78,8 @@ my %dirMap = (
76
78
  # convert ExifTool Format to QuickTime type
77
79
  my %qtFormat = (
78
80
  'undef' => 0x00, string => 0x01,
79
- int8s => 0x15, int16s => 0x15, int32s => 0x15,
80
- int8u => 0x16, int16u => 0x16, int32u => 0x16,
81
+ int8s => 0x15, int16s => 0x15, int32s => 0x15, int64s => 0x15,
82
+ int8u => 0x16, int16u => 0x16, int32u => 0x16, int64u => 0x16,
81
83
  float => 0x17, double => 0x18,
82
84
  );
83
85
  my $undLang = 0x55c4; # numeric code for default ('und') language
@@ -294,7 +296,7 @@ sub GetLangInfo($$)
294
296
  sub CheckQTValue($$$)
295
297
  {
296
298
  my ($et, $tagInfo, $valPtr) = @_;
297
- my $format = $$tagInfo{Format} || $$tagInfo{Table}{FORMAT};
299
+ my $format = $$tagInfo{Format} || $$tagInfo{Writable} || $$tagInfo{Table}{FORMAT};
298
300
  return undef unless $format;
299
301
  return Image::ExifTool::CheckValue($valPtr, $format, $$tagInfo{Count});
300
302
  }
@@ -307,8 +309,8 @@ sub FormatQTValue($$;$$)
307
309
  {
308
310
  my ($et, $valPt, $format, $writable) = @_;
309
311
  my $flags;
310
- if ($format and $format ne 'string') {
311
- $$valPt = WriteValue($$valPt, $format);
312
+ if ($format and $format ne 'string' or not $format and $writable and $writable ne 'string') {
313
+ $$valPt = WriteValue($$valPt, $format || $writable);
312
314
  if ($writable and $qtFormat{$writable}) {
313
315
  $flags = $qtFormat{$writable};
314
316
  } else {
@@ -12,7 +12,7 @@ use vars qw(%specialStruct %dateTimeInfo %stdXlatNS);
12
12
 
13
13
  use Image::ExifTool qw(:DataAccess :Utils);
14
14
 
15
- sub CheckXMP($$$);
15
+ sub CheckXMP($$$;$);
16
16
  sub CaptureXMP($$$;$);
17
17
  sub SetPropertyPath($$;$$$$);
18
18
 
@@ -165,12 +165,12 @@ sub FormatXMPDate($)
165
165
 
166
166
  #------------------------------------------------------------------------------
167
167
  # Check XMP values for validity and format accordingly
168
- # Inputs: 0) ExifTool object ref, 1) tagInfo hash ref, 2) raw value ref
168
+ # Inputs: 0) ExifTool object ref, 1) tagInfo hash ref, 2) raw value ref, 3) conversion type
169
169
  # Returns: error string or undef (and may change value) on success
170
170
  # Note: copies structured information to avoid conflicts with calling code
171
- sub CheckXMP($$$)
171
+ sub CheckXMP($$$;$)
172
172
  {
173
- my ($et, $tagInfo, $valPtr) = @_;
173
+ my ($et, $tagInfo, $valPtr, $convType) = @_;
174
174
 
175
175
  if ($$tagInfo{Struct}) {
176
176
  require 'Image/ExifTool/XMPStruct.pl';
@@ -250,9 +250,12 @@ sub CheckXMP($$$)
250
250
  return "Invalid date/time (use YYYY:mm:dd HH:MM:SS[.ss][+/-HH:MM|Z])" unless $newDate;
251
251
  $$valPtr = $newDate;
252
252
  } elsif ($format eq 'boolean') {
253
+ # (allow lower-case 'true' and 'false' if not setting PrintConv value)
253
254
  if (not $$valPtr or $$valPtr =~ /false/i or $$valPtr =~ /^no$/i) {
254
- $$valPtr = 'False';
255
- } else {
255
+ if (not $$valPtr or $$valPtr ne 'false' or not $convType or $convType eq 'PrintConv') {
256
+ $$valPtr = 'False';
257
+ }
258
+ } elsif ($$valPtr ne 'true' or not $convType or $convType eq 'PrintConv') {
256
259
  $$valPtr = 'True';
257
260
  }
258
261
  } elsif ($format eq '1') {
@@ -135,10 +135,10 @@ my %rawType = (
135
135
  my @delGroups = qw(
136
136
  Adobe AFCP APP0 APP1 APP2 APP3 APP4 APP5 APP6 APP7 APP8 APP9 APP10 APP11
137
137
  APP12 APP13 APP14 APP15 CanonVRD CIFF Ducky EXIF ExifIFD File FlashPix
138
- FotoStation GlobParamIFD GPS ICC_Profile IFD0 IFD1 Insta360 InteropIFD IPTC
139
- ItemList JFIF Jpeg2000 Keys MakerNotes Meta MetaIFD MIE MPF NikonCapture PDF
140
- PDF-update PhotoMechanic Photoshop PNG PNG-pHYs PrintIM QuickTime RMETA RSRC
141
- SubIFD Trailer UserData XML XML-* XMP XMP-*
138
+ FotoStation GlobParamIFD GPS ICC_Profile IFD0 IFD1 Insta360 InteropIFD
139
+ IPTC ItemList JFIF Jpeg2000 Keys MakerNotes Meta MetaIFD Microsoft MIE
140
+ MPF NikonCapture PDF PDF-update PhotoMechanic Photoshop PNG PNG-pHYs
141
+ PrintIM QuickTime RMETA RSRC SubIFD Trailer UserData XML XML-* XMP XMP-*
142
142
  );
143
143
  # family 2 group names that we can delete
144
144
  my @delGroup2 = qw(
@@ -669,7 +669,7 @@ TAG: foreach $tagInfo (@matchingTags) {
669
669
  next TAG unless $lcWant eq lc $grp[1];
670
670
  }
671
671
  }
672
- $writeGroup or $writeGroup = ($$tagInfo{WriteGroup} || $grp[0]);
672
+ $writeGroup or $writeGroup = ($$tagInfo{WriteGroup} || $$tagInfo{Table}{WRITE_GROUP} || $grp[0]);
673
673
  $priority = $hiPri; # highest priority since group was specified
674
674
  }
675
675
  ++$foundMatch;
@@ -2639,12 +2639,14 @@ GWTInfo: foreach $tagInfo (@infoArray) {
2639
2639
 
2640
2640
  #------------------------------------------------------------------------------
2641
2641
  # Get list of all group names
2642
- # Inputs: 0) Group family number
2642
+ # Inputs: 0) [optional] ExifTool ref, 1) Group family number
2643
2643
  # Returns: List of group names (sorted alphabetically)
2644
- sub GetAllGroups($)
2644
+ sub GetAllGroups($;$)
2645
2645
  {
2646
2646
  local $_;
2647
2647
  my $family = shift || 0;
2648
+ my $self;
2649
+ ref $family and $self = $family, $family = shift || 0;
2648
2650
 
2649
2651
  $family == 3 and return('Doc#', 'Main');
2650
2652
  $family == 4 and return('Copy#');
@@ -2663,9 +2665,23 @@ sub GetAllGroups($)
2663
2665
  $allGroups{$grp} = 1 if ($grps = $$table{GROUPS}) and ($grp = $$grps{$family});
2664
2666
  foreach $tag (TagTableKeys($table)) {
2665
2667
  my @infoArray = GetTagInfoList($table, $tag);
2666
- foreach $tagInfo (@infoArray) {
2667
- next unless ($grps = $$tagInfo{Groups}) and ($grp = $$grps{$family});
2668
- $allGroups{$grp} = 1;
2668
+ if ($family == 7) {
2669
+ foreach $tagInfo (@infoArray) {
2670
+ my $id = $$tagInfo{TagID};
2671
+ if (not defined $id) {
2672
+ $id = ''; # (just to be safe)
2673
+ } elsif ($id =~ /^\d+$/) {
2674
+ $id = sprintf('0x%x', $id) if $self and $$self{OPTIONS}{HexTagIDs};
2675
+ } else {
2676
+ $id =~ s/([^-_A-Za-z0-9])/sprintf('%.2x',ord $1)/ge;
2677
+ }
2678
+ $allGroups{'ID-' . $id} = 1;
2679
+ }
2680
+ } else {
2681
+ foreach $tagInfo (@infoArray) {
2682
+ next unless ($grps = $$tagInfo{Groups}) and ($grp = $$grps{$family});
2683
+ $allGroups{$grp} = 1;
2684
+ }
2669
2685
  }
2670
2686
  }
2671
2687
  }
@@ -2766,6 +2782,8 @@ sub ConvInv($$$$$;$$)
2766
2782
  my ($self, $val, $tagInfo, $tag, $wgrp1, $convType, $wantGroup) = @_;
2767
2783
  my ($err, $type);
2768
2784
 
2785
+ $convType or $convType = $$self{ConvType} || 'PrintConv';
2786
+
2769
2787
  Conv: for (;;) {
2770
2788
  if (not defined $type) {
2771
2789
  # split value into list if necessary
@@ -2779,7 +2797,7 @@ Conv: for (;;) {
2779
2797
  $val = @splitVal > 1 ? \@splitVal : @splitVal ? $splitVal[0] : '';
2780
2798
  }
2781
2799
  }
2782
- $type = $convType || $$self{ConvType} || 'PrintConv';
2800
+ $type = $convType;
2783
2801
  } elsif ($type eq 'PrintConv') {
2784
2802
  $type = 'ValueConv';
2785
2803
  } else {
@@ -2802,11 +2820,11 @@ Conv: for (;;) {
2802
2820
  if (ref $val eq 'ARRAY') {
2803
2821
  # loop through array values
2804
2822
  foreach $v (@$val) {
2805
- $err2 = &$checkProc($self, $tagInfo, \$v);
2823
+ $err2 = &$checkProc($self, $tagInfo, \$v, $convType);
2806
2824
  last if $err2;
2807
2825
  }
2808
2826
  } else {
2809
- $err2 = &$checkProc($self, $tagInfo, \$val);
2827
+ $err2 = &$checkProc($self, $tagInfo, \$val, $convType);
2810
2828
  }
2811
2829
  }
2812
2830
  }
@@ -4933,6 +4951,12 @@ sub Set64u(@)
4933
4951
  $_[1] and substr(${$_[1]}, $_[2], length($val)) = $val;
4934
4952
  return $val;
4935
4953
  }
4954
+ sub Set64s(@)
4955
+ {
4956
+ my $val = shift;
4957
+ $val < 0 and $val += 4294967296 * 4294967296; # (temporary hack won't really work due to round-off errors)
4958
+ return Set64u($val, @_);
4959
+ }
4936
4960
  sub SetRational64u(@) {
4937
4961
  my ($numer,$denom) = Rationalize($_[0],0xffffffff);
4938
4962
  my $val = Set32u($numer) . Set32u($denom);
@@ -4994,6 +5018,7 @@ my %writeValueProc = (
4994
5018
  int16uRev => \&Set16uRev,
4995
5019
  int32s => \&Set32s,
4996
5020
  int32u => \&Set32u,
5021
+ int64s => \&Set64s,
4997
5022
  int64u => \&Set64u,
4998
5023
  rational32s => \&SetRational32s,
4999
5024
  rational32u => \&SetRational32u,
@@ -6630,7 +6655,17 @@ sub SetFileTime($$;$$$$)
6630
6655
  # open file by name if necessary
6631
6656
  unless (ref $file) {
6632
6657
  # (file will be automatically closed when *FH goes out of scope)
6633
- $self->Open(\*FH, $file, '+<') or $self->Warn('Error opening file for update'), return 0;
6658
+ unless ($self->Open(\*FH, $file, '+<')) {
6659
+ my $success;
6660
+ if (defined $atime or defined $mtime) {
6661
+ my ($a, $m, $c) = $self->GetFileTime($file);
6662
+ $atime = $a unless defined $atime;
6663
+ $mtime = $m unless defined $mtime;
6664
+ $success = eval { utime($atime, $mtime, $file) } if defined $atime and defined $mtime;
6665
+ }
6666
+ $self->Warn('Error opening file for update') unless $success;
6667
+ return $success;
6668
+ }
6634
6669
  $saveFile = $file;
6635
6670
  $file = \*FH;
6636
6671
  }
@@ -50,13 +50,13 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.37';
53
+ $VERSION = '3.39';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
57
57
  sub ProcessXMP($$;$);
58
58
  sub WriteXMP($$;$);
59
- sub CheckXMP($$$);
59
+ sub CheckXMP($$$;$);
60
60
  sub ParseXMPElement($$$;$$$$);
61
61
  sub DecodeBase64($);
62
62
  sub EncodeBase64($;$);
@@ -201,13 +201,13 @@ my %uri2ns = ( 'http://ns.exiftool.org/1.0/' => 'et' ); # (allow exiftool.org as
201
201
  ValueConv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
202
202
  ValueConvInv => 'Image::ExifTool::GPS::ToDMS($self, $val, 2, "N")',
203
203
  PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "N")',
204
- PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
204
+ PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lat")',
205
205
  );
206
206
  %longConv = (
207
207
  ValueConv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
208
208
  ValueConvInv => 'Image::ExifTool::GPS::ToDMS($self, $val, 2, "E")',
209
209
  PrintConv => 'Image::ExifTool::GPS::ToDMS($self, $val, 1, "E")',
210
- PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1)',
210
+ PrintConvInv => 'Image::ExifTool::GPS::ToDegrees($val, 1, "lon")',
211
211
  );
212
212
  %dateTimeInfo = (
213
213
  # NOTE: Do NOT put "Groups" here because Groups hash must not be common!
@@ -467,6 +467,19 @@ my %sCorrectionMask = (
467
467
  CenterValue => { Writable => 'real', List => 0 },
468
468
  PerimeterValue=>{ Writable => 'real', List => 0 },
469
469
  );
470
+ my %sCorrectionRangeMask = (
471
+ STRUCT_NAME => 'CorrectionRangeMask',
472
+ NAMESPACE => 'crs',
473
+ Version => { },
474
+ Type => { },
475
+ ColorAmount => { Writable => 'real' },
476
+ LumMin => { Writable => 'real' },
477
+ LumMax => { Writable => 'real' },
478
+ LumFeather => { Writable => 'real' },
479
+ DepthMin => { Writable => 'real' },
480
+ DepthMax => { Writable => 'real' },
481
+ DepthFeather=> { Writable => 'real' },
482
+ );
470
483
  my %sCorrection = (
471
484
  STRUCT_NAME => 'Correction',
472
485
  NAMESPACE => 'crs',
@@ -491,6 +504,15 @@ my %sCorrection = (
491
504
  LocalDefringe => { FlatName => 'Defringe', Writable => 'real', List => 0 },
492
505
  LocalTemperature => { FlatName => 'Temperature',Writable => 'real', List => 0 },
493
506
  LocalTint => { FlatName => 'Tint', Writable => 'real', List => 0 },
507
+ LocalHue => { FlatName => 'Hue', Writable => 'real', List => 0 },
508
+ LocalWhites2012 => { FlatName => 'Whites2012', Writable => 'real', List => 0 },
509
+ LocalBlacks2012 => { FlatName => 'Blacks2012', Writable => 'real', List => 0 },
510
+ LocalDehaze => { FlatName => 'Dehaze', Writable => 'real', List => 0 },
511
+ LocalTexture => { FlatName => 'Texture', Writable => 'real', List => 0 },
512
+ CorrectionRangeMask => {
513
+ FlatName => 'RangeMask',
514
+ Struct => \%sCorrectionRangeMask,
515
+ },
494
516
  CorrectionMasks => {
495
517
  FlatName => 'Mask',
496
518
  Struct => \%sCorrectionMask,
@@ -2258,7 +2280,7 @@ my %sPantryItem = (
2258
2280
  Priority => 0,
2259
2281
  # prevent this from getting set from a LensID that has been converted
2260
2282
  ValueConvInv => q{
2261
- warn "Expected one or more integer values" if $val =~ /[^\d ]/;
2283
+ warn "Expected one or more integer values" if $val =~ /[^-\d ]/;
2262
2284
  return $val;
2263
2285
  },
2264
2286
  },
@@ -2311,6 +2333,7 @@ my %sPantryItem = (
2311
2333
  Location => { Groups => { 2 => 'Location' } },
2312
2334
  Scene => { Groups => { 2 => 'Other' }, List => 'Bag' },
2313
2335
  SubjectCode => { Groups => { 2 => 'Other' }, List => 'Bag' },
2336
+ # Copyright - have seen this in a sample (Jan 2021), but I think it is non-standard
2314
2337
  );
2315
2338
 
2316
2339
  # Adobe Lightroom namespace properties (lr) (ref PH)
@@ -3306,6 +3329,9 @@ NoLoop:
3306
3329
  } else {
3307
3330
  $val = ConvertXMPDate($val, $new) if $new or $fmt eq 'date';
3308
3331
  }
3332
+ if ($$et{XmpValidate} and $fmt and $fmt eq 'boolean') {
3333
+ $et->WarnOnce("Boolean value for XMP-$ns:$$tagInfo{Name} should be capitalized",1);
3334
+ }
3309
3335
  # protect against large binary data in unknown tags
3310
3336
  $$tagInfo{Binary} = 1 if $new and length($val) > 65536;
3311
3337
  }
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.15
3
+ Version: 12.22
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('12.15.0')
4
+ VERSION = Gem::Version.new('12.22.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.15.0
4
+ version: 12.22.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-01-19 00:00:00.000000000 Z
12
+ date: 2021-03-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool
@@ -123,20 +123,48 @@ dependencies:
123
123
  - - ">="
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: rubocop-minitest
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: rubocop-rake
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
126
154
  - !ruby/object:Gem::Dependency
127
155
  name: simplecov
128
156
  requirement: !ruby/object:Gem::Requirement
129
157
  requirements:
130
- - - "~>"
158
+ - - ">="
131
159
  - !ruby/object:Gem::Version
132
- version: 0.17.1
160
+ version: '0'
133
161
  type: :development
134
162
  prerelease: false
135
163
  version_requirements: !ruby/object:Gem::Requirement
136
164
  requirements:
137
- - - "~>"
165
+ - - ">="
138
166
  - !ruby/object:Gem::Version
139
- version: 0.17.1
167
+ version: '0'
140
168
  - !ruby/object:Gem::Dependency
141
169
  name: simplecov-console
142
170
  requirement: !ruby/object:Gem::Requirement
@@ -151,6 +179,20 @@ dependencies:
151
179
  - - ">="
152
180
  - !ruby/object:Gem::Version
153
181
  version: '0'
182
+ - !ruby/object:Gem::Dependency
183
+ name: simplecov_json_formatter
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ type: :development
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
154
196
  - !ruby/object:Gem::Dependency
155
197
  name: yard
156
198
  requirement: !ruby/object:Gem::Requirement