research_metadata 0.1.0 → 1.0.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: 44b8ec73389b2fb8f75aa96fca6213b0fbe7fb1e
4
- data.tar.gz: 5dcdf92b3c6437da322181ae345b418e37e0312c
3
+ metadata.gz: 2e692013c5a56d618d186d506beaa3e0583bd810
4
+ data.tar.gz: 2be1115ce7b66209dcb00d1fd668293c4a8f7fa1
5
5
  SHA512:
6
- metadata.gz: 95c845a1a08d31f1d63085382598be3011230a400bfd76ce31c5604c0e03bc1678b425974a996e0b014e319d4ec10f42c7895738b406c8ab0e9158b42832a58f
7
- data.tar.gz: def6a7e3e6078b1974ed06f8156908316acfdb6a58bdc9164bf49c42bcc8c5598c46bfe335a28652a611f60d23b5e3e12210c4704de126cb8675eab248c7d24b
6
+ metadata.gz: c31990db2506a78d36f992c522df5df8740d3cda29e54e550ae6e6cb0702167c5d97d623f4fc49bc7e2850bf8778ca209a078d39c6f27d0f70a1d6ccc1233f9d
7
+ data.tar.gz: f48ca4b7eb11ed554a6e14f4b7e7365c7205ff5e4016bc157d7c4f140896532a753637a6a9b3813a1157b0cef6c8650aae26d88b483c037dbc44d213718741aa
data/CHANGELOG.md CHANGED
@@ -4,6 +4,13 @@ This project adheres to [Semantic Versioning](http://semver.org/).
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## 1.0.0 2017-03-15
8
+ ### Added
9
+ - Publications e.g. Doctoral/Master's Thesis.
10
+
11
+ ### Changed
12
+ - Configuration style to match Puree v1.0.0.
13
+
7
14
  ## 0.1.0 - 2017-02-03
8
15
  ### Added
9
16
  - Working product supports datasets.
data/README.md CHANGED
@@ -1,6 +1,13 @@
1
- # ResearchMetadata [![Gem Version](https://badge.fury.io/rb/research_metadata.svg)](https://badge.fury.io/rb/research_metadata)
1
+ # ResearchMetadata
2
2
 
3
- Extraction and Transformation for Loading by DataCite's API.
3
+ Metadata extraction from the Pure Research Information System and transformation of the metadata into the DataCite format.
4
+
5
+ ## Status
6
+
7
+ [![Gem Version](https://badge.fury.io/rb/research_metadata.svg)](https://badge.fury.io/rb/research_metadata)
8
+ [![Build Status](https://semaphoreci.com/api/v1/aalbinclark/research_metadata/branches/master/badge.svg)](https://semaphoreci.com/aalbinclark/research_metadata)
9
+ [![Code Climate](https://codeclimate.com/github/lulibrary/research_metadata/badges/gpa.svg)](https://codeclimate.com/github/lulibrary/research_metadata)
10
+ [![Dependency Status](https://www.versioneye.com/user/projects/5899d1be1e07ae0048c8e4c6/badge.svg?style=flat-square)](https://www.versioneye.com/user/projects/5899d1be1e07ae0048c8e4c6)
4
11
 
5
12
  ## Installation
6
13
 
@@ -19,33 +26,38 @@ Or install it yourself as:
19
26
  ## Usage
20
27
 
21
28
  ### Configuration
22
- Configure Purée.
29
+
30
+ Create a hash for passing to a transformer.
31
+
32
+ ```ruby
33
+ # Pure host with authentication.
34
+ config = {
35
+ url: ENV['PURE_URL'],
36
+ username: ENV['PURE_USERNAME'],
37
+ password: ENV['PURE_PASSWORD']
38
+ }
39
+ ```
23
40
 
24
41
  ```ruby
25
- Puree.base_url = ENV['PURE_BASE_URL']
26
- Puree.username = ENV['PURE_USERNAME']
27
- Puree.password = ENV['PURE_PASSWORD']
28
- Puree.basic_auth = true
42
+ # Pure host without authentication.
43
+ config = {
44
+ url: ENV['PURE_URL']
45
+ }
29
46
  ```
30
47
 
31
48
  ### Transformation
32
49
 
33
- Create a metadata transformer for a Pure dataset...
50
+ Create a metadata transformer for a Pure dataset.
34
51
 
35
52
  ```ruby
36
- transformer = ResearchMetadata::Transformer::Dataset.new
53
+ transformer = ResearchMetadata::Transformer::Dataset.new config
37
54
  ```
38
55
 
39
- ...and give it a Pure identifier and a DOI...
56
+ Give it a Pure identifier and a DOI...
40
57
 
41
58
  ```ruby
42
59
  metadata = transformer.transform uuid: 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx',
43
60
  doi: '10.1234/foo/bar/1'
44
61
  ```
45
62
 
46
- ...to get DataCite-ready metadata.
47
-
48
- ## Documentation
49
- [API in YARD](http://www.rubydoc.info/gems/research_metadata)
50
-
51
- [Detailed usage in GitBook](https://aalbinclark.gitbooks.io/research_metadata)
63
+ ...and get DataCite-ready metadata.
@@ -1,24 +1,30 @@
1
- # Extraction (from Pure) and Transformation for Loading by DataCite's API
2
- #
3
1
  module ResearchMetadata
4
2
 
5
- # Transformer
6
- #
7
3
  module Transformer
8
4
 
9
- # Dataset
5
+ # Extracts dataset metadata from the Pure Research Information System and
6
+ # converts it into the DataCite format.
10
7
  #
11
8
  class Dataset
12
9
 
10
+ # @param config [Hash]
11
+ # @option config [String] :url The URL of the Pure host.
12
+ # @option config [String] :username The username of the Pure host account.
13
+ # @option config [String] :password The password of the Pure host account.
14
+ def initialize(config)
15
+ @config = config
16
+ @dataset_extractor = Puree::Extractor::Dataset.new config
17
+ end
18
+
13
19
  # Dataset transformation
14
20
  #
15
21
  # @param id [String]
16
22
  # @param uuid [String]
17
23
  # @param doi [String]
18
- # @return [String]
24
+ # @return [String, nil]
19
25
  def transform(id: nil, uuid: nil, doi: nil)
20
26
  @dataset = extract uuid: uuid, id: id
21
- raise 'No metadata to transform' if @dataset.metadata.empty?
27
+ return nil if !@dataset
22
28
  person_o = person
23
29
  file_o = file
24
30
  resource = ::Datacite::Mapping::Resource.new(
@@ -33,9 +39,9 @@ module ResearchMetadata
33
39
  language: language,
34
40
  resource_type: resource_type,
35
41
  related_identifiers: related_identifiers,
36
- sizes: file_o.map { |i| i['size'] },
37
- formats: file_o.map { |i| i['mime'] },
38
- rights_list: file_o.map { |i| i['license']['name'] },
42
+ sizes: sizes(file_o),
43
+ formats: formats(file_o),
44
+ rights_list: rights_list(file_o),
39
45
  descriptions: description,
40
46
  geo_locations: spatial
41
47
  )
@@ -44,37 +50,63 @@ module ResearchMetadata
44
50
 
45
51
  private
46
52
 
53
+ def sizes(files)
54
+ files.map { |i| "#{i.size} B" }
55
+ end
56
+
57
+ def formats(files)
58
+ files.map { |i| i.mime }
59
+ end
60
+
61
+ def rights_list(files)
62
+ arr = []
63
+ files.each do |i|
64
+ if i.license
65
+ rights = Datacite::Mapping::Rights.new value: i.license.name
66
+ arr << rights
67
+ else
68
+ arr << 'Not specified'
69
+ end
70
+ end
71
+ arr
72
+ end
73
+
47
74
  def affiliations(person)
48
- person.affiliation.map { |i| i['name'] }
75
+ person.affiliations.map { |i| i.name }
49
76
  end
50
77
 
51
78
  def dates
52
79
  a = []
53
- available = ::Datacite::Mapping::Date.new value: Puree::Date.iso(@dataset.available),
54
- type: ::Datacite::Mapping::DateType::AVAILABLE
55
- a << available
80
+
81
+ available = @dataset.available
82
+ if available
83
+ date_made_available = ::Datacite::Mapping::Date.new value: available.strftime("%F"),
84
+ type: ::Datacite::Mapping::DateType::AVAILABLE
85
+ a << date_made_available
86
+ end
56
87
 
57
88
  temporal = @dataset.temporal
58
89
  temporal_range = ''
59
- if !temporal['start']['year'].empty?
60
- temporal_range << Puree::Date.iso(temporal['start'])
61
- if !temporal['end']['year'].empty?
62
- temporal_range << '/'
63
- temporal_range << Puree::Date.iso(temporal['end'])
64
- end
65
- if !temporal_range.empty?
66
- collected = ::Datacite::Mapping::Date.new value: temporal_range,
67
- type: ::Datacite::Mapping::DateType::COLLECTED
68
- a << collected
90
+ if temporal
91
+ if temporal.start
92
+ temporal_range << temporal.start.strftime("%F")
93
+ if temporal.end
94
+ temporal_range << '/'
95
+ temporal_range << temporal.end.strftime("%F")
96
+ end
97
+ if !temporal_range.empty?
98
+ collected = ::Datacite::Mapping::Date.new value: temporal_range,
99
+ type: ::Datacite::Mapping::DateType::COLLECTED
100
+ a << collected
101
+ end
69
102
  end
70
103
  end
71
-
72
104
  a
73
105
  end
74
106
 
75
107
  def description
76
108
  desc = @dataset.description
77
- if !desc.empty?
109
+ if desc
78
110
  d = ::Datacite::Mapping::Description.new value: desc,
79
111
  type: ::Datacite::Mapping::DescriptionType::ABSTRACT
80
112
  [d]
@@ -84,17 +116,15 @@ module ResearchMetadata
84
116
  end
85
117
 
86
118
  def extract(uuid: nil, id: nil)
87
- d = Puree::Dataset.new
88
119
  if !uuid.nil?
89
- d.find uuid: uuid
120
+ return @dataset_extractor.find uuid: uuid
90
121
  else
91
- d.find id: id
122
+ return @dataset_extractor.find id: id
92
123
  end
93
- d
94
124
  end
95
125
 
96
126
  def file
97
- @dataset.file
127
+ @dataset.files
98
128
  end
99
129
 
100
130
  def identifier(doi)
@@ -107,10 +137,10 @@ module ResearchMetadata
107
137
 
108
138
  def name_identifier_orcid(person)
109
139
  name_identifier = nil
110
- if !person.orcid.empty?
111
- name_identifier = ::Datacite::Mapping::NameIdentifier.new scheme: 'ORCID',
112
- scheme_uri: URI('http://orcid.org/'),
113
- value: person.orcid
140
+ if person.orcid
141
+ name_identifier = ::Datacite::Mapping::NameIdentifier.new scheme: 'ORCID',
142
+ scheme_uri: URI('http://orcid.org/'),
143
+ value: person.orcid
114
144
  end
115
145
  name_identifier
116
146
  end
@@ -119,46 +149,49 @@ module ResearchMetadata
119
149
  o = {}
120
150
  o['creator'] = []
121
151
  o['contributor'] = []
122
- person_types = %w(internal external other)
123
- person_types.each do |person_type|
124
- @dataset.person[person_type].each do |dataset_person|
125
- pure_role = dataset_person['role'].gsub(/\s+/, '')
126
- name = "#{dataset_person['name']['last']}, #{dataset_person['name']['first']}"
127
- if pure_role == 'Creator'
128
- human = ::Datacite::Mapping::Creator.new name: name
129
- else
130
- pure_role = 'Other' if pure_role === 'Contributor'
131
- contributor_type = ::Datacite::Mapping::ContributorType.find_by_value pure_role
132
- if contributor_type
133
- human = ::Datacite::Mapping::Contributor.new name: name,
134
- type: contributor_type
135
- end
152
+ all_persons = []
153
+ all_persons << @dataset.persons_internal
154
+ all_persons << @dataset.persons_external
155
+ all_persons << @dataset.persons_other
156
+ all_persons.each do |person_type|
157
+ person_type.each do |individual|
158
+ pure_role =individual.role.gsub(/\s+/, '')
159
+ name = individual.name.last_first
160
+ if pure_role == 'Creator'
161
+ human = ::Datacite::Mapping::Creator.new name: name
162
+ else
163
+ pure_role = 'Other' if pure_role === 'Contributor'
164
+ contributor_type = ::Datacite::Mapping::ContributorType.find_by_value pure_role
165
+ if contributor_type
166
+ human = ::Datacite::Mapping::Contributor.new name: name,
167
+ type: contributor_type
136
168
  end
137
- if human
138
- if !dataset_person['uuid'].empty?
139
- person = Puree::Person.new
140
- person.find uuid: dataset_person['uuid']
141
- if !person.metadata.empty?
142
- identifier = name_identifier_orcid(person)
143
- human.identifier = identifier if !identifier.nil?
144
-
145
- affiliation = affiliations(person)
146
- human.affiliations = affiliation if !affiliation.empty?
147
- end
148
- end
149
- if dataset_person['role'] == 'Creator'
150
- o['creator'] << human
151
- else
152
- o['contributor'] << human
169
+ end
170
+ if human
171
+ if individual.uuid
172
+ person_extractor = Puree::Extractor::Person.new @config
173
+ person = person_extractor.find uuid: individual.uuid
174
+ if person
175
+ identifier = name_identifier_orcid person
176
+ human.identifier = identifier if identifier
177
+
178
+ affiliation = affiliations person
179
+ human.affiliations = affiliation if affiliation
153
180
  end
154
181
  end
182
+ if individual.role == 'Creator'
183
+ o['creator'] << human
184
+ else
185
+ o['contributor'] << human
186
+ end
187
+ end
155
188
  end
156
189
  end
157
190
  o
158
191
  end
159
192
 
160
193
  def publication_year
161
- @dataset.available['year']
194
+ @dataset.available.year
162
195
  end
163
196
 
164
197
  def publisher
@@ -166,19 +199,19 @@ module ResearchMetadata
166
199
  end
167
200
 
168
201
  def related_identifiers
169
- publications = @dataset.publication
202
+ publications = @dataset.publications
170
203
  data = []
171
204
  publications.each do |i|
172
- if i['type'] === 'Dataset'
173
- # Do nothing as the relationship cannot currently be determined
174
- # pub = Puree::Dataset.new
175
- next
176
- else
177
- pub = Puree::Publication.new
178
- end
179
- pub.find uuid: i['uuid']
180
- doi = pub.doi
181
- if doi && !doi.empty?
205
+ # Skip as the relationship cannot currently be determined
206
+ next if i.type === 'Dataset'
207
+
208
+ publication_extractor = Puree::Extractor::Publication.new @config
209
+ pub = publication_extractor.find uuid: i.uuid
210
+
211
+ # Restrict to those with a DOI
212
+ doi = pub.doi if pub.methods.include? :doi
213
+
214
+ if doi
182
215
  doi_part_to_remove = 'http://dx.doi.org/'
183
216
  doi_short = doi.gsub(doi_part_to_remove, '')
184
217
  doi_short.gsub!('/', '-')
@@ -205,13 +238,13 @@ module ResearchMetadata
205
238
  # be associated with a specific place
206
239
 
207
240
  # Place names
208
- arr = @dataset.spatial.map { |i| ::Datacite::Mapping::GeoLocation.new place: i }
241
+ arr = @dataset.spatial_places.map { |i| ::Datacite::Mapping::GeoLocation.new place: i }
209
242
 
210
243
  # Lat Long point
211
244
  spatial_point = @dataset.spatial_point
212
- if !spatial_point.empty?
213
- point = ::Datacite::Mapping::GeoLocationPoint.new latitude: spatial_point['latitude'],
214
- longitude: spatial_point['longitude']
245
+ if spatial_point
246
+ point = ::Datacite::Mapping::GeoLocationPoint.new latitude: spatial_point.latitude,
247
+ longitude: spatial_point.longitude
215
248
  geolocation = ::Datacite::Mapping::GeoLocation.new point: point
216
249
  arr << geolocation
217
250
  end
@@ -219,7 +252,7 @@ module ResearchMetadata
219
252
  end
220
253
 
221
254
  def subjects
222
- @dataset.keyword.map { |i| ::Datacite::Mapping::Subject.new value: i }
255
+ @dataset.keywords.map { |i| ::Datacite::Mapping::Subject.new value: i }
223
256
  end
224
257
 
225
258
  def title
@@ -0,0 +1,216 @@
1
+ module ResearchMetadata
2
+
3
+ module Transformer
4
+
5
+ # Extracts publication metadata from the Pure Research Information System
6
+ # and converts it into the DataCite format. Example usage is for theses
7
+ # (doctoral and master's).
8
+ #
9
+ class Publication
10
+
11
+ # @param config [Hash]
12
+ # @option config [String] :url The URL of the Pure host.
13
+ # @option config [String] :username The username of the Pure host account.
14
+ # @option config [String] :password The password of the Pure host account.
15
+ def initialize(config)
16
+ @config = config
17
+ @publication_extractor = Puree::Extractor::Publication.new config
18
+ end
19
+
20
+ # Publication transformation
21
+ #
22
+ # @param id [String]
23
+ # @param uuid [String]
24
+ # @param doi [String]
25
+ # @return [String, nil]
26
+ def transform(id: nil, uuid: nil, doi: nil)
27
+ @publication = extract uuid: uuid, id: id
28
+ return nil if !@publication
29
+ return nil if !publication_year
30
+ person_o = person
31
+ file_o = file
32
+ resource = ::Datacite::Mapping::Resource.new(
33
+ identifier: identifier(doi),
34
+ creators: person_o['creator'],
35
+ titles: titles,
36
+ publication_year: publication_year,
37
+ publisher: publisher,
38
+ subjects: subjects,
39
+ contributors: person_o['contributor'],
40
+ language: language,
41
+ resource_type: resource_type,
42
+ sizes: sizes(file_o),
43
+ formats: formats(file_o),
44
+ rights_list: rights_list(file_o),
45
+ descriptions: description
46
+ )
47
+ resource.write_xml
48
+ end
49
+
50
+ private
51
+
52
+ def pages
53
+ count = @publication.pages
54
+ if count > 0
55
+ return "#{count} pages"
56
+ else
57
+ return nil
58
+ end
59
+ end
60
+
61
+ def sizes(files)
62
+ arr = files.map { |i| "#{i.size} B" }
63
+ arr << pages if pages
64
+ arr
65
+ end
66
+
67
+ def formats(files)
68
+ files.map { |i| i.mime }
69
+ end
70
+
71
+ def rights_list(files)
72
+ arr = []
73
+ files.each do |i|
74
+ if i.license
75
+ rights = Datacite::Mapping::Rights.new value: i.license.name
76
+ arr << rights
77
+ else
78
+ arr << 'License unspecified'
79
+ end
80
+ end
81
+ arr
82
+ end
83
+
84
+ def affiliations(person)
85
+ person.affiliations.map { |i| i.name }
86
+ end
87
+
88
+ def description
89
+ desc = @publication.description
90
+ if desc
91
+ d = ::Datacite::Mapping::Description.new value: desc,
92
+ type: ::Datacite::Mapping::DescriptionType::ABSTRACT
93
+ [d]
94
+ else
95
+ []
96
+ end
97
+ end
98
+
99
+ def extract(uuid: nil, id: nil)
100
+ if !uuid.nil?
101
+ return @publication_extractor.find uuid: uuid
102
+ else
103
+ return @publication_extractor.find id: id
104
+ end
105
+ end
106
+
107
+ def file
108
+ @publication.files
109
+ end
110
+
111
+ def identifier(doi)
112
+ ::Datacite::Mapping::Identifier.new(value: doi)
113
+ end
114
+
115
+ def language
116
+ @publication.locale
117
+ end
118
+
119
+ def name_identifier_orcid(person)
120
+ name_identifier = nil
121
+ if person.orcid
122
+ name_identifier = ::Datacite::Mapping::NameIdentifier.new scheme: 'ORCID',
123
+ scheme_uri: URI('http://orcid.org/'),
124
+ value: person.orcid
125
+ end
126
+ name_identifier
127
+ end
128
+
129
+ def person
130
+ o = {}
131
+ o['creator'] = []
132
+ o['contributor'] = []
133
+ all_persons = []
134
+ all_persons << @publication.persons_internal
135
+ all_persons << @publication.persons_external
136
+ all_persons << @publication.persons_other
137
+ all_persons.each do |person_type|
138
+ person_type.each do |individual|
139
+ pure_role =individual.role.gsub(/\s+/, '')
140
+ role = pure_role
141
+ name = individual.name.last_first
142
+ role = 'Creator' if pure_role === 'Author'
143
+ if role == 'Creator'
144
+ human = ::Datacite::Mapping::Creator.new name: name
145
+ else
146
+ role = 'Other' if pure_role === 'Contributor'
147
+ contributor_type = ::Datacite::Mapping::ContributorType.find_by_value role
148
+ if contributor_type
149
+ human = ::Datacite::Mapping::Contributor.new name: name,
150
+ type: contributor_type
151
+ end
152
+ end
153
+ if human
154
+ if individual.uuid
155
+ person_extractor = Puree::Extractor::Person.new @config
156
+ person = person_extractor.find uuid: individual.uuid
157
+ if person
158
+ identifier = name_identifier_orcid person
159
+ human.identifier = identifier if identifier
160
+
161
+ affiliation = affiliations person
162
+ human.affiliations = affiliation if affiliation
163
+ end
164
+ end
165
+ if role == 'Creator'
166
+ o['creator'] << human
167
+ else
168
+ o['contributor'] << human
169
+ end
170
+ end
171
+ end
172
+ end
173
+ o
174
+ end
175
+
176
+ def publication_year
177
+ @publication.statuses.each do |i|
178
+ if i.stage === 'Published'
179
+ return i.date.year
180
+ end
181
+ end
182
+ nil
183
+ end
184
+
185
+ def publisher
186
+ @publication.publisher || 'Not specified'
187
+ end
188
+
189
+ def resource_type
190
+ ::Datacite::Mapping::ResourceType.new(
191
+ resource_type_general: ::Datacite::Mapping::ResourceTypeGeneral::TEXT,
192
+ value: 'Text'
193
+ )
194
+ end
195
+
196
+ def subjects
197
+ @publication.keywords.map { |i| ::Datacite::Mapping::Subject.new value: i }
198
+ end
199
+
200
+ def titles
201
+ arr = []
202
+ title = ::Datacite::Mapping::Title.new value: @publication.title
203
+ arr << title
204
+ subtitle = @publication.subtitle
205
+ if subtitle
206
+ arr << ::Datacite::Mapping::Title.new(value: subtitle,
207
+ type: ::Datacite::Mapping::TitleType::SUBTITLE)
208
+ end
209
+ arr
210
+ end
211
+
212
+ end
213
+
214
+ end
215
+
216
+ end
@@ -0,0 +1,10 @@
1
+ module ResearchMetadata
2
+
3
+ # Extracts metadata from the Pure Research Information System and
4
+ # converts it into the DataCite format.
5
+ #
6
+ module Transformer
7
+
8
+ end
9
+
10
+ end
@@ -1,5 +1,5 @@
1
1
  module ResearchMetadata
2
2
  # Semantic version number
3
3
  #
4
- VERSION = "0.1.0"
4
+ VERSION = "1.0.0"
5
5
  end
@@ -1,4 +1,12 @@
1
1
  require 'puree'
2
2
  require 'datacite/mapping'
3
3
  require 'research_metadata/transformer/dataset'
4
- require 'research_metadata/version'
4
+ require 'research_metadata/transformer/publication'
5
+ require 'research_metadata/version'
6
+
7
+ # Metadata extraction from the Pure Research Information System and
8
+ # transformation of the metadata into the DataCite format.
9
+ #
10
+ module ResearchMetadata
11
+
12
+ end
@@ -8,9 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = ResearchMetadata::VERSION
9
9
  spec.authors = ["Adrian Albin-Clark"]
10
10
  spec.email = ["a.albin-clark@lancaster.ac.uk"]
11
- spec.summary = %q{Extraction and Transformation for Loading by the DataCite API.}
12
- spec.description = %q{Extraction and Transformation for Loading by the DataCite API.}
13
- spec.homepage = "https://aalbinclark.gitbooks.io/research_metadata"
11
+ spec.summary = %q{Metadata extraction from the Pure Research Information System and transformation of the metadata into the DataCite format.}
12
+ spec.homepage = "https://github.com/lulibrary/research_metadata"
14
13
  spec.license = "MIT"
15
14
 
16
15
  spec.files = `git ls-files -z`.split("\x0")
@@ -18,6 +17,10 @@ Gem::Specification.new do |spec|
18
17
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
18
  spec.require_paths = ["lib"]
20
19
 
21
- spec.add_runtime_dependency "puree", "~> 0.20"
22
- spec.add_runtime_dependency "datacite-mapping", "~> 0.2"
20
+ spec.required_ruby_version = '~> 2.1'
21
+
22
+ spec.add_runtime_dependency "puree", "~> 1.1.0"
23
+ spec.add_runtime_dependency "datacite-mapping", "~> 0.2.5"
24
+
25
+ spec.add_development_dependency "rspec"
23
26
  end
@@ -3,16 +3,18 @@ require 'spec_helper'
3
3
  describe 'Dataset' do
4
4
 
5
5
  def setup
6
- Puree.base_url = ENV['PURE_BASE_URL']
7
- Puree.username = ENV['PURE_USERNAME']
8
- Puree.password = ENV['PURE_PASSWORD']
9
- Puree.basic_auth = true
10
- @t = ResearchMetadata::Transformer::Dataset.new
6
+ @config = {
7
+ url: ENV['PURE_URL'],
8
+ username: ENV['PURE_USERNAME'],
9
+ password: ENV['PURE_PASSWORD']
10
+ }
11
+ @t = ResearchMetadata::Transformer::Dataset.new @config
11
12
  end
12
13
 
13
14
  it '#new' do
14
- t = ResearchMetadata::Transformer::Dataset.new
15
- expect(t).to be_an_instance_of ResearchMetadata::Transformer::Dataset
15
+ setup
16
+ t = ResearchMetadata::Transformer::Dataset.new @config
17
+ expect(t).to be_a ResearchMetadata::Transformer::Dataset
16
18
  end
17
19
 
18
20
  describe 'data transformation' do
@@ -20,20 +22,16 @@ describe 'Dataset' do
20
22
  setup
21
23
  end
22
24
 
23
- it '#transform with valid UUID' do
24
- metadata = @t.transform uuid: ENV['PURE_DATASET_UUID'],
25
+ it '#transform with random UUID' do
26
+ c = Puree::Extractor::Collection.new resource: :dataset,
27
+ config: @config
28
+ res = c.random_resource
29
+ metadata = @t.transform uuid: res.uuid,
25
30
  doi: '10.1234/foo/bar/1'
26
31
  is_xml = metadata.downcase.start_with?('<resource')
27
32
  expect(is_xml).to match(true)
28
33
  end
29
34
 
30
- it '#transform with valid ID' do
31
- metadata = @t.transform id: ENV['PURE_DATASET_ID'],
32
- doi: '10.1234/foo/bar/1'
33
- is_xml = metadata.downcase.start_with?('<resource')
34
- expect(is_xml).to match(true)
35
- end
36
-
37
35
  end
38
36
 
39
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: research_metadata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Albin-Clark
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-06 00:00:00.000000000 Z
11
+ date: 2017-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: puree
@@ -16,29 +16,43 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.20'
19
+ version: 1.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.20'
26
+ version: 1.1.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: datacite-mapping
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.2'
33
+ version: 0.2.5
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.2'
41
- description: Extraction and Transformation for Loading by the DataCite API.
40
+ version: 0.2.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description:
42
56
  email:
43
57
  - a.albin-clark@lancaster.ac.uk
44
58
  executables: []
@@ -53,11 +67,13 @@ files:
53
67
  - Rakefile
54
68
  - lib/research_metadata.rb
55
69
  - lib/research_metadata/transformer/dataset.rb
70
+ - lib/research_metadata/transformer/publication.rb
71
+ - lib/research_metadata/transformer/transformer.rb
56
72
  - lib/research_metadata/version.rb
57
73
  - research_metadata.gemspec
58
74
  - spec/spec_helper.rb
59
75
  - spec/transformer/dataset_spec.rb
60
- homepage: https://aalbinclark.gitbooks.io/research_metadata
76
+ homepage: https://github.com/lulibrary/research_metadata
61
77
  licenses:
62
78
  - MIT
63
79
  metadata: {}
@@ -67,9 +83,9 @@ require_paths:
67
83
  - lib
68
84
  required_ruby_version: !ruby/object:Gem::Requirement
69
85
  requirements:
70
- - - ">="
86
+ - - "~>"
71
87
  - !ruby/object:Gem::Version
72
- version: '0'
88
+ version: '2.1'
73
89
  required_rubygems_version: !ruby/object:Gem::Requirement
74
90
  requirements:
75
91
  - - ">="
@@ -80,8 +96,8 @@ rubyforge_project:
80
96
  rubygems_version: 2.2.2
81
97
  signing_key:
82
98
  specification_version: 4
83
- summary: Extraction and Transformation for Loading by the DataCite API.
99
+ summary: Metadata extraction from the Pure Research Information System and transformation
100
+ of the metadata into the DataCite format.
84
101
  test_files:
85
102
  - spec/spec_helper.rb
86
103
  - spec/transformer/dataset_spec.rb
87
- has_rdoc: