fb2rb 0.1.0 → 0.1.1

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: 34995961f6a6a691b554528f38d91db3dbe97a784111003430adf76d9a1b8843
4
- data.tar.gz: 187174bf5bb0b8fc77dc93bec864adadc58e534ba2328ec63cef31cce7ab1ea5
3
+ metadata.gz: d1f9023970c90759eb32f56a5bbef46864bb5b6bbe74801b63d74b215bc20741
4
+ data.tar.gz: a44854f8a96a67c36a3bc7e3f66a24209de49d211508f267ccf6fe7f1fcf1651
5
5
  SHA512:
6
- metadata.gz: 1ea7ad32895bf83fbef11bde5d716c3b115eeeedfc951e0f168a37bf14011fc33cf9a017d5f82d998619af037ae80d2cf052248b0cffe991c2cc5836aaaf2dbb
7
- data.tar.gz: db6c27a94eaa9152286baa144ab834c7abd207c7df50ac37a5b60dd89ea46bedf8828fe30f6c2d442bcc899ebec8c78a6bc1bfb4b0363d65574bb162374d673e
6
+ metadata.gz: '062709548a3e5d5fd83ec9b85709f5beb5018d5d5b490dcc6f81af71c09d7e9a7d0c5bcd7b14fb1cff55491cda656987b55518f11c299f222918eba58d406ec4'
7
+ data.tar.gz: 45c0b3159351d8636695df9ec95a55b62ba7810af3b8320ed1210ea0895fd53a6cf35433bb803878133597f4f839c242efa9731004521c953475d0d56c1a8b13
@@ -7,6 +7,11 @@
7
7
  This document provides a high-level view of the changes to the {project-name} by release.
8
8
  For a detailed view of what has changed, refer to the {uri-project}/commits/master[commit history] on GitHub.
9
9
 
10
+ == 0.1.1 (2020-07-23) - @slonopotamus
11
+
12
+ * Annonate field types
13
+ * Fix serialization of `<publisher>` in `<document-info>`
14
+
10
15
  == 0.1.0 (2020-07-23) - @slonopotamus
11
16
 
12
17
  * Initial release
@@ -13,9 +13,13 @@ module FB2rb
13
13
 
14
14
  # Holds data of a single FB2 file
15
15
  class Book
16
+ # @return [Array<FB2rb::Stylesheet>]
16
17
  attr_accessor(:stylesheets)
18
+ # @return [FB2rb::Description]
17
19
  attr_accessor(:description)
20
+ # @return [Array<FB2rb::Body>]
18
21
  attr_accessor(:bodies)
22
+ # @return [Array<FB2fb::Binary>]
19
23
  attr_accessor(:binaries)
20
24
 
21
25
  def initialize(description = Description.new, bodies = [], binaries = [], stylesheets = [])
@@ -26,6 +30,7 @@ module FB2rb
26
30
  end
27
31
 
28
32
  # Reads existing FB2 file from an IO object, and creates new Book object.
33
+ # @return [FB2rb::Book]
29
34
  def self.read(filename_or_io)
30
35
  Zip::InputStream.open(filename_or_io) do |zis|
31
36
  while (entry = zis.get_next_entry)
@@ -44,6 +49,7 @@ module FB2rb
44
49
  prefix.nil? ? nil : prefix.sub(/^xmlns:/, '')
45
50
  end
46
51
 
52
+ # @return [FB2rb::Book]
47
53
  def self.parse(xml, fb2_prefix, xlink_prefix) # rubocop:disable Metrics/MethodLength
48
54
  Book.new(
49
55
  Description.parse(xml.xpath("/#{fb2_prefix}:FictionBook/#{fb2_prefix}:description"), fb2_prefix, xlink_prefix),
@@ -86,6 +92,7 @@ module FB2rb
86
92
  end
87
93
 
88
94
  # Serializes and returns FB2 as StringIO.
95
+ # @return [StringIO]
89
96
  def to_ios
90
97
  Zip::OutputStream.write_buffer do |io|
91
98
  write_to_stream(io)
@@ -132,10 +139,15 @@ module FB2rb
132
139
 
133
140
  # Holds <description> data
134
141
  class Description
142
+ # @return [FB2rb::TitleInfo]
135
143
  attr_accessor(:title_info)
144
+ # @return [FB2rb::TitleInfo, nil]
136
145
  attr_accessor(:src_title_info)
146
+ # @return [FB2rb::DocumentInfo]
137
147
  attr_accessor(:document_info)
148
+ # @return [FB2rb::PublishInfo, nil]
138
149
  attr_accessor(:publish_info)
150
+ # @return [Array<FB2rb::CustomInfo>]
139
151
  attr_accessor(:custom_infos)
140
152
  # TODO: <output>
141
153
 
@@ -151,6 +163,7 @@ module FB2rb
151
163
  @custom_infos = custom_infos
152
164
  end
153
165
 
166
+ # @return [FB2rb::Description]
154
167
  def self.parse(xml, fb2_prefix, xlink_prefix) # rubocop:disable Metrics/MethodLength
155
168
  publish_info_xml = xml.at("./#{fb2_prefix}:publish-info")
156
169
  src_title_info_xml = xml.at("./#{fb2_prefix}:src-title-info")
@@ -180,7 +193,9 @@ module FB2rb
180
193
 
181
194
  # Holds <stylesheet> data
182
195
  class Stylesheet
196
+ # @return [String]
183
197
  attr_accessor(:type)
198
+ # @return [String, nil]
184
199
  attr_accessor(:content)
185
200
 
186
201
  def initialize(type = '', content = nil)
@@ -201,7 +216,9 @@ module FB2rb
201
216
 
202
217
  # Holds <custom-info> data
203
218
  class CustomInfo
219
+ # @return [String]
204
220
  attr_accessor(:info_type)
221
+ # @return [String, nil]
205
222
  attr_accessor(:content)
206
223
 
207
224
  def initialize(info_type = '', content = nil)
@@ -209,6 +226,7 @@ module FB2rb
209
226
  @content = content
210
227
  end
211
228
 
229
+ # @return [FB2rb::CustomInfo]
212
230
  def self.parse(xml)
213
231
  CustomInfo.new(xml['info-type'], xml.text)
214
232
  end
@@ -222,11 +240,17 @@ module FB2rb
222
240
 
223
241
  # Holds <publish-info> data
224
242
  class PublishInfo
243
+ # @return [String, nil]
225
244
  attr_accessor(:book_name)
245
+ # @return [String, nil]
226
246
  attr_accessor(:publisher)
247
+ # @return [String, nil]
227
248
  attr_accessor(:city)
249
+ # @return [String, nil]
228
250
  attr_accessor(:year)
251
+ # @return [String, nil]
229
252
  attr_accessor(:isbn)
253
+ # @return [Array<FB2RB::Sequence>]
230
254
  attr_accessor(:sequences)
231
255
 
232
256
  def initialize(book_name = nil, # rubocop:disable Metrics/ParameterLists
@@ -243,6 +267,7 @@ module FB2rb
243
267
  @sequences = sequences
244
268
  end
245
269
 
270
+ # @return [FB2RB::PublishInfo]
246
271
  def self.parse(xml, fb2_prefix)
247
272
  PublishInfo.new(
248
273
  xml.at("./#{fb2_prefix}:book-name/text()")&.text,
@@ -272,14 +297,23 @@ module FB2rb
272
297
 
273
298
  # Holds <document-info> data
274
299
  class DocumentInfo
300
+ # @return [Array<FB2rb::Author>]
275
301
  attr_accessor(:authors)
302
+ # @return [String, nil]
276
303
  attr_accessor(:program_used)
304
+ # @return [FB2rb::FB2Date]
277
305
  attr_accessor(:date)
306
+ # @return [Array<String>]
278
307
  attr_accessor(:src_urls)
308
+ # @return [String, nil]
279
309
  attr_accessor(:src_ocr)
310
+ # @return [String]
280
311
  attr_accessor(:id)
312
+ # @return [String]
281
313
  attr_accessor(:version)
314
+ # @return [String, nil]
282
315
  attr_accessor(:history)
316
+ # @return [Array<String>]
283
317
  attr_accessor(:publishers)
284
318
 
285
319
  def initialize(authors = [], # rubocop:disable Metrics/ParameterLists
@@ -302,6 +336,7 @@ module FB2rb
302
336
  @publishers = publishers
303
337
  end
304
338
 
339
+ # @return [FB2rb::DocumentInfo]
305
340
  def self.parse(xml, fb2_prefix) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
306
341
  date = xml.at("./#{fb2_prefix}:date")
307
342
  DocumentInfo.new(
@@ -314,11 +349,12 @@ module FB2rb
314
349
  xml.at("./#{fb2_prefix}:src-ocr")&.text,
315
350
  xml.at("./#{fb2_prefix}:id").text,
316
351
  xml.at("./#{fb2_prefix}:version")&.text,
317
- xml.at("./#{fb2_prefix}:history")&.children&.to_s&.strip
352
+ xml.at("./#{fb2_prefix}:history")&.children&.to_s&.strip,
353
+ xml.xpath("./#{fb2_prefix}:publisher").map(&:text)
318
354
  )
319
355
  end
320
356
 
321
- def to_xml(xml) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
357
+ def to_xml(xml) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
322
358
  xml.send(:'document-info') do
323
359
  @authors.each do |author|
324
360
  author.to_xml(xml, 'author')
@@ -336,22 +372,36 @@ module FB2rb
336
372
  xml << @history
337
373
  end
338
374
  end
375
+ @publishers.each do |publisher|
376
+ xml.publisher(publisher)
377
+ end
339
378
  end
340
379
  end
341
380
  end
342
381
 
343
382
  # Holds <title-info>/<src-title-info> data
344
383
  class TitleInfo
384
+ # @return [Array<String>]
345
385
  attr_accessor(:genres)
386
+ # @return [Array<FB2rb::Author>]
346
387
  attr_accessor(:authors)
388
+ # @return [String]
347
389
  attr_accessor(:book_title)
390
+ # @return [String, nil]
348
391
  attr_accessor(:annotation)
392
+ # @return [Array<String>]
349
393
  attr_accessor(:keywords)
394
+ # @return [String, nil]
350
395
  attr_accessor(:date)
396
+ # @return [FB2rb::Coverpage, nil]
351
397
  attr_accessor(:coverpage)
398
+ # @return [String]
352
399
  attr_accessor(:lang)
400
+ # @return [String, nil]
353
401
  attr_accessor(:src_lang)
402
+ # @return [Array<FB2rb::Author>]
354
403
  attr_accessor(:translators)
404
+ # @return [Array<FB2rb::Sequence>]
355
405
  attr_accessor(:sequences)
356
406
 
357
407
  def initialize(genres = [], # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists
@@ -378,6 +428,7 @@ module FB2rb
378
428
  @sequences = sequences
379
429
  end
380
430
 
431
+ # @return [FB2rb::TitleInfo]
381
432
  def self.parse(xml, fb2_prefix, xlink_prefix) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
382
433
  date = xml.at("./#{fb2_prefix}:date")
383
434
  coverpage = xml.at("./#{fb2_prefix}:coverpage")
@@ -433,6 +484,7 @@ module FB2rb
433
484
 
434
485
  # Holds <coverpage> data
435
486
  class Coverpage
487
+ # @return [Array<String>]
436
488
  attr_accessor(:images)
437
489
 
438
490
  def initialize(images = [])
@@ -456,7 +508,9 @@ module FB2rb
456
508
 
457
509
  # Holds <date> data
458
510
  class FB2Date
511
+ # @return [String]
459
512
  attr_accessor(:display_value)
513
+ # @return [Date, nil]
460
514
  attr_accessor(:value)
461
515
 
462
516
  def initialize(display_value = '', value = nil)
@@ -481,7 +535,9 @@ module FB2rb
481
535
 
482
536
  # Holds <sequence> data
483
537
  class Sequence
538
+ # @return [String]
484
539
  attr_accessor(:name)
540
+ # @return [Integer, nil]
485
541
  attr_accessor(:number)
486
542
 
487
543
  def initialize(name = '', number = nil)
@@ -489,6 +545,7 @@ module FB2rb
489
545
  @number = number
490
546
  end
491
547
 
548
+ # @return [FB2rb::Sequence]
492
549
  def self.parse(xml)
493
550
  Sequence.new(xml['name'], xml['number']&.to_i)
494
551
  end
@@ -502,12 +559,19 @@ module FB2rb
502
559
 
503
560
  # Holds <author> data
504
561
  class Author
562
+ # @return [String, nil]
505
563
  attr_accessor(:first_name)
564
+ # @return [String, nil]
506
565
  attr_accessor(:middle_name)
566
+ # @return [String, nil]
507
567
  attr_accessor(:last_name)
568
+ # @return [String, nil]
508
569
  attr_accessor(:nickname)
570
+ # @return [Array<String>]
509
571
  attr_accessor(:home_pages)
572
+ # @return [Array<String>]
510
573
  attr_accessor(:emails)
574
+ # @return [String, nil]
511
575
  attr_accessor(:id)
512
576
 
513
577
  def initialize(first_name = nil, # rubocop:disable Metrics/ParameterLists
@@ -526,6 +590,7 @@ module FB2rb
526
590
  @id = id
527
591
  end
528
592
 
593
+ # @return [FB2rb::Author]
529
594
  def self.parse(xml, fb2_prefix) # rubocop:disable Metrics/CyclomaticComplexity
530
595
  Author.new(
531
596
  xml.at("./#{fb2_prefix}:first-name/text()")&.text,
@@ -557,7 +622,9 @@ module FB2rb
557
622
 
558
623
  # Holds <body> data
559
624
  class Body
625
+ # @return [String, nil]
560
626
  attr_accessor(:name)
627
+ # @return [String]
561
628
  attr_accessor(:content)
562
629
 
563
630
  def initialize(name = nil, content = '')
@@ -565,6 +632,7 @@ module FB2rb
565
632
  @content = content
566
633
  end
567
634
 
635
+ # @return [FB2rb::Body]
568
636
  def self.parse(xml)
569
637
  Body.new(
570
638
  xml['name'],
@@ -584,12 +652,15 @@ module FB2rb
584
652
 
585
653
  # Holds data of a single binary within FB2 file
586
654
  class Binary
655
+ # @return [String]
587
656
  attr_accessor(:id)
657
+ # @return [String]
588
658
  attr_accessor(:content)
659
+ # @return [String, nil]
589
660
  attr_accessor(:content_type)
590
661
 
591
- def initialize(name, content, content_type = nil)
592
- @id = name
662
+ def initialize(id, content, content_type = nil)
663
+ @id = id
593
664
  @content = content
594
665
  @content_type = content_type
595
666
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FB2rb
4
- VERSION = '0.1.0'
4
+ VERSION = '0.1.1'
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fb2rb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marat Radchenko