stash-merritt 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +193 -0
- data/.rubocop.yml +32 -0
- data/.ruby-version +1 -0
- data/.travis.yml +12 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +326 -0
- data/LICENSE.md +22 -0
- data/README.md +53 -0
- data/Rakefile +49 -0
- data/lib/datacite/mapping/datacite_xml_factory.rb +212 -0
- data/lib/stash/merritt/ezid_helper.rb +50 -0
- data/lib/stash/merritt/module_info.rb +12 -0
- data/lib/stash/merritt/repository.rb +17 -0
- data/lib/stash/merritt/submission_job.rb +90 -0
- data/lib/stash/merritt/submission_package/data_one_manifest_builder.rb +41 -0
- data/lib/stash/merritt/submission_package/merritt_datacite_builder.rb +22 -0
- data/lib/stash/merritt/submission_package/merritt_delete_builder.rb +25 -0
- data/lib/stash/merritt/submission_package/merritt_oaidc_builder.rb +130 -0
- data/lib/stash/merritt/submission_package/stash_wrapper_builder.rb +59 -0
- data/lib/stash/merritt/submission_package.rb +125 -0
- data/lib/stash/merritt/sword_helper.rb +58 -0
- data/lib/stash/merritt.rb +5 -0
- data/lib/stash.rb +5 -0
- data/spec/.rubocop.yml +10 -0
- data/spec/config/app_config.yml +3 -0
- data/spec/config/database.yml +7 -0
- data/spec/config/licenses.yml +18 -0
- data/spec/data/archive/mrt-datacite.xml +121 -0
- data/spec/data/archive/mrt-dataone-manifest.txt +32 -0
- data/spec/data/archive/mrt-oaidc.xml +38 -0
- data/spec/data/archive/stash-wrapper.xml +213 -0
- data/spec/data/archive.zip +0 -0
- data/spec/data/dc4-with-funding-references.xml +123 -0
- data/spec/db/datacite/mapping/datacite_xml_factory_spec.rb +56 -0
- data/spec/db/stash/merritt/merritt_oaidc_builder_spec.rb +72 -0
- data/spec/db/stash/merritt/submission_package_spec.rb +174 -0
- data/spec/db/stash/merritt/sword_helper_spec.rb +162 -0
- data/spec/db_spec_helper.rb +31 -0
- data/spec/rspec_custom_matchers.rb +92 -0
- data/spec/spec_helper.rb +86 -0
- data/spec/unit/stash/merritt/ezid_helper_spec.rb +88 -0
- data/spec/unit/stash/merritt/repository_spec.rb +19 -0
- data/spec/unit/stash/merritt/submission_job_spec.rb +127 -0
- data/spec/util/resource_builder.rb +333 -0
- data/stash-merritt.gemspec +48 -0
- data/stash-merritt.iml +147 -0
- data/stash-merritt.ipr +127 -0
- data/travis-local-deps.sh +43 -0
- metadata +337 -0
@@ -0,0 +1,333 @@
|
|
1
|
+
require 'datacite/mapping'
|
2
|
+
require 'stash/wrapper'
|
3
|
+
require 'time'
|
4
|
+
|
5
|
+
# TODO: Get rid of this and use FactoryGirl or something
|
6
|
+
module StashDatacite
|
7
|
+
class ResourceBuilder # rubocop:disable Metrics/ClassLength
|
8
|
+
DESCRIPTION_TYPE = Datacite::Mapping::DescriptionType
|
9
|
+
|
10
|
+
attr_reader :user_id
|
11
|
+
attr_reader :dcs_resource
|
12
|
+
attr_reader :stash_files
|
13
|
+
attr_reader :upload_time
|
14
|
+
|
15
|
+
def initialize(user_id:, dcs_resource:, stash_files:, upload_date:)
|
16
|
+
@user_id = user_id
|
17
|
+
@dcs_resource = ResourceBuilder.dcs_resource(dcs_resource)
|
18
|
+
@stash_files = ResourceBuilder.stash_files(stash_files)
|
19
|
+
@upload_time = upload_date.to_time
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.dcs_resource(dcs_resource)
|
23
|
+
return dcs_resource if dcs_resource.is_a?(Datacite::Mapping::Resource)
|
24
|
+
return dcs_resource if dcs_resource.to_s =~ /InstanceDouble\(Datacite::Mapping::Resource\)/ # For RSpec tests
|
25
|
+
raise ArgumentError, "dcs_resource does not appear to be a Datacite::Mapping::Resource: #{dcs_resource || 'nil'}"
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.stash_files(stash_files)
|
29
|
+
return stash_files if stash_files.all? do |file|
|
30
|
+
file.is_a?(Stash::Wrapper::StashFile) ||
|
31
|
+
file.to_s =~ /InstanceDouble\(Stash::Wrapper::StashFile\)/ # For RSpec tests
|
32
|
+
end
|
33
|
+
raise ArgumentError, "stash_files does not appear to be an array of Stash::Wrapper::StashFile objects: #{stash_files || 'nil'}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def build
|
37
|
+
populate_se_resource!
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def se_resource
|
43
|
+
@se_resource ||= StashEngine::Resource.create(user_id: user_id)
|
44
|
+
end
|
45
|
+
|
46
|
+
def se_resource_id
|
47
|
+
se_resource.id
|
48
|
+
end
|
49
|
+
|
50
|
+
def populate_se_resource! # rubocop:disable Metrics/AbcSize
|
51
|
+
set_sd_identifier(dcs_resource.identifier)
|
52
|
+
stash_files.each { |stash_file| add_stash_file(stash_file) }
|
53
|
+
dcs_resource.creators.each { |dcs_creator| add_sd_creator(dcs_creator) }
|
54
|
+
dcs_resource.titles.each { |dcs_title| add_sd_title(dcs_title) }
|
55
|
+
set_sd_publisher(dcs_resource.publisher)
|
56
|
+
set_sd_pubyear(dcs_resource.publication_year)
|
57
|
+
dcs_resource.subjects.each { |dcs_subject| add_sd_subject(dcs_subject) }
|
58
|
+
dcs_resource.contributors.each { |dcs_contributor| add_sd_contributor(dcs_contributor) }
|
59
|
+
dcs_resource.dates.each { |dcs_date| add_sd_date(dcs_date) }
|
60
|
+
set_sd_language(dcs_resource.language)
|
61
|
+
set_sd_resource_type(dcs_resource.resource_type)
|
62
|
+
dcs_resource.alternate_identifiers.each { |dcs_alternate_ident| add_sd_alternate_ident(dcs_alternate_ident) }
|
63
|
+
dcs_resource.related_identifiers.each { |dcs_related_ident| add_sd_related_ident(dcs_related_ident) }
|
64
|
+
dcs_resource.sizes.each { |dcs_size| add_sd_size(dcs_size) }
|
65
|
+
dcs_resource.formats.each { |dcs_format| add_sd_format(dcs_format) }
|
66
|
+
set_sd_version(dcs_resource.version)
|
67
|
+
dcs_resource.rights_list.each { |dcs_rights| add_sd_rights(dcs_rights) }
|
68
|
+
dcs_resource.descriptions.each { |dcs_description| add_sd_description(dcs_description) }
|
69
|
+
dcs_resource.geo_locations.each { |dcs_geo_location| add_sd_geo_location(dcs_geo_location) }
|
70
|
+
dcs_resource.funding_references.each { |dcs_funding_reference| add_funding(dcs_funding_reference) }
|
71
|
+
se_resource.save!
|
72
|
+
se_resource
|
73
|
+
end
|
74
|
+
|
75
|
+
def set_sd_identifier(dcs_identifier)
|
76
|
+
return unless dcs_identifier
|
77
|
+
se_resource.identifier_id = StashEngine::Identifier.create(
|
78
|
+
identifier: dcs_identifier.value && dcs_identifier.value.strip,
|
79
|
+
identifier_type: dcs_identifier.identifier_type
|
80
|
+
).id
|
81
|
+
end
|
82
|
+
|
83
|
+
def add_stash_file(stash_file)
|
84
|
+
StashEngine::FileUpload.create(
|
85
|
+
resource_id: se_resource_id,
|
86
|
+
upload_file_name: stash_file.pathname,
|
87
|
+
upload_content_type: stash_file.mime_type.to_s,
|
88
|
+
upload_file_size: stash_file.size_bytes,
|
89
|
+
upload_updated_at: upload_time,
|
90
|
+
file_state: 'created'
|
91
|
+
)
|
92
|
+
end
|
93
|
+
|
94
|
+
def add_sd_creator(dcs_creator)
|
95
|
+
last_name, first_name = extract_last_first(dcs_creator.name)
|
96
|
+
sd_creator = Creator.create(
|
97
|
+
creator_first_name: first_name,
|
98
|
+
creator_last_name: last_name,
|
99
|
+
name_identifier_id: sd_name_identifier_id_for(dcs_creator.identifier),
|
100
|
+
resource_id: se_resource_id
|
101
|
+
)
|
102
|
+
sd_creator.affiliation_ids = dcs_creator.affiliations.map { |affiliation_str| sd_affiliation_id_for(affiliation_str) }
|
103
|
+
sd_creator
|
104
|
+
end
|
105
|
+
|
106
|
+
def add_sd_title(dcs_title)
|
107
|
+
title_type = dcs_title.type
|
108
|
+
Title.create(
|
109
|
+
title: dcs_title.value && dcs_title.value.strip,
|
110
|
+
title_type_friendly: (title_type.value if title_type),
|
111
|
+
resource_id: se_resource_id
|
112
|
+
)
|
113
|
+
end
|
114
|
+
|
115
|
+
def set_sd_publisher(dcs_publisher)
|
116
|
+
Publisher.create(publisher: dcs_publisher, resource_id: se_resource_id) unless dcs_publisher.blank?
|
117
|
+
end
|
118
|
+
|
119
|
+
def set_sd_pubyear(dcs_publication_year)
|
120
|
+
return if dcs_publication_year.blank?
|
121
|
+
PublicationYear.create(publication_year: dcs_publication_year, resource_id: se_resource_id)
|
122
|
+
end
|
123
|
+
|
124
|
+
def add_sd_subject(dcs_subject)
|
125
|
+
sd_subject_id = sd_subject_id_for(dcs_subject)
|
126
|
+
ResourcesSubjects.create(resource_id: se_resource_id, subject_id: sd_subject_id)
|
127
|
+
end
|
128
|
+
|
129
|
+
def add_sd_contributor(dcs_contributor)
|
130
|
+
contributor_type = dcs_contributor.type
|
131
|
+
sd_contributor = Contributor.create(
|
132
|
+
contributor_name: dcs_contributor.name,
|
133
|
+
contributor_type_friendly: (contributor_type.value if contributor_type),
|
134
|
+
name_identifier_id: sd_name_identifier_id_for(dcs_contributor.identifier),
|
135
|
+
resource_id: se_resource_id
|
136
|
+
)
|
137
|
+
sd_contributor.affiliation_ids = dcs_contributor.affiliations.map { |affiliation_str| sd_affiliation_id_for(affiliation_str) }
|
138
|
+
sd_contributor
|
139
|
+
end
|
140
|
+
|
141
|
+
def add_sd_date(dcs_date)
|
142
|
+
date_type = dcs_date.type
|
143
|
+
DataciteDate.create(
|
144
|
+
date: dcs_date.value && dcs_date.value.strip,
|
145
|
+
date_type_friendly: (date_type.value if date_type),
|
146
|
+
resource_id: se_resource_id
|
147
|
+
)
|
148
|
+
end
|
149
|
+
|
150
|
+
def set_sd_language(dcs_language)
|
151
|
+
return nil if dcs_language.blank?
|
152
|
+
Language.create(language: dcs_language, resource_id: se_resource_id)
|
153
|
+
end
|
154
|
+
|
155
|
+
def set_sd_resource_type(dcs_resource_type)
|
156
|
+
return nil unless dcs_resource_type
|
157
|
+
dcs_resource_type_general = dcs_resource_type.resource_type_general
|
158
|
+
dcs_resource_type_value = dcs_resource_type.value
|
159
|
+
se_resource_type = dcs_resource_type_general.value.downcase
|
160
|
+
resource_type_friendly = (ResourceType::ResourceTypesGeneralLimited.values.include?(se_resource_type) ? se_resource_type : 'other')
|
161
|
+
|
162
|
+
ResourceType.create(
|
163
|
+
resource_id: se_resource_id,
|
164
|
+
resource_type_general: resource_type_friendly,
|
165
|
+
resource_type: dcs_resource_type_value
|
166
|
+
)
|
167
|
+
|
168
|
+
# resource_type_friendly = (ResourceType::ResourceTypesGeneralLimited.values.include?(se_resource_type) ? se_resource_type : 'other')
|
169
|
+
# ResourceType.create(
|
170
|
+
# resource_id: se_resource_id,
|
171
|
+
# resource_type_friendly: resource_type_friendly
|
172
|
+
# )
|
173
|
+
end
|
174
|
+
|
175
|
+
def add_sd_alternate_ident(dcs_alternate_ident)
|
176
|
+
AlternateIdentifier.create(
|
177
|
+
alternate_identifier: dcs_alternate_ident.value && dcs_alternate_ident.value.strip,
|
178
|
+
alternate_identifier_type: dcs_alternate_ident.type, # a string, not an enum
|
179
|
+
resource_id: se_resource_id
|
180
|
+
)
|
181
|
+
end
|
182
|
+
|
183
|
+
def add_sd_related_ident(dcs_related_ident)
|
184
|
+
ident_type = dcs_related_ident.identifier_type
|
185
|
+
rel_type = dcs_related_ident.relation_type
|
186
|
+
scheme_uri = dcs_related_ident.scheme_uri
|
187
|
+
RelatedIdentifier.create(
|
188
|
+
related_identifier: dcs_related_ident.value && dcs_related_ident.value.strip,
|
189
|
+
related_identifier_type_friendly: (ident_type.value if ident_type),
|
190
|
+
relation_type_friendly: (rel_type.value if rel_type),
|
191
|
+
related_metadata_scheme: dcs_related_ident.related_metadata_scheme,
|
192
|
+
scheme_URI: (scheme_uri.to_s if scheme_uri),
|
193
|
+
scheme_type: dcs_related_ident.scheme_type,
|
194
|
+
resource_id: se_resource_id
|
195
|
+
)
|
196
|
+
end
|
197
|
+
|
198
|
+
def add_sd_size(dcs_size)
|
199
|
+
return if dcs_size.blank?
|
200
|
+
Size.create(size: dcs_size, resource_id: se_resource_id)
|
201
|
+
end
|
202
|
+
|
203
|
+
def add_sd_format(dcs_format)
|
204
|
+
return if dcs_format.blank?
|
205
|
+
Format.create(format: dcs_format, resource_id: se_resource_id)
|
206
|
+
end
|
207
|
+
|
208
|
+
def set_sd_version(dcs_version)
|
209
|
+
return if dcs_version.blank?
|
210
|
+
Version.create(version: dcs_version, resource_id: se_resource_id)
|
211
|
+
end
|
212
|
+
|
213
|
+
def add_sd_rights(dcs_rights)
|
214
|
+
rights_uri = dcs_rights.uri
|
215
|
+
Right.create(
|
216
|
+
rights: dcs_rights.value && dcs_rights.value.strip,
|
217
|
+
rights_uri: (rights_uri.to_s if rights_uri),
|
218
|
+
resource_id: se_resource_id
|
219
|
+
)
|
220
|
+
end
|
221
|
+
|
222
|
+
def add_sd_description(dcs_description)
|
223
|
+
desc_type = dcs_description.type
|
224
|
+
if desc_type == DESCRIPTION_TYPE::OTHER && dcs_description.value.start_with?('Data were created with funding')
|
225
|
+
add_sd_award_number(dcs_description.value)
|
226
|
+
else
|
227
|
+
Description.create(
|
228
|
+
description: dcs_description.value && dcs_description.value.strip,
|
229
|
+
description_type_friendly: (desc_type.value if desc_type),
|
230
|
+
resource_id: se_resource_id
|
231
|
+
)
|
232
|
+
end
|
233
|
+
end
|
234
|
+
|
235
|
+
def add_sd_award_number(funding_desc_value)
|
236
|
+
pat = /Data were created with funding from(.*)under grant\(?s?\)?(.*)\.?/m
|
237
|
+
return unless (md = pat.match(funding_desc_value)) && md.size == 3
|
238
|
+
|
239
|
+
contrib_name = md[1].gsub(/\s+/m, ' ').strip
|
240
|
+
award_num = md[2].gsub(/\s+/m, ' ').sub(/.$/, '').strip
|
241
|
+
|
242
|
+
matching_contrib = find_sd_funder(contrib_name)
|
243
|
+
return unless matching_contrib
|
244
|
+
|
245
|
+
matching_contrib.award_number = award_num
|
246
|
+
matching_contrib.save!
|
247
|
+
end
|
248
|
+
|
249
|
+
def find_sd_funder(contrib_name)
|
250
|
+
se_resource.contributors.where(
|
251
|
+
"contributor_name LIKE ? and contributor_type='funder'",
|
252
|
+
"%#{contrib_name.sub(/^[Tt]he ?/, '')}%"
|
253
|
+
).take
|
254
|
+
end
|
255
|
+
|
256
|
+
def add_sd_geo_location(dcs_geo_location)
|
257
|
+
return unless dcs_geo_location.location?
|
258
|
+
loc = Geolocation.create(resource_id: se_resource_id)
|
259
|
+
add_sd_geo_location_place(loc, dcs_geo_location.place)
|
260
|
+
add_sd_geo_location_point(loc, dcs_geo_location.point)
|
261
|
+
add_sd_geo_location_box(loc, dcs_geo_location.box)
|
262
|
+
loc.save
|
263
|
+
end
|
264
|
+
|
265
|
+
def add_sd_geo_location_place(se_geo_location, dcs_geo_location_place)
|
266
|
+
return if dcs_geo_location_place.blank?
|
267
|
+
se_place = GeolocationPlace.create(geo_location_place: dcs_geo_location_place)
|
268
|
+
se_geo_location.place_id = se_place.id
|
269
|
+
end
|
270
|
+
|
271
|
+
def add_sd_geo_location_point(se_geo_location, dcs_geo_location_point)
|
272
|
+
return unless dcs_geo_location_point
|
273
|
+
se_point = GeolocationPoint.create(
|
274
|
+
latitude: dcs_geo_location_point.latitude,
|
275
|
+
longitude: dcs_geo_location_point.longitude
|
276
|
+
)
|
277
|
+
se_geo_location.point_id = se_point.id
|
278
|
+
end
|
279
|
+
|
280
|
+
def add_sd_geo_location_box(se_geo_location, dcs_geo_location_box)
|
281
|
+
return unless dcs_geo_location_box
|
282
|
+
se_box = GeolocationBox.create(
|
283
|
+
sw_latitude: dcs_geo_location_box.south_latitude,
|
284
|
+
sw_longitude: dcs_geo_location_box.west_longitude,
|
285
|
+
ne_latitude: dcs_geo_location_box.north_latitude,
|
286
|
+
ne_longitude: dcs_geo_location_box.east_longitude
|
287
|
+
)
|
288
|
+
se_geo_location.box_id = se_box.id
|
289
|
+
end
|
290
|
+
|
291
|
+
def add_funding(dcs_funding_reference)
|
292
|
+
award_number = dcs_funding_reference.award_number
|
293
|
+
Contributor.create(
|
294
|
+
contributor_name: dcs_funding_reference.name,
|
295
|
+
contributor_type: Datacite::Mapping::ContributorType::FUNDER.value.downcase,
|
296
|
+
award_number: (award_number.value if award_number),
|
297
|
+
resource_id: se_resource_id
|
298
|
+
)
|
299
|
+
end
|
300
|
+
|
301
|
+
def extract_last_first(name_w_comma)
|
302
|
+
name_w_comma.split(',', 2).map(&:strip)
|
303
|
+
end
|
304
|
+
|
305
|
+
def sd_affiliation_id_for(affiliation_str)
|
306
|
+
sd_affiliations = StashDatacite::Affiliation.where('short_name = ? or long_name = ?', affiliation_str, affiliation_str)
|
307
|
+
return sd_affiliations.first.id unless sd_affiliations.empty?
|
308
|
+
StashDatacite::Affiliation.create(long_name: affiliation_str).id unless affiliation_str.blank?
|
309
|
+
end
|
310
|
+
|
311
|
+
def sd_name_identifier_id_for(dcs_name_identifier)
|
312
|
+
return nil unless dcs_name_identifier
|
313
|
+
scheme_uri = dcs_name_identifier.scheme_uri
|
314
|
+
value = dcs_name_identifier.value
|
315
|
+
sd_name_ident = StashDatacite::NameIdentifier.find_or_create_by(
|
316
|
+
name_identifier: value.to_s.strip,
|
317
|
+
name_identifier_scheme: dcs_name_identifier.scheme,
|
318
|
+
scheme_URI: (scheme_uri if scheme_uri)
|
319
|
+
)
|
320
|
+
sd_name_ident.id
|
321
|
+
end
|
322
|
+
|
323
|
+
def sd_subject_id_for(dcs_subject)
|
324
|
+
return nil unless dcs_subject
|
325
|
+
scheme_uri = dcs_subject.scheme_uri
|
326
|
+
StashDatacite::Subject.find_or_create_by(
|
327
|
+
subject: dcs_subject.value && dcs_subject.value.strip,
|
328
|
+
subject_scheme: dcs_subject.scheme,
|
329
|
+
scheme_URI: (scheme_uri if scheme_uri)
|
330
|
+
).id
|
331
|
+
end
|
332
|
+
end
|
333
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
|
5
|
+
require 'stash/merritt/module_info'
|
6
|
+
require 'uri'
|
7
|
+
|
8
|
+
Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
|
9
|
+
spec.name = Stash::Merritt::NAME
|
10
|
+
spec.version = Stash::Merritt::VERSION
|
11
|
+
spec.authors = ['David Moles']
|
12
|
+
spec.email = ['david.moles@ucop.edu']
|
13
|
+
spec.summary = 'Merritt integration for Stash'
|
14
|
+
spec.description = 'Packaging and SWORD deposit module for submitting Stash datasets to Merritt'
|
15
|
+
spec.license = 'MIT'
|
16
|
+
|
17
|
+
origin = `git config --get remote.origin.url`.chomp
|
18
|
+
origin_uri = origin.start_with?('http') ? URI(origin) : URI(origin.gsub(%r{git@([^:]+)(.com|.org)[^\/]+}, 'http://\1\2'))
|
19
|
+
spec.homepage = URI::HTTP.build(host: origin_uri.host, path: origin_uri.path.chomp('.git')).to_s
|
20
|
+
|
21
|
+
spec.files = `git ls-files -z`.split("\x0")
|
22
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
|
+
|
24
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
25
|
+
spec.require_paths = ['lib']
|
26
|
+
|
27
|
+
spec.add_dependency 'rubyzip', '~> 1.1'
|
28
|
+
|
29
|
+
spec.add_dependency 'stash_ezid_datacite', '~> 0.1' # TODO: fold this in
|
30
|
+
|
31
|
+
spec.add_dependency 'stash_datacite'
|
32
|
+
spec.add_dependency 'stash_engine' # TODO: should stash_datacite export this?
|
33
|
+
|
34
|
+
spec.add_development_dependency 'bundler', '~> 1.7'
|
35
|
+
spec.add_development_dependency 'rake', '~> 10.4'
|
36
|
+
spec.add_development_dependency 'rspec', '~> 3.2'
|
37
|
+
spec.add_development_dependency 'simplecov', '~> 0.9.2'
|
38
|
+
spec.add_development_dependency 'simplecov-console', '~> 0.2.0'
|
39
|
+
spec.add_development_dependency 'rubocop', '~> 0.47'
|
40
|
+
spec.add_development_dependency 'yard', '~> 0.8'
|
41
|
+
|
42
|
+
spec.add_development_dependency 'database_cleaner', '~> 1.5'
|
43
|
+
spec.add_development_dependency 'diffy', '~> 3.1'
|
44
|
+
spec.add_development_dependency 'equivalent-xml', '~> 0.6.0'
|
45
|
+
spec.add_development_dependency 'mysql2', '~> 0.3'
|
46
|
+
spec.add_development_dependency 'webmock', '~> 1.24'
|
47
|
+
|
48
|
+
end
|
data/stash-merritt.iml
ADDED
@@ -0,0 +1,147 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<module type="RUBY_MODULE" version="4">
|
3
|
+
<component name="NewModuleRootManager" inherit-compiler-output="true">
|
4
|
+
<exclude-output />
|
5
|
+
<content url="file://$MODULE_DIR$" />
|
6
|
+
<content url="file://$MODULE_DIR$/../stash_engines/stash_engine" />
|
7
|
+
<orderEntry type="jdk" jdkName="ruby-2.2.5-p319" jdkType="RUBY_SDK" />
|
8
|
+
<orderEntry type="sourceFolder" forTests="false" />
|
9
|
+
<orderEntry type="module-library">
|
10
|
+
<library name="stash_datacite (v0.0.5) [path][gem]">
|
11
|
+
<CLASSES>
|
12
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/db" />
|
13
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/app" />
|
14
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/bin" />
|
15
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/lib" />
|
16
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/tmp" />
|
17
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/config" />
|
18
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/coverage" />
|
19
|
+
</CLASSES>
|
20
|
+
<JAVADOC />
|
21
|
+
<SOURCES>
|
22
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/db" />
|
23
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/app" />
|
24
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/bin" />
|
25
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/lib" />
|
26
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/tmp" />
|
27
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/config" />
|
28
|
+
<root url="file://$MODULE_DIR$/../stash_engines/stash_datacite/coverage" />
|
29
|
+
</SOURCES>
|
30
|
+
</library>
|
31
|
+
</orderEntry>
|
32
|
+
<orderEntry type="library" scope="PROVIDED" name="actionmailer (v4.2.7.1, ruby-2.2.5-p319) [gem]" level="application" />
|
33
|
+
<orderEntry type="library" scope="PROVIDED" name="actionpack (v4.2.7.1, ruby-2.2.5-p319) [gem]" level="application" />
|
34
|
+
<orderEntry type="library" scope="PROVIDED" name="actionview (v4.2.7.1, ruby-2.2.5-p319) [gem]" level="application" />
|
35
|
+
<orderEntry type="library" scope="PROVIDED" name="activejob (v4.2.7.1, ruby-2.2.5-p319) [gem]" level="application" />
|
36
|
+
<orderEntry type="library" scope="PROVIDED" name="activemodel (v4.2.7.1, ruby-2.2.5-p319) [gem]" level="application" />
|
37
|
+
<orderEntry type="library" scope="PROVIDED" name="activerecord (v4.2.7.1, ruby-2.2.5-p319) [gem]" level="application" />
|
38
|
+
<orderEntry type="library" scope="PROVIDED" name="activesupport (v4.2.7.1, ruby-2.2.5-p319) [gem]" level="application" />
|
39
|
+
<orderEntry type="library" scope="PROVIDED" name="addressable (v2.5.0, ruby-2.2.5-p319) [gem]" level="application" />
|
40
|
+
<orderEntry type="library" scope="PROVIDED" name="amoeba (v3.0.0, ruby-2.2.5-p319) [gem]" level="application" />
|
41
|
+
<orderEntry type="library" scope="PROVIDED" name="arel (v6.0.4, ruby-2.2.5-p319) [gem]" level="application" />
|
42
|
+
<orderEntry type="library" scope="PROVIDED" name="ast (v2.3.0, ruby-2.2.5-p319) [gem]" level="application" />
|
43
|
+
<orderEntry type="library" scope="PROVIDED" name="builder (v3.2.3, ruby-2.2.5-p319) [gem]" level="application" />
|
44
|
+
<orderEntry type="library" scope="PROVIDED" name="carrierwave (v0.10.0, ruby-2.2.5-p319) [gem]" level="application" />
|
45
|
+
<orderEntry type="library" scope="PROVIDED" name="colorize (v0.8.1, ruby-2.2.5-p319) [gem]" level="application" />
|
46
|
+
<orderEntry type="library" scope="PROVIDED" name="concurrent-ruby (v1.0.4, ruby-2.2.5-p319) [gem]" level="application" />
|
47
|
+
<orderEntry type="library" scope="PROVIDED" name="crack (v0.4.3, ruby-2.2.5-p319) [gem]" level="application" />
|
48
|
+
<orderEntry type="library" scope="PROVIDED" name="database_cleaner (v1.5.3, ruby-2.2.5-p319) [gem]" level="application" />
|
49
|
+
<orderEntry type="library" scope="PROVIDED" name="datacite-mapping (v0.2.5, ruby-2.2.5-p319) [gem]" level="application" />
|
50
|
+
<orderEntry type="library" scope="PROVIDED" name="diff-lcs (v1.3, ruby-2.2.5-p319) [gem]" level="application" />
|
51
|
+
<orderEntry type="library" scope="PROVIDED" name="diffy (v3.1.0, ruby-2.2.5-p319) [gem]" level="application" />
|
52
|
+
<orderEntry type="library" scope="PROVIDED" name="docile (v1.1.5, ruby-2.2.5-p319) [gem]" level="application" />
|
53
|
+
<orderEntry type="library" scope="PROVIDED" name="domain_name (v0.5.20161129, ruby-2.2.5-p319) [gem]" level="application" />
|
54
|
+
<orderEntry type="library" scope="PROVIDED" name="equivalent-xml (v0.6.0, ruby-2.2.5-p319) [gem]" level="application" />
|
55
|
+
<orderEntry type="library" scope="PROVIDED" name="erubis (v2.7.0, ruby-2.2.5-p319) [gem]" level="application" />
|
56
|
+
<orderEntry type="library" scope="PROVIDED" name="ezid-client (v1.5.0, ruby-2.2.5-p319) [gem]" level="application" />
|
57
|
+
<orderEntry type="library" scope="PROVIDED" name="faraday (v0.10.1, ruby-2.2.5-p319) [gem]" level="application" />
|
58
|
+
<orderEntry type="library" scope="PROVIDED" name="filesize (v0.1.1, ruby-2.2.5-p319) [gem]" level="application" />
|
59
|
+
<orderEntry type="library" scope="PROVIDED" name="font-awesome-rails (v4.7.0.1, ruby-2.2.5-p319) [gem]" level="application" />
|
60
|
+
<orderEntry type="library" scope="PROVIDED" name="globalid (v0.3.7, ruby-2.2.5-p319) [gem]" level="application" />
|
61
|
+
<orderEntry type="library" scope="PROVIDED" name="hashdiff (v0.3.2, ruby-2.2.5-p319) [gem]" level="application" />
|
62
|
+
<orderEntry type="library" scope="PROVIDED" name="hashie (v3.5.1, ruby-2.2.5-p319) [gem]" level="application" />
|
63
|
+
<orderEntry type="library" scope="PROVIDED" name="hirb (v0.7.3, ruby-2.2.5-p319) [gem]" level="application" />
|
64
|
+
<orderEntry type="library" scope="PROVIDED" name="http-cookie (v1.0.3, ruby-2.2.5-p319) [gem]" level="application" />
|
65
|
+
<orderEntry type="library" scope="PROVIDED" name="i18n (v0.8.0, ruby-2.2.5-p319) [gem]" level="application" />
|
66
|
+
<orderEntry type="library" scope="PROVIDED" name="jquery-fileupload-rails (v0.4.7, ruby-2.2.5-p319) [gem]" level="application" />
|
67
|
+
<orderEntry type="library" scope="PROVIDED" name="jquery-rails (v4.2.2, ruby-2.2.5-p319) [gem]" level="application" />
|
68
|
+
<orderEntry type="library" scope="PROVIDED" name="jquery-turbolinks (v2.1.0, ruby-2.2.5-p319) [gem]" level="application" />
|
69
|
+
<orderEntry type="library" scope="PROVIDED" name="jquery-ui-rails (v6.0.1, ruby-2.2.5-p319) [gem]" level="application" />
|
70
|
+
<orderEntry type="library" scope="PROVIDED" name="json (v1.8.6, ruby-2.2.5-p319) [gem]" level="application" />
|
71
|
+
<orderEntry type="library" scope="PROVIDED" name="jwt (v1.5.6, ruby-2.2.5-p319) [gem]" level="application" />
|
72
|
+
<orderEntry type="library" scope="PROVIDED" name="kaminari (v1.0.1, ruby-2.2.5-p319) [gem]" level="application" />
|
73
|
+
<orderEntry type="library" scope="PROVIDED" name="kaminari-actionview (v1.0.1, ruby-2.2.5-p319) [gem]" level="application" />
|
74
|
+
<orderEntry type="library" scope="PROVIDED" name="kaminari-activerecord (v1.0.1, ruby-2.2.5-p319) [gem]" level="application" />
|
75
|
+
<orderEntry type="library" scope="PROVIDED" name="kaminari-core (v1.0.1, ruby-2.2.5-p319) [gem]" level="application" />
|
76
|
+
<orderEntry type="library" scope="PROVIDED" name="leaflet-rails (v1.0.2, ruby-2.2.5-p319) [gem]" level="application" />
|
77
|
+
<orderEntry type="library" scope="PROVIDED" name="loofah (v2.0.3, ruby-2.2.5-p319) [gem]" level="application" />
|
78
|
+
<orderEntry type="library" scope="PROVIDED" name="mail (v2.6.4, ruby-2.2.5-p319) [gem]" level="application" />
|
79
|
+
<orderEntry type="library" scope="PROVIDED" name="mime-types (v2.99.3, ruby-2.2.5-p319) [gem]" level="application" />
|
80
|
+
<orderEntry type="library" scope="PROVIDED" name="mini_portile2 (v2.1.0, ruby-2.2.5-p319) [gem]" level="application" />
|
81
|
+
<orderEntry type="library" scope="PROVIDED" name="minitest (v5.10.1, ruby-2.2.5-p319) [gem]" level="application" />
|
82
|
+
<orderEntry type="library" scope="PROVIDED" name="multi_json (v1.12.1, ruby-2.2.5-p319) [gem]" level="application" />
|
83
|
+
<orderEntry type="library" scope="PROVIDED" name="multi_xml (v0.6.0, ruby-2.2.5-p319) [gem]" level="application" />
|
84
|
+
<orderEntry type="library" scope="PROVIDED" name="multipart-post (v2.0.0, ruby-2.2.5-p319) [gem]" level="application" />
|
85
|
+
<orderEntry type="library" scope="PROVIDED" name="mysql2 (v0.4.5, ruby-2.2.5-p319) [gem]" level="application" />
|
86
|
+
<orderEntry type="library" scope="PROVIDED" name="netrc (v0.11.0, ruby-2.2.5-p319) [gem]" level="application" />
|
87
|
+
<orderEntry type="library" scope="PROVIDED" name="nokogiri (v1.7.0.1, ruby-2.2.5-p319) [gem]" level="application" />
|
88
|
+
<orderEntry type="library" scope="PROVIDED" name="oauth2 (v1.3.0, ruby-2.2.5-p319) [gem]" level="application" />
|
89
|
+
<orderEntry type="library" scope="PROVIDED" name="omniauth (v1.2.2, ruby-2.2.5-p319) [gem]" level="application" />
|
90
|
+
<orderEntry type="library" scope="PROVIDED" name="omniauth-google-oauth2 (v0.2.10, ruby-2.2.5-p319) [gem]" level="application" />
|
91
|
+
<orderEntry type="library" scope="PROVIDED" name="omniauth-oauth2 (v1.3.1, ruby-2.2.5-p319) [gem]" level="application" />
|
92
|
+
<orderEntry type="library" scope="PROVIDED" name="omniauth-orcid (v1.0.38, ruby-2.2.5-p319) [gem]" level="application" />
|
93
|
+
<orderEntry type="library" scope="PROVIDED" name="omniauth-shibboleth (v1.2.1, ruby-2.2.5-p319) [gem]" level="application" />
|
94
|
+
<orderEntry type="library" scope="PROVIDED" name="parser (v2.3.3.1, ruby-2.2.5-p319) [gem]" level="application" />
|
95
|
+
<orderEntry type="library" scope="PROVIDED" name="powerpack (v0.1.1, ruby-2.2.5-p319) [gem]" level="application" />
|
96
|
+
<orderEntry type="library" scope="PROVIDED" name="public_suffix (v2.0.5, ruby-2.2.5-p319) [gem]" level="application" />
|
97
|
+
<orderEntry type="library" scope="PROVIDED" name="rack (v1.6.5, ruby-2.2.5-p319) [gem]" level="application" />
|
98
|
+
<orderEntry type="library" scope="PROVIDED" name="rack-test (v0.6.3, ruby-2.2.5-p319) [gem]" level="application" />
|
99
|
+
<orderEntry type="library" scope="PROVIDED" name="rails (v4.2.7.1, ruby-2.2.5-p319) [gem]" level="application" />
|
100
|
+
<orderEntry type="library" scope="PROVIDED" name="rails-deprecated_sanitizer (v1.0.3, ruby-2.2.5-p319) [gem]" level="application" />
|
101
|
+
<orderEntry type="library" scope="PROVIDED" name="rails-dom-testing (v1.0.8, ruby-2.2.5-p319) [gem]" level="application" />
|
102
|
+
<orderEntry type="library" scope="PROVIDED" name="rails-html-sanitizer (v1.0.3, ruby-2.2.5-p319) [gem]" level="application" />
|
103
|
+
<orderEntry type="library" scope="PROVIDED" name="railties (v4.2.7.1, ruby-2.2.5-p319) [gem]" level="application" />
|
104
|
+
<orderEntry type="library" scope="PROVIDED" name="rainbow (v2.2.1, ruby-2.2.5-p319) [gem]" level="application" />
|
105
|
+
<orderEntry type="library" scope="PROVIDED" name="rake (v10.5.0, ruby-2.2.5-p319) [gem]" level="application" />
|
106
|
+
<orderEntry type="library" scope="PROVIDED" name="redcarpet (v3.4.0, ruby-2.2.5-p319) [gem]" level="application" />
|
107
|
+
<orderEntry type="library" scope="PROVIDED" name="responders (v2.3.0, ruby-2.2.5-p319) [gem]" level="application" />
|
108
|
+
<orderEntry type="library" scope="PROVIDED" name="rest-client (v2.0.0, ruby-2.2.5-p319) [gem]" level="application" />
|
109
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec (v3.5.0, ruby-2.2.5-p319) [gem]" level="application" />
|
110
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-core (v3.5.4, ruby-2.2.5-p319) [gem]" level="application" />
|
111
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-expectations (v3.5.0, ruby-2.2.5-p319) [gem]" level="application" />
|
112
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-mocks (v3.5.0, ruby-2.2.5-p319) [gem]" level="application" />
|
113
|
+
<orderEntry type="library" scope="PROVIDED" name="rspec-support (v3.5.0, ruby-2.2.5-p319) [gem]" level="application" />
|
114
|
+
<orderEntry type="library" scope="PROVIDED" name="rubocop (v0.47.1, ruby-2.2.5-p319) [gem]" level="application" />
|
115
|
+
<orderEntry type="library" scope="PROVIDED" name="ruby-progressbar (v1.8.1, ruby-2.2.5-p319) [gem]" level="application" />
|
116
|
+
<orderEntry type="library" scope="PROVIDED" name="rubyzip (v1.2.0, ruby-2.2.5-p319) [gem]" level="application" />
|
117
|
+
<orderEntry type="library" scope="PROVIDED" name="safe_yaml (v1.0.4, ruby-2.2.5-p319) [gem]" level="application" />
|
118
|
+
<orderEntry type="library" scope="PROVIDED" name="sass (v3.4.23, ruby-2.2.5-p319) [gem]" level="application" />
|
119
|
+
<orderEntry type="library" scope="PROVIDED" name="simplecov (v0.9.2, ruby-2.2.5-p319) [gem]" level="application" />
|
120
|
+
<orderEntry type="library" scope="PROVIDED" name="simplecov-console (v0.2.0, ruby-2.2.5-p319) [gem]" level="application" />
|
121
|
+
<orderEntry type="library" scope="PROVIDED" name="simplecov-html (v0.9.0, ruby-2.2.5-p319) [gem]" level="application" />
|
122
|
+
<orderEntry type="library" scope="PROVIDED" name="sprockets (v3.7.1, ruby-2.2.5-p319) [gem]" level="application" />
|
123
|
+
<orderEntry type="library" scope="PROVIDED" name="sprockets-rails (v3.2.0, ruby-2.2.5-p319) [gem]" level="application" />
|
124
|
+
<orderEntry type="library" scope="PROVIDED" name="stash-sword (v0.1.5, ruby-2.2.5-p319) [gem]" level="application" />
|
125
|
+
<orderEntry type="library" scope="PROVIDED" name="stash-wrapper (v0.1.11.1, ruby-2.2.5-p319) [gem]" level="application" />
|
126
|
+
<orderEntry type="library" scope="PROVIDED" name="stash_ezid_datacite (v0.1.5, ruby-2.2.5-p319) [gem]" level="application" />
|
127
|
+
<orderEntry type="library" scope="PROVIDED" name="thor (v0.19.4, ruby-2.2.5-p319) [gem]" level="application" />
|
128
|
+
<orderEntry type="library" scope="PROVIDED" name="thread_safe (v0.3.5, ruby-2.2.5-p319) [gem]" level="application" />
|
129
|
+
<orderEntry type="library" scope="PROVIDED" name="turbolinks (v5.0.1, ruby-2.2.5-p319) [gem]" level="application" />
|
130
|
+
<orderEntry type="library" scope="PROVIDED" name="turbolinks-source (v5.0.0, ruby-2.2.5-p319) [gem]" level="application" />
|
131
|
+
<orderEntry type="library" scope="PROVIDED" name="typesafe_enum (v0.1.7, ruby-2.2.5-p319) [gem]" level="application" />
|
132
|
+
<orderEntry type="library" scope="PROVIDED" name="tzinfo (v1.2.2, ruby-2.2.5-p319) [gem]" level="application" />
|
133
|
+
<orderEntry type="library" scope="PROVIDED" name="unf (v0.1.4, ruby-2.2.5-p319) [gem]" level="application" />
|
134
|
+
<orderEntry type="library" scope="PROVIDED" name="unf_ext (v0.0.7.2, ruby-2.2.5-p319) [gem]" level="application" />
|
135
|
+
<orderEntry type="library" scope="PROVIDED" name="unicode-display_width (v1.1.3, ruby-2.2.5-p319) [gem]" level="application" />
|
136
|
+
<orderEntry type="library" scope="PROVIDED" name="webmock (v1.24.6, ruby-2.2.5-p319) [gem]" level="application" />
|
137
|
+
<orderEntry type="library" scope="PROVIDED" name="wicked_pdf (v1.1.0, ruby-2.2.5-p319) [gem]" level="application" />
|
138
|
+
<orderEntry type="library" scope="PROVIDED" name="wkhtmltopdf-binary (v0.12.3.1, ruby-2.2.5-p319) [gem]" level="application" />
|
139
|
+
<orderEntry type="library" scope="PROVIDED" name="xml-mapping (v0.10.0, ruby-2.2.5-p319) [gem]" level="application" />
|
140
|
+
<orderEntry type="library" scope="PROVIDED" name="xml-mapping_extensions (v0.4.7, ruby-2.2.5-p319) [gem]" level="application" />
|
141
|
+
<orderEntry type="library" scope="PROVIDED" name="yard (v0.9.8, ruby-2.2.5-p319) [gem]" level="application" />
|
142
|
+
</component>
|
143
|
+
<component name="RModuleSettingsStorage">
|
144
|
+
<LOAD_PATH number="2" string0="$MODULE_DIR$/lib" string1="$MODULE_DIR$/spec" />
|
145
|
+
<I18N_FOLDERS number="0" />
|
146
|
+
</component>
|
147
|
+
</module>
|