alexandria-book-collection-manager 0.7.3 → 0.7.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/.github/dependabot.yml +9 -0
  3. data/.github/workflows/ruby.yml +77 -0
  4. data/.gitignore +4 -1
  5. data/.rubocop.yml +86 -36
  6. data/.rubocop_todo.yml +58 -161
  7. data/.simplecov +5 -2
  8. data/CHANGELOG.md +56 -2
  9. data/Gemfile +4 -3
  10. data/INSTALL.md +23 -11
  11. data/README.md +52 -41
  12. data/Rakefile +78 -75
  13. data/alexandria-book-collection-manager.gemspec +50 -44
  14. data/bin/alexandria +12 -22
  15. data/doc/FAQ +1 -2
  16. data/doc/dependency_decisions.yml +27 -8
  17. data/lib/alexandria.rb +25 -23
  18. data/lib/alexandria/about.rb +50 -50
  19. data/lib/alexandria/book_providers.rb +86 -91
  20. data/lib/alexandria/book_providers/adlibris.rb +37 -74
  21. data/lib/alexandria/book_providers/amazon_aws.rb +94 -100
  22. data/lib/alexandria/book_providers/amazon_ecs_util.rb +289 -324
  23. data/lib/alexandria/book_providers/barnes_and_noble.rb +42 -42
  24. data/lib/alexandria/book_providers/douban.rb +25 -41
  25. data/lib/alexandria/book_providers/proxis.rb +34 -29
  26. data/lib/alexandria/book_providers/pseudomarc.rb +77 -85
  27. data/lib/alexandria/book_providers/siciliano.rb +60 -64
  28. data/lib/alexandria/book_providers/thalia_provider.rb +161 -0
  29. data/lib/alexandria/book_providers/web.rb +5 -5
  30. data/lib/alexandria/book_providers/worldcat.rb +66 -95
  31. data/lib/alexandria/book_providers/z3950.rb +153 -169
  32. data/lib/alexandria/config.rb +1 -1
  33. data/lib/alexandria/console.rb +3 -3
  34. data/lib/alexandria/default_preferences.rb +37 -0
  35. data/lib/alexandria/execution_queue.rb +13 -12
  36. data/lib/alexandria/export_format.rb +8 -8
  37. data/lib/alexandria/export_library.rb +128 -127
  38. data/lib/alexandria/import_library.rb +102 -126
  39. data/lib/alexandria/import_library_csv.rb +41 -41
  40. data/lib/alexandria/library_collection.rb +6 -5
  41. data/lib/alexandria/library_sort_order.rb +4 -2
  42. data/lib/alexandria/library_store.rb +39 -28
  43. data/lib/alexandria/logging.rb +10 -14
  44. data/lib/alexandria/models/book.rb +5 -4
  45. data/lib/alexandria/models/library.rb +63 -53
  46. data/lib/alexandria/net.rb +5 -6
  47. data/lib/alexandria/preferences.rb +66 -63
  48. data/lib/alexandria/scanners.rb +2 -2
  49. data/lib/alexandria/scanners/{cuecat.rb → cue_cat.rb} +17 -17
  50. data/lib/alexandria/scanners/keyboard.rb +8 -8
  51. data/lib/alexandria/smart_library.rb +110 -112
  52. data/lib/alexandria/ui.rb +15 -15
  53. data/lib/alexandria/ui/{dialogs/about_dialog.rb → about_dialog.rb} +2 -2
  54. data/lib/alexandria/ui/{dialogs/acquire_dialog.rb → acquire_dialog.rb} +108 -109
  55. data/lib/alexandria/ui/alert_dialog.rb +66 -0
  56. data/lib/alexandria/ui/{dialogs/bad_isbns_dialog.rb → bad_isbns_dialog.rb} +13 -9
  57. data/lib/alexandria/ui/{dialogs/barcode_animation.rb → barcode_animation.rb} +16 -15
  58. data/lib/alexandria/ui/{dialogs/book_properties_dialog.rb → book_properties_dialog.rb} +25 -38
  59. data/lib/alexandria/ui/{dialogs/book_properties_dialog_base.rb → book_properties_dialog_base.rb} +64 -157
  60. data/lib/alexandria/ui/builder_base.rb +1 -1
  61. data/lib/alexandria/ui/calendar_popup.rb +58 -0
  62. data/lib/alexandria/ui/callbacks.rb +187 -155
  63. data/lib/alexandria/ui/completion_models.rb +8 -22
  64. data/lib/alexandria/ui/confirm_erase_dialog.rb +33 -0
  65. data/lib/alexandria/ui/conflict_while_copying_dialog.rb +34 -0
  66. data/lib/alexandria/ui/dndable.rb +7 -7
  67. data/lib/alexandria/ui/error_dialog.rb +25 -0
  68. data/lib/alexandria/ui/{dialogs/export_dialog.rb → export_dialog.rb} +37 -58
  69. data/lib/alexandria/ui/icons.rb +38 -43
  70. data/lib/alexandria/ui/iconview.rb +12 -10
  71. data/lib/alexandria/ui/iconview_tooltips.rb +41 -54
  72. data/lib/alexandria/ui/import_dialog.rb +157 -0
  73. data/lib/alexandria/ui/init.rb +30 -41
  74. data/lib/alexandria/ui/{dialogs/keep_bad_isbn_dialog.rb → keep_bad_isbn_dialog.rb} +9 -6
  75. data/lib/alexandria/ui/libraries_combo.rb +15 -14
  76. data/lib/alexandria/ui/listview.rb +69 -67
  77. data/lib/alexandria/ui/main_app.rb +24 -26
  78. data/lib/alexandria/ui/misc_dialogs.rb +10 -0
  79. data/lib/alexandria/ui/multi_drag_treeview.rb +8 -9
  80. data/lib/alexandria/ui/{dialogs/new_book_dialog.rb → new_book_dialog.rb} +113 -114
  81. data/lib/alexandria/ui/{dialogs/new_book_dialog_manual.rb → new_book_dialog_manual.rb} +22 -19
  82. data/lib/alexandria/ui/new_provider_dialog.rb +100 -0
  83. data/lib/alexandria/ui/new_smart_library_dialog.rb +74 -0
  84. data/lib/alexandria/ui/preferences_dialog.rb +313 -0
  85. data/lib/alexandria/ui/provider_preferences_base_dialog.rb +95 -0
  86. data/lib/alexandria/ui/provider_preferences_dialog.rb +35 -0
  87. data/lib/alexandria/ui/{dialogs/misc_dialogs.rb → really_delete_dialog.rb} +7 -28
  88. data/lib/alexandria/ui/{sidepane.rb → sidepane_manager.rb} +53 -48
  89. data/lib/alexandria/ui/skip_entry_dialog.rb +33 -0
  90. data/lib/alexandria/ui/smart_library_properties_dialog.rb +60 -0
  91. data/lib/alexandria/ui/smart_library_properties_dialog_base.rb +242 -0
  92. data/lib/alexandria/ui/smart_library_rule_box.rb +119 -0
  93. data/lib/alexandria/ui/sound.rb +11 -13
  94. data/lib/alexandria/ui/ui_manager.rb +216 -200
  95. data/lib/alexandria/version.rb +4 -19
  96. data/lib/alexandria/web_themes.rb +21 -21
  97. data/po/Makefile +2 -2
  98. data/po/cs.po +992 -875
  99. data/po/cy.po +961 -874
  100. data/po/de.po +990 -865
  101. data/po/el.po +989 -865
  102. data/po/es.po +985 -861
  103. data/po/fr.po +987 -867
  104. data/po/ga.po +908 -820
  105. data/po/gl.po +980 -860
  106. data/po/it.po +986 -864
  107. data/po/ja.po +969 -849
  108. data/po/mk.po +984 -860
  109. data/po/nb.po +979 -859
  110. data/po/nl.po +983 -860
  111. data/po/pl.po +1018 -971
  112. data/po/pt.po +988 -857
  113. data/po/pt_BR.po +983 -863
  114. data/po/ru.po +994 -871
  115. data/po/sk.po +989 -867
  116. data/po/sv.po +976 -856
  117. data/po/uk.po +972 -858
  118. data/po/zh_TW.po +974 -854
  119. data/schemas/alexandria.schemas +24 -2
  120. data/share/alexandria/glade/acquire_dialog__builder.glade +1 -1
  121. data/share/alexandria/glade/book_properties_dialog__builder.glade +1 -1
  122. data/share/alexandria/glade/main_app__builder.glade +6 -21
  123. data/share/alexandria/glade/new_book_dialog__builder.glade +1 -1
  124. data/share/alexandria/glade/preferences_dialog__builder.glade +1 -1
  125. data/share/gnome/help/alexandria/C/introduction.xml +0 -4
  126. data/share/gnome/help/alexandria/C/searching.xml +1 -1
  127. data/share/gnome/help/alexandria/C/smart-libraries.xml +2 -2
  128. data/share/gnome/help/alexandria/C/working-with-libraries.xml +1 -1
  129. data/share/gnome/help/alexandria/fr/alexandria.xml +1 -1
  130. data/share/gnome/help/alexandria/ja/introduction.xml +0 -4
  131. data/share/gnome/help/alexandria/ja/smart-libraries.xml +1 -1
  132. data/spec/alexandria/book_providers/thalia_provider_spec.rb +119 -0
  133. data/spec/alexandria/book_providers/world_cat_provider_spec.rb +160 -0
  134. data/spec/alexandria/book_providers_spec.rb +62 -156
  135. data/spec/alexandria/book_spec.rb +12 -10
  136. data/spec/alexandria/console_spec.rb +6 -11
  137. data/spec/alexandria/export_library_spec.rb +47 -58
  138. data/spec/alexandria/library_spec.rb +121 -109
  139. data/spec/alexandria/library_store_spec.rb +8 -8
  140. data/spec/alexandria/preferences_spec.rb +44 -17
  141. data/spec/alexandria/scanners/cue_cat_spec.rb +52 -0
  142. data/spec/alexandria/smart_library_spec.rb +15 -15
  143. data/spec/alexandria/ui/about_dialog_spec.rb +14 -0
  144. data/spec/alexandria/ui/acquire_dialog_spec.rb +14 -0
  145. data/spec/alexandria/ui/alert_dialog_spec.rb +16 -0
  146. data/spec/alexandria/ui/bad_isbns_dialog_spec.rb +14 -0
  147. data/spec/alexandria/ui/book_properties_dialog_spec.rb +59 -0
  148. data/spec/alexandria/ui/confirm_erase_dialog_spec.rb +14 -0
  149. data/spec/alexandria/ui/conflict_while_copying_dialog_spec.rb +16 -0
  150. data/spec/alexandria/ui/error_dialog_spec.rb +14 -0
  151. data/spec/alexandria/ui/export_dialog_spec.rb +36 -0
  152. data/spec/alexandria/ui/icons_spec.rb +26 -0
  153. data/spec/alexandria/ui/iconview_spec.rb +7 -21
  154. data/spec/alexandria/ui/import_dialog_spec.rb +46 -0
  155. data/spec/alexandria/ui/keep_bad_isbn_dialog_spec.rb +17 -0
  156. data/spec/alexandria/ui/main_app_spec.rb +7 -34
  157. data/spec/alexandria/ui/new_book_dialog_manual_spec.rb +51 -0
  158. data/spec/alexandria/ui/{dialogs/new_book_dialog_spec.rb → new_book_dialog_spec.rb} +4 -4
  159. data/spec/alexandria/ui/new_provider_dialog_spec.rb +30 -0
  160. data/spec/alexandria/ui/new_smart_library_dialog_spec.rb +39 -0
  161. data/spec/alexandria/ui/preferences_dialog_spec.rb +14 -0
  162. data/spec/alexandria/ui/provider_preferences_dialog_spec.rb +34 -0
  163. data/spec/alexandria/ui/really_delete_dialog_spec.rb +16 -0
  164. data/spec/alexandria/ui/sidepane_manager_spec.rb +15 -0
  165. data/spec/alexandria/ui/skip_entry_dialog_spec.rb +14 -0
  166. data/spec/alexandria/ui/smart_library_properties_dialog_spec.rb +49 -0
  167. data/spec/alexandria/ui/sound_spec.rb +2 -2
  168. data/spec/alexandria/ui/ui_manager_spec.rb +44 -20
  169. data/spec/end_to_end/basic_run_spec.rb +21 -38
  170. data/spec/fixtures/cover.jpg +0 -0
  171. data/spec/spec_helper.rb +54 -10
  172. data/tasks/setup.rb +2 -2
  173. data/tasks/spec.rake +11 -11
  174. data/util/rake/fileinstall.rb +38 -35
  175. data/util/rake/gettextgenerate.rb +7 -7
  176. data/util/rake/omfgenerate.rb +7 -7
  177. metadata +158 -45
  178. data/dogtail/basic_run_test.py +0 -9
  179. data/lib/alexandria/book_providers/renaud.rb +0 -155
  180. data/lib/alexandria/book_providers/thalia.rb +0 -198
  181. data/lib/alexandria/ui/dialogs/alert_dialog.rb +0 -63
  182. data/lib/alexandria/ui/dialogs/import_dialog.rb +0 -176
  183. data/lib/alexandria/ui/dialogs/new_smart_library_dialog.rb +0 -62
  184. data/lib/alexandria/ui/dialogs/preferences_dialog.rb +0 -563
  185. data/lib/alexandria/ui/dialogs/smart_library_properties_dialog.rb +0 -61
  186. data/lib/alexandria/ui/dialogs/smart_library_properties_dialog_base.rb +0 -423
  187. data/spec/alexandria/scanners/cuecat_spec.rb +0 -67
  188. data/spec/alexandria/ui/dialogs_spec.rb +0 -162
  189. data/spec/alexandria/ui/sidepane_spec.rb +0 -29
  190. data/spec/alexandria/ui/ui_utilities_spec.rb +0 -62
  191. data/spec/alexandria/utilities_spec.rb +0 -52
  192. data/tasks/dogtail.rake +0 -6
Binary file
@@ -4,19 +4,61 @@
4
4
  #
5
5
  # See the file README.md for authorship and licensing information.
6
6
 
7
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '/../lib'))
7
+ require "rspec"
8
+ require "alexandria"
9
+ require "webmock/rspec"
10
+ require "pry"
8
11
 
9
- require 'alexandria'
10
-
11
- LIBDIR = File.expand_path(File.join(File.dirname(__FILE__), '/data/libraries'))
12
- TESTDIR = File.join(LIBDIR, 'test')
12
+ LIBDIR = File.expand_path("data/libraries", __dir__)
13
+ TESTDIR = File.join(LIBDIR, "test")
13
14
 
14
15
  def an_artist_of_the_floating_world
15
- Alexandria::Book.new('An Artist of the Floating World',
16
- ['Kazuo Ishiguro'],
17
- '9780571147168',
18
- 'Faber and Faber', 1999,
19
- 'Paperback')
16
+ Alexandria::Book.new("An Artist of the Floating World",
17
+ ["Kazuo Ishiguro"],
18
+ "9780571147168",
19
+ "Faber and Faber", 1999,
20
+ "Paperback")
21
+ end
22
+
23
+ def assert_correct_search_result(provider, query,
24
+ search_type = Alexandria::BookProviders::SEARCH_BY_ISBN)
25
+ begin
26
+ results = provider.instance.search(query, search_type)
27
+ rescue SocketError
28
+ skip "Service is offline"
29
+ end
30
+
31
+ expect(results).to be_instance_of(Array), "Results are not an array for #{provider}"
32
+ expect(results).not_to be_empty, "Results are empty for #{provider}"
33
+
34
+ if search_type == Alexandria::BookProviders::SEARCH_BY_ISBN
35
+ expect(results.length).to be <= 2, "Results are greater than 2 for #{provider}"
36
+
37
+ book = results.first
38
+
39
+ expect(book).to be_instance_of(Alexandria::Book),
40
+ "Result is not a Book for #{provider}"
41
+
42
+ canonical_query = Alexandria::Library.canonicalise_ean(query)
43
+ canonical_result = Alexandria::Library.canonicalise_ean(book.isbn)
44
+ expect(canonical_query)
45
+ .to eq(canonical_result),
46
+ "Result's isbn #{book.isbn} is not equivalent" \
47
+ " to the requested isbn #{query} for #{provider}"
48
+
49
+ if results.length == 2
50
+ cover_url = results.last
51
+ if cover_url
52
+ expect(cover_url)
53
+ .to be_instance_of(String),
54
+ "Unexpected cover_url #{cover_url.inspect} for #{provider}"
55
+ end
56
+ end
57
+ else
58
+ expect(results.first.first)
59
+ .to be_instance_of(Alexandria::Book), "Result item is not a Book for #{provider}"
60
+ end
61
+ results
20
62
  end
21
63
 
22
64
  Alexandria::UI::Icons.init
@@ -25,6 +67,8 @@ test_store = Alexandria::LibraryStore.new(TESTDIR)
25
67
  Alexandria::LibraryCollection.instance.library_store = test_store
26
68
 
27
69
  RSpec.configure do |config|
70
+ config.example_status_persistence_file_path = "spec/examples.txt"
71
+
28
72
  config.before do
29
73
  FileUtils.rm_rf(TESTDIR)
30
74
  end
@@ -24,9 +24,9 @@
24
24
  # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25
25
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
26
  #++
27
- require 'rake/clean'
27
+ require "rake/clean"
28
28
 
29
29
  # Load the other rake files in the tasks folder
30
30
  tasks_dir = __dir__
31
- rakefiles = Dir.glob(File.join(tasks_dir, '*.rake')).sort
31
+ rakefiles = Dir.glob(File.join(tasks_dir, "*.rake")).sort
32
32
  import(*rakefiles)
@@ -26,21 +26,21 @@
26
26
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
27
  #++
28
28
 
29
- require 'rspec/core/rake_task'
29
+ require "rspec/core/rake_task"
30
30
 
31
- namespace 'spec' do
32
- RSpec::Core::RakeTask.new('unit') do |t|
33
- t.pattern = 'spec/alexandria/**/*_spec.rb'
34
- t.ruby_opts = ['-rbundler/setup -rsimplecov -Ilib -w']
31
+ namespace "spec" do
32
+ RSpec::Core::RakeTask.new("unit") do |t|
33
+ t.pattern = "spec/alexandria/**/*_spec.rb"
34
+ t.ruby_opts = ["-rbundler/setup -rsimplecov -Ilib -w"]
35
35
  end
36
36
 
37
- RSpec::Core::RakeTask.new('end_to_end') do |t|
38
- t.pattern = 'spec/end_to_end/**/*_spec.rb'
39
- t.ruby_opts = ['-rbundler/setup -rsimplecov -Ilib -w']
37
+ RSpec::Core::RakeTask.new("end_to_end") do |t|
38
+ t.pattern = "spec/end_to_end/**/*_spec.rb"
39
+ t.ruby_opts = ["-rbundler/setup -rsimplecov -Ilib -w"]
40
40
  end
41
41
 
42
- desc 'Runs all unit and end-to-end specs'
43
- task 'all' => ['spec:unit', 'spec:end_to_end']
42
+ desc "Runs all unit and end-to-end specs"
43
+ task "all" => ["spec:unit", "spec:end_to_end"]
44
44
  end
45
45
 
46
- task default: 'spec:all'
46
+ task spec: "spec:all"
@@ -3,7 +3,7 @@
3
3
  # -*- ruby -*-
4
4
  #--
5
5
  # Copyright (C) 2009 Cathal Mc Ginley
6
- # Copyright (C) 2011 Matijs van Zuijlen
6
+ # Copyright (C) 2011, 2020 Matijs van Zuijlen
7
7
  #
8
8
  # This file is part of the Alexandria build system.
9
9
  #
@@ -27,10 +27,10 @@
27
27
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
28
  #++
29
29
 
30
- require 'fileutils'
31
- require 'pathname'
32
- require 'set'
33
- require 'rake/tasklib'
30
+ require "fileutils"
31
+ require "pathname"
32
+ require "set"
33
+ require "rake/tasklib"
34
34
 
35
35
  # A file installer task, capable of installing into the system
36
36
  # directories, or doing a staged install to a given directory
@@ -84,8 +84,8 @@ class FileInstallTask < Rake::TaskLib
84
84
 
85
85
  # INSTALL TASK
86
86
 
87
- description = 'Install package files'
88
- description += ' to staging directory' if @stage_dir
87
+ description = "Install package files"
88
+ description += " to staging directory" if @stage_dir
89
89
  desc description
90
90
  task tasknames[:install] do
91
91
  @file_groups.each { |g| g.install(@stage_dir) }
@@ -105,7 +105,7 @@ class FileInstallTask < Rake::TaskLib
105
105
  @dirs_to_remove_globs.each do |glob|
106
106
  regex = glob2regex(glob)
107
107
  all_dirs.each do |dir|
108
- dir += '/' unless dir =~ /\/$/
108
+ dir += "/" unless dir.end_with?("/")
109
109
  to_delete << Regexp.last_match[1] if regex =~ dir
110
110
  end
111
111
  end
@@ -116,8 +116,8 @@ class FileInstallTask < Rake::TaskLib
116
116
  end
117
117
  end
118
118
 
119
- uninstall_description = 'Uninstall package files'
120
- uninstall_description += ' from staging directory' if @stage_dir
119
+ uninstall_description = "Uninstall package files"
120
+ uninstall_description += " from staging directory" if @stage_dir
121
121
  desc uninstall_description
122
122
  task tasknames[:uninstall] => [tasknames[:uninstall_files],
123
123
  tasknames[:uninstall_dirs]]
@@ -145,7 +145,7 @@ class FileInstallTask < Rake::TaskLib
145
145
 
146
146
  # Install icon files. This method splits up the source file name and
147
147
  # determines where they should be put in the destination hierarchy.
148
- def install_icons(file_globs, dest_dir, theme = 'hicolor', icon_type = 'apps')
148
+ def install_icons(file_globs, dest_dir, theme = "hicolor", icon_type = "apps")
149
149
  file_globs.each do |fg|
150
150
  files = FileList.new(fg)
151
151
  files.each do |f|
@@ -154,7 +154,7 @@ class FileInstallTask < Rake::TaskLib
154
154
  icon_size = Pathname.new(icon_dir).basename
155
155
  icon_dest_dir = "#{dest_dir}/#{theme}/#{icon_size}/#{icon_type}"
156
156
  group = FileGroup.new(icon_dir, f, icon_dest_dir)
157
- group.description = 'icons'
157
+ group.description = "icons"
158
158
  @file_groups << group
159
159
  end
160
160
  end
@@ -169,16 +169,16 @@ class FileInstallTask < Rake::TaskLib
169
169
  private
170
170
 
171
171
  def calculate_ruby_dir
172
- ruby_prefix = RbConfig::CONFIG['prefix']
172
+ ruby_prefix = RbConfig::CONFIG["prefix"]
173
173
 
174
174
  ruby_libdir = if @install_to_rubylibdir
175
- RbConfig::CONFIG['rubylibdir']
175
+ RbConfig::CONFIG["rubylibdir"]
176
176
  else
177
- RbConfig::CONFIG['sitelibdir']
177
+ RbConfig::CONFIG["sitelibdir"]
178
178
  end
179
- ruby_libdir = ENV['RUBYLIBDIR'] if ENV.key?('RUBYLIBDIR')
179
+ ruby_libdir = ENV["RUBYLIBDIR"] if ENV.key?("RUBYLIBDIR")
180
180
 
181
- @prefix = ENV['PREFIX'] || ruby_prefix
181
+ @prefix = ENV["PREFIX"] || ruby_prefix
182
182
  if @prefix == ruby_prefix
183
183
  @rubylib = ruby_libdir
184
184
  elsif ruby_libdir.index(ruby_prefix).zero?
@@ -190,12 +190,12 @@ class FileInstallTask < Rake::TaskLib
190
190
  end
191
191
 
192
192
  def glob2regex(pathglob)
193
- pathglob += '/' if pathglob =~ /\*\*$/
194
- real_parts = pathglob.split('**/')
193
+ pathglob += "/" if pathglob.end_with?("**")
194
+ real_parts = pathglob.split("**/")
195
195
  real_parts.each do |part|
196
- part.gsub!('.', '\\.')
197
- part.gsub!('*', '[^\\/]*')
198
- part.gsub!('?', '[^\\/]')
196
+ part.gsub!(".", '\\.')
197
+ part.gsub!("*", '[^\\/]*')
198
+ part.gsub!("?", '[^\\/]')
199
199
  end
200
200
  pattern = real_parts.join("([^\/]+\/)*")
201
201
  /(#{pattern})/
@@ -210,16 +210,16 @@ class FileInstallTask < Rake::TaskLib
210
210
  end
211
211
  end
212
212
 
213
- # Delete the directory at the given Pathname +p+ if all its children
213
+ # Delete the directory at the given Pathname +path+ if all its children
214
214
  # can be similarly deleted, and if it is then empty.
215
- def delete_if_empty(p)
216
- return false unless p.directory?
215
+ def delete_if_empty(path)
216
+ return false unless path.directory?
217
217
 
218
- p.children.each do |c|
218
+ path.children.each do |c|
219
219
  delete_if_empty(c)
220
220
  end
221
- if p.children.empty?
222
- p.delete # TODO: optional verbose output here
221
+ if path.children.empty?
222
+ path.delete # TODO: optional verbose output here
223
223
  true
224
224
  else
225
225
  false
@@ -229,12 +229,13 @@ class FileInstallTask < Rake::TaskLib
229
229
  class FileGroup
230
230
  attr_reader :mode
231
231
  attr_accessor :description
232
+
232
233
  def initialize(src_dir, file_glob, dest_dir, mode = 0o644)
233
234
  @src_dir = src_dir
234
235
  @file_glob = file_glob
235
236
  @dest_dir = dest_dir
236
237
  @mode = mode
237
- @description = 'files'
238
+ @description = "files"
238
239
  end
239
240
 
240
241
  def to_s
@@ -251,7 +252,9 @@ class FileInstallTask < Rake::TaskLib
251
252
  else
252
253
  dest_basedir = Pathname.new(@dest_dir)
253
254
  end
254
- source_path = source_file.dirname.relative_path_from(source_basedir) if source_file.file?
255
+ if source_file.file?
256
+ source_path = source_file.dirname.relative_path_from(source_basedir)
257
+ end
255
258
  dest = source_path ? dest_basedir + source_path : dest_basedir
256
259
  dest.to_s
257
260
  end
@@ -264,8 +267,8 @@ class FileInstallTask < Rake::TaskLib
264
267
  puts "Installing #{@description} to #{base_dir}#{@dest_dir}"
265
268
  files.each do |f|
266
269
  dest = dest_dir(f, base_dir)
267
- FileUtils.mkdir_p(dest) unless test('d', dest)
268
- FileUtils.install(f, dest, mode: mode) if test('f', f)
270
+ FileUtils.mkdir_p(dest) unless test("d", dest)
271
+ FileUtils.install(f, dest, mode: mode) if test("f", f)
269
272
  end
270
273
  end
271
274
 
@@ -274,7 +277,7 @@ class FileInstallTask < Rake::TaskLib
274
277
  dest = dest_dir(f, base_dir)
275
278
  filename = File.basename(f)
276
279
  file = File.join(dest, filename)
277
- if test('f', file)
280
+ if test("f", file)
278
281
  FileUtils::Verbose.rm_f(file) # , :noop => true)
279
282
  end
280
283
  end
@@ -288,5 +291,5 @@ class FileInstallTask < Rake::TaskLib
288
291
  all_dirs_set << File.dirname(file)
289
292
  end
290
293
  end
291
- end # class FileGroup
292
- end # class FileInstallTask
294
+ end
295
+ end
@@ -26,9 +26,9 @@
26
26
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
27
  #++
28
28
 
29
- require 'fileutils'
30
- require 'pathname'
31
- require 'rake/tasklib'
29
+ require "fileutils"
30
+ require "pathname"
31
+ require "rake/tasklib"
32
32
 
33
33
  class GettextGenerateTask < Rake::TaskLib
34
34
  def initialize(projectname)
@@ -39,7 +39,7 @@ class GettextGenerateTask < Rake::TaskLib
39
39
  end
40
40
 
41
41
  def make_task
42
- desc 'Generate gettext localization files'
42
+ desc "Generate gettext localization files"
43
43
  task gettext: @generated_files
44
44
 
45
45
  @generated_files.each { |gen| CLOBBER << gen } if CLOBBER
@@ -49,7 +49,7 @@ class GettextGenerateTask < Rake::TaskLib
49
49
  @po_dir = po_dir
50
50
  @po_files_glob = file_glob
51
51
  @mo_dir = dest_dir
52
- @mo_files_regex = /.*\/(.+)\/LC_MESSAGES\/.+\.mo/
52
+ @mo_files_regex = %r{.*/(.+)/LC_MESSAGES/.+\.mo}
53
53
 
54
54
  # create MO files
55
55
  rule(/\.mo$/ => [->(dest) { source_file(dest) }]) do |t|
@@ -72,14 +72,14 @@ class GettextGenerateTask < Rake::TaskLib
72
72
  begin
73
73
  `intltool-merge --version`
74
74
  rescue Errno::ENOENT
75
- raise 'Need to install intltool'
75
+ raise "Need to install intltool"
76
76
  end
77
77
  system("intltool-merge -d #{@po_dir} #{infile} #{outfile}")
78
78
  end
79
79
  end
80
80
 
81
81
  def locales
82
- po_files.map { |po| File.basename(po).split('.')[0] }
82
+ po_files.map { |po| File.basename(po).split(".")[0] }
83
83
  end
84
84
 
85
85
  def mo_files
@@ -26,9 +26,9 @@
26
26
  # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27
27
  #++
28
28
 
29
- require 'fileutils'
30
- require 'pathname'
31
- require 'rake/tasklib'
29
+ require "fileutils"
30
+ require "pathname"
31
+ require "rake/tasklib"
32
32
 
33
33
  class OmfGenerateTask < Rake::TaskLib
34
34
  def initialize(projectname)
@@ -39,7 +39,7 @@ class OmfGenerateTask < Rake::TaskLib
39
39
  end
40
40
 
41
41
  def make_task
42
- desc 'Generate Open Metadata Framework files'
42
+ desc "Generate Open Metadata Framework files"
43
43
  task omf: @generated_files
44
44
 
45
45
  @generated_files.each { |gen| CLOBBER << gen } if CLOBBER
@@ -55,7 +55,7 @@ class OmfGenerateTask < Rake::TaskLib
55
55
  end
56
56
 
57
57
  def omf_files
58
- in_files.map { |f| f.sub(/.omf.in/, '.omf') }
58
+ in_files.map { |f| f.sub(/.omf.in/, ".omf") }
59
59
  end
60
60
 
61
61
  attr_writer :gnome_helpfiles_dir
@@ -64,13 +64,13 @@ class OmfGenerateTask < Rake::TaskLib
64
64
  @source_dir = src_dir
65
65
  @source_files_glob = file_glob
66
66
 
67
- rule '.omf' => ['.omf.in'] do |t|
67
+ rule ".omf" => [".omf.in"] do |t|
68
68
  path = File.join(@gnome_helpfiles_dir, @projectname,
69
69
  locale_for(t.name), "#{@projectname}.xml")
70
70
  data = IO.read(t.source)
71
71
  data.sub!(/PATH_TO_DOC_FILE/, path)
72
72
  puts "Generating #{t.name}..."
73
- File.open(t.name, 'w') { |io| io.puts data }
73
+ File.open(t.name, "w") { |io| io.puts data }
74
74
  end
75
75
  omf_files.each { |o| @generated_files << o }
76
76
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alexandria-book-collection-manager
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.3
4
+ version: 0.7.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander McCormmach
@@ -25,10 +25,10 @@ authors:
25
25
  - Takayuki Kusano
26
26
  - Timothy Malone
27
27
  - Zachary P. Landau
28
- autorequire:
28
+ autorequire:
29
29
  bindir: bin
30
30
  cert_chain: []
31
- date: 2019-02-27 00:00:00.000000000 Z
31
+ date: 2020-11-29 00:00:00.000000000 Z
32
32
  dependencies:
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: gettext
@@ -50,28 +50,28 @@ dependencies:
50
50
  requirements:
51
51
  - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: 3.3.0
53
+ version: 3.4.3
54
54
  type: :runtime
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 3.3.0
60
+ version: 3.4.3
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: gtk3
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
65
  - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 3.3.0
67
+ version: 3.4.3
68
68
  type: :runtime
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
72
  - - "~>"
73
73
  - !ruby/object:Gem::Version
74
- version: 3.3.0
74
+ version: 3.4.3
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: hpricot
77
77
  requirement: !ruby/object:Gem::Requirement
@@ -128,6 +128,20 @@ dependencies:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
130
  version: 1.0.0
131
+ - !ruby/object:Gem::Dependency
132
+ name: psych
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: 3.2.0
138
+ type: :runtime
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: 3.2.0
131
145
  - !ruby/object:Gem::Dependency
132
146
  name: zoom
133
147
  requirement: !ruby/object:Gem::Requirement
@@ -148,14 +162,14 @@ dependencies:
148
162
  requirements:
149
163
  - - "~>"
150
164
  - !ruby/object:Gem::Version
151
- version: 0.2.1
165
+ version: 0.3.0
152
166
  type: :development
153
167
  prerelease: false
154
168
  version_requirements: !ruby/object:Gem::Requirement
155
169
  requirements:
156
170
  - - "~>"
157
171
  - !ruby/object:Gem::Version
158
- version: 0.2.1
172
+ version: 0.3.0
159
173
  - !ruby/object:Gem::Dependency
160
174
  name: minitest
161
175
  requirement: !ruby/object:Gem::Requirement
@@ -176,14 +190,14 @@ dependencies:
176
190
  requirements:
177
191
  - - "~>"
178
192
  - !ruby/object:Gem::Version
179
- version: '12.0'
193
+ version: '13.0'
180
194
  type: :development
181
195
  prerelease: false
182
196
  version_requirements: !ruby/object:Gem::Requirement
183
197
  requirements:
184
198
  - - "~>"
185
199
  - !ruby/object:Gem::Version
186
- version: '12.0'
200
+ version: '13.0'
187
201
  - !ruby/object:Gem::Dependency
188
202
  name: rspec
189
203
  requirement: !ruby/object:Gem::Requirement
@@ -198,7 +212,77 @@ dependencies:
198
212
  - - "~>"
199
213
  - !ruby/object:Gem::Version
200
214
  version: '3.0'
201
- description:
215
+ - !ruby/object:Gem::Dependency
216
+ name: rubocop
217
+ requirement: !ruby/object:Gem::Requirement
218
+ requirements:
219
+ - - "~>"
220
+ - !ruby/object:Gem::Version
221
+ version: 0.93.1
222
+ type: :development
223
+ prerelease: false
224
+ version_requirements: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: 0.93.1
229
+ - !ruby/object:Gem::Dependency
230
+ name: rubocop-i18n
231
+ requirement: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: 2.0.2
236
+ type: :development
237
+ prerelease: false
238
+ version_requirements: !ruby/object:Gem::Requirement
239
+ requirements:
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: 2.0.2
243
+ - !ruby/object:Gem::Dependency
244
+ name: rubocop-performance
245
+ requirement: !ruby/object:Gem::Requirement
246
+ requirements:
247
+ - - "~>"
248
+ - !ruby/object:Gem::Version
249
+ version: 1.9.0
250
+ type: :development
251
+ prerelease: false
252
+ version_requirements: !ruby/object:Gem::Requirement
253
+ requirements:
254
+ - - "~>"
255
+ - !ruby/object:Gem::Version
256
+ version: 1.9.0
257
+ - !ruby/object:Gem::Dependency
258
+ name: rubocop-rspec
259
+ requirement: !ruby/object:Gem::Requirement
260
+ requirements:
261
+ - - "~>"
262
+ - !ruby/object:Gem::Version
263
+ version: 1.44.1
264
+ type: :development
265
+ prerelease: false
266
+ version_requirements: !ruby/object:Gem::Requirement
267
+ requirements:
268
+ - - "~>"
269
+ - !ruby/object:Gem::Version
270
+ version: 1.44.1
271
+ - !ruby/object:Gem::Dependency
272
+ name: webmock
273
+ requirement: !ruby/object:Gem::Requirement
274
+ requirements:
275
+ - - "~>"
276
+ - !ruby/object:Gem::Version
277
+ version: '3.9'
278
+ type: :development
279
+ prerelease: false
280
+ version_requirements: !ruby/object:Gem::Requirement
281
+ requirements:
282
+ - - "~>"
283
+ - !ruby/object:Gem::Version
284
+ version: '3.9'
285
+ description:
202
286
  email:
203
287
  - matijs@matijs.net
204
288
  executables:
@@ -206,6 +290,8 @@ executables:
206
290
  extensions: []
207
291
  extra_rdoc_files: []
208
292
  files:
293
+ - ".github/dependabot.yml"
294
+ - ".github/workflows/ruby.yml"
209
295
  - ".gitignore"
210
296
  - ".hound.yml"
211
297
  - ".reek"
@@ -234,7 +320,6 @@ files:
234
320
  - doc/alexandria.1
235
321
  - doc/cuecat_support.rdoc
236
322
  - doc/dependency_decisions.yml
237
- - dogtail/basic_run_test.py
238
323
  - lib/alexandria.rb
239
324
  - lib/alexandria/about.rb
240
325
  - lib/alexandria/book_providers.rb
@@ -245,9 +330,8 @@ files:
245
330
  - lib/alexandria/book_providers/douban.rb
246
331
  - lib/alexandria/book_providers/proxis.rb
247
332
  - lib/alexandria/book_providers/pseudomarc.rb
248
- - lib/alexandria/book_providers/renaud.rb
249
333
  - lib/alexandria/book_providers/siciliano.rb
250
- - lib/alexandria/book_providers/thalia.rb
334
+ - lib/alexandria/book_providers/thalia_provider.rb
251
335
  - lib/alexandria/book_providers/web.rb
252
336
  - lib/alexandria/book_providers/worldcat.rb
253
337
  - lib/alexandria/book_providers/z3950.rb
@@ -268,41 +352,51 @@ files:
268
352
  - lib/alexandria/net.rb
269
353
  - lib/alexandria/preferences.rb
270
354
  - lib/alexandria/scanners.rb
271
- - lib/alexandria/scanners/cuecat.rb
355
+ - lib/alexandria/scanners/cue_cat.rb
272
356
  - lib/alexandria/scanners/keyboard.rb
273
357
  - lib/alexandria/smart_library.rb
274
358
  - lib/alexandria/ui.rb
359
+ - lib/alexandria/ui/about_dialog.rb
360
+ - lib/alexandria/ui/acquire_dialog.rb
361
+ - lib/alexandria/ui/alert_dialog.rb
362
+ - lib/alexandria/ui/bad_isbns_dialog.rb
363
+ - lib/alexandria/ui/barcode_animation.rb
364
+ - lib/alexandria/ui/book_properties_dialog.rb
365
+ - lib/alexandria/ui/book_properties_dialog_base.rb
275
366
  - lib/alexandria/ui/builder_base.rb
367
+ - lib/alexandria/ui/calendar_popup.rb
276
368
  - lib/alexandria/ui/callbacks.rb
277
369
  - lib/alexandria/ui/columns.rb
278
370
  - lib/alexandria/ui/completion_models.rb
279
- - lib/alexandria/ui/dialogs/about_dialog.rb
280
- - lib/alexandria/ui/dialogs/acquire_dialog.rb
281
- - lib/alexandria/ui/dialogs/alert_dialog.rb
282
- - lib/alexandria/ui/dialogs/bad_isbns_dialog.rb
283
- - lib/alexandria/ui/dialogs/barcode_animation.rb
284
- - lib/alexandria/ui/dialogs/book_properties_dialog.rb
285
- - lib/alexandria/ui/dialogs/book_properties_dialog_base.rb
286
- - lib/alexandria/ui/dialogs/export_dialog.rb
287
- - lib/alexandria/ui/dialogs/import_dialog.rb
288
- - lib/alexandria/ui/dialogs/keep_bad_isbn_dialog.rb
289
- - lib/alexandria/ui/dialogs/misc_dialogs.rb
290
- - lib/alexandria/ui/dialogs/new_book_dialog.rb
291
- - lib/alexandria/ui/dialogs/new_book_dialog_manual.rb
292
- - lib/alexandria/ui/dialogs/new_smart_library_dialog.rb
293
- - lib/alexandria/ui/dialogs/preferences_dialog.rb
294
- - lib/alexandria/ui/dialogs/smart_library_properties_dialog.rb
295
- - lib/alexandria/ui/dialogs/smart_library_properties_dialog_base.rb
371
+ - lib/alexandria/ui/confirm_erase_dialog.rb
372
+ - lib/alexandria/ui/conflict_while_copying_dialog.rb
296
373
  - lib/alexandria/ui/dndable.rb
374
+ - lib/alexandria/ui/error_dialog.rb
375
+ - lib/alexandria/ui/export_dialog.rb
297
376
  - lib/alexandria/ui/icons.rb
298
377
  - lib/alexandria/ui/iconview.rb
299
378
  - lib/alexandria/ui/iconview_tooltips.rb
379
+ - lib/alexandria/ui/import_dialog.rb
300
380
  - lib/alexandria/ui/init.rb
381
+ - lib/alexandria/ui/keep_bad_isbn_dialog.rb
301
382
  - lib/alexandria/ui/libraries_combo.rb
302
383
  - lib/alexandria/ui/listview.rb
303
384
  - lib/alexandria/ui/main_app.rb
385
+ - lib/alexandria/ui/misc_dialogs.rb
304
386
  - lib/alexandria/ui/multi_drag_treeview.rb
305
- - lib/alexandria/ui/sidepane.rb
387
+ - lib/alexandria/ui/new_book_dialog.rb
388
+ - lib/alexandria/ui/new_book_dialog_manual.rb
389
+ - lib/alexandria/ui/new_provider_dialog.rb
390
+ - lib/alexandria/ui/new_smart_library_dialog.rb
391
+ - lib/alexandria/ui/preferences_dialog.rb
392
+ - lib/alexandria/ui/provider_preferences_base_dialog.rb
393
+ - lib/alexandria/ui/provider_preferences_dialog.rb
394
+ - lib/alexandria/ui/really_delete_dialog.rb
395
+ - lib/alexandria/ui/sidepane_manager.rb
396
+ - lib/alexandria/ui/skip_entry_dialog.rb
397
+ - lib/alexandria/ui/smart_library_properties_dialog.rb
398
+ - lib/alexandria/ui/smart_library_properties_dialog_base.rb
399
+ - lib/alexandria/ui/smart_library_rule_box.rb
306
400
  - lib/alexandria/ui/sound.rb
307
401
  - lib/alexandria/ui/ui_manager.rb
308
402
  - lib/alexandria/undo_manager.rb
@@ -461,6 +555,8 @@ files:
461
555
  - share/sounds/alexandria/good_scan.wav
462
556
  - share/sounds/alexandria/scanning.ogg
463
557
  - share/sounds/alexandria/scanning.wav
558
+ - spec/alexandria/book_providers/thalia_provider_spec.rb
559
+ - spec/alexandria/book_providers/world_cat_provider_spec.rb
464
560
  - spec/alexandria/book_providers_spec.rb
465
561
  - spec/alexandria/book_spec.rb
466
562
  - spec/alexandria/console_spec.rb
@@ -468,17 +564,34 @@ files:
468
564
  - spec/alexandria/library_spec.rb
469
565
  - spec/alexandria/library_store_spec.rb
470
566
  - spec/alexandria/preferences_spec.rb
471
- - spec/alexandria/scanners/cuecat_spec.rb
567
+ - spec/alexandria/scanners/cue_cat_spec.rb
472
568
  - spec/alexandria/smart_library_spec.rb
473
- - spec/alexandria/ui/dialogs/new_book_dialog_spec.rb
474
- - spec/alexandria/ui/dialogs_spec.rb
569
+ - spec/alexandria/ui/about_dialog_spec.rb
570
+ - spec/alexandria/ui/acquire_dialog_spec.rb
571
+ - spec/alexandria/ui/alert_dialog_spec.rb
572
+ - spec/alexandria/ui/bad_isbns_dialog_spec.rb
573
+ - spec/alexandria/ui/book_properties_dialog_spec.rb
574
+ - spec/alexandria/ui/confirm_erase_dialog_spec.rb
575
+ - spec/alexandria/ui/conflict_while_copying_dialog_spec.rb
576
+ - spec/alexandria/ui/error_dialog_spec.rb
577
+ - spec/alexandria/ui/export_dialog_spec.rb
578
+ - spec/alexandria/ui/icons_spec.rb
475
579
  - spec/alexandria/ui/iconview_spec.rb
580
+ - spec/alexandria/ui/import_dialog_spec.rb
581
+ - spec/alexandria/ui/keep_bad_isbn_dialog_spec.rb
476
582
  - spec/alexandria/ui/main_app_spec.rb
477
- - spec/alexandria/ui/sidepane_spec.rb
583
+ - spec/alexandria/ui/new_book_dialog_manual_spec.rb
584
+ - spec/alexandria/ui/new_book_dialog_spec.rb
585
+ - spec/alexandria/ui/new_provider_dialog_spec.rb
586
+ - spec/alexandria/ui/new_smart_library_dialog_spec.rb
587
+ - spec/alexandria/ui/preferences_dialog_spec.rb
588
+ - spec/alexandria/ui/provider_preferences_dialog_spec.rb
589
+ - spec/alexandria/ui/really_delete_dialog_spec.rb
590
+ - spec/alexandria/ui/sidepane_manager_spec.rb
591
+ - spec/alexandria/ui/skip_entry_dialog_spec.rb
592
+ - spec/alexandria/ui/smart_library_properties_dialog_spec.rb
478
593
  - spec/alexandria/ui/sound_spec.rb
479
594
  - spec/alexandria/ui/ui_manager_spec.rb
480
- - spec/alexandria/ui/ui_utilities_spec.rb
481
- - spec/alexandria/utilities_spec.rb
482
595
  - spec/data/isbns.txt
483
596
  - spec/data/libraries/0.6.1-noisbn/My Library/0201398257.yaml
484
597
  - spec/data/libraries/0.6.1-noisbn/My Library/1565920007.yaml
@@ -497,8 +610,8 @@ files:
497
610
  - spec/data/libraries/0.6.2/My Library/9780755322800.cover
498
611
  - spec/data/libraries/0.6.2/My Library/9780755322800.yaml
499
612
  - spec/end_to_end/basic_run_spec.rb
613
+ - spec/fixtures/cover.jpg
500
614
  - spec/spec_helper.rb
501
- - tasks/dogtail.rake
502
615
  - tasks/setup.rb
503
616
  - tasks/spec.rake
504
617
  - util/rake/fileinstall.rb
@@ -508,7 +621,7 @@ homepage: http://www.github.com/mvz/alexandria-book-collection-manager
508
621
  licenses:
509
622
  - GPL-2
510
623
  metadata: {}
511
- post_install_message:
624
+ post_install_message:
512
625
  rdoc_options:
513
626
  - "--main"
514
627
  - README.md
@@ -518,15 +631,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
518
631
  requirements:
519
632
  - - ">="
520
633
  - !ruby/object:Gem::Version
521
- version: 2.3.0
634
+ version: 2.5.0
522
635
  required_rubygems_version: !ruby/object:Gem::Requirement
523
636
  requirements:
524
637
  - - ">="
525
638
  - !ruby/object:Gem::Version
526
639
  version: '0'
527
640
  requirements: []
528
- rubygems_version: 3.0.1
529
- signing_key:
641
+ rubygems_version: 3.1.4
642
+ signing_key:
530
643
  specification_version: 4
531
644
  summary: GNOME application for managing collections of books
532
645
  test_files: []