elibri_onix_generator 0.1.12 → 0.3.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
  SHA1:
3
- metadata.gz: 1e0b49daf195145033e040f3b3c1357409ac6130
4
- data.tar.gz: fe5a6995b67af1a896e5d68a7cf1a8fd6e3fc4c0
3
+ metadata.gz: 3270120d4942f7762c8324084c3e350c633f8fdd
4
+ data.tar.gz: a411edca6e46396de9f3fccccda13f67a6b91073
5
5
  SHA512:
6
- metadata.gz: 447505358af946546fe60cdc05cce8f40f588f3ab0750193ce7abca5298a684f9470e4de3a80aa67236d73791edf6fb7083c8c09d14b58f2c2712ab07157a33a
7
- data.tar.gz: ff5665cf44c72bfc91202ee97b68277085d92c4d4c885593880574fba5c4122d91643f0ee1e18e81e13cb9172f9bb78f09107aa530e22e4dad6bf7cd4db1953f
6
+ metadata.gz: 47755cfe49aa15405887c930c389d19422543c2a014705a23c491150a7594ba67c1acea96c6a424e4f1dcd624a39bbb61221b1664dde1edcd7441c6a3de497e1
7
+ data.tar.gz: c0b454eed0221156594e9f4cbc79924a844329a0fb8b478425cf70daf8eb5ca78aeedc30441c95735f283a37ae4420a349d3b189c5beffb973fcfc33e1e8e8e5
@@ -206,7 +206,7 @@ module Elibri
206
206
  export_languages!(product) #PR.10
207
207
  export_extent!(product) #PR.11
208
208
  export_subjects!(product) #PR.12
209
- export_audience_range!(product) if product.audience_range_present? #PR.13
209
+ export_audience_range!(product) if product.respond_to?(:audience_range_present?) && product.audience_range_present? #PR.13
210
210
  end
211
211
  end
212
212
  if @xml_variant.includes_other_texts? || @xml_variant.includes_media_files?
@@ -227,12 +227,12 @@ module Elibri
227
227
  export_publisher_info!(product) #P.19
228
228
  export_publishing_status!(product) #PR.20
229
229
  export_territorial_rights!(product)
230
- export_sale_restrictions!(product) if product.sale_restricted? #PR.21
230
+ export_sale_restrictions!(product) if product.respond_to?(:sale_restricted?) && product.sale_restricted? #PR.21
231
231
  end
232
232
  remove_tag_if_empty!(:PublishingDetail)
233
-
233
+
234
234
  #P.23 - related products
235
- if product.facsimiles.present?
235
+ if product.respond_to?(:facsimiles) && product.facsimiles.present?
236
236
  export_related_products!(product)
237
237
  end
238
238
  #P.24 - Market
@@ -287,7 +287,7 @@ module Elibri
287
287
  tag(:DeletionText, product.deletion_text)
288
288
  end
289
289
 
290
- if product.isbn_value
290
+ if product.respond_to?(:isbn_value) && product.isbn_value
291
291
  comment 'ISBN', :kind => :onix_record_identifiers
292
292
  tag(:ProductIdentifier) do
293
293
  tag(:ProductIDType, Elibri::ONIX::Dict::Release_3_0::ProductIDType::ISBN13) #lista 5
@@ -295,7 +295,7 @@ module Elibri
295
295
  end
296
296
  end
297
297
 
298
- if product.ean.present? && product.ean != product.isbn_value
298
+ if product.respond_to?(:ean) && product.ean.present? && product.ean != product.isbn_value
299
299
  comment 'EAN-13 - gdy inny niż ISBN', :kind => :onix_record_identifiers
300
300
 
301
301
  tag(:ProductIdentifier) do
@@ -304,14 +304,24 @@ module Elibri
304
304
  end
305
305
  end
306
306
 
307
+ if product.respond_to?(:external_identifier) && product.external_identifier
308
+ tag(:ProductIdentifier) do
309
+ tag(:ProductIDType, Elibri::ONIX::Dict::Release_3_0::ProductIDType::PROPRIETARY) #lista 5
310
+ tag(:IDTypeName, product.external_identifier.type_name)
311
+ tag(:IDValue, product.external_identifier.value)
312
+ end
313
+ end
314
+
307
315
  if @xml_variant.includes_stocks?
308
- product.product_availabilities.each do |pa|
309
- if pa.supplier_identifier.present?
310
- comment "Identyfikator dostawcy: #{pa.supplier.name}", :kind => :onix_record_identifiers
311
- tag(:ProductIdentifier) do
312
- tag(:ProductIDType, Elibri::ONIX::Dict::Release_3_0::ProductIDType::PROPRIETARY) #lista 5
313
- tag(:IDTypeName, pa.supplier.name)
314
- tag(:IDValue, pa.supplier_identifier)
316
+ if product.respond_to?(:product_availabilities)
317
+ product.product_availabilities.each do |pa|
318
+ if pa.supplier_identifier.present?
319
+ comment "Identyfikator dostawcy: #{pa.supplier.name}", :kind => :onix_record_identifiers
320
+ tag(:ProductIdentifier) do
321
+ tag(:ProductIDType, Elibri::ONIX::Dict::Release_3_0::ProductIDType::PROPRIETARY) #lista 5
322
+ tag(:IDTypeName, pa.supplier.name)
323
+ tag(:IDValue, pa.supplier_identifier)
324
+ end
315
325
  end
316
326
  end
317
327
  end
@@ -361,24 +371,24 @@ module Elibri
361
371
  # Przykład użycia w pierwszym przykładzie.
362
372
  #
363
373
  def export_epub_details!(product)
364
- if product.product_form_detail_onix_codes.present? #lista 175
374
+ if product.respond_to?(:product_form_detail_onix_codes) && product.product_form_detail_onix_codes.present? #lista 175
365
375
  comment_dictionary "Dostępne formaty produktu", :ProductFormDetail, :indent => 10, :kind => :onix_epub_details
366
376
  product.product_form_detail_onix_codes.each do |onix_code|
367
377
  tag(:ProductFormDetail, onix_code)
368
378
  end
369
379
  end
370
-
371
- if product.digital?
380
+
381
+ if product.respond_to?(:digital?) && product.digital?
372
382
  if product.epub_technical_protection
373
383
  comment_dictionary "Zabezpieczenie", :EpubTechnicalProtection, :indent => 10, :kind => :onix_epub_details
374
384
  tag(:EpubTechnicalProtection, product.epub_technical_protection_onix_code)
375
385
  end
376
-
386
+
377
387
  if product.epub_fragment_info?
378
388
  tag(:EpubUsageConstraint) do
379
389
  comment "Rodzaj ograniczenia - w tym przypadku zawsze dotyczy dostępności fragmentu książki", :indent => 12, :kind => :onix_epub_details
380
390
  tag(:EpubUsageType, Elibri::ONIX::Dict::Release_3_0::EpubUsageType::PREVIEW)
381
-
391
+
382
392
  comment_dictionary "Jaka jest decyzja wydawcy?", :EpubUsageStatus, :indent => 12, :kind => :onix_epub_details
383
393
  tag(:EpubUsageStatus, product.epub_publication_preview_usage_status_onix_code)
384
394
  if product.epub_publication_preview_usage_status_onix_code == Elibri::ONIX::Dict::Release_3_0::EpubUsageStatus::LIMITED
@@ -403,25 +413,26 @@ module Elibri
403
413
  # Następujące atrybuty są udostępniane: wysokość, szerokość, grubość oraz masę produktu. Pierwsze trzy podajemy zawsze w milimetrach, masę w gramach.
404
414
  # W przypadku map eksportujemy również jej skalę w tagu <MapScale>
405
415
  def export_measurement!(product)
406
- return unless product.kind_of_measurable?
407
- [[product.height, Elibri::ONIX::Dict::Release_3_0::MeasureType::HEIGHT, Product::HEIGHT_UNIT, 'Wysokość'],
408
- [product.width, Elibri::ONIX::Dict::Release_3_0::MeasureType::WIDTH, Product::WIDTH_UNIT, 'Szerokość'],
409
- [product.thickness, Elibri::ONIX::Dict::Release_3_0::MeasureType::THICKNESS, Product::THICKNESS_UNIT, 'Grubość'],
410
- [product.weight, Elibri::ONIX::Dict::Release_3_0::MeasureType::WEIGHT, Product::WEIGHT_UNIT, 'Masa']
411
- ].each do |value, measure_type_code, unit_code, name|
412
- if value
413
- tag(:Measure) do
414
- comment "#{name}: #{value}#{unit_code}", :kind => :onix_measurement
415
- tag(:MeasureType, measure_type_code) #lista 48
416
- tag(:Measurement, value)
417
- tag(:MeasureUnitCode, unit_code)
416
+ if product.respond_to?(:kind_of_measurable?) && product.kind_of_measurable?
417
+ [[product.height, Elibri::ONIX::Dict::Release_3_0::MeasureType::HEIGHT, Product::HEIGHT_UNIT, 'Wysokość'],
418
+ [product.width, Elibri::ONIX::Dict::Release_3_0::MeasureType::WIDTH, Product::WIDTH_UNIT, 'Szerokość'],
419
+ [product.thickness, Elibri::ONIX::Dict::Release_3_0::MeasureType::THICKNESS, Product::THICKNESS_UNIT, 'Grubość'],
420
+ [product.weight, Elibri::ONIX::Dict::Release_3_0::MeasureType::WEIGHT, Product::WEIGHT_UNIT, 'Masa']
421
+ ].each do |value, measure_type_code, unit_code, name|
422
+ if value
423
+ tag(:Measure) do
424
+ comment "#{name}: #{value}#{unit_code}", :kind => :onix_measurement
425
+ tag(:MeasureType, measure_type_code) #lista 48
426
+ tag(:Measurement, value)
427
+ tag(:MeasureUnitCode, unit_code)
428
+ end
418
429
  end
419
- end
420
- end
430
+ end
421
431
 
422
- if product.kind_of_map? and product.map_scale
423
- comment 'Skala mapy - tylko dla produktów typu mapa'
424
- tag(:MapScale, product.map_scale)
432
+ if product.respond_to?(:kind_of_map?) && product.respond_to?(:map_scale) && product.kind_of_map? and product.map_scale
433
+ comment 'Skala mapy - tylko dla produktów typu mapa'
434
+ tag(:MapScale, product.map_scale)
435
+ end
425
436
  end
426
437
  end
427
438
 
@@ -481,13 +492,12 @@ module Elibri
481
492
  end
482
493
  end
483
494
 
484
- distribution_start = product.product_distribution_start
485
- if distribution_start
495
+ if product.respond_to?(:distribution_start) && product.distribution_start
486
496
  tag(:PublishingDate) do
487
497
  comment "Jeśli 27 - to data początku przyjmowania zamówień na dany tytuł"
488
498
  tag(:PublishingDateRole, Elibri::ONIX::Dict::Release_3_0::PublishingDateRole::PREORDER_EMBARGO_DATE) #lista 163
489
499
  tag(:DateFormat, Elibri::ONIX::Dict::Release_3_0::DateFormat::YYYYMMDD)
490
- tag(:Date, distribution_start.strftime("%Y%m%d"))
500
+ tag(:Date, product.distribution_start.strftime("%Y%m%d"))
491
501
  end
492
502
  end
493
503
  end
@@ -498,14 +508,16 @@ module Elibri
498
508
  # albo pozwolić na sprzedaż na całym świecie. Poniżej dwa przykłady, jeden dla wyłączości na terenie Polski, drugi
499
509
  # dopuszczający sprzedaż na całym świecie. Informacja o ograniczeniu jest zawarta w obręcie <strong>&lt;SalesRights&gt;</strong>
500
510
  def export_territorial_rights!(product)
501
- tag(:SalesRights) do
502
- comment "Typ restrykcji - sprzedaż tylko w wymienionym kraju, regionie, zawsze '01'", :kind => :onix_territorial_rights
503
- tag(:SalesRightsType, "01")
504
- tag(:Territory) do
505
- if product.sale_restricted_to_poland?
506
- tag(:CountriesIncluded, "PL")
507
- else
508
- tag(:RegionsIncluded, "WORLD")
511
+ if product.respond_to?(:sale_restricted_to_poland?)
512
+ tag(:SalesRights) do
513
+ comment "Typ restrykcji - sprzedaż tylko w wymienionym kraju, regionie, zawsze '01'", :kind => :onix_territorial_rights
514
+ tag(:SalesRightsType, "01")
515
+ tag(:Territory) do
516
+ if product.sale_restricted_to_poland?
517
+ tag(:CountriesIncluded, "PL")
518
+ else
519
+ tag(:RegionsIncluded, "WORLD")
520
+ end
509
521
  end
510
522
  end
511
523
  end
@@ -568,29 +580,31 @@ module Elibri
568
580
  # Jeśli wydawnictwo uzupełnia nazwę imprintu, to powinna być ona traktowana jako nazwa wydawnictwa przy prezentacji
569
581
  # książki klientowi końcowemu.
570
582
  def export_publisher_info!(product)
571
- if product.imprint
583
+ if product.respond_to?(:imprint_for_onix) && product.imprint_for_onix
572
584
  tag(:Imprint) do
573
585
  comment "Nazwa imprintu", :kind => :onix_publisher_info
574
- tag(:ImprintName, product.imprint.name)
586
+ tag(:ImprintName, product.imprint_for_onix.name)
575
587
  end
576
588
  end
577
589
 
578
- if product.publisher_name
590
+ if product.respond_to?(:publisher_name_for_onix) && product.publisher_name_for_onix
579
591
  tag(:Publisher) do
580
592
  comment "Wydawca - używamy tylko kodu 01 (główny wydawca)", :kind => :onix_publisher_info
581
593
  tag(:PublishingRole, '01') # Publisher, lista 45 #TODO jeszcze może być współwydawca
582
- tag(:PublisherIdentifier) do
583
- tag(:PublisherIDType, '01') #prioprietary
584
- tag(:IDTypeName, 'ElibriPublisherCode')
585
- tag(:IDValue, product.publisher_id)
594
+ if product.respond_to?(:publisher_id_for_onix)
595
+ tag(:PublisherIdentifier) do
596
+ tag(:PublisherIDType, '01') #prioprietary
597
+ tag(:IDTypeName, 'ElibriPublisherCode')
598
+ tag(:IDValue, product.publisher_id_for_onix)
599
+ end
586
600
  end
587
- tag(:PublisherName, product.publisher_name)
601
+ tag(:PublisherName, product.publisher_name_for_onix)
588
602
  end
589
603
  end
590
604
 
591
- if product.city_of_publication.present?
605
+ if product.respond_to?(:city_of_publication) && product.city_of_publication.present?
592
606
  tag(:CityOfPublication, product.city_of_publication)
593
- elsif product.publisher.city.present?
607
+ elsif product.respond_to?(:publisher) && product.publisher.city.present?
594
608
  tag(:CityOfPublication, product.publisher.city)
595
609
  end
596
610
  end
@@ -607,7 +621,7 @@ module Elibri
607
621
  # I przykład dla audiobook-a, z czasem trwania nagrania:
608
622
  # @render onix_audiobook_extent_example
609
623
  def export_extent!(product)
610
- if product.digital? and product.file_size
624
+ if product.respond_to?(:digital?) && product.respond_to?(:file_size) && product.digital? and product.file_size
611
625
  tag(:Extent) do
612
626
  comment 'Rozmiar pliku (w MB) - tylko dla produktów cyfrowych (e-book, audiobook)', :kind => :onix_extent
613
627
  tag(:ExtentType, Elibri::ONIX::Dict::Release_3_0::ExtentType::FILE_SIZE)
@@ -617,7 +631,7 @@ module Elibri
617
631
  end
618
632
  end
619
633
 
620
- if product.kind_of_audio? and product.duration
634
+ if product.respond_to?(:kind_of_audio?) && product.respond_to?(:duration) && product.kind_of_audio? and product.duration
621
635
  tag(:Extent) do
622
636
  comment 'Czas trwania (w minutach) - tylko dla produktów typu audio', :kind => :onix_extent
623
637
  tag(:ExtentType, Elibri::ONIX::Dict::Release_3_0::ExtentType::DURATION)
@@ -627,7 +641,8 @@ module Elibri
627
641
  end
628
642
  end
629
643
 
630
- if (product.kind_of_book? or product.kind_of_ebook?) && product.number_of_pages #number_of_pages to int
644
+ if product.respond_to?(:kind_of_book?) && product.respond_to?(:kind_of_ebook?) && product.respond_to?(:number_of_pages) &&
645
+ (product.kind_of_book? or product.kind_of_ebook?) && product.number_of_pages #number_of_pages to int
631
646
  tag(:Extent) do
632
647
  comment 'Liczba stron - tylko dla produktów typu książka', :kind => :onix_extent
633
648
  tag(:ExtentType, Elibri::ONIX::Dict::Release_3_0::ExtentType::PAGE_COUNT)
@@ -635,8 +650,8 @@ module Elibri
635
650
  tag(:ExtentUnit, Elibri::ONIX::Dict::Release_3_0::ExtentUnit::PAGES)
636
651
  end
637
652
  end
638
-
639
- if (product.kind_of_book? or product.kind_of_ebook?) and product.number_of_illustrations
653
+ if product.respond_to?(:kind_of_book?) && product.respond_to?(:kind_of_ebook?) && product.respond_to?(:number_of_illustrations) &&
654
+ (product.kind_of_book? or product.kind_of_ebook?) and product.number_of_illustrations
640
655
  comment 'Liczba ilustracji - tylko dla produktów typu książka', :kind => :onix_extent
641
656
  tag(:NumberOfIllustrations, product.number_of_illustrations)
642
657
  end
@@ -648,29 +663,30 @@ module Elibri
648
663
  # eLibri stosuje wewnętrzną hierarchę kategorii, ich lista dostępna jest
649
664
  # = link_to "tutaj", doc_api_path("categories")
650
665
  def export_subjects!(product)
651
- if product.elibri_product_categories.present? or product.publisher_product_categories.present?
652
- comment 'Stosujemy wewnętrzną kategoryzację.'
653
- end
654
666
 
655
667
  # Kategorie wg. eLibri
656
- product.elibri_product_categories.each_with_index do |product_category, i|
657
- tag(:Subject) do
658
- tag(:MainSubject) if i.zero?
659
- tag(:SubjectSchemeIdentifier, Elibri::ONIX::Dict::Release_3_0::SubjectSchemeIdentifier::PROPRIETARY)
660
- tag(:SubjectSchemeName, 'elibri.com.pl')
661
- tag(:SubjectSchemeVersion, '1.0')
662
- tag(:SubjectCode, product_category.id)
663
- tag(:SubjectHeadingText, product_category.full_node_path_name)
668
+ if product.respond_to?(:elibri_product_categories)
669
+ product.elibri_product_categories.each_with_index do |product_category, i|
670
+ tag(:Subject) do
671
+ tag(:MainSubject) if i.zero?
672
+ tag(:SubjectSchemeIdentifier, Elibri::ONIX::Dict::Release_3_0::SubjectSchemeIdentifier::PROPRIETARY)
673
+ tag(:SubjectSchemeName, 'elibri.com.pl')
674
+ tag(:SubjectSchemeVersion, '1.0')
675
+ tag(:SubjectCode, product_category.id)
676
+ tag(:SubjectHeadingText, product_category.full_node_path_name)
677
+ end
664
678
  end
665
679
  end
666
680
 
667
681
  # Kategorie wg. wydawnictwa
668
- product.publisher_product_categories.each do |product_category|
669
- tag(:Subject) do
670
- tag(:SubjectSchemeIdentifier, Elibri::ONIX::Dict::Release_3_0::SubjectSchemeIdentifier::PROPRIETARY)
671
- tag(:SubjectSchemeName, product.publisher_name)
672
- tag(:SubjectCode, product_category.id)
673
- tag(:SubjectHeadingText, product_category.name)
682
+ if product.respond_to?(:publisher_product_categories)
683
+ product.publisher_product_categories.each do |product_category|
684
+ tag(:Subject) do
685
+ tag(:SubjectSchemeIdentifier, Elibri::ONIX::Dict::Release_3_0::SubjectSchemeIdentifier::PROPRIETARY)
686
+ tag(:SubjectSchemeName, product.publisher_name)
687
+ tag(:SubjectCode, product_category.id)
688
+ tag(:SubjectHeadingText, product_category.name)
689
+ end
674
690
  end
675
691
  end
676
692
  end
@@ -712,20 +728,23 @@ module Elibri
712
728
  if product.authorship_kind.user_given?
713
729
  comment 'Gdy wyszczególniono autorów', :kind => :onix_contributors if product.contributors.present?
714
730
  product.contributors.each_with_index do |contributor, idx|
715
- tag(:Contributor, :sourcename => "contributorid:#{contributor.id}", :datestamp => contributor.updated_at.to_s(:onix)) do
731
+ options = {}
732
+ options[:sourcename] = "contributorid:#{contributor.id}" if contributor.respond_to?(:id)
733
+ options[:datestamp] = contributor.updated_at.to_s(:onix) if contributor.respond_to?(:updated_at)
734
+ tag(:Contributor, options) do
716
735
  tag(:SequenceNumber, idx + 1)
717
736
  comment_dictionary 'Rola autora', :ContributorRole, :indent => 10, :kind => :onix_contributors
718
737
  tag(:ContributorRole, contributor.role_onix_code) #lista 17
719
738
  comment 'Tylko w przypadku tłumaczy:', :kind => :onix_contributors
720
- tag(:FromLanguage, contributor.language_onix_code) if contributor.language_onix_code
739
+ tag(:FromLanguage, contributor.language_onix_code) if contributor.respond_to?(:language_onix_code) && contributor.language_onix_code.present?
721
740
  tag(:PersonName, contributor.generated_full_name) #zawsze jest TODO - dodać takie pole do bazy danych
722
741
 
723
- tag(:TitlesBeforeNames, contributor.title) if contributor.title.present? #tytuł
724
- tag(:NamesBeforeKey, contributor.name) if contributor.name.present? #imię
725
- tag(:PrefixToKey, contributor.last_name_prefix) if contributor.last_name_prefix.present? #van, von
726
- tag(:KeyNames, contributor.last_name) if contributor.last_name.present?
727
- tag(:NamesAfterKey, contributor.last_name_postfix) if contributor.last_name_postfix.present?
728
- tag(:BiographicalNote, contributor.biography.text) if contributor.biography
742
+ tag(:TitlesBeforeNames, contributor.title) if contributor.respond_to?(:title) && contributor.title.present? #tytuł
743
+ tag(:NamesBeforeKey, contributor.name) if contributor.respond_to?(:name) && contributor.name.present? #imię
744
+ tag(:PrefixToKey, contributor.last_name_prefix) if contributor.respond_to?(:last_name_prefix) && contributor.last_name_prefix.present? #van, von
745
+ tag(:KeyNames, contributor.last_name) if contributor.respond_to?(:last_name) && contributor.last_name.present?
746
+ tag(:NamesAfterKey, contributor.last_name_postfix) if contributor.respond_to?(:last_name_postfix) && contributor.last_name_postfix.present?
747
+ tag(:BiographicalNote, contributor.biography.text) if contributor.respond_to?(:biography) && contributor.biography
729
748
  end
730
749
  end
731
750
  end
@@ -782,7 +801,7 @@ module Elibri
782
801
  end
783
802
  end
784
803
  end
785
- if product.original_title.present?
804
+ if product.respond_to?(:original_title) && product.original_title.present?
786
805
  tag(:TitleDetail) do
787
806
  comment "Tytuł w języku oryginału - #{Elibri::ONIX::Dict::Release_3_0::TitleType::DISTINCTIVE_TITLE}", :kind => :onix_titles
788
807
  tag(:TitleType, Elibri::ONIX::Dict::Release_3_0::TitleType::ORIGINAL_TITLE)
@@ -793,7 +812,7 @@ module Elibri
793
812
  end
794
813
  end
795
814
  end
796
- if product.trade_title.present?
815
+ if product.respond_to?(:trade_title) && product.trade_title.present?
797
816
  tag(:TitleDetail) do
798
817
  comment "Tytuł handlowy używany przez wydawnictwo - #{Elibri::ONIX::Dict::Release_3_0::TitleType::DISTRIBUTORS_TITLE}", :kind => :onix_titles
799
818
  tag(:TitleType, Elibri::ONIX::Dict::Release_3_0::TitleType::DISTRIBUTORS_TITLE) #tytuł produktu
@@ -810,7 +829,7 @@ module Elibri
810
829
  # @hidden_tags RecordReference NotificationType ProductIdentifier ProductComposition ProductForm TitleDetail
811
830
  # @title Opis wydania
812
831
  def export_edition!(product)
813
- if product.edition_statement.present?
832
+ if product.respond_to?(:edition_statement) && product.edition_statement.present?
814
833
  comment 'Opis wydania', :kind => :onix_edition
815
834
  tag(:EditionStatement, product.edition_statement)
816
835
  end
@@ -821,11 +840,13 @@ module Elibri
821
840
  # @title Języki
822
841
  # Języki, w których dostępny jest produkt.
823
842
  def export_languages!(product)
824
- comment_dictionary 'Rola języka', :LanguageRole, :indent => 10, :kind => :onix_languages if product.languages.present?
825
- product.languages.each do |language|
826
- tag(:Language) do
827
- tag(:LanguageRole, language.role_onix_code) #lista 22
828
- tag(:LanguageCode, language.language_onix_code) #lista 74
843
+ if product.respond_to?(:languages)
844
+ comment_dictionary 'Rola języka', :LanguageRole, :indent => 10, :kind => :onix_languages if product.languages.present?
845
+ product.languages.each do |language|
846
+ tag(:Language) do
847
+ tag(:LanguageRole, language.role_onix_code) #lista 22
848
+ tag(:LanguageCode, language.language_onix_code) #lista 74
849
+ end
829
850
  end
830
851
  end
831
852
  end
@@ -842,12 +863,15 @@ module Elibri
842
863
  #jeśli jest pusty tekst, nie nadaje się do umieszczania w ONIX albo tekst dotyczy autora (type_onix_code.blank?) -> nie exportuj
843
864
  next if other_text.text.blank? || other_text.type_onix_code.blank? || !other_text.exportable?
844
865
 
845
- tag(:TextContent, :sourcename => "textid:#{other_text.id}", :datestamp => other_text.updated_at.to_s(:onix)) do
866
+ options = {}
867
+ options[:sourcename] = "textid:#{other_text.id}" if other_text.respond_to?(:id)
868
+ options[:datestamp] = other_text.updated_at.to_s(:onix) if other_text.respond_to?(:updated_at)
869
+ tag(:TextContent, options) do
846
870
  tag(:TextType, other_text.type_onix_code) #lista 153
847
871
  comment "Zawsze #{Elibri::ONIX::Dict::Release_3_0::ContentAudience::UNRESTRICTED} - Unrestricted", :kind => :onix_texts
848
872
  tag(:ContentAudience, Elibri::ONIX::Dict::Release_3_0::ContentAudience::UNRESTRICTED)
849
873
 
850
- if other_text.is_a_review? && other_text.resource_link.present?
874
+ if other_text.respond_to?(:is_a_review?) && other_text.respond_to?(:resource_link) && other_text.is_a_review? && other_text.resource_link.present?
851
875
  text_source = {:sourcename => other_text.resource_link}
852
876
  else
853
877
  text_source = {}
@@ -857,8 +881,8 @@ module Elibri
857
881
  builder.cdata!(other_text.text)
858
882
  end
859
883
 
860
- tag(:TextAuthor, other_text.text_author) if other_text.text_author.present?
861
- tag(:SourceTitle, other_text.source_title) if other_text.source_title.present?
884
+ tag(:TextAuthor, other_text.text_author) if other_text.respond_to?(:text_author) && other_text.text_author.present?
885
+ tag(:SourceTitle, other_text.source_title) if other_text.respond_to?(:source_title) && other_text.source_title.present?
862
886
  end
863
887
  end
864
888
  end
@@ -871,7 +895,10 @@ module Elibri
871
895
  def export_supporting_resources!(product)
872
896
  product.attachments.each do |attachment|
873
897
  if attachment.onix_resource_mode #jeśli klient coś dzikiego wgrał, to ignoruj to
874
- tag(:SupportingResource, :sourcename => "resourceid:#{attachment.id}", :datestamp => attachment.updated_at.to_s(:onix)) do
898
+ options = {}
899
+ options[:sourcename] = "resourceid:#{attachment.id}" if attachment.respond_to?(:id)
900
+ options[:datestamp] = attachment.updated_at.to_s(:onix) if attachment.respond_to?(:updated_at)
901
+ tag(:SupportingResource, options) do
875
902
  comment_dictionary 'Typ załącznika', :ResourceContentType, :indent => 12, :kind => :onix_supporting_resources
876
903
  tag(:ResourceContentType, attachment.attachment_type_code) #lista 158
877
904
  comment 'Zawsze 00 - Unrestricted', :kind => :onix_supporting_resources
@@ -882,7 +909,7 @@ module Elibri
882
909
  comment 'Zawsze 02 - Downloadable file', :kind => :onix_supporting_resources
883
910
  tag(:ResourceForm, Elibri::ONIX::Dict::Release_3_0::ResourceForm::DOWNLOADABLE_FILE)
884
911
  url = attachment.file.url
885
- if url.index("http://") #w sklepie zwraca mi całego linka, wygodniej mi jest to tutaj wychwycić
912
+ if url.index("http://") || url.index("https://") #w sklepie zwraca mi całego linka, wygodniej mi jest to tutaj wychwycić
886
913
  tag(:ResourceLink, URI.escape(url))
887
914
  else
888
915
  tag(:ResourceLink, URI.escape('http://' + HOST_NAME + url))
@@ -901,11 +928,19 @@ module Elibri
901
928
  # Oprócz nazwy serii może zostać również podany numer wewnątrz serii, jeśli seria jest numerowana.
902
929
  # Książka może należeć do kilku serii, wtedy tag <strong>&lt;Collection&gt;</strong> występuje kilkukrotnie.
903
930
  def export_series_memberships!(product)
904
- if product.series_membership_kind.user_given?
905
- product.series_memberships.each_with_index do |series_membership, idx|
931
+ if product.respond_to?(:series_membership_kind) && (product.series_membership_kind.user_given? || product.collection_with_issn)
932
+ (product.series_memberships + [product.collection_with_issn]).compact.each_with_index do |series_membership, idx|
906
933
  tag(:Collection) do
907
934
  comment "Używamy tylko #{Elibri::ONIX::Dict::Release_3_0::CollectionType::PUBLISHER_COLLECTION} - seria wydawnictwa", :kind => :onix_series_memberships
908
935
  tag(:CollectionType, Elibri::ONIX::Dict::Release_3_0::CollectionType::PUBLISHER_COLLECTION) #lista 148
936
+
937
+ if series_membership.respond_to?(:issn) && series_membership.issn.present?
938
+ comment "W przypadku prasy serializowany jest numer ISSN"
939
+ tag(:CollectionIdentifier) do
940
+ tag(:CollectionIDType, "02") #issn - lista 13
941
+ tag(:IDValue, series_membership.issn)
942
+ end
943
+ end
909
944
  comment "Teraz następuje podobna struktura, jak w przypadku tytułu", :kind => :onix_series_memberships
910
945
  tag(:TitleDetail) do
911
946
  comment "Używamy tylko #{Elibri::ONIX::Dict::Release_3_0::TitleType::DISTINCTIVE_TITLE}", :kind => :onix_series_memberships
@@ -938,8 +973,8 @@ module Elibri
938
973
  tag(:ProductIDType, Elibri::ONIX::Dict::Release_3_0::ProductIDType::PROPRIETARY)
939
974
  tag(:IDTypeName, "elibri")
940
975
  tag(:IDValue, facsimile.record_reference)
941
- end
942
- end
976
+ end
977
+ end
943
978
  end
944
979
  end
945
980
  end
@@ -953,7 +988,7 @@ module Elibri
953
988
  # identyfikatorów produktu. Poza podstawowym <strong>&lt;ProductIdentifier&gt;</strong>, znajdują się także identyfikatory
954
989
  # poszczególnych dostawców. Tag <strong>&lt;IDTypeName&gt;</strong> zawiera nazwę dostawcy.
955
990
  def export_supply_details!(product)
956
- return if product.respond_to?(:skip_ProductSupply) && product.skip_ProductSupply
991
+ return if product.respond_to?(:skip_ProductSupply) && product.skip_ProductSupply || !product.respond_to?(:product_availabilities)
957
992
  unless product.product_availabilities.empty?
958
993
  tag(:ProductSupply) do
959
994
  product.product_availabilities.each do |pa|
@@ -1043,6 +1078,7 @@ module Elibri
1043
1078
  comment 'Vat w procentach'
1044
1079
  tag("elibri:Vat", product.vat) if product.vat.present?
1045
1080
  tag("elibri:PKWiU", product.pkwiu) if product.pkwiu.present?
1081
+ tag("elibri:PDWExclusiveness", product.pdw_exclusiveness) if product.pdw_exclusiveness.present?
1046
1082
  tag("elibri:preview_exists", product.preview_exists?.to_s)
1047
1083
  if product.digital?
1048
1084
  if product.epub_sale_not_restricted? || product.epub_sale_restricted_to.nil?
@@ -1,3 +1,3 @@
1
1
  module ElibriOnixGenerator
2
- VERSION = "0.1.12"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elibri_onix_generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.12
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcin Urbański
@@ -9,20 +9,20 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-09-30 00:00:00.000000000 Z
12
+ date: 2017-05-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: builder
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  requirements:
18
- - - '>='
18
+ - - ">="
19
19
  - !ruby/object:Gem::Version
20
20
  version: '0'
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
- - - '>='
25
+ - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
28
  description: XML Generator used by Elibri gems
@@ -33,7 +33,7 @@ executables: []
33
33
  extensions: []
34
34
  extra_rdoc_files: []
35
35
  files:
36
- - .gitignore
36
+ - ".gitignore"
37
37
  - Gemfile
38
38
  - README
39
39
  - Rakefile
@@ -50,19 +50,18 @@ require_paths:
50
50
  - lib
51
51
  required_ruby_version: !ruby/object:Gem::Requirement
52
52
  requirements:
53
- - - '>='
53
+ - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
56
  required_rubygems_version: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - '>='
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
60
  version: '0'
61
61
  requirements: []
62
62
  rubyforge_project: elibri_onix_generator
63
- rubygems_version: 2.2.2
63
+ rubygems_version: 2.4.8
64
64
  signing_key:
65
65
  specification_version: 4
66
66
  summary: XML Generator used by Elibri gems
67
67
  test_files: []
68
- has_rdoc: