relaton-cli 0.1.2 → 0.1.4

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: b19614f9f5484181337571cbc881a8f45d7131bbb8c1fea9ca77f8573935d8f3
4
- data.tar.gz: 45429bb98e29ebfd54a2b1525a793b34f93a453f143ed1b9a9b2e0529eea6d9c
3
+ metadata.gz: acaf3abbad33304c0ab6dfb6be03a86d2d90e7746b494ddbd739c6a30643691d
4
+ data.tar.gz: a1c604c89f7543d7b73596384b5d851aa382900e4895ed81bc8c27ad4b83fd59
5
5
  SHA512:
6
- metadata.gz: 2af0e98a901968e3751a1c209dc98b326098aae82b0ba0eb6d4562f9826da83e380ff05a3e8ff9884d4bb32a12e4ca43de933bd77754d31377e29052287364ee
7
- data.tar.gz: 268053ca0bd8992ad7125829b3718e896b3bcbec6ca6220ccf3df98ebfce7d8680d062a89ffa3971b74474f2bdfa8ee57740d282fcdd67b869972b605cba202d
6
+ metadata.gz: f11878522fda0aa839d51f9a50407ae94965a67b8dabce4cc36b00601b563da3574ce9d4fda42ffdc2d257ce7e3d7e0159f92f8335928eac14d893c7f3452ae1
7
+ data.tar.gz: b618737bbc2bee1605ecc4541ccc6b99edc34e3cbb5668dbe6aca63d6c0e23e47ca519877491b4728f771b13e8b03d9b8be4246f7b3b257fd2870cdab7957695
data/.gitignore ADDED
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ /.pryrc
11
+ /.rubocop-https*
12
+
13
+ .rspec_status
data/.hound.yml ADDED
@@ -0,0 +1,3 @@
1
+ ruby:
2
+ Enabled: true
3
+ config_file: .rubocop.yml
data/.rubocop.yml CHANGED
@@ -3,13 +3,8 @@
3
3
  # All project-specific additions and overrides should be specified in this file.
4
4
 
5
5
  inherit_from:
6
- # Thoughtbot's style guide from: https://github.com/thoughtbot/guides
7
- - ".rubocop.tb.yml"
8
- # Overrides from Ribose
9
- - ".rubocop.ribose.yml"
6
+ - https://raw.githubusercontent.com/riboseinc/oss-guides/master/ci/rubocop.yml
10
7
  AllCops:
11
- DisplayCopNames: false
12
- StyleGuideCopsOnly: false
13
- TargetRubyVersion: 2.5
8
+ TargetRubyVersion: 2.3
14
9
  Rails:
15
10
  Enabled: true
data/.travis.yml CHANGED
@@ -6,9 +6,14 @@ rvm:
6
6
  - 2.4
7
7
  - 2.3
8
8
  - ruby-head
9
+
9
10
  before_install:
10
11
  - gem install bundler -v 1.16.1
11
12
  - unset _JAVA_OPTIONS
13
+ - mkdir ./tmp
14
+ - mkdir ~/.relaton
15
+
12
16
  matrix:
13
17
  allow_failures:
18
+ - rvm: 2.3
14
19
  - rvm: ruby-head
data/Gemfile.lock CHANGED
@@ -1,10 +1,10 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- relaton-cli (0.1.1)
4
+ relaton-cli (0.1.4)
5
5
  liquid
6
- relaton (~> 0.2.4)
7
- uuidtools
6
+ relaton (~> 0.3)
7
+ thor
8
8
 
9
9
  GEM
10
10
  remote: https://rubygems.org/
@@ -16,43 +16,49 @@ GEM
16
16
  json (>= 1.5.1)
17
17
  byebug (10.0.2)
18
18
  cnccs (0.1.3)
19
+ coderay (1.1.2)
19
20
  diff-lcs (1.3)
20
21
  equivalent-xml (0.6.0)
21
22
  nokogiri (>= 1.4.3)
22
- gb-agencies (0.0.3)
23
- gbbib (0.3.1)
23
+ gb-agencies (0.0.5)
24
+ gbbib (0.4.1)
24
25
  cnccs (~> 0.1.1)
25
26
  gb-agencies (~> 0.0.1)
26
- iso-bib-item (~> 0.3.0)
27
+ iso-bib-item (~> 0.4.2)
27
28
  httpclient (2.8.3)
28
- iecbib (0.1.2)
29
+ iecbib (0.2.1)
29
30
  addressable
30
- iso-bib-item (~> 0.3.0)
31
- ietfbib (0.4.1)
32
- iso-bib-item (~> 0.3.0)
33
- iso-bib-item (0.3.1)
31
+ iso-bib-item (~> 0.4.2)
32
+ ietfbib (0.4.3)
33
+ iso-bib-item (~> 0.4.2)
34
+ iso-bib-item (0.4.3)
34
35
  isoics (~> 0.1.6)
35
36
  nokogiri (~> 1.8.4)
36
37
  ruby_deep_clone (~> 0.8.0)
37
- isobib (0.3.1)
38
+ isobib (0.4.1)
38
39
  algoliasearch
39
- iso-bib-item (~> 0.3.0)
40
+ iecbib (~> 0.2.1)
41
+ iso-bib-item (~> 0.4.2)
40
42
  isoics (0.1.7)
41
43
  json (2.1.0)
42
- liquid (4.0.0)
44
+ liquid (4.0.1)
45
+ method_source (0.9.2)
43
46
  mini_portile2 (2.3.0)
44
47
  mixlib-shellout (2.4.0)
45
- nokogiri (1.8.4)
48
+ nokogiri (1.8.5)
46
49
  mini_portile2 (~> 2.3.0)
50
+ pry (0.12.2)
51
+ coderay (~> 1.1.0)
52
+ method_source (~> 0.9.0)
47
53
  public_suffix (3.0.3)
48
54
  rake (12.3.1)
49
- relaton (0.2.4)
55
+ relaton (0.3.0)
50
56
  algoliasearch
51
- gbbib (~> 0.3.1)
52
- iecbib (~> 0.1.1)
53
- ietfbib (~> 0.4.1)
54
- iso-bib-item (~> 0.3.0)
55
- isobib (~> 0.3.1)
57
+ gbbib (~> 0.4.0)
58
+ iecbib (~> 0.2.0)
59
+ ietfbib (~> 0.4.2)
60
+ iso-bib-item (~> 0.4.2)
61
+ isobib (~> 0.4.0)
56
62
  rspec (3.8.0)
57
63
  rspec-core (~> 3.8.0)
58
64
  rspec-expectations (~> 3.8.0)
@@ -63,7 +69,7 @@ GEM
63
69
  rspec-its (~> 1.2)
64
70
  rspec-core (3.8.0)
65
71
  rspec-support (~> 3.8.0)
66
- rspec-expectations (3.8.1)
72
+ rspec-expectations (3.8.2)
67
73
  diff-lcs (>= 1.2.0, < 2.0)
68
74
  rspec-support (~> 3.8.0)
69
75
  rspec-its (1.2.0)
@@ -74,7 +80,7 @@ GEM
74
80
  rspec-support (~> 3.8.0)
75
81
  rspec-support (3.8.0)
76
82
  ruby_deep_clone (0.8.0)
77
- uuidtools (2.1.5)
83
+ thor (0.20.3)
78
84
 
79
85
  PLATFORMS
80
86
  ruby
@@ -83,6 +89,7 @@ DEPENDENCIES
83
89
  bundler (~> 1.16)
84
90
  byebug (~> 10.0)
85
91
  equivalent-xml (~> 0.6)
92
+ pry
86
93
  rake (~> 12.0)
87
94
  relaton-cli!
88
95
  rspec (~> 3.0)
@@ -90,4 +97,4 @@ DEPENDENCIES
90
97
  rspec-core (~> 3.4)
91
98
 
92
99
  BUNDLED WITH
93
- 1.16.2
100
+ 1.17.1
data/README.adoc CHANGED
@@ -12,52 +12,67 @@ Please refer to https://github.com/riboseinc/relaton.
12
12
 
13
13
  The following executables are included:
14
14
 
15
- === relaton-concatenate
15
+ === relaton concatenate
16
16
 
17
- ```
18
- relaton-concatenate DIRECTORY
19
- ```
17
+ [source,console]
18
+ ----
19
+ $ relaton concatenate Source-Directory Collection-File -t TITLE -g ORGANIZATION
20
+ ----
20
21
 
21
- Iterates through all the Relaton YAML files in DIRECTORY, and converts them in-place into Relaton XML.
22
+ Iterates through all the Relaton YAML files in `Source-Directory`, and converts them in-place into Relaton XML.
22
23
 
23
- Iterates through all the Relaton XML files in DIRECTORY (including those just converted from Relaton YAML),
24
- and outputs to stdout a `relaton-collection` document containing all the Relaton XML objects read in.
24
+ Iterates through all the Relaton XML files in `Source-Directory` (including those just converted from Relaton YAML),
25
+ and outputs to `Collection-File` a `relaton-collection` document containing all the Relaton XML objects read in.
25
26
 
26
- === relaton-fetch
27
+ For each Relaton XML file, if a document file with the same base name is identified (i.e. an XML, HTML, PDF or DOC
28
+ file), a link to that file is inserted.
27
29
 
28
- ```
29
- relaton-fetch -t TYPE -y YEAR code
30
- ```
30
+ If the `TITLE` or `ORGANIZATION` options are given, they are added to the `Collection-File` output as the
31
+ title and author of the `relaton-collection` document.
31
32
 
32
- Fetch the Relaton XML entry corresponding to the document identifier `code`.
33
+ === relaton fetch
34
+
35
+ [source,console]
36
+ ----
37
+ $ relaton fetch CODE -t TYPE -y YEAR
38
+ ----
39
+
40
+ Fetch the Relaton XML entry corresponding to the document identifier `CODE`.
33
41
 
34
42
  * `YEAR` is optional, and specifies the year of publication of the standard.
35
- * `TYPE` specifies the standards class library to be used, that the identifier is part of; the recognised
43
+ * `TYPE` specifies the standards class library to be used, that the identifier is part of; the recognised
36
44
  values for `TYPE` are `isobib`, `ietfbib`, `iecbib`, `gbbib`.
37
45
 
38
- === relaton-metanorma-extract
46
+ === relaton extract
39
47
 
40
- ```
41
- relaton-metanorma-extract Metanorma-XML-Directory Relaton-XML-Directory
42
- ```
48
+ [source,console]
49
+ ----
50
+ $ relaton extract Metanorma-XML-Directory Relaton-XML-Directory -x EXTENSION
51
+ ----
43
52
 
44
53
  Iterate through all the Metanorma XML files in `Metanorma-XML-Directory`, and extract the `bibdata`
45
54
  element from each. Save the `bibdata` element for each file to `Relaton-XML-Directory`, as the Relaton XML
46
55
  description for that file. If a document identifier is present in `bibdata`, it is used as the name of the
47
- file; otherwise, the original file name is used.
56
+ file; otherwise, the original file name is used. The filename is suffixed with `EXTENSION`; by default,
57
+ `.rxl` is used.
48
58
 
49
- === relaton-xml-html
59
+ [[relaton-xml2html]]
60
+ === relaton xml2html
50
61
 
51
- ```
52
- relaton-xml-html <relaton-xml> <stylesheet> <output-root> <html-template>
53
- ```
62
+ [source,console]
63
+ ----
64
+ $ relaton xml2html <relaton-xml> <stylesheet> <html-template-dir>
65
+ ----
54
66
 
55
67
  Render a Relaton Collection XML as an HTML file. Used to generate an HTML index of standards.
56
68
 
57
69
  * `relaton-xml` is the Relaton Collection XML file.
58
70
  * `stylesheet` is the CSS stylesheet to be used to style the output. For the CSS styling of each bibliographic element, see below.
59
- * `output-root` is the directory containing the Relaton XML for each file, named after the document identifier (as generated by `relaton-metanorma-extract`)
60
- * `html-template` is the HTML Liquid Template file into which the bibliographic entries are to be inserted. The HTML Template recognises the following parameters:
71
+ * `html-template-dir` is a directory containing HTML Liquid Template files into which the bibliographic entries are to be inserted. There is one file for the overall file (`_index.liquid_`), and one file for the individual bibliographic entries (`_document.liquid`). A sample instance of this directory is available in the `templates` directory.
72
+
73
+ The HTML Template file `_document.liquid` recognises attributes of a bibliographic entry (`document`) which follow the naming convention of <<relaton-yaml,Relaton YAML>>; e.g. `document.html` is the HTML URI for the document.
74
+
75
+ The HTML Template file `_index.liquid` recognises the following parameters:
61
76
  ** `css`: where the CSS stylesheet `stylesheet` is injected
62
77
  ** `title`: the Title of the collection, `./relaton-collection/title` in `relaton-xml`
63
78
  ** `author`: the Author of the collection, `./relaton-collection/contributor[role/@type = 'author']/organization/name` in `relaton-xml`
@@ -65,7 +80,8 @@ Render a Relaton Collection XML as an HTML file. Used to generate an HTML index
65
80
 
66
81
  Sample HTML output for a bibliographic entry:
67
82
 
68
- ```xml
83
+ [source,xml]
84
+ ----
69
85
  <div class="document">
70
86
  <div class="doc-line">
71
87
  <div class="doc-identifier">
@@ -108,26 +124,29 @@ Sample HTML output for a bibliographic entry:
108
124
  </div>
109
125
  </div>
110
126
  </div>
111
- ```
127
+ ----
112
128
 
113
- === relaton-yaml-xml
129
+ [[relaton-yaml]]
130
+ === relaton yaml2xml
114
131
 
115
- ```
116
- relaton-yaml-xml -R relaton-dir yaml-file
117
- ```
132
+ [source,console]
133
+ ----
134
+ $ relaton yaml2xml YAML -o OUTPUT-DIRECTORY -x RELATON_EXTENSION -p PREFIX -r LIBRARY
135
+ ----
118
136
 
119
- Convert a Relaton YAML file into a Relaton Collection XML.
137
+ Convert a Relaton YAML file (`filename.yaml`) into a Relaton XML file (`filename.xml`). If the Relaton YAML file specifies multiple bibliograph items, and `OUTPUT-DIRECTORY` is nominated, also convert the file into a list of Relaton XML files for each entry, stored in that directory. The document identifier is used as the name of each Relaton XML file; the Relaton XML filename is suffixed with `RELATON_EXTENSION` (default `.rxl`) and prefixed with `PREFIX` (default empty). Any libraries that need to be required for the conversion are specified in `LIBRARY` as a space-delimited list.
120
138
 
121
- The Relaton YAML file contains some initial metadata, and a list of metadata about each bibliographic entry. The following is a sample:
139
+ A Relaton Colleciton YAML file contains some initial metadata, and a list of metadata about each bibliographic entry. A Relaton YAML file describing an individual bibliographic entry is limited to metadata specific to that entry. The following illustrates the fields supported:
122
140
 
123
- ```yaml
141
+ [source,yaml]
142
+ ----
124
143
  htmlstylesheet: ./index-style.css
125
144
  root:
126
145
  title: CalConnect Standards Registry
127
146
  author: "CalConnect: The Calendaring and Scheduling Consortium"
128
147
  items:
129
148
  - technical_committee: TC VCARD
130
- docid: CC 18001
149
+ docidentifier: 18001
131
150
  doctype: standard
132
151
  title: "Date and time -- Representations for information interchange -- Part 1: Basic rules"
133
152
  stage: Published
@@ -138,11 +157,33 @@ root:
138
157
  doc: standards/csd-datetime-explict/csd-datetime-explict.doc
139
158
  relaton: standards/csd-datetime-explict/cc-18001.xml
140
159
  - technical_committee: TC PUBLISH
141
- docid: CC/DIR 10001
160
+ docidentifier: 10001
142
161
  doctype: governance
143
162
  title: "Standardization and publication"
144
163
  stage: proposal
145
164
  revdate: 2018-10-17
146
165
  uri: standards/csd-standardization/csd-standardization.xml
147
- ```
166
+ agency: CalConnect
167
+ language: en
168
+ script: Latn
169
+ edition: 1
170
+ ----
171
+
172
+ === relaton xml2yaml
173
+
174
+ [source,console]
175
+ ----
176
+ $ relaton xml2yaml XML -o OUTPUT-DIRECTORY -x RELATON_EXTENSION -p PREFIX -r LIBRARY
177
+ ----
178
+
179
+ Convert a Relaton XML file (`filename.xml` or `filename.rxl`) into a Relaton YAML file (`filename.yaml`). If the Relaton XML file is a collection, and `OUTPUT-DIRECTORY` is nominated, also convert the file into a list of Relaton YAML files for each entry, stored in that directory. The document identifier is used as the name of each Relaton XML file; the Relaton XML filename is suffixed with `RELATON_EXTENSION` (default `.yaml`) and prefixed with `PREFIX` (default empty). Any libraries that need to be required for the conversion are specified in `LIBRARY` as a space-delimited list.
180
+
181
+
182
+ === relaton yaml2html
183
+
184
+ [source,console]
185
+ ----
186
+ $ relaton yaml2xml YAML <stylesheet> <liquid-template-dir>
187
+ ----
148
188
 
189
+ Render a Relaton YAML file as an HTML file. The stylesheet and liquid-template-dir directories are as for <<relaton-xml2html,relaton xml2html>>.
data/bin/rspec ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ #
5
+ # This file was generated by Bundler.
6
+ #
7
+ # The application 'rspec' is installed as part of a gem, and
8
+ # this file is here to facilitate running it.
9
+ #
10
+
11
+ require "pathname"
12
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile",
13
+ Pathname.new(__FILE__).realpath)
14
+
15
+ bundle_binstub = File.expand_path("../bundle", __FILE__)
16
+
17
+ if File.file?(bundle_binstub)
18
+ if File.read(bundle_binstub, 150) =~ /This file was generated by Bundler/
19
+ load(bundle_binstub)
20
+ else
21
+ abort("Your `bin/bundle` was not generated by Bundler, so this binstub cannot run.
22
+ Replace `bin/bundle` by running `bundle binstubs bundler --force`, then run this command again.")
23
+ end
24
+ end
25
+
26
+ require "rubygems"
27
+ require "bundler/setup"
28
+
29
+ load Gem.bin_path("rspec-core", "rspec")
data/exe/relaton ADDED
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: UTF-8
3
+ #
4
+ # resolve bin path, ignoring symlinks
5
+ require "pathname"
6
+ bin_file = Pathname.new(__FILE__).realpath
7
+
8
+ # add self to libpath
9
+ $:.unshift File.expand_path("../../lib", bin_file)
10
+
11
+ # Fixes https://github.com/rubygems/rubygems/issues/1420
12
+ require "rubygems/specification"
13
+
14
+ class Gem::Specification
15
+ def this; self; end
16
+ end
17
+
18
+ require "relaton/cli"
19
+
20
+ Relaton::Cli.start(ARGV)
21
+
@@ -20,58 +20,33 @@ module Relaton
20
20
  def initialize(options)
21
21
  self.items = []
22
22
  ATTRIBS.each do |k|
23
- method = "#{k}="
24
23
  value = options[k] || options[k.to_s]
25
- puts "K #{method}"
26
- puts value.inspect
27
-
28
24
  self.send("#{k}=", value)
29
- puts "SET! to #{self.send(k).inspect}"
30
25
  end
31
-
32
- # puts items.inspect
33
26
  self.items = (self.items || []).inject([]) do |acc,item|
34
27
  acc << if item.is_a?(::Relaton::Bibcollection) ||
35
28
  item.is_a?(::Relaton::Bibdata)
36
-
37
29
  item
38
30
  else
39
- # puts "item.inspect #{item.inspect}"
40
31
  new_bib_item_class(item)
41
32
  end
42
33
  end
43
-
44
34
  self
45
- # byebug
46
35
  end
47
36
 
48
- def self.from_xml(source)
49
- # source = Nokogiri::XML(content)
37
+ # arbitrary number, must sort after all bib items
38
+ def doc_number
39
+ 9999999
40
+ end
50
41
 
42
+ def self.from_xml(source)
51
43
  title = source&.at(ns("./relaton-collection/title"))&.text
52
44
  author = source&.at(ns("./relaton-collection/contributor[role/@type = 'author']/organization/name"))&.text
53
-
54
- puts "!!!!!!!!!!"*3
55
- puts "BC: title #{title}"
56
- puts "BC: author #{author}"
57
- puts "!!!!!!!!!!"*3
58
-
59
- items = source.xpath(ns("./relaton-collection/relation")).map do |item|
60
- puts "========="*3
61
- puts "item #{item.to_s}"
45
+ items = source&.xpath(ns("./relaton-collection/relation"))&.map do |item|
62
46
  klass = item.at(ns("./bibdata")) ? Bibdata : Bibcollection
63
- klass.from_xml(item.at(ns("./bibdata")))
47
+ klass.from_xml(item.at(ns("./bibdata")) || item)
64
48
  end
65
-
66
- opts = {
67
- title: title,
68
- author: author,
69
- items: items
70
- }
71
-
72
- puts "X"*38
73
- puts opts.inspect
74
- puts "X"*38
49
+ opts = { title: title, author: author, items: items }
75
50
  new(opts)
76
51
  end
77
52
 
@@ -84,6 +59,9 @@ module Relaton
84
59
  end
85
60
 
86
61
  def items_flattened
62
+ items.sort_by! do |b|
63
+ b.doc_number
64
+ end
87
65
 
88
66
  items.inject([]) do |acc,item|
89
67
  if item.is_a? ::Relaton::Bibcollection
@@ -92,14 +70,17 @@ module Relaton
92
70
  acc << item
93
71
  end
94
72
  end
95
-
96
73
  end
97
74
 
98
75
  def to_xml
76
+ items.sort_by! do |b|
77
+ b.doc_number
78
+ end
79
+
99
80
  collection_type = if doctype
100
81
  "type=\"#{doctype}\""
101
82
  else
102
- 'xmlns="http://riboseinc.com/isoxml"'
83
+ 'xmlns="https://open.ribose.com/relaton-xml"'
103
84
  end
104
85
 
105
86
  ret = "<relaton-collection #{collection_type}>"
@@ -117,15 +98,23 @@ module Relaton
117
98
  ret += "</relaton-collection>\n"
118
99
  end
119
100
 
101
+ def to_yaml
102
+ to_h.to_yaml
103
+ end
104
+
120
105
  def to_h
106
+ items.sort_by! do |b|
107
+ b.doc_number
108
+ end
109
+
121
110
  a = ATTRIBS.inject({}) do |acc, k|
122
- acc[k] = send(k)
111
+ acc[k.to_s] = send(k)
123
112
  acc
124
113
  end
125
114
 
126
- a[:items] = a[:items].map(&:to_h)
115
+ a["items"] = a["items"].map(&:to_h)
127
116
 
128
- a
117
+ { "root" => a }
129
118
  end
130
119
 
131
120
  end