pdfh 3.0.0 → 3.0.2

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
2
  SHA256:
3
- metadata.gz: ce33aa4da82a840716b3af1e3ae8a755075c991afd361da6916ba3418c523ba4
4
- data.tar.gz: 49618addd2323056b8312b9a8bba29947623fcdfd4813c671a34078e7fe8ff57
3
+ metadata.gz: 800f047d683e60b4fafca9fc762c7df699194c916822221754de2383078e0da3
4
+ data.tar.gz: 6d10a59cdeb87d5127ff624ffad4c4fc644872ab91c8df50cd97db40f4fff0a2
5
5
  SHA512:
6
- metadata.gz: 5d64fbcff7d7aed4a3e085ec42c6980be840abddce68faa50d064074957262e6e475cb803b379a71ed8b9d86f6d3a821f7aacc8610fcc3745c61ba8df97c3abc
7
- data.tar.gz: '069fe2a97fbceeb475116cfab0b27666ce73613d1a13b5af46c8e2026eb13d35bbe593376bca4fdd34591e2fba58ffcc2b4d1104b00cd386bef85e7bda18fe9f'
6
+ metadata.gz: b0caadec708ec57951c5e40192ccb84c735d652420d4bd1f0398fe3f4dc6758e3acf3ae1121459aa219275f7ef66084412cf8d7c8b07eb254f93c827513a4b9e
7
+ data.tar.gz: 125c1aebc9023315fa4355f880c25090c2f13aa34ebeadbcbcfc1481a49bb39d0112350fcd50b01844b278c45c9fa96842869ae969b8343fc600b6f4ee7740dd
data/.rubocop.yml CHANGED
@@ -1,13 +1,14 @@
1
1
  inherit_from: .rubocop_todo.yml
2
2
 
3
3
  require:
4
+ - rubocop-factory_bot
4
5
  - rubocop-performance
5
6
  - rubocop-rake
6
7
  - rubocop-rspec
7
8
 
8
9
  AllCops:
9
10
  NewCops: enable
10
- TargetRubyVersion: 2.5
11
+ TargetRubyVersion: 3.0
11
12
  Exclude:
12
13
  - doc/**/*
13
14
  - pkg/**/*
data/.rubocop_todo.yml CHANGED
@@ -1,47 +1,60 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2021-05-15 01:26:47 UTC using RuboCop version 1.14.0.
3
+ # on 2024-01-10 03:23:37 UTC using RuboCop version 1.59.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
7
7
  # versions of RuboCop, may require this file to be generated again.
8
8
 
9
- # Offense count: 5
10
- # Configuration parameters: IgnoredMethods, CountRepeatedAttributes.
9
+ # Offense count: 8
10
+ # Configuration parameters: AllowedMethods, AllowedPatterns, CountRepeatedAttributes.
11
11
  Metrics/AbcSize:
12
- Max: 24
12
+ Max: 25
13
13
 
14
14
  # Offense count: 6
15
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
16
- # IgnoredMethods: refine
17
- Metrics/BlockLength:
18
- Max: 87
19
-
20
- # Offense count: 1
21
- # Configuration parameters: CountComments, CountAsOne.
22
- Metrics/ClassLength:
23
- Max: 121
24
-
25
- # Offense count: 6
26
- # Configuration parameters: CountComments, CountAsOne, ExcludedMethods, IgnoredMethods.
15
+ # Configuration parameters: CountComments, CountAsOne, AllowedMethods, AllowedPatterns.
27
16
  Metrics/MethodLength:
28
17
  Max: 17
29
18
 
30
19
  # Offense count: 2
31
20
  RSpec/AnyInstance:
32
21
  Exclude:
33
- - 'spec/pdfh/document_processor_spec.rb'
22
+ - 'spec/pdfh/main_spec.rb'
34
23
 
35
24
  # Offense count: 1
36
25
  # Configuration parameters: CountAsOne.
37
26
  RSpec/ExampleLength:
38
- Max: 7
27
+ Max: 6
39
28
 
40
- # Offense count: 2
41
- RSpec/MultipleExpectations:
42
- Max: 2
43
-
44
- # Offense count: 1
45
- RSpec/SubjectStub:
29
+ # Offense count: 7
30
+ # Configuration parameters: Include, CustomTransform, IgnoreMethods, SpecSuffixOnly.
31
+ # Include: **/*_spec*rb*, **/spec/**/*
32
+ RSpec/FilePath:
33
+ Exclude:
34
+ - 'spec/pdfh/models/document_period_spec.rb'
35
+ - 'spec/pdfh/models/document_spec.rb'
36
+ - 'spec/pdfh/utils/console_spec.rb'
37
+ - 'spec/pdfh/utils/month_spec.rb'
38
+ - 'spec/pdfh/utils/opt_parser_spec.rb'
39
+ - 'spec/pdfh/utils/pdf_file_handler_spec.rb'
40
+ - 'spec/pdfh/utils/settings_builder_spec.rb'
41
+
42
+ # Offense count: 7
43
+ # Configuration parameters: Include, CustomTransform, IgnoreMethods, IgnoreMetadata.
44
+ # Include: **/*_spec.rb
45
+ RSpec/SpecFilePathFormat:
46
+ Exclude:
47
+ - '**/spec/routing/**/*'
48
+ - 'spec/pdfh/models/document_period_spec.rb'
49
+ - 'spec/pdfh/models/document_spec.rb'
50
+ - 'spec/pdfh/utils/console_spec.rb'
51
+ - 'spec/pdfh/utils/month_spec.rb'
52
+ - 'spec/pdfh/utils/opt_parser_spec.rb'
53
+ - 'spec/pdfh/utils/pdf_file_handler_spec.rb'
54
+ - 'spec/pdfh/utils/settings_builder_spec.rb'
55
+
56
+ # Offense count: 3
57
+ # This cop supports safe autocorrection (--autocorrect).
58
+ Style/RedundantStringEscape:
46
59
  Exclude:
47
- - 'spec/pdfh/document_processor_spec.rb'
60
+ - 'lib/pdfh/settings_template.rb'
data/.tool-versions CHANGED
@@ -1 +1 @@
1
- ruby 3.1.2
1
+ ruby 3.3.0
data/CHANGELOG.md CHANGED
@@ -1,31 +1,40 @@
1
+ ## v3.0.2
2
+ - Fix `undefined method` when an invalid option is provided
3
+ - Fix and add tests to get above 90% coverage
4
+
5
+ ## v3.0.1
6
+ - Refactor classes for better readability
7
+ - Upgrade to Ruby v3.3.0 and require at least Ruby 3.0.0
8
+ - Upgrade gem dependencies
9
+
1
10
  ## v3.0.0
2
- * Migrate to `asdf` from `rvm`
3
- * Upgrade old gems
4
- * Bump to v3 (as this is project's the third iteration)
11
+ - Migrate to `asdf` from `rvm`
12
+ - Upgrade old gems
13
+ - Bump to v3 (as this is project's third iteration)
5
14
 
6
15
  ## v0.2.0
7
- * Major gem refactoring
8
- * Change setting `base_path` to `destination_base_path`
9
- * Add DocumentType listing option on executable file
10
- * Add process individual documents providing type and files
16
+ - Major gem refactoring
17
+ - Change setting `base_path` to `destination_base_path`
18
+ - Add DocumentType listing option on executable file
19
+ - Add process individual documents providing type and files
11
20
  ```bash
12
21
  pdfh -t document_type_id path/to_files.pdf
13
22
  ```
14
- * Add `settings.yml` template in order to create a sample file
23
+ - Add `settings.yml` template in order to create a sample file
15
24
 
16
25
  ## v0.1.9
17
- * Add dependencies validation at run
26
+ - Add dependencies validation at run
18
27
 
19
28
  ## v0.1.5
20
- * Add `print_cmd` field in config file for information purposes
21
- * Settings now validates an unexisting directory
22
- * Refactor for easier maintenance
29
+ - Add `print_cmd` field in config file for information purposes
30
+ - Settings now validates an unexisting directory
31
+ - Refactor for easier maintenance
23
32
 
24
33
  ## v0.1.4
25
- * Add titleize format when writing new file
34
+ - Add titleize format when writing new file
26
35
 
27
36
  ## v0.1.3
28
- * Fixed copy companion files, which was not copying the files.
37
+ - Fixed copy companion files, which was not copying the files.
29
38
 
30
39
  ## v0.1.2
31
- * Initial Release
40
+ - Initial Release
data/Gemfile CHANGED
@@ -7,14 +7,15 @@ gemspec
7
7
 
8
8
  gem "bundler", "~> 2.0"
9
9
  gem "code-scanning-rubocop", "~> 0.5"
10
+ gem "factory_bot", "~> 6.2"
10
11
  gem "pry", "~> 0.14"
11
12
  gem "rake", "~> 13.0"
12
- gem "rspec", "~> 3.9"
13
+ gem "rspec", "~> 3.12"
13
14
  gem "rspec_junit_formatter", "~> 0.4"
14
- gem "rubocop", "~> 1.0"
15
- gem "rubocop-performance", "~> 1.9"
15
+ gem "rubocop", "~> 1.50"
16
+ gem "rubocop-performance", "~> 1.18"
16
17
  gem "rubocop-rake", "~> 0.5"
17
18
  gem "rubocop-rspec", "~> 2.2"
18
- gem "simplecov", "~> 0.21"
19
+ gem "simplecov", "~> 0.22"
19
20
  gem "simplecov-console", "~> 0.9"
20
21
  gem "versionomy", "~> 0.5"
data/Gemfile.lock CHANGED
@@ -1,69 +1,102 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- pdfh (3.0.0)
5
- colorize (~> 0.8.0)
4
+ pdfh (3.0.2)
5
+ colorize (~> 1.1.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
+ activesupport (7.1.2)
11
+ base64
12
+ bigdecimal
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ connection_pool (>= 2.2.5)
15
+ drb
16
+ i18n (>= 1.6, < 2)
17
+ minitest (>= 5.1)
18
+ mutex_m
19
+ tzinfo (~> 2.0)
10
20
  ansi (1.5.0)
11
21
  ast (2.4.2)
22
+ base64 (0.2.0)
23
+ bigdecimal (3.1.5)
12
24
  blockenspiel (0.5.0)
13
25
  code-scanning-rubocop (0.6.1)
14
26
  rubocop (~> 1.0)
15
27
  coderay (1.1.3)
16
- colorize (0.8.1)
28
+ colorize (1.1.0)
29
+ concurrent-ruby (1.2.2)
30
+ connection_pool (2.4.1)
17
31
  diff-lcs (1.5.0)
18
32
  docile (1.4.0)
19
- json (2.6.2)
33
+ drb (2.2.0)
34
+ ruby2_keywords
35
+ factory_bot (6.4.5)
36
+ activesupport (>= 5.0.0)
37
+ i18n (1.14.1)
38
+ concurrent-ruby (~> 1.0)
39
+ json (2.7.1)
40
+ language_server-protocol (3.17.0.3)
20
41
  method_source (1.0.0)
21
- parallel (1.22.1)
22
- parser (3.1.2.0)
42
+ minitest (5.20.0)
43
+ mutex_m (0.2.0)
44
+ parallel (1.24.0)
45
+ parser (3.3.0.2)
23
46
  ast (~> 2.4.1)
24
- pry (0.14.1)
47
+ racc
48
+ pry (0.14.2)
25
49
  coderay (~> 1.1)
26
50
  method_source (~> 1.0)
51
+ racc (1.7.3)
27
52
  rainbow (3.1.1)
28
- rake (13.0.6)
29
- regexp_parser (2.5.0)
30
- rexml (3.2.5)
31
- rspec (3.11.0)
32
- rspec-core (~> 3.11.0)
33
- rspec-expectations (~> 3.11.0)
34
- rspec-mocks (~> 3.11.0)
35
- rspec-core (3.11.0)
36
- rspec-support (~> 3.11.0)
37
- rspec-expectations (3.11.0)
53
+ rake (13.1.0)
54
+ regexp_parser (2.9.0)
55
+ rexml (3.2.6)
56
+ rspec (3.12.0)
57
+ rspec-core (~> 3.12.0)
58
+ rspec-expectations (~> 3.12.0)
59
+ rspec-mocks (~> 3.12.0)
60
+ rspec-core (3.12.2)
61
+ rspec-support (~> 3.12.0)
62
+ rspec-expectations (3.12.3)
38
63
  diff-lcs (>= 1.2.0, < 2.0)
39
- rspec-support (~> 3.11.0)
40
- rspec-mocks (3.11.1)
64
+ rspec-support (~> 3.12.0)
65
+ rspec-mocks (3.12.6)
41
66
  diff-lcs (>= 1.2.0, < 2.0)
42
- rspec-support (~> 3.11.0)
43
- rspec-support (3.11.0)
44
- rspec_junit_formatter (0.5.1)
67
+ rspec-support (~> 3.12.0)
68
+ rspec-support (3.12.1)
69
+ rspec_junit_formatter (0.6.0)
45
70
  rspec-core (>= 2, < 4, != 2.12.0)
46
- rubocop (1.32.0)
71
+ rubocop (1.59.0)
47
72
  json (~> 2.3)
73
+ language_server-protocol (>= 3.17.0)
48
74
  parallel (~> 1.10)
49
- parser (>= 3.1.0.0)
75
+ parser (>= 3.2.2.4)
50
76
  rainbow (>= 2.2.2, < 4.0)
51
77
  regexp_parser (>= 1.8, < 3.0)
52
78
  rexml (>= 3.2.5, < 4.0)
53
- rubocop-ast (>= 1.19.1, < 2.0)
79
+ rubocop-ast (>= 1.30.0, < 2.0)
54
80
  ruby-progressbar (~> 1.7)
55
- unicode-display_width (>= 1.4.0, < 3.0)
56
- rubocop-ast (1.19.1)
57
- parser (>= 3.1.1.0)
58
- rubocop-performance (1.14.3)
59
- rubocop (>= 1.7.0, < 2.0)
60
- rubocop-ast (>= 0.4.0)
81
+ unicode-display_width (>= 2.4.0, < 3.0)
82
+ rubocop-ast (1.30.0)
83
+ parser (>= 3.2.1.0)
84
+ rubocop-capybara (2.20.0)
85
+ rubocop (~> 1.41)
86
+ rubocop-factory_bot (2.25.1)
87
+ rubocop (~> 1.41)
88
+ rubocop-performance (1.20.2)
89
+ rubocop (>= 1.48.1, < 2.0)
90
+ rubocop-ast (>= 1.30.0, < 2.0)
61
91
  rubocop-rake (0.6.0)
62
92
  rubocop (~> 1.0)
63
- rubocop-rspec (2.12.1)
64
- rubocop (~> 1.31)
65
- ruby-progressbar (1.11.0)
66
- simplecov (0.21.2)
93
+ rubocop-rspec (2.26.1)
94
+ rubocop (~> 1.40)
95
+ rubocop-capybara (~> 2.17)
96
+ rubocop-factory_bot (~> 2.22)
97
+ ruby-progressbar (1.13.0)
98
+ ruby2_keywords (0.0.5)
99
+ simplecov (0.22.0)
67
100
  docile (~> 1.1)
68
101
  simplecov-html (~> 0.11)
69
102
  simplecov_json_formatter (~> 0.1)
@@ -75,7 +108,9 @@ GEM
75
108
  simplecov_json_formatter (0.1.4)
76
109
  terminal-table (3.0.2)
77
110
  unicode-display_width (>= 1.1.1, < 3)
78
- unicode-display_width (2.2.0)
111
+ tzinfo (2.0.6)
112
+ concurrent-ruby (~> 1.0)
113
+ unicode-display_width (2.5.0)
79
114
  versionomy (0.5.0)
80
115
  blockenspiel (~> 0.5)
81
116
 
@@ -85,18 +120,19 @@ PLATFORMS
85
120
  DEPENDENCIES
86
121
  bundler (~> 2.0)
87
122
  code-scanning-rubocop (~> 0.5)
123
+ factory_bot (~> 6.2)
88
124
  pdfh!
89
125
  pry (~> 0.14)
90
126
  rake (~> 13.0)
91
- rspec (~> 3.9)
127
+ rspec (~> 3.12)
92
128
  rspec_junit_formatter (~> 0.4)
93
- rubocop (~> 1.0)
94
- rubocop-performance (~> 1.9)
129
+ rubocop (~> 1.50)
130
+ rubocop-performance (~> 1.18)
95
131
  rubocop-rake (~> 0.5)
96
132
  rubocop-rspec (~> 2.2)
97
- simplecov (~> 0.21)
133
+ simplecov (~> 0.22)
98
134
  simplecov-console (~> 0.9)
99
135
  versionomy (~> 0.5)
100
136
 
101
137
  BUNDLED WITH
102
- 2.3.19
138
+ 2.5.4
data/README.md CHANGED
@@ -1,9 +1,11 @@
1
1
  # PDF Handler (pdfh)
2
2
 
3
- [![Rubocop](https://github.com/iax7/pdfh/actions/workflows/rubocop-analysis.yml/badge.svg)](https://github.com/iax7/pdfh/actions/workflows/rubocop-analysis.yml)
4
- [![Ruby][ruby-badge]][ruby-url]
3
+ [![Rubocop][rubocop-img]][rubocop-url]
4
+ [![Ruby][ruby-img]][ruby-url]
5
+ [![Conventional Commits][cc-img]][cc-url]
6
+ [![Current version][gem-img]][gem-url]
5
7
 
6
- Examine all PDF files in Look up directories, remove password (if has one), rename and copy to a new directory using regular expresions.
8
+ Examine all PDF files in Look up directories, remove password (if has one), rename and copy to a new directory using regular expressions.
7
9
 
8
10
  ## Installation
9
11
 
@@ -13,11 +15,17 @@ gem install pdfh
13
15
 
14
16
  ### Dependencies
15
17
 
16
- You need to install pdf handling dependencies in order to use this gem. (I have only tested it on macOS)
18
+ You need to install pdf handling dependencies in order to use this gem.
17
19
 
20
+ #### macOS
18
21
  ```bash
19
- brew install qpdf
20
- brew install xpdf
22
+ brew install qpdf # for qpdf
23
+ brew install xpdf # for pdftotext
24
+ ```
25
+
26
+ #### Fedora
27
+ ```bash
28
+ sudo dnf install -y qpdf poppler-utils
21
29
  ```
22
30
 
23
31
  ## Usage
@@ -68,6 +76,12 @@ build pdfh.gemspec
68
76
  gem install pdfh-*
69
77
  ```
70
78
 
79
+ ### Conventional Commits
80
+ ```bash
81
+ npm install -g @commitlint/cli @commitlint/config-conventional
82
+ commitlint --from origin --to @
83
+ ```
84
+
71
85
  ## Contributing
72
86
 
73
87
  Bug reports and pull requests are welcome on GitHub at https://github.com/iax7/pdfh. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
@@ -81,5 +95,11 @@ The gem is available as open source under the terms of the [MIT License](https:/
81
95
  Everyone interacting in the Pdfh project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/iax7/pdfh/blob/master/CODE_OF_CONDUCT.md).
82
96
 
83
97
  <!-- Links -->
84
- [ruby-badge]: https://img.shields.io/badge/ruby-3.1-blue?style=flat&logo=ruby&logoColor=CC342D&labelColor=white
98
+ [rubocop-img]: https://github.com/iax7/pdfh/actions/workflows/rubocop-analysis.yml/badge.svg
99
+ [rubocop-url]: https://github.com/iax7/pdfh/actions/workflows/rubocop-analysis.yml
100
+ [ruby-img]: https://img.shields.io/badge/ruby-3.1-blue?style=flat&logo=ruby&logoColor=CC342D&labelColor=white
85
101
  [ruby-url]: https://www.ruby-lang.org/en/
102
+ [cc-img]: https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=00&labelColor=fff
103
+ [cc-url]: https://conventionalcommits.org
104
+ [gem-img]: https://img.shields.io/gem/v/pdfh?labelColor=fff&label=version
105
+ [gem-url]: https://rubygems.org/gems/pdfh
data/bin/console CHANGED
@@ -10,7 +10,7 @@ require "pdfh"
10
10
  # (If you use this, don't forget to add pry to your Gemfile!)
11
11
  require "pry"
12
12
 
13
- p Pdfh.parse_argv
13
+ p Pdfh::OptParser.parse_argv
14
14
 
15
15
  Pry.start
16
16
 
data/bin/run CHANGED
@@ -5,4 +5,4 @@ require "bundler/setup"
5
5
  require "pdfh"
6
6
  require "pry"
7
7
 
8
- Pdfh::DocumentProcessor.new.start
8
+ Pdfh::Main.start
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ extends: ['@commitlint/config-conventional'],
3
+ }
data/exe/pdfh CHANGED
@@ -20,7 +20,7 @@ end
20
20
  exit(1) unless validate_installed("qpdf", "pdftotext")
21
21
 
22
22
  begin
23
- Pdfh::DocumentProcessor.new.start
23
+ Pdfh::Main.start
24
24
  rescue StandardError => e
25
25
  Pdfh.error_print e.message
26
26
  end
data/lib/pdfh/main.rb ADDED
@@ -0,0 +1,93 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pdfh
4
+ # Main functionality. This class is intended to manage the pdf documents
5
+ class Main
6
+ class << self
7
+ # @return [void]
8
+ def start
9
+ arg_options = Pdfh::OptParser.parse_argv
10
+ @options = Options.new(arg_options)
11
+
12
+ Pdfh.instance_variable_set(:@options, options)
13
+ Pdfh.instance_variable_set(:@console, Console.new(options.verbose?))
14
+ Pdfh.print_options(arg_options)
15
+
16
+ @settings = SettingsBuilder.build
17
+ Pdfh.debug "Destination path: #{settings.base_path.colorize(:light_blue)}"
18
+
19
+ options.file_mode? ? process_provided_files : process_lookup_dirs
20
+ rescue SettingsIOError => e
21
+ Pdfh.error_print(e.message, exit_app: false)
22
+ Pdfh.create_settings_file
23
+ exit(1)
24
+ rescue StandardError => e
25
+ Pdfh.error_print(e.message)
26
+ end
27
+
28
+ private
29
+
30
+ attr_reader :options, :settings
31
+
32
+ # @param [String] file_name
33
+ # @return [DocumentType]
34
+ def match_doc_type(file_name)
35
+ settings.document_types.each do |type|
36
+ match = type.re_file.match(file_name)
37
+ return type if match
38
+ end
39
+ nil
40
+ end
41
+
42
+ # @return [void]
43
+ def process_provided_files
44
+ type_id = options.type
45
+ raise ArgumentError, "No files provided to process #{type_id.inspect} type." unless options.files?
46
+
47
+ type = settings.document_type(type_id)
48
+ Pdfh.error_print "Type #{type_id.inspect} was not found." if type.nil?
49
+ options.files.each do |file|
50
+ next Pdfh.warn_print "File #{file.inspect} does not exist." unless File.exist?(file)
51
+ next Pdfh.warn_print "File #{file.inspect} is not a pdf." unless File.extname(file) == ".pdf"
52
+
53
+ PdfFileHandler.new(file, type).process_document(settings.base_path)
54
+ end
55
+ end
56
+
57
+ # @return [void]
58
+ def process_lookup_dirs
59
+ settings.lookup_dirs.each do |work_directory|
60
+ process_directory(work_directory)
61
+ end
62
+ end
63
+
64
+ # @param [String] work_directory
65
+ # @return [void]
66
+ def process_directory(work_directory)
67
+ Pdfh.headline(work_directory)
68
+ processed_count = 0
69
+ ignored_files = []
70
+ files = Dir["#{work_directory}/*.pdf"]
71
+ files.each do |pdf_file|
72
+ type = match_doc_type(pdf_file)
73
+ if type
74
+ processed_count += 1
75
+ PdfFileHandler.new(pdf_file, type).process_document(settings.base_path)
76
+ else
77
+ ignored_files << base_name_no_ext(pdf_file)
78
+ end
79
+ end
80
+ puts " (No files processed)".colorize(:light_black) if processed_count.zero?
81
+ return unless Pdfh.verbose?
82
+
83
+ puts "\n No document type found for these PDF files:" if ignored_files.any?
84
+ ignored_files.each.with_index(1) { |file, index| Pdfh.ident_print index, file, color: :magenta }
85
+ end
86
+
87
+ # @return [String]
88
+ def base_name_no_ext(file)
89
+ File.basename(file, File.extname(file))
90
+ end
91
+ end
92
+ end
93
+ end
@@ -3,27 +3,44 @@
3
3
  module Pdfh
4
4
  # Handles the PDF detected by the rules
5
5
  class Document
6
- attr_reader :text, :type, :file, :extra, :pdf_doc, :period
6
+ IDENT = 12
7
+
8
+ attr_reader :text, :type, :file, :extra, :period
7
9
 
8
10
  # @param file [String]
9
11
  # @param type [DocumentType]
12
+ # @param text [String]
10
13
  # @return [self]
11
- def initialize(file, type)
12
- raise IOError, "File #{file} not found" unless File.exist?(file)
13
-
14
+ def initialize(file, type, text)
14
15
  @file = file
15
16
  @type = type
16
- Pdfh.verbose_print "=== Document Type: #{type.name} =============================="
17
- @pdf_doc = PdfHandler.new(file, type.pwd)
18
- @text = @pdf_doc.extract_text
19
- Pdfh.verbose_print "~~~~~~~~~~~~~~~~~~ Finding a subtype"
17
+ Pdfh.debug "=== Document Type: #{type.name} =============================="
18
+ @text = text
19
+ Pdfh.debug "~~~~~~~~~~~~~~~~~~ Finding a subtype"
20
20
  @sub_type = type.sub_type(@text)
21
- Pdfh.verbose_print " SubType: #{@sub_type}"
21
+ Pdfh.debug " SubType: #{@sub_type}"
22
22
  @companion = search_companion_files
23
23
 
24
24
  month, year, @extra = match_data
25
25
  @period = DocumentPeriod.new(day: extra, month: month, month_offset: @sub_type&.month_offset, year: year)
26
- Pdfh.verbose_print " Period: #{@period.inspect}"
26
+ Pdfh.debug " Period: #{@period.inspect}"
27
+ end
28
+
29
+ # @return [void]
30
+ def print_info
31
+ print_info_line "Type", type.name
32
+ print_info_line "Sub-Type", sub_type
33
+ print_info_line "Period", period
34
+ print_info_line "New Name", new_name
35
+ print_info_line "Store Path", store_path
36
+ print_info_line "Extra files", companion_files(join: true)
37
+ print_info_line "Print CMD", print_cmd
38
+ print_info_line "Processed?", "No (in Dry mode)" if Pdfh.dry?
39
+ end
40
+
41
+ # @return [void]
42
+ def print_info_line(property, info)
43
+ Pdfh.ident_print property, info.to_s, color: :light_blue, width: IDENT
27
44
  end
28
45
 
29
46
  # @return [String]
@@ -100,13 +117,13 @@ module Pdfh
100
117
  # unnamed matches needs to be in order month, year
101
118
  # @return [Array] - format [month, year, day]
102
119
  def match_data
103
- Pdfh.verbose_print "~~~~~~~~~~~~~~~~~~ Match Data RegEx"
104
- Pdfh.verbose_print " Using regex: #{@type.re_date}"
105
- Pdfh.verbose_print " named: #{@type.re_date.named_captures}"
120
+ Pdfh.debug "~~~~~~~~~~~~~~~~~~ Match Data RegEx"
121
+ Pdfh.debug " Using regex: #{@type.re_date}"
122
+ Pdfh.debug " named: #{@type.re_date.named_captures}"
106
123
  matched = @type.re_date.match(@text)
107
124
  raise ReDateError unless matched
108
125
 
109
- Pdfh.verbose_print " captured: #{matched.captures}"
126
+ Pdfh.debug " captured: #{matched.captures}"
110
127
 
111
128
  return matched.captures.map(&:downcase) if @type.re_date.named_captures.empty?
112
129
 
@@ -116,12 +133,12 @@ module Pdfh
116
133
 
117
134
  # @return [Array]
118
135
  def search_companion_files
119
- Pdfh.verbose_print "~~~~~~~~~~~~~~~~~~ Searching Companion files"
120
- Pdfh.verbose_print " Searching on: #{home_dir.inspect}"
136
+ Pdfh.debug "~~~~~~~~~~~~~~~~~~ Searching Companion files"
137
+ Pdfh.debug " Searching on: #{home_dir.inspect}"
121
138
  Dir.chdir(home_dir) do
122
139
  files_matching = Dir["#{file_name_only}.*"]
123
140
  companion = files_matching.reject { |file| file.include? ".pdf" }
124
- Pdfh.verbose_print " Found: #{companion.inspect}"
141
+ Pdfh.debug " Found: #{companion.inspect}"
125
142
 
126
143
  companion
127
144
  end
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Pdfh
4
+ # Provides a way to divide document type by subtypes, for different name, and month adjustments
5
+ DocumentSubType = Struct.new(:name, :month_offset, keyword_init: true)
6
+ end