citero 1.0.0.alpha3 → 1.0.0.alpha5

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
  SHA1:
3
- metadata.gz: 9e54a3640492296be572723e10beace6fb58c5a5
4
- data.tar.gz: c75278bd837dc993e10fd3e520484b05a57e956e
3
+ metadata.gz: 2ad3b53896c3eb9cd5781a598794877bf63cc7a1
4
+ data.tar.gz: 2c8952c07311e3a8665fd273acb049129a0d9f17
5
5
  SHA512:
6
- metadata.gz: 256b138ced12783a53893969c08b8993d1cb7d39f1d2ba277f9e64e2747f5dd87b66e6cf673183cd115bf2ac21b67f3a354e84f7e48d5b48436497ebf0b3bbde
7
- data.tar.gz: 29faa241c33c6afbe2a0b2d49d990214592b5ce2f29a01ca2a0e1b53a49b9c9997b999380b1e945634c3182046a8a54ebefed0a7eaa22a6e5465d79f21be5b34
6
+ metadata.gz: e4eed240b48f8210f9d1cb177058d98d0104cc7396bf0bec0f30f71fe8e90a32e0eafd5df7e3986c1a357349da2bee56b8b6dacf92cea2e4fbf547750b44bf9c
7
+ data.tar.gz: 90819b5af6ae0dac5f001965da5a541b1d3491b05d2d9a88fa183186d97aa2a1c74230c766ae376c4439ce0ecdadbe4c7ea7417d1ec9edfa406964cb2507490d
@@ -6,7 +6,7 @@ module Citero
6
6
  require_relative 'citero/utils'
7
7
 
8
8
  def self.from_formats
9
- [:csf, :openurl, :pnx]
9
+ [:csf, :openurl, :pnx, :pnx_json]
10
10
  end
11
11
 
12
12
  def self.to_formats
@@ -38,6 +38,8 @@ module Citero
38
38
  from = Citero::Inputs::OpenUrl.new(@input)
39
39
  when :pnx
40
40
  from = Citero::Inputs::Pnx.new(@input)
41
+ when :pnx_json
42
+ from = Citero::Inputs::PnxJson.new(@input)
41
43
  else
42
44
  raise ArgumentError
43
45
  end
@@ -57,6 +59,8 @@ module Citero
57
59
  from = Citero::Inputs::OpenUrl.new(@input)
58
60
  when :pnx
59
61
  from = Citero::Inputs::Pnx.new(@input)
62
+ when :pnx_json
63
+ from = Citero::Inputs::PnxJson.new(@input)
60
64
  else
61
65
  raise ArgumentError
62
66
  end
@@ -3,5 +3,6 @@ module Citero
3
3
  require_relative 'inputs/readers'
4
4
  require_relative 'inputs/pnx'
5
5
  require_relative 'inputs/openurl'
6
+ require_relative 'inputs/pnx_json'
6
7
  end
7
8
  end
@@ -0,0 +1,153 @@
1
+ module Citero
2
+ module Inputs
3
+ class PnxJson
4
+
5
+ attr_reader :csf
6
+
7
+ def initialize(raw_data)
8
+ @json = raw_data
9
+ construct_csf
10
+ @csf
11
+ end
12
+
13
+ private
14
+
15
+ def to_csf
16
+ return @csf unless @csf.nil?
17
+ @csf = CSF.new
18
+ @hash = {}
19
+ add_item_type
20
+ parse_and_add_creators
21
+ parse_and_add_publisher
22
+ add_pages
23
+ add_isbn
24
+ add_issn
25
+ add_eissn
26
+ add_all_other_fields
27
+ add_imported_from
28
+ @csf.load_from_hash(@hash)
29
+ end
30
+
31
+ private
32
+
33
+ def item_type_conversion_hash
34
+ @item_type_conversion_hash ||= {
35
+ "audio" => "audioRecording",
36
+ "video" => "videoRecording",
37
+ "article" => "journalArticle",
38
+ "books" => "book",
39
+ }
40
+ end
41
+
42
+ def item_type_conversion_array
43
+ @item_type_conversion_array ||= [
44
+ "book",
45
+ "report",
46
+ "webpage",
47
+ "journal",
48
+ "map",
49
+ "thesis"
50
+ ]
51
+ end
52
+
53
+ def qualified_method_names
54
+ @qualified_method_names ||= {
55
+ "title" => "title",
56
+ "publicationDate" => "publicationDate",
57
+ "journalTitle" => "journalTitle",
58
+ "date" => "date",
59
+ "language" => "languageId",
60
+ "edition" => "edition",
61
+ "tags" => "tags",
62
+ "callNumber" => "callNumber",
63
+ "pnxRecordId" => "pnxRecordId",
64
+ "description" => "description",
65
+ "notes" => "notes"
66
+ }
67
+ end
68
+
69
+ def get_item_type(raw_item_type)
70
+ raw_item_type.downcase!
71
+ return raw_item_type if item_type_conversion_array.include?(raw_item_type)
72
+ return item_type_conversion_hash[raw_item_type] if item_type_conversion_hash.include?(raw_item_type)
73
+ return 'document'
74
+ end
75
+
76
+ def add_item_type
77
+ type = @json["type"] || @json["@TYPE"] || 'document'
78
+ @hash["itemType"] = get_item_type(type)
79
+ end
80
+
81
+
82
+ def parse_and_add_creators
83
+ contributors = []
84
+ creator = [@json["creator"]].compact
85
+
86
+ creators = @json["creator"]
87
+ creators = @json["contributor"] if creator.empty?
88
+ contributors = @json["contributor"] unless creator.empty?
89
+
90
+ creators = @json["addau"] if (creator.empty? && [@json["contributor"]].compact.empty?)
91
+
92
+ add_creators(creators, "author")
93
+ add_creators(contributors, "contributor")
94
+ end
95
+
96
+ def add_creators(creators,creator_type)
97
+ if (creators && !creators.empty?)
98
+ creators.each do |name|
99
+ @hash[creator_type] = [@hash[creator_type], name.strip].flatten.compact
100
+ end
101
+ end
102
+ end
103
+
104
+ def parse_and_add_publisher
105
+ return if [@json["publisher"]].compact.empty?
106
+ @json["publisher"].each do |json_pub|
107
+ if json_pub.include? " : "
108
+ pub_place, publisher = json_pub.split(" : ",2).map(&:strip)
109
+ add_publisher_and_place(publisher, pub_place)
110
+ else
111
+ add_publisher_and_place(json_pub)
112
+ end
113
+ end
114
+ end
115
+
116
+ def add_publisher_and_place(publisher = nil, place = nil)
117
+ @hash['publisher'] = publisher if publisher
118
+ @hash['place'] = place if place
119
+ end
120
+
121
+ def add_pages
122
+ return unless @json["pages"]
123
+ raw_pages = @json["pages"].gsub(/[\(\)\[\]]/, "").gsub(/\D/, " ").strip()
124
+ @hash['numPages'] = raw_pages.split(" ").first unless raw_pages.empty?
125
+ end
126
+
127
+ def add_isbn
128
+ isbn = [@json['isbn'], @json['isbn10'], @json['isbn13']].flatten.compact.uniq
129
+ @hash['isbn'] = [@hash['isbn'], isbn].flatten.compact unless isbn.empty?
130
+ end
131
+
132
+ def add_eissn
133
+ eissn = @json['eissn'] || []
134
+ @hash['eissn'] = [@hash['eissn'], eissn].flatten.compact unless eissn.empty?
135
+ end
136
+
137
+ def add_issn
138
+ issn = @json['issn'] || []
139
+ @hash['issn'] = [@hash['issn'], issn].flatten.compact unless issn.empty?
140
+ end
141
+
142
+ def add_all_other_fields
143
+ qualified_method_names.each do |standard_form, method_name|
144
+ @hash[standard_form] = @json[method_name] unless [@json[method_name]].compact.empty?
145
+ end
146
+ end
147
+
148
+ def add_imported_from
149
+ @hash['importedFrom'] = "PNX_JSON"
150
+ end
151
+ end
152
+ end
153
+ end
@@ -51,7 +51,7 @@ module Citero
51
51
  end
52
52
 
53
53
  def output_isbn
54
- openurl_param('rft_id=info:isbn:', @csf['isbn'], false) + openurl_param('isbn', @csf['isbn'])
54
+ openurl_param('rft_id=urn:isbn:', @csf['isbn'], false) + openurl_param('isbn', @csf['isbn'])
55
55
  end
56
56
 
57
57
  def output_type
@@ -65,11 +65,28 @@ module Citero
65
65
  end
66
66
 
67
67
  def output_date
68
- openurl_param('date', @csf['date'])
68
+ output = ""
69
+ output = openurl_param('date', @csf['issueDate']) if @csf['itemType'].eql?("patent")
70
+ output += openurl_param('date', @csf['date'])
71
+ end
72
+
73
+ def output_series
74
+ openurl_param('series', @csf['series'])
75
+ end
76
+
77
+ def output_journalAbbreviation
78
+ openurl_param('stitle', @csf['journalAbbreviation'])
79
+ end
80
+
81
+ def output_degree
82
+ openurl_param('degree', @csf['type'])
69
83
  end
70
84
 
71
85
  def output_title
72
- openurl_param('title', @csf['title'])
86
+ openurl_key = 'title'
87
+ openurl_key = 'atitle' if ["journalArticle", "bookSection", "conferencePaper"].include?(@csf['itemType'])
88
+ openurl_key = 'btitle' if @csf['itemType'].eql?('book')
89
+ openurl_param(openurl_key, @csf['title'])
73
90
  end
74
91
 
75
92
  def output_author
@@ -77,7 +94,10 @@ module Citero
77
94
  end
78
95
 
79
96
  def output_bookTitle
80
- openurl_param('btitle', @csf['bookTitle'])
97
+ output = ""
98
+ output = openurl_param('btitle', @csf['proceedingsTitle']) if @csf['itemType'].eql?('bookSection')
99
+ output = openurl_param('btitle', @csf['publicationsTitle']) if @csf['itemType'].eql?('conferencePaper')
100
+ output += openurl_param('btitle', @csf['bookTitle'])
81
101
  end
82
102
 
83
103
  def output_publicationTitle
@@ -97,7 +117,11 @@ module Citero
97
117
  end
98
118
 
99
119
  def output_volume
100
- openurl_param('volume', @csf['volume'])
120
+ output = ""
121
+ if @csf['itemType'].eql? "journalArticle"
122
+ output = openurl_param('volume', @csf['volume']) + openurl_param('volume', @csf['title'])
123
+ end
124
+ output += openurl_param('volume', @csf['volume'])
101
125
  end
102
126
 
103
127
  def output_reportNumber
@@ -113,7 +137,9 @@ module Citero
113
137
  end
114
138
 
115
139
  def output_publisher
116
- openurl_param('publisher', @csf['publisher'])
140
+ output = ""
141
+ output = openurl_param('inst', @csf['publisher']) if @csf['itemType'].eql? "thesis"
142
+ output += openurl_param('publisher', @csf['publisher'])
117
143
  end
118
144
 
119
145
  def output_place
@@ -192,7 +218,10 @@ module Citero
192
218
  :output_numPages,
193
219
  :output_isbn,
194
220
  :output_issn,
195
- :output_tags
221
+ :output_tags,
222
+ :output_series,
223
+ :output_journalAbbreviation,
224
+ :output_degree
196
225
  ]
197
226
  end
198
227
  end
@@ -1,3 +1,3 @@
1
1
  module Citero
2
- VERSION = "1.0.0.alpha3"
2
+ VERSION = "1.0.0.alpha5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: citero
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.alpha3
4
+ version: 1.0.0.alpha5
5
5
  platform: ruby
6
6
  authors:
7
7
  - hab278
@@ -122,6 +122,7 @@ files:
122
122
  - lib/citero/inputs.rb
123
123
  - lib/citero/inputs/openurl.rb
124
124
  - lib/citero/inputs/pnx.rb
125
+ - lib/citero/inputs/pnx_json.rb
125
126
  - lib/citero/inputs/readers.rb
126
127
  - lib/citero/inputs/readers/pnx_reader.rb
127
128
  - lib/citero/outputs.rb