epdiff 1.0.1 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3edd747165f0606765c30d7248d38fd9ec4cc520
4
- data.tar.gz: 828bd050102f0b1d226fac87473395efccb9b130
2
+ SHA256:
3
+ metadata.gz: eade3ce9735f322e276d9979f95bac249e6f1c97652c7ed81751aab53040822e
4
+ data.tar.gz: 17f524806a498fce7443f82b720130d532151d7cc0480fae467dede02dcf927b
5
5
  SHA512:
6
- metadata.gz: 32692e555d3bd5b498e879587bc7631904f83b7aeb6a4226edae08b0f314f258eca5e1b7e9dd9730ab22438cacd8e811f74cef4f27798c345933b4a0ff726124
7
- data.tar.gz: 553bceb158a5d5654dbc436ebabc12bff98d9c86f789df060eb98e9371fa8fbe75a84a17807d5c31a7bd938dad440d96a3d4174ef9c1c9b0c2a97c08b79a39e1
6
+ metadata.gz: d26b43c8660ce91b714fae6e4f9c9edaa1631d61b5f72ccad304179057e1923b3ac9d14ae80c4344fc70b0d754991a344f85103bdcc12f0cacab95775c598dae
7
+ data.tar.gz: 92a0d7cd8c8fee867a08b3fe390885903df627cb693431a10c67c6dcced232d390a397cec9021da48a7f8aed9e933614012ebf9682d03a5ebc96b570087e90d3
@@ -0,0 +1,28 @@
1
+ name: Ruby on Win
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ test:
11
+
12
+ runs-on: windows-latest
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ ruby-version: ['2.5', '2.6', '2.7', '3.0']
17
+
18
+ steps:
19
+ - uses: actions/checkout@v2
20
+ - name: Set up Ruby
21
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
22
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
23
+ uses: ruby/setup-ruby@v1
24
+ with:
25
+ ruby-version: ${{ matrix.ruby-version }}
26
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
27
+ - name: Run tests
28
+ run: bundle exec rake test # do not use rubucop on windows
@@ -0,0 +1,35 @@
1
+ # This workflow uses actions that are not certified by GitHub.
2
+ # They are provided by a third-party and are governed by
3
+ # separate terms of service, privacy policy, and support
4
+ # documentation.
5
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
6
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
7
+
8
+ name: Ruby
9
+
10
+ on:
11
+ push:
12
+ branches: [ master ]
13
+ pull_request:
14
+ branches: [ master ]
15
+
16
+ jobs:
17
+ test:
18
+
19
+ runs-on: ubuntu-latest
20
+ strategy:
21
+ matrix:
22
+ ruby-version: ['2.5', '2.6', '2.7', '3.0']
23
+
24
+ steps:
25
+ - uses: actions/checkout@v2
26
+ - name: Set up Ruby
27
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
28
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
29
+ # uses: ruby/setup-ruby@v1
30
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
31
+ with:
32
+ ruby-version: ${{ matrix.ruby-version }}
33
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
34
+ - name: Run tests
35
+ run: bundle exec rake
@@ -0,0 +1,31 @@
1
+ # inherit_from: .rubocop_todo.yml
2
+ AllCops:
3
+ NewCops: enable
4
+ TargetRubyVersion: 2.5
5
+
6
+ Gemspec/RequiredRubyVersion:
7
+ Enabled: false
8
+
9
+ Metrics/AbcSize:
10
+ Max: 30
11
+
12
+ Metrics/ClassLength:
13
+ CountComments: false
14
+ Max: 117
15
+
16
+ Metrics/CyclomaticComplexity:
17
+ Max: 10
18
+
19
+ Metrics/MethodLength:
20
+ CountComments: false
21
+ Max: 40
22
+
23
+ Metrics/PerceivedComplexity:
24
+ Max: 20
25
+
26
+ Style/Documentation:
27
+ Exclude:
28
+ - 'test/**/*'
29
+
30
+ Layout/LineLength:
31
+ Max: 120
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
- source "http://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'http://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in epdiff.gemspec
4
6
  gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Masayoshi Takahashi
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,24 @@
1
+ # epdiff
2
+
3
+ `epdiff` is a CLI tool to show diff of EPUB files.
4
+
5
+ ## usage
6
+
7
+ $ epdiff <file1> <file2>
8
+
9
+ 'file1' and 'file2' are EPUB files.
10
+
11
+
12
+ ## Note on Patches/Pull Requests
13
+
14
+ * Fork the project.
15
+ * Make your feature addition or bug fix.
16
+ * Add tests for it. This is important so I don't break it in a
17
+ future version unintentionally.
18
+ * Commit, do not mess with rakefile, version, or history.
19
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
20
+ * Send me a pull request. Bonus points for topic branches.
21
+
22
+ ## Copyright
23
+
24
+ Copyright (c) 2010 Masayoshi Takahashi. See LICENSE for details.
data/Rakefile CHANGED
@@ -1 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
9
+ t.test_files = FileList['test/**/test_*.rb']
10
+ end
11
+
12
+ desc 'Check with rubocop'
13
+ task :rubocop do
14
+ require 'rubocop/rake_task'
15
+ RuboCop::RakeTask.new
16
+ rescue LoadError
17
+ warn 'rubocop not found'
18
+ end
19
+
20
+ task default: %i[test rubocop]
data/bin/epdiff CHANGED
@@ -1,2 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
1
4
  require 'epdiff'
2
- Epdiff.execute(*ARGV)
5
+ exit_code = Epdiff.execute(*ARGV)
6
+ exit(exit_code)
@@ -1,21 +1,27 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "epdiff/version"
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.push File.expand_path('lib', __dir__)
4
+ require 'epdiff/version'
4
5
 
5
6
  Gem::Specification.new do |s|
6
- s.name = "epdiff"
7
+ s.name = 'epdiff'
7
8
  s.version = Epdiff::VERSION
8
- s.authors = ["takahashim"]
9
- s.email = ["maki@rubycolor.org"]
10
- s.homepage = ""
11
- s.summary = %q{diff command for EPUB files.}
12
- s.description = %q{diff command for EPUB files.}
13
-
14
- s.rubyforge_project = "epdiff"
9
+ s.authors = ['takahashim']
10
+ s.email = ['maki@rubycolor.org']
11
+ s.homepage = ''
12
+ s.summary = 'diff command for EPUB files.'
13
+ s.description = 'diff command for EPUB files.'
15
14
 
16
15
  s.files = `git ls-files`.split("\n")
17
16
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ["lib"]
20
- s.add_runtime_dependency "rubyzip", "~> 1.1.0"
17
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
18
+ s.require_paths = ['lib']
19
+ s.add_runtime_dependency 'pastel'
20
+ s.add_runtime_dependency 'rubyzip', '~> 2.3.0'
21
+ s.add_runtime_dependency 'tty-file'
22
+ s.add_development_dependency 'rake'
23
+ s.add_development_dependency 'rubocop'
24
+ s.add_development_dependency 'rubocop-performance'
25
+ s.add_development_dependency 'rubocop-rake'
26
+ s.add_development_dependency 'test-unit'
21
27
  end
@@ -1,43 +1,107 @@
1
- require "epdiff/version"
1
+ # frozen_string_literal: true
2
+
3
+ require 'epdiff/version'
2
4
  require 'optparse'
3
5
  require 'tmpdir'
4
6
  require 'fileutils'
5
7
  require 'zip'
8
+ require 'pastel'
9
+ require 'tty/file'
10
+
11
+ # EPUB diff class
12
+ class Epdiff
13
+ TEXT_EXT = %w[xhtml html xml opf css txt].freeze
6
14
 
7
- module Epdiff
8
- extend self
15
+ def self.execute(*args)
16
+ new.execute(*args)
17
+ end
18
+
19
+ def initialize
20
+ @pastel = Pastel.new(enabled: true)
21
+ @green = @pastel.green.detach
22
+ @red = @pastel.red.detach
23
+ @cyan = @pastel.cyan.detach
24
+ @color = true
25
+ end
9
26
 
10
27
  def unzip(filename, dir)
11
28
  Zip::InputStream.open(filename) do |zio|
12
- while (entry = zio.get_next_entry)
29
+ while entry = zio.get_next_entry # rubocop:disable Lint/AssignmentInCondition
30
+ next unless entry.file?
31
+
13
32
  entry_filename = File.join(dir, entry.name)
14
33
  FileUtils.mkdir_p File.dirname(entry_filename)
15
- File.open(entry_filename, "wb") do |f|
16
- f.write zio.read
34
+ File.binwrite(entry_filename, zio.read)
35
+ end
36
+ end
37
+ end
38
+
39
+ def show_diff(_file1, _file2, work_dir)
40
+ Dir.chdir(work_dir) do
41
+ files1 = Dir.glob('file1/**/*')
42
+ files2 = Dir.glob('file2/**/*')
43
+ files1_s = files1.map { |d| d.sub(%r{^file1/}, '') }
44
+ files2_s = files2.map { |d| d.sub(%r{^file2/}, '') }
45
+ files_common = files1_s & files2_s
46
+ files_common.each do |path|
47
+ if File.file?("file1/#{path}")
48
+ if text_file?("file1/#{path}")
49
+ text_diff(path, "file1/#{path}", "file2/#{path}")
50
+ else
51
+ binary_diff(path, "file1/#{path}", "file2/#{path}")
52
+ end
17
53
  end
18
54
  end
55
+ (files1_s - files2_s).each do |diff1|
56
+ @exit_code = 1
57
+ message = "DIFF: #{diff1} only exists in 1st.\n"
58
+ print @color ? @red.call(message) : message
59
+ end
60
+ (files2_s - files1_s).each do |diff2|
61
+ @exit_code = 1
62
+ message = "DIFF: #{diff2} only exists in 2nd.\n"
63
+ print @color ? @green.call(message) : message
64
+ end
19
65
  end
20
66
  end
21
67
 
22
- def execute(*args)
68
+ def text_file?(path)
69
+ extname = File.extname(path).sub(/\A\./, '')
70
+ extname if TEXT_EXT.include?(extname)
71
+ end
23
72
 
24
- tmpdir = Dir.mktmpdir
25
- diff_path = "diff"
26
- unzip_path = nil
73
+ def text_diff(_path, path1, path2)
74
+ diff = if @color
75
+ TTY::File.diff(path1, path2, verbose: false)
76
+ else
77
+ TTY::File.diff(path1, path2, verbose: false, color: nil)
78
+ end
27
79
 
28
- opts = OptionParser.new do |opts|
29
- opts.banner = "Usage: epdiff [options] [filename] [filename]\n"
80
+ return if diff == "No differences found\n" || diff.strip == ''
30
81
 
31
- opts.on('-t','--tmpdir DIR', 'Set tepmorary directory') do |dir|
32
- tmpdir = dir
33
- end
82
+ @exit_code = 1
83
+ print diff
84
+ end
34
85
 
35
- opts.on('--diff-command PATH', 'Specify diff command path') do |path|
36
- diff_path = path
37
- end
86
+ def binary_diff(path, path1, path2)
87
+ content1 = File.binread(path1)
88
+ content2 = File.binread(path2)
89
+
90
+ return if content1 == content2
38
91
 
39
- opts.on('--unzip-command PATH', 'Specify unzip command path') do |path|
40
- unzip_path = path
92
+ @exit_code = 1
93
+ message = "DIFF: #{path} has some differences.\n"
94
+ print @color ? @cyan.call(message) : message
95
+ end
96
+
97
+ def execute(*args)
98
+ tmpdir = work_dir = nil
99
+
100
+ options = OptionParser.new do |opts|
101
+ opts.banner = "Usage: epdiff [options] [filename] [filename]\n"
102
+
103
+ opts.on('-t', '--tmpdir DIR', 'Set tepmorary directory') do |dir|
104
+ tmpdir = dir
41
105
  end
42
106
 
43
107
  opts.on('-h', '--help', 'Show this help message') do
@@ -45,6 +109,10 @@ module Epdiff
45
109
  exit
46
110
  end
47
111
 
112
+ opts.on('-C', '--no-color', 'Not use color diff') do
113
+ @color = false
114
+ end
115
+
48
116
  opts.on('-v', '--version', 'Show version number') do
49
117
  puts Epdiff::VERSION
50
118
  exit
@@ -52,35 +120,31 @@ module Epdiff
52
120
  end
53
121
 
54
122
  begin
55
-
56
- opts.parse!(args)
123
+ options.parse!(args)
57
124
 
58
125
  if args.size != 2
59
126
  # invalid option
60
- puts opts
127
+ puts options
61
128
  exit
62
129
  end
63
130
 
131
+ work_dir = tmpdir || Dir.mktmpdir
132
+
64
133
  file1, file2 = *args
65
- FileUtils.mkdir_p(tmpdir+"/file1")
66
- FileUtils.mkdir_p(tmpdir+"/file2")
67
-
68
- if unzip_path
69
- %x("#{unzip_path}" "#{file1}" -d "#{tmpdir}/file1")
70
- %x("#{unzip_path}" "#{file2}" -d "#{tmpdir}/file2")
71
- else
72
- unzip(file1, "#{tmpdir}/file1")
73
- unzip(file2, "#{tmpdir}/file2")
74
- end
134
+ FileUtils.mkdir_p("#{work_dir}/file1")
135
+ FileUtils.mkdir_p("#{work_dir}/file2")
75
136
 
76
- IO.popen("'#{diff_path}' -r -u '#{tmpdir}/file1' '#{tmpdir}/file2'") do |io|
77
- print io.read.gsub(/#{Regexp.escape(tmpdir)}/, "")
78
- end
137
+ unzip(file1, "#{work_dir}/file1")
138
+ unzip(file2, "#{work_dir}/file2")
79
139
 
80
- rescue => e
140
+ @exit_code = 0
141
+ show_diff(file1, file2, work_dir)
142
+
143
+ @exit_code
144
+ rescue StandardError => e
81
145
  warn e
82
- puts opts
146
+ ensure
147
+ FileUtils.rm_rf(work_dir) if work_dir && !tmpdir
83
148
  end
84
149
  end
85
-
86
150
  end
@@ -1,3 +1,5 @@
1
- module Epdiff
2
- VERSION = "1.0.1"
1
+ # frozen_string_literal: true
2
+
3
+ class Epdiff
4
+ VERSION = '2.0.0'
3
5
  end
@@ -0,0 +1,22 @@
1
+ --- file1/OEBPS/book.opf
2
+ +++ file2/OEBPS/book.opf
3
+ @@ -17,6 +17,7 @@
4
+ <item id="style-css" href="style.css" media-type="text/css"/>
5
+ <item id="titlepage-xhtml" href="titlepage.xhtml" media-type="application/xhtml+xml"/>
6
+ <item id="test1-xhtml" href="test1.xhtml" media-type="application/xhtml+xml"/>
7
+ + <item id="images-Hokusai_Setsubun_no_Oni-jpg" href="images/Hokusai_Setsubun_no_Oni.jpg" media-type="image/jpeg"/>
8
+ </manifest>
9
+ <spine page-progression-direction="ltr">
10
+ <itemref idref="book" linear="no"/>
11
+ --- file1/OEBPS/test1.xhtml
12
+ +++ file2/OEBPS/test1.xhtml
13
+ @@ -9,7 +9,7 @@
14
+ </head>
15
+ <body>
16
+ <h1><a id="h1"></a><span class="secno">第1章 </span>test1</h1>
17
+ -<p>this is a test EPUB file.</p>
18
+ +<p>this is a EPUB file to test <strong>epdiff</strong>.</p>
19
+ </body>
20
+ </html>
21
+ DIFF: OEBPS/images/Hokusai_Setsubun_no_Oni.jpg only exists in 2nd.
22
+ 
@@ -0,0 +1,21 @@
1
+ --- file1/OEBPS/book.opf
2
+ +++ file2/OEBPS/book.opf
3
+ @@ -17,6 +17,7 @@
4
+ <item id="style-css" href="style.css" media-type="text/css"/>
5
+ <item id="titlepage-xhtml" href="titlepage.xhtml" media-type="application/xhtml+xml"/>
6
+ <item id="test1-xhtml" href="test1.xhtml" media-type="application/xhtml+xml"/>
7
+ + <item id="images-Hokusai_Setsubun_no_Oni-jpg" href="images/Hokusai_Setsubun_no_Oni.jpg" media-type="image/jpeg"/>
8
+ </manifest>
9
+ <spine page-progression-direction="ltr">
10
+ <itemref idref="book" linear="no"/>
11
+ --- file1/OEBPS/test1.xhtml
12
+ +++ file2/OEBPS/test1.xhtml
13
+ @@ -9,7 +9,7 @@
14
+ </head>
15
+ <body>
16
+ <h1><a id="h1"></a><span class="secno">第1章 </span>test1</h1>
17
+ -<p>this is a test EPUB file.</p>
18
+ +<p>this is a EPUB file to test <strong>epdiff</strong>.</p>
19
+ </body>
20
+ </html>
21
+ DIFF: OEBPS/images/Hokusai_Setsubun_no_Oni.jpg only exists in 2nd.
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ base_dir = File.expand_path('..', __dir__)
4
+ lib_dir = File.join(base_dir, 'lib')
5
+ test_dir = File.join(base_dir, 'test')
6
+
7
+ $LOAD_PATH.unshift(lib_dir)
8
+
9
+ require 'test/unit'
10
+
11
+ argv = ARGV || ['--max-diff-target-string-size=10000']
12
+ exit Test::Unit::AutoRunner.run(true, test_dir, argv)
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+ require 'epdiff'
5
+
6
+ class EpdiffTest < Test::Unit::TestCase
7
+ def setup; end
8
+
9
+ def teardown; end
10
+
11
+ def test_ezpdiff_execute_color
12
+ out = $stdout
13
+ $stdout = StringIO.new
14
+ begin
15
+ Epdiff.new.execute(File.join(fixtures_dir, 'book_orig.epub'),
16
+ File.join(fixtures_dir, 'book_image.epub'))
17
+ result = $stdout.string
18
+ ensure
19
+ $stdout = out
20
+ end
21
+ expected = File.read(File.join(fixtures_dir, 'sample_diff0.txt'))
22
+ assert_equal expected, result
23
+ end
24
+
25
+ def test_ezpdiff_execute_nocolor
26
+ out = $stdout
27
+ $stdout = StringIO.new
28
+ begin
29
+ Epdiff.new.execute('-C',
30
+ File.join(fixtures_dir, 'book_orig.epub'),
31
+ File.join(fixtures_dir, 'book_image.epub'))
32
+ result = $stdout.string
33
+ ensure
34
+ $stdout = out
35
+ end
36
+ expected = File.read(File.join(fixtures_dir, 'sample_diff1.txt'))
37
+ assert_equal expected, result
38
+ end
39
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
4
+
5
+ require 'test/unit'
6
+
7
+ def fixtures_dir
8
+ File.join(__dir__, 'fixtures')
9
+ end
metadata CHANGED
@@ -1,29 +1,127 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: epdiff
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - takahashim
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-25 00:00:00.000000000 Z
11
+ date: 2021-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pastel
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rubyzip
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - ~>
31
+ - - "~>"
18
32
  - !ruby/object:Gem::Version
19
- version: 1.1.0
33
+ version: 2.3.0
20
34
  type: :runtime
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - ~>
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.3.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: tty-file
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-performance
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rake
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: test-unit
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
25
123
  - !ruby/object:Gem::Version
26
- version: 1.1.0
124
+ version: '0'
27
125
  description: diff command for EPUB files.
28
126
  email:
29
127
  - maki@rubycolor.org
@@ -32,34 +130,54 @@ executables:
32
130
  extensions: []
33
131
  extra_rdoc_files: []
34
132
  files:
35
- - .gitignore
133
+ - ".github/workflows/ruby-win.yml"
134
+ - ".github/workflows/ruby.yml"
135
+ - ".gitignore"
136
+ - ".rubocop.yml"
36
137
  - Gemfile
138
+ - LICENSE
139
+ - README.md
37
140
  - Rakefile
38
141
  - bin/epdiff
39
142
  - epdiff.gemspec
40
143
  - lib/epdiff.rb
41
144
  - lib/epdiff/version.rb
145
+ - test/fixtures/book_image.epub
146
+ - test/fixtures/book_new.epub
147
+ - test/fixtures/book_orig.epub
148
+ - test/fixtures/sample_diff0.txt
149
+ - test/fixtures/sample_diff1.txt
150
+ - test/run_test.rb
151
+ - test/test_epdiff.rb
152
+ - test/test_helper.rb
42
153
  homepage: ''
43
154
  licenses: []
44
155
  metadata: {}
45
- post_install_message:
156
+ post_install_message:
46
157
  rdoc_options: []
47
158
  require_paths:
48
159
  - lib
49
160
  required_ruby_version: !ruby/object:Gem::Requirement
50
161
  requirements:
51
- - - '>='
162
+ - - ">="
52
163
  - !ruby/object:Gem::Version
53
164
  version: '0'
54
165
  required_rubygems_version: !ruby/object:Gem::Requirement
55
166
  requirements:
56
- - - '>='
167
+ - - ">="
57
168
  - !ruby/object:Gem::Version
58
169
  version: '0'
59
170
  requirements: []
60
- rubyforge_project: epdiff
61
- rubygems_version: 2.1.5
62
- signing_key:
171
+ rubygems_version: 3.2.3
172
+ signing_key:
63
173
  specification_version: 4
64
174
  summary: diff command for EPUB files.
65
- test_files: []
175
+ test_files:
176
+ - test/fixtures/book_image.epub
177
+ - test/fixtures/book_new.epub
178
+ - test/fixtures/book_orig.epub
179
+ - test/fixtures/sample_diff0.txt
180
+ - test/fixtures/sample_diff1.txt
181
+ - test/run_test.rb
182
+ - test/test_epdiff.rb
183
+ - test/test_helper.rb