cbz_tools 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d89395bfb15781bbfdc8be6598676bba94f34506f1870bc3704177f5a7b97659
4
- data.tar.gz: d0c2bb20ebdafcbcfc7f468502e7669960824ee66648fde194653dd455a9c4b3
3
+ metadata.gz: be6a34e670ac04d6ea7d87875e6ce57eb182dda4f6349f72404ae66ce6a863df
4
+ data.tar.gz: 46d9ff6e0b8b52d13027a1ea06558947e6407cc0408637acb9acf9cbe03aafe5
5
5
  SHA512:
6
- metadata.gz: afed755eb2b4d0867c2c2d6ce7910a45951d73f2c575f177f7263ae646ab5b1df2c4a67897f3248c80f7f7e8c0010489d69d74b1c08c7efb55df6b63a8022241
7
- data.tar.gz: 05de04f7c338656391eff82243d9116e1423070d1c60b082a7206bece223c1d442e08d127460e515b3ce8176c1fe44f777279d03f3c50a58f9a5c66c554d4c93
6
+ metadata.gz: 54063af8baff3b28a84f03d20339d85821f1d0326011faf81afecb4c5081840292a8083a936070d597040cc79ac4833d68c4717fb7a0d0575d68f2fceb823103
7
+ data.tar.gz: e264ef924c0781ef429da2aa89ee71dbc9ff7c3d37307bf832dd10e633852e1326af140ced09b2aaf8c4d5185deefd76e6dcf45b0b1f6e09a8989619c8dbc59f
@@ -0,0 +1,3 @@
1
+ {
2
+ "cSpell.words": ["comicinfo"]
3
+ }
data/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.2.0] - 2026-08-03
4
+
5
+ - Add `CbzTools::Reader` for reading CBZ archives (images and `ComicInfo.xml`)
6
+
7
+ ## [0.1.1] - 2026-08-03
8
+
9
+ - Exclude development-only files from the packaged gem
10
+
3
11
  ## [0.1.0] - 2026-07-21
4
12
 
5
13
  - Initial release
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CbzTools
4
+ class Error < StandardError; end
5
+ end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "zip"
4
+
5
+ module CbzTools
6
+ class Reader
7
+ IMAGE_EXTENSIONS = %w[.jpg .jpeg .png .webp].freeze
8
+
9
+ class ImageNotFoundError < Error; end
10
+
11
+ def self.open(path, &block)
12
+ reader = new(path)
13
+ block.call(reader)
14
+ ensure
15
+ reader&.close
16
+ end
17
+
18
+ def initialize(path)
19
+ @path = path
20
+ @zip = Zip::File.open(@path)
21
+ end
22
+
23
+ def close
24
+ @zip&.close
25
+ @zip = nil
26
+ end
27
+
28
+ def image_names
29
+ @zip.entries
30
+ .reject(&:directory?)
31
+ .map(&:name)
32
+ .select { |name| !name.include?("__macosx") && image?(name) }
33
+ .sort
34
+ end
35
+
36
+ def read(name)
37
+ entry = @zip.find_entry(name)
38
+ return nil unless entry
39
+
40
+ entry.get_input_stream.read
41
+ end
42
+
43
+ def first_image
44
+ read(image_names.first)
45
+ end
46
+
47
+ def image(name)
48
+ data = read(name)
49
+ raise ImageNotFoundError, "Image '#{name}' not found in #{@path}" unless data
50
+
51
+ data
52
+ end
53
+
54
+ def comic_info
55
+ read("ComicInfo.xml") || read("comicinfo.xml")
56
+ end
57
+
58
+ private
59
+
60
+ def image?(name)
61
+ IMAGE_EXTENSIONS.any? { |ext| name.downcase.end_with?(ext) }
62
+ end
63
+ end
64
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CbzTools
4
- VERSION = "0.1.0"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/cbz_tools.rb CHANGED
@@ -1,8 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "cbz_tools/version"
4
-
5
- module CbzTools
6
- class Error < StandardError; end
7
- # Your code goes here...
8
- end
4
+ require_relative "cbz_tools/error"
5
+ require_relative "cbz_tools/reader"
metadata CHANGED
@@ -1,14 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cbz_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Figueroa
8
8
  bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
- dependencies: []
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: rubyzip
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '3.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '3.0'
12
26
  description: 'Tools for working with CBZ comic book archives: reading and extracting
13
27
  their contents, reading and updating their embedded metadata, and converting CBR
14
28
  archives to CBZ.'
@@ -18,13 +32,13 @@ executables: []
18
32
  extensions: []
19
33
  extra_rdoc_files: []
20
34
  files:
21
- - ".rspec"
22
- - ".standard.yml"
35
+ - ".vscode/settings.json"
23
36
  - CHANGELOG.md
24
37
  - LICENSE.txt
25
38
  - README.md
26
- - Rakefile
27
39
  - lib/cbz_tools.rb
40
+ - lib/cbz_tools/error.rb
41
+ - lib/cbz_tools/reader.rb
28
42
  - lib/cbz_tools/version.rb
29
43
  - sig/cbz_tools.rbs
30
44
  homepage: https://github.com/dmfigueroa/cbz_tools
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
data/.standard.yml DELETED
@@ -1,3 +0,0 @@
1
- # For available configuration options, see:
2
- # https://github.com/standardrb/standard
3
- ruby_version: 3.0
data/Rakefile DELETED
@@ -1,10 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "bundler/gem_tasks"
4
- require "rspec/core/rake_task"
5
-
6
- RSpec::Core::RakeTask.new(:spec)
7
-
8
- require "standard/rake"
9
-
10
- task default: %i[spec standard]