relaton-core 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e57b8db4577d599195b3948fdc1a5bf213d3e97e17c1b5d38dfa942e00130c18
4
+ data.tar.gz: d34080a4e6dd2e717ce35c80dc869c2630ffcf7d93a1358e05e4fcab4f878659
5
+ SHA512:
6
+ metadata.gz: 0cb84f4a86ab0a3ff56c7c8639b5ff677a76bc189043a61c5bbd104a0950ec4f195a3e4fe952a47b72e0430066ffd3940042823250e47acc611c7a33799d1520
7
+ data.tar.gz: 1f8118680baa7149459c6e6d4a800cee274e594e1b28cbbac35677be12c2b655d4666065b150719f10348bf72b31ff7c629057078f71798a55198d2e97b2c96d
data/LICENSE.txt ADDED
@@ -0,0 +1,25 @@
1
+ BSD 2-Clause License
2
+
3
+ Copyright (c) 2018, Ribose
4
+ All rights reserved.
5
+
6
+ Redistribution and use in source and binary forms, with or without
7
+ modification, are permitted provided that the following conditions are met:
8
+
9
+ * Redistributions of source code must retain the above copyright notice, this
10
+ list of conditions and the following disclaimer.
11
+
12
+ * Redistributions in binary form must reproduce the above copyright notice,
13
+ this list of conditions and the following disclaimer in the documentation
14
+ and/or other materials provided with the distribution.
15
+
16
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
20
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
data/README.adoc ADDED
@@ -0,0 +1,46 @@
1
+ = Library for importing and caching bibliographic references to technical standards library
2
+
3
+ == Usage
4
+
5
+ === Exclude attributes when compare
6
+
7
+ [source,ruby]
8
+ ----
9
+ require "relaton-core"
10
+
11
+ pubid_first = Identifier.parse("ISO 1:1999")
12
+ pubid_second = Identifier.parse("ISO 1")
13
+
14
+ pubid_first == pubid_second
15
+ => false
16
+
17
+ pubid_first.exclude(:year) == pubid_second
18
+ => true
19
+ ----
20
+
21
+ === Using #to_h to convert identifier to hash
22
+
23
+ [source,ruby]
24
+ ----
25
+ require "pubid-core"
26
+
27
+ pubid = Identifier.parse("ISO 1:1999")
28
+ pubid.to_h
29
+ => { publisher: "ISO", number: 1, year: 1999 }
30
+ ----
31
+
32
+ === Using #new_edition_of? to compare identifiers
33
+
34
+ [source,ruby]
35
+ ----
36
+ require "pubid-core"
37
+
38
+ pubid_first = Identifier.parse("ISO 1:1999")
39
+ pubid_second = Identifier.parse("ISO 1:2000")
40
+
41
+ pubid_first.new_edition_of?(pubid_second)
42
+ => false
43
+ pubid_second.new_edition_of?(pubid_first)
44
+ => true
45
+
46
+ ----
@@ -0,0 +1,104 @@
1
+ module Relaton::Core
2
+ class DataFetcher
3
+ attr_accessor :docs
4
+ #
5
+ # Initialize fetcher
6
+ #
7
+ # @param [String] output path to output directory
8
+ # @param [String] format output format (yaml, xml, bibxml)
9
+ #
10
+ def initialize(output, format)
11
+ @output = output
12
+ @format = format
13
+ @ext = format.sub "bibxml", "xml"
14
+ @files = []
15
+ @docs = []
16
+ end
17
+
18
+ def index
19
+ @index ||= Relaton::Index.find_or_create self.class::INDEX_TYPE,
20
+ file: self.class::INDEX_FILE,
21
+ pubid_class: self.class.get_identifier_class
22
+ end
23
+
24
+ # API method for external service
25
+ def self.fetch(output: "data", format: "yaml")
26
+ t1 = Time.now
27
+ puts "Started at: #{t1}"
28
+ FileUtils.mkdir_p output
29
+ new(output, format).fetch
30
+ t2 = Time.now
31
+ puts "Stopped at: #{t2}"
32
+ puts "Done in: #{(t2 - t1).round} sec."
33
+ end
34
+
35
+ def self.get_identifier_class
36
+ raise NotImplementedError, "#{self.class}#get_identifier_class method must be implemented"
37
+ end
38
+
39
+ def fetch
40
+ fetch_docs ACTIVE_PUBS_URL
41
+ fetch_docs OBSOLETE_PUBS_URL, retired: true
42
+ index.save
43
+ end
44
+
45
+ # Parse hash and return RelatonBib
46
+ # @param [Hash] doc document data
47
+ # @return [RelatonBib]
48
+ def parse(doc)
49
+ raise NotImplementedError, "#{self.class}#parse method must be implemented"
50
+ end
51
+
52
+ # @param [RelatonBib::BibliographicItem] bib
53
+ # @return [String] filename based on PubID identifier
54
+ def get_output_file(bib)
55
+ File.join @output, "#{bib.docidentifier.first.id.gsub(/[.\s-]+/, '-')}.#{@ext}"
56
+ end
57
+
58
+ #
59
+ # Parse document and save to file
60
+ #
61
+ # @param [Hash] doc document data
62
+ # @param [Boolean] retired if true then document is retired
63
+ #
64
+ # @return [void]
65
+ #
66
+ def parse_and_save(doc)
67
+ bibitem = parse(doc)
68
+ save_bib(bibitem)
69
+ index_add_or_update(bibitem)
70
+ end
71
+
72
+ #
73
+ # Save bibitem to file
74
+ #
75
+ # @param [RelatonBib::BibliographicItem] bib bibitem
76
+ #
77
+ # @return [void]
78
+ #
79
+ def save_bib(bib)
80
+ file = get_output_file(bib)
81
+ File.write file, serialize(bib), encoding: "UTF-8"
82
+ end
83
+
84
+ def index_add_or_update(bib)
85
+ index.add_or_update self.class.get_identifier_class.parse(bib.docidentifier.first.id),
86
+ get_output_file(bib)
87
+ end
88
+
89
+ #
90
+ # Serialize bibliographic item
91
+ #
92
+ # @param [RelatonCcsds::BibliographicItem] bib <description>
93
+ #
94
+ # @return [String] serialized bibliographic item
95
+ #
96
+ def serialize(bib)
97
+ case @format
98
+ when "yaml" then bib.to_hash.to_yaml
99
+ when "xml" then bib.to_xml(bibdata: true)
100
+ else bib.send "to_#{@format}"
101
+ end
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,5 @@
1
+ module Relaton
2
+ module Core
3
+ VERSION = "0.0.2".freeze
4
+ end
5
+ end
@@ -0,0 +1,3 @@
1
+ require "relaton_bib"
2
+ require "relaton/index"
3
+ require_relative "core/data_fetcher"
@@ -0,0 +1 @@
1
+ require_relative "relaton/core"
metadata ADDED
@@ -0,0 +1,122 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: relaton-core
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Ribose Inc.
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2025-01-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '13.0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '13.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: relaton-bib
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 1.19.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 1.19.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: relaton-index
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.2.16
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.2.16
69
+ - !ruby/object:Gem::Dependency
70
+ name: pubid-core
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.12.10
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.12.10
83
+ description: Library for importing and caching bibliographic references to technical
84
+ standards
85
+ email:
86
+ - open.source@ribose.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files:
90
+ - README.adoc
91
+ - LICENSE.txt
92
+ files:
93
+ - LICENSE.txt
94
+ - README.adoc
95
+ - lib/relaton-core.rb
96
+ - lib/relaton/core.rb
97
+ - lib/relaton/core/data_fetcher.rb
98
+ - lib/relaton/core/version.rb
99
+ homepage: https://github.com/relaton/relaton-core
100
+ licenses:
101
+ - BSD-2-Clause
102
+ metadata: {}
103
+ post_install_message:
104
+ rdoc_options: []
105
+ require_paths:
106
+ - lib
107
+ required_ruby_version: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: 2.5.0
112
+ required_rubygems_version: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ requirements: []
118
+ rubygems_version: 3.3.27
119
+ signing_key:
120
+ specification_version: 4
121
+ summary: Library for importing and caching bibliographic references to technical standards
122
+ test_files: []