theoj 0.0.1 → 1.1.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
  SHA256:
3
- metadata.gz: '09237502c90ed400980274941c03683a2f5b33eaa911debc8b9d50d0747e5a91'
4
- data.tar.gz: eb959c2aa0821a45246d3a7551f1fc265c0dc571c9ce791840e7465fc5bb6045
3
+ metadata.gz: 23579418555d490f75911e9894fd4c8bb8abaf3225fc6ee93eacd4d60de621fb
4
+ data.tar.gz: 8a05d5d50b4a6e22d5ea9dc420c11e4529f71c217727249178226fae5e14d4c1
5
5
  SHA512:
6
- metadata.gz: 877313b88d2739e7076ec44b18e7efe50026f099f0e2a55e95919aa2af8ea8d72edbb35ee4882154c650b79134bbb72cdf2780f26e8daa64d06a7505ecd91e26
7
- data.tar.gz: 54b6835727136c213a5339d303000bc6f2ee47e8ae24118a3577c2e70657a36613417397074bf7228ffd66a6b3949df0fd7b91649e06be4ba9bdb3b7664ec5b2
6
+ metadata.gz: faa8c6b8ada15280342a218da6485f762ed9535e3f4f9527d8378a66e852635254cbc7bae220827fa08162d1253992ccf0b25c9e8096345e37c502c7a4268bd8
7
+ data.tar.gz: 4ac1b3347391848f66ea6b1e3f0a648313c62ee1873d2d8d0e1d610732c860a2d656353f44ba8ce07b96ad0da08f13d3ded3f5dacee5e50a7d46a6abe6496b69
data/CHANGELOG.md ADDED
@@ -0,0 +1,36 @@
1
+ # Changelog
2
+
3
+ ## 1.1.0 (2021-10-29)
4
+
5
+ - Added Theoj::PublishedPaper object with metadata from Journal's API
6
+ - Added custom Error class
7
+
8
+ ## 1.0.0 (2021-10-20)
9
+
10
+ - Added method to Journal to create paper_id from issue_id
11
+ - Added method to Journal to get a DOI based on a paper id
12
+ - Added languages to Paper
13
+ - Added authors info to Paper
14
+ - Author object
15
+ - Added ORCID validation
16
+ - Added Submission object, grouping a paper, a review issue and a journal
17
+ - Added paper depositing
18
+
19
+ ## 0.0.3 (2021-10-08)
20
+
21
+ - Added metadata methods to Paper
22
+ - Added to ReviewIssue: editor, reviewers, archive, version
23
+ - New method to read any value from review's issue body
24
+ - Values read from issue boy will be empty if Pending or TBD
25
+ - Added journal config data for OpenJournals: JOSS and JOSE
26
+
27
+
28
+ ## 0.0.2 (2021-09-22)
29
+
30
+ - Available objects: Theoj::Journal, Theoj::ReviewIssue and Theoj::Paper
31
+
32
+
33
+ ## 0.0.1 (2021-09-22)
34
+
35
+ - Gem created
36
+
data/README.md CHANGED
@@ -2,3 +2,4 @@
2
2
  A library to manage editorial objects used by the open journals review process
3
3
 
4
4
  [![CI](https://github.com/xuanxu/theoj/actions/workflows/ci.yml/badge.svg)](https://github.com/xuanxu/theoj/actions/workflows/ci.yml)
5
+ [![Gem Version](https://badge.fury.io/rb/theoj.svg)](https://badge.fury.io/rb/theoj)
data/lib/theoj/author.rb CHANGED
@@ -1,16 +1,94 @@
1
+ require "nameable"
2
+
1
3
  module Theoj
2
4
  class Author
3
5
  attr_accessor :name
4
6
  attr_accessor :orcid
5
7
  attr_accessor :affiliation
6
8
 
7
- def initialize(name, orcid, affiliation)
8
- @name = name
9
- @orcid = orcid
10
- @affiliation = affiliation
9
+ AUTHOR_FOOTNOTE_REGEX = /^[^\^]*/
10
+
11
+ # Initialized with authors & affiliations block in the YAML header from an Open Journal paper
12
+ # e.g. https://joss.readthedocs.io/en/latest/submitting.html#example-paper-and-bibliography
13
+ def initialize(name, orcid, index, affiliations_hash)
14
+ parse_name name
15
+ @orcid = validate_orcid orcid
16
+ @affiliation = build_affiliation_string(index, affiliations_hash)
17
+ end
18
+
19
+ def given_name
20
+ @parsed_name.first
21
+ end
22
+
23
+ def middle_name
24
+ @parsed_name.middle
25
+ end
26
+
27
+ def last_name
28
+ @parsed_name.last
29
+ end
30
+
31
+ def initials
32
+ [@parsed_name.first, @parsed_name.middle].compact.map {|v| v[0] + "."} * ' '
33
+ end
34
+
35
+ def to_h
36
+ {
37
+ given_name: given_name,
38
+ middle_name: middle_name,
39
+ last_name: last_name,
40
+ orcid: orcid,
41
+ affiliation: affiliation
42
+ }
43
+ end
44
+
45
+ private
46
+
47
+ def parse_name(author_name)
48
+ @parsed_name = Nameable::Latin.new.parse(strip_footnotes(author_name))
49
+ @name = @parsed_name.to_nameable
50
+ end
51
+
52
+ # Input: Arfon Smith^[Corresponding author: arfon@example.com]
53
+ # Output: Arfon Smith
54
+ def strip_footnotes(author_name)
55
+ author_name.to_s[AUTHOR_FOOTNOTE_REGEX]
56
+ end
57
+
58
+ def validate_orcid(author_orcid)
59
+ return nil if author_orcid.to_s.strip.empty?
60
+
61
+ validator = Theoj::Orcid.new(author_orcid)
62
+ if validator.valid?
63
+ return author_orcid.strip
64
+ else
65
+ raise Theoj::Error, "Problem with ORCID (#{author_orcid}) for #{self.name}. #{validator.error}"
66
+ end
11
67
  end
12
68
 
13
- def validate_orcid
69
+ # Takes the author affiliation index and a hash of all affiliations and
70
+ # associates them. Then builds the author affiliation string
71
+ def build_affiliation_string(index, affiliations_hash)
72
+ return nil if index.nil? # Some authors don't have an affiliation
73
+
74
+ # If multiple affiliations, parse each one and build the affiliation string
75
+ author_affiliations = []
76
+
77
+ # Turn YAML keys into strings so that mixed integer and string affiliations work
78
+ affiliations_hash.transform_keys!(&:to_s)
79
+
80
+ affiliations = index.to_s.split(',').map(&:strip)
81
+
82
+ # Raise if we can't parse the string, might be because of this bug :-(
83
+ # https://bugs.ruby-lang.org/issues/12451
84
+ affiliations.each do |a|
85
+ raise Theoj::Error, "Problem with affiliations for #{self.name}, perhaps the " +
86
+ "affiliations index need quoting?" unless affiliations_hash.has_key?(a)
87
+
88
+ author_affiliations << affiliations_hash[a].strip
89
+ end
90
+
91
+ author_affiliations.join(', ')
14
92
  end
15
93
 
16
94
  end
data/lib/theoj/git.rb CHANGED
@@ -1,5 +1,5 @@
1
- require 'open3'
2
- require 'fileutils'
1
+ require "open3"
2
+ require "fileutils"
3
3
 
4
4
  module Theoj
5
5
  module Git
@@ -0,0 +1,64 @@
1
+ require_relative "journals_data"
2
+
3
+ module Theoj
4
+ class Journal
5
+ attr_accessor :data
6
+ attr_accessor :doi_prefix
7
+ attr_accessor :url
8
+ attr_accessor :name
9
+ attr_accessor :alias
10
+ attr_accessor :launch_date
11
+
12
+ def initialize(custom_data = {})
13
+ set_data custom_data
14
+ end
15
+
16
+ def current_year
17
+ data[:current_year] || Time.new.year
18
+ end
19
+
20
+ def current_volume
21
+ data[:current_volume] || (Time.new.year - (launch_year - 1))
22
+ end
23
+
24
+ def current_issue
25
+ data[:current_issue] || (1 + ((Time.new.year * 12 + Time.new.month) - (launch_year * 12 + launch_month)))
26
+ end
27
+
28
+ def paper_id_from_issue(review_issue_id)
29
+ id = "%05d" % review_issue_id
30
+ "#{@alias}.#{id}"
31
+ end
32
+
33
+ def paper_doi_for_id(paper_id)
34
+ "#@doi_prefix/#{paper_id}"
35
+ end
36
+
37
+ private
38
+
39
+ def set_data(custom_data)
40
+ @data = default_data.merge(custom_data)
41
+ @doi_prefix = data[:doi_prefix]
42
+ @url = data[:url]
43
+ @name = data[:name]
44
+ @alias = data[:alias]
45
+ @launch_date = data[:launch_date]
46
+ end
47
+
48
+ def default_data
49
+ Theoj::JOURNALS_DATA[:joss]
50
+ end
51
+
52
+ def parsed_launch_date
53
+ @parsed_launch_date ||= Time.parse(data[:launch_date])
54
+ end
55
+
56
+ def launch_year
57
+ parsed_launch_date.year
58
+ end
59
+
60
+ def launch_month
61
+ parsed_launch_date.month
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,25 @@
1
+ module Theoj
2
+ JOURNALS_DATA = {
3
+ joss: {
4
+ doi_prefix: "10.21105",
5
+ url: "https://joss.theoj.org",
6
+ name: "Journal of Open Source Software",
7
+ alias: "joss",
8
+ launch_date: "2016-05-05",
9
+ papers_repository: "openjournals/joss-papers",
10
+ reviews_repository: "openjournals/joss-reviews",
11
+ deposit_url: "https://joss.theoj.org/papers/api_deposit"
12
+ },
13
+ jose: {
14
+ doi_prefix: "10.21105",
15
+ url: "https://jose.theoj.org",
16
+ name: "Journal of Open Source Education",
17
+ alias: "jose",
18
+ launch_date: "2018-03-07",
19
+ papers_repository: "openjournals/jose-papers",
20
+ reviews_repository: "openjournals/jose-reviews",
21
+ deposit_url: "https://joss.theoj.org/papers/api_deposit"
22
+ }
23
+ }
24
+ end
25
+
@@ -0,0 +1,96 @@
1
+ module Theoj
2
+ class Orcid
3
+ attr_reader :orcid, :error
4
+
5
+ def initialize(orcid)
6
+ @orcid = orcid.strip
7
+ @error = nil
8
+ end
9
+
10
+ def valid?
11
+ @error = nil
12
+ return false unless check_structure
13
+ return false unless check_length
14
+ return false unless check_chars
15
+
16
+ return false unless correct_checksum?
17
+
18
+ true
19
+ end
20
+
21
+ def packed_orcid
22
+ orcid.gsub('-', '')
23
+ end
24
+
25
+ private
26
+
27
+ # Returns the last character of the string
28
+ def checksum_char
29
+ packed_orcid[-1]
30
+ end
31
+
32
+ def first_11
33
+ packed_orcid.chop
34
+ end
35
+
36
+ def check_structure
37
+ groups = orcid.split('-')
38
+ if groups.size == 4
39
+ return true
40
+ else
41
+ @error = "ORCID looks malformed"
42
+ return false
43
+ end
44
+ end
45
+
46
+ def check_length
47
+ if packed_orcid.length == 16
48
+ return true
49
+ else
50
+ @error = "ORCID looks to be the wrong length"
51
+ return false
52
+ end
53
+ end
54
+
55
+ def check_chars
56
+ valid = true
57
+ first_11.each_char do |c|
58
+ if !numeric?(c)
59
+ @error = "Invalid ORCID digit (#{c})"
60
+ valid = false
61
+ end
62
+ end
63
+
64
+ return valid
65
+ end
66
+
67
+ def correct_checksum?
68
+ validate_against = checksum_char.to_i
69
+ validate_against = 10 if (checksum_char == "X" || checksum_char == "x")
70
+
71
+ if checksum == validate_against
72
+ return true
73
+ else
74
+ @error = "Invalid ORCID"
75
+ return false
76
+ end
77
+ end
78
+
79
+ # https://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier
80
+ def checksum
81
+ total = 0
82
+ first_11.each_char do |c|
83
+ total = (total + c.to_i) * 2
84
+ end
85
+
86
+ remainder = total % 11
87
+ result = (12 - remainder) % 11
88
+ end
89
+
90
+
91
+ def numeric?(s)
92
+ Float(s) != nil rescue false
93
+ end
94
+
95
+ end
96
+ end
data/lib/theoj/paper.rb CHANGED
@@ -1,4 +1,7 @@
1
- require 'find'
1
+ require "find"
2
+ require "yaml"
3
+ require "rugged"
4
+ require "linguist"
2
5
 
3
6
  module Theoj
4
7
  class Paper
@@ -7,25 +10,57 @@ module Theoj
7
10
  attr_accessor :review_issue
8
11
  attr_accessor :repository
9
12
  attr_accessor :paper_path
13
+ attr_accessor :branch
14
+ attr_accessor :paper_metadata
10
15
 
11
- def initialize(repository, branch, path = nil)
12
- @repository = repository
16
+ def initialize(repository_url, branch, path = nil)
17
+ @repository = repository_url
13
18
  @branch = branch
14
19
  find_paper path
20
+ load_metadata
15
21
  end
16
22
 
17
- def find_paper(path)
18
- if path.to_s.strip.empty?
19
- setup_local_repo
20
- @paper_path = Theoj::Paper.find_paper_path(local_path)
21
- cleanup
23
+ def authors
24
+ @authors ||= parse_authors
25
+ end
26
+
27
+ def citation_author
28
+ surname = authors.first.last_name
29
+ initials = authors.first.initials
30
+
31
+ if authors.size > 1
32
+ return "#{surname} et al."
22
33
  else
23
- @paper_path = path
34
+ return "#{surname}, #{initials}"
24
35
  end
25
36
  end
26
37
 
27
- def authors
28
- []
38
+ def title
39
+ @paper_metadata["title"]
40
+ end
41
+
42
+ def tags
43
+ @paper_metadata["tags"]
44
+ end
45
+
46
+ def date
47
+ @paper_metadata["date"]
48
+ end
49
+
50
+ def languages
51
+ @languages ||= detect_languages
52
+ end
53
+
54
+ def bibliography_path
55
+ @paper_metadata["bibliography"]
56
+ end
57
+
58
+ def local_path
59
+ @local_path ||= "tmp/#{SecureRandom.hex}"
60
+ end
61
+
62
+ def cleanup
63
+ FileUtils.rm_rf(local_path) if Dir.exist?(local_path)
29
64
  end
30
65
 
31
66
  def self.find_paper_path(search_path)
@@ -43,33 +78,81 @@ module Theoj
43
78
  paper_path
44
79
  end
45
80
 
46
- def self.from_repo(repository, branch = "main")
47
- Paper.new(repository, branch, nil)
81
+ def self.from_repo(repository_url, branch = "")
82
+ Paper.new(repository_url, branch, nil)
48
83
  end
49
84
 
50
85
  private
86
+
87
+ def find_paper(path)
88
+ if path.to_s.strip.empty?
89
+ setup_local_repo
90
+ @paper_path = Theoj::Paper.find_paper_path(local_path)
91
+ else
92
+ @paper_path = path
93
+ end
94
+ end
95
+
51
96
  def setup_local_repo
52
97
  msg_no_repo = "Downloading of the repository failed. Please make sure the URL is correct."
53
- msg_no_branch = "Couldn't check the bibtex because branch name is incorrect: #{paper_branch.to_s}"
98
+ msg_no_branch = "Couldn't check the bibtex because branch name is incorrect: #{branch.to_s}"
54
99
 
55
- error = clone_repo(target_repository, local_path) ? nil : msg_no_repo
56
- (error = change_branch(paper_branch, local_path) ? nil : msg_no_branch) unless error
100
+ error = clone_repo(repository, local_path) ? nil : msg_no_repo
101
+ (error = change_branch(branch, local_path) ? nil : msg_no_branch) unless error
57
102
 
58
103
  failure(error) if error
59
104
  error.nil?
60
105
  end
61
106
 
62
- def local_path
63
- @local_path ||= "tmp/#{SecureRandom.hex}"
107
+ def load_metadata
108
+ @paper_metadata ||= if paper_path.include?('.tex')
109
+ YAML.load_file(paper_path.gsub('.tex', '.yml'))
110
+ else
111
+ YAML.load_file(paper_path)
112
+ end
64
113
  end
65
114
 
66
- def cleanup
67
- FileUtils.rm_rf(local_path) if Dir.exist?(local_path)
115
+ def parse_authors
116
+ parsed_authors = []
117
+ authors_metadata = @paper_metadata['authors']
118
+ affiliations_metadata = parse_affiliations(@paper_metadata['affiliations'])
119
+
120
+ # Loop through the authors block and build up the affiliation
121
+ authors_metadata.each do |author|
122
+ affiliation_index = author['affiliation']
123
+ failure "Author (#{author['name']}) is missing affiliation" if affiliation_index.nil?
124
+ begin
125
+ parsed_author = Author.new(author['name'], author['orcid'], affiliation_index, affiliations_metadata)
126
+ rescue Exception => e
127
+ failure(e.message)
128
+ end
129
+ parsed_authors << parsed_author
130
+ end
131
+
132
+ parsed_authors
133
+ end
134
+
135
+ def parse_affiliations(affliations_yaml)
136
+ affliations_metadata = {}
137
+
138
+ affliations_yaml.each do |affiliation|
139
+ affliations_metadata[affiliation['index']] = affiliation['name']
140
+ end
141
+
142
+ affliations_metadata
143
+ end
144
+
145
+ def detect_languages
146
+ repo = Rugged::Repository.discover(paper_path)
147
+ project = Linguist::Repository.new(repo, repo.head.target_id)
148
+
149
+ # Take top five languages from Linguist
150
+ project.languages.keys.take(5)
68
151
  end
69
152
 
70
153
  def failure(msg)
71
154
  cleanup
72
- raise(msg)
155
+ raise Theoj::Error, msg
73
156
  end
74
157
  end
75
158
  end
@@ -0,0 +1,46 @@
1
+ require "faraday"
2
+ require "yaml"
3
+ require "json"
4
+
5
+ module Theoj
6
+ class PublishedPaper
7
+ include Theoj::Git
8
+
9
+ attr_accessor :metadata
10
+
11
+ def initialize(doi)
12
+ doi_url = "https://doi.org/#{doi}"
13
+ doi_response = Faraday.get(doi_url)
14
+ if doi_response.status == 302
15
+ paper_url = doi_response.headers[:location]
16
+ else
17
+ raise Theoj::Error, "The DOI is invalid, url does not resolve #{doi_url}"
18
+ end
19
+
20
+ paper_data = Faraday.get(paper_url + ".json")
21
+ if paper_data.status == 200
22
+ @metadata = JSON.parse(paper_data.body, symbolize_names: true)
23
+ else
24
+ raise Theoj::Error, "Could not find the paper data at #{paper_url + ".json"}"
25
+ end
26
+ end
27
+
28
+ [:title, :state, :submitted_at, :doi, :published_at,
29
+ :volume, :issue, :year, :page, :authors, :editor,
30
+ :editor_name, :editor_url, :editor_orcid, :reviewers,
31
+ :languages, :tags, :software_repository, :paper_review,
32
+ :pdf_url, :software_archive].each do |method_name|
33
+ define_method(method_name) { metadata[method_name] }
34
+ define_method("#{method_name}=") {|value| @metadata[method_name] = value }
35
+ end
36
+
37
+ def yaml_metadata
38
+ metadata.to_yaml
39
+ end
40
+
41
+ def json_metadata
42
+ metadata.to_json
43
+ end
44
+
45
+ end
46
+ end
@@ -16,20 +16,41 @@ module Theoj
16
16
  end
17
17
 
18
18
  def issue_body
19
- issue(repository, issue_id).body
19
+ @issue_body ||= issue(repository, issue_id).body
20
20
  end
21
21
 
22
22
  def paper
23
+ @paper ||= Theoj::Paper.new(target_repository, paper_branch)
23
24
  end
24
25
 
25
26
  def target_repository
26
27
  @target_repository ||= read_value_from_body("target-repository")
27
28
  end
28
29
 
30
+ def reviewers
31
+ @reviewers ||= read_value_from_body("reviewers").split(",").map{|r| r.strip} - ["Pending", "TBD"]
32
+ end
33
+
34
+ def editor
35
+ @editor ||= read_value_from_body("editor")
36
+ end
37
+
38
+ def archive
39
+ @archive ||= read_value_from_body("archive")
40
+ end
41
+
42
+ def version
43
+ @version ||= read_value_from_body("version")
44
+ end
45
+
29
46
  def paper_branch
30
47
  @paper_branch ||= read_value_from_body("branch")
31
48
  end
32
49
 
50
+ def value_for(value_name)
51
+ read_value_from_body(value_name)
52
+ end
53
+
33
54
  private
34
55
 
35
56
  def read_from_body(start_mark, end_mark)
@@ -37,6 +58,8 @@ module Theoj
37
58
  issue_body.match(/#{start_mark}(.*)#{end_mark}/im) do |m|
38
59
  text = m[1]
39
60
  end
61
+
62
+ text = "" if ["Pending", "TBD"].include?(text.strip)
40
63
  text.strip
41
64
  end
42
65
 
@@ -0,0 +1,70 @@
1
+ require "json"
2
+ require "base64"
3
+ require "faraday"
4
+
5
+ module Theoj
6
+ class Submission
7
+ attr_accessor :journal
8
+ attr_accessor :review_issue
9
+ attr_accessor :paper
10
+
11
+ def initialize(journal, review_issue, paper=nil)
12
+ @journal = journal
13
+ @review_issue = review_issue
14
+ @paper = paper || @review_issue.paper
15
+ end
16
+
17
+ # Create the payload to use to post for depositing with Open Journals
18
+ def deposit_payload
19
+ {
20
+ id: review_issue.issue_id,
21
+ metadata: Base64.encode64(metadata_payload),
22
+ doi: paper_doi,
23
+ archive_doi: review_issue.archive,
24
+ citation_string: citation_string,
25
+ title: paper.title
26
+ }
27
+ end
28
+
29
+ # Create a metadata json payload
30
+ def metadata_payload
31
+ metadata = {
32
+ paper: {
33
+ title: paper.title,
34
+ tags: paper.tags,
35
+ languages: paper.languages,
36
+ authors: paper.authors.collect { |a| a.to_h },
37
+ doi: paper_doi,
38
+ archive_doi: review_issue.archive,
39
+ repository_address: review_issue.target_repository,
40
+ editor: review_issue.editor,
41
+ reviewers: review_issue.reviewers.collect(&:strip),
42
+ volume: journal.current_volume,
43
+ issue: journal.current_issue,
44
+ year: journal.current_year,
45
+ page: review_issue.issue_id,
46
+ }
47
+ }
48
+
49
+ metadata.to_json
50
+ end
51
+
52
+ def deposit!(secret)
53
+ parameters = deposit_payload.merge(secret: secret)
54
+ Faraday.post(journal.data[:deposit_url], parameters.to_json, {"Content-Type" => "application/json"})
55
+ end
56
+
57
+ def citation_string
58
+ paper_year = Time.now.strftime('%Y')
59
+ "#{paper.citation_author}, (#{paper_year}). #{paper.title}. #{journal.name}, #{journal.current_volume}(#{journal.current_issue}), #{review_issue.issue_id}, https://doi.org/#{paper_doi}"
60
+ end
61
+
62
+ def paper_id
63
+ journal.paper_id_from_issue(review_issue.issue_id)
64
+ end
65
+
66
+ def paper_doi
67
+ journal.paper_doi_for_id(paper_id)
68
+ end
69
+ end
70
+ end
data/lib/theoj/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Theoj
2
- VERSION = "0.0.1"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/theoj.rb CHANGED
@@ -1,9 +1,14 @@
1
1
  require_relative "theoj/version"
2
2
  require_relative "theoj/git"
3
3
  require_relative "theoj/github"
4
+ require_relative "theoj/orcid"
5
+ require_relative "theoj/published_paper"
6
+ require_relative "theoj/submission"
7
+ require_relative "theoj/journal"
4
8
  require_relative "theoj/review_issue"
5
9
  require_relative "theoj/paper"
6
10
  require_relative "theoj/author"
7
11
 
8
12
  module Theoj
13
+ class Error < StandardError; end
9
14
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: theoj
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Juanjo Bazán
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-22 00:00:00.000000000 Z
11
+ date: 2021-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octokit
@@ -24,6 +24,62 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.21'
27
+ - !ruby/object:Gem::Dependency
28
+ name: faraday
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: openjournals-nameable
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: github-linguist
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rugged
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
27
83
  - !ruby/object:Gem::Dependency
28
84
  name: rake
29
85
  requirement: !ruby/object:Gem::Requirement
@@ -59,21 +115,27 @@ executables: []
59
115
  extensions: []
60
116
  extra_rdoc_files: []
61
117
  files:
118
+ - CHANGELOG.md
62
119
  - LICENSE
63
120
  - README.md
64
121
  - lib/theoj.rb
65
122
  - lib/theoj/author.rb
66
123
  - lib/theoj/git.rb
67
124
  - lib/theoj/github.rb
125
+ - lib/theoj/journal.rb
126
+ - lib/theoj/journals_data.rb
127
+ - lib/theoj/orcid.rb
68
128
  - lib/theoj/paper.rb
129
+ - lib/theoj/published_paper.rb
69
130
  - lib/theoj/review_issue.rb
131
+ - lib/theoj/submission.rb
70
132
  - lib/theoj/version.rb
71
133
  homepage: http://github.com/xuanxu/theoj
72
134
  licenses:
73
135
  - MIT
74
136
  metadata:
75
137
  bug_tracker_uri: https://github.com/xuanxu/theoj/issues
76
- changelog_uri: https://github.com/xuanxu/theoj/blob/master/CHANGELOG.md
138
+ changelog_uri: https://github.com/xuanxu/theoj/blob/main/CHANGELOG.md
77
139
  documentation_uri: https://www.rubydoc.info/gems/theoj
78
140
  homepage_uri: http://github.com/xuanxu/theoj
79
141
  source_code_uri: http://github.com/xuanxu/theoj