diff --git a/CHANGELOG b/CHANGELOG index 244cc69..402e160 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,5 @@ +0.9.7 Refactoring and tests improvements + 0.9.6 Added support for GNUB DwCA files 0.9.4 Gem dependencies updated, added travis support diff --git a/lib/dwc-archive.rb b/lib/dwc-archive.rb index e565012..ff05460 100644 --- a/lib/dwc-archive.rb +++ b/lib/dwc-archive.rb @@ -26,12 +26,12 @@ class DarwinCore VERSION = DarwinCore::VERSION + DEFAULT_TMP_DIR = "/tmp" attr_reader :archive, :core, :metadata, :extensions, :classification_normalizer alias :eml :metadata - DEFAULT_TMP_DIR = "/tmp" def self.nil_field?(field) return true if [nil, '', '/N'].include?(field) diff --git a/lib/dwc-archive/version.rb b/lib/dwc-archive/version.rb index e1da5eb..0967faa 100644 --- a/lib/dwc-archive/version.rb +++ b/lib/dwc-archive/version.rb @@ -1,3 +1,3 @@ class DarwinCore - VERSION = "0.9.6" + VERSION = "0.9.10" end diff --git a/spec/lib/generator_eml_xml_spec.rb b/spec/lib/generator_eml_xml_spec.rb new file mode 100644 index 0000000..92dadc8 --- /dev/null +++ b/spec/lib/generator_eml_xml_spec.rb @@ -0,0 +1,21 @@ +require_relative '../spec_helper' + +describe DarwinCore::Generator::EmlXml do + subject(:eml) { DarwinCore::Generator::EmlXml.new(data, path) } + let(:data) { EML_DATA } + let(:path) { DarwinCore::DEFAULT_TMP_DIR } + + describe '.new' do + it 'initializes generator' do + expect(eml).to be_kind_of DarwinCore::Generator::EmlXml + end + end + + describe '#create' do + it 'should create eml xml' do + eml.create + eml_xml = File.read(File.join(path, 'eml.xml')) + expect(eml_xml).to match /Test Classification/ + end + end +end diff --git a/spec/lib/generator_meta_xml_spec.rb b/spec/lib/generator_meta_xml_spec.rb new file mode 100644 index 0000000..30ab494 --- /dev/null +++ b/spec/lib/generator_meta_xml_spec.rb @@ -0,0 +1,21 @@ +require_relative '../spec_helper' + +describe DarwinCore::Generator::MetaXml do + subject(:meta) { DarwinCore::Generator::MetaXml.new(data, path) } + let(:data) { META_DATA } + let(:path) { DarwinCore::DEFAULT_TMP_DIR } + + describe '.new' do + it 'initializes' do + expect(meta).to be_kind_of DarwinCore::Generator::MetaXml + end + end + + describe '#create' do + it 'creates metadata file' do + meta.create + meta = File.read(File.join(path, 'meta.xml')) + expect(meta).to match %r|core.csv| + end + end +end diff --git a/spec/lib/generator_spec.rb b/spec/lib/generator_spec.rb new file mode 100644 index 0000000..f707533 --- /dev/null +++ b/spec/lib/generator_spec.rb @@ -0,0 +1,116 @@ +# encoding: utf-8 +require_relative '../spec_helper' + +describe DarwinCore::Generator do + subject(:gen) { DarwinCore::Generator.new(dwc_path, tmp_dir) } + let(:tmp_dir) { DarwinCore::DEFAULT_TMP_DIR } + let(:dwc_path) { File.join(tmp_dir, 'spec_dwca.tar.gz') } + + describe '.new' do + it 'initializes empty DwCA' do + expect(gen).to be_kind_of DarwinCore::Generator + end + end + + describe '#add_core' do + it 'adds core to DwCA instance' do + gen.add_core(CORE_DATA.dup, 'core.csv', true) + core = File.read(File.join(gen.path, 'core.csv')) + expect(core).to match /taxonID,parentNameUsageID,scientificName/ + end + + context 'urls are not given in header' do + it 'raises error' do + data = CORE_DATA.dup + data[0] = data[0].map { |f| f.split('/')[-1] } + expect { gen.add_core(data, 'core.csv', true) }. + to raise_error DarwinCore::GeneratorError + end + end + end + + describe '#add_extension' do + it 'adds extension to DwCA instance' do + gen.add_extension(EXTENSION_DATA.dup, + 'vern.csv', + true, + 'http://rs.gbif.org/terms/1.0/VernacularName') + extension = File.read(File.join(gen.path, 'vern.csv')) + + expect(extension).to match /Береза/ + end + end + + describe '#add_meta_xml' do + it 'creates metadata for DwCA' do + gen.add_core(CORE_DATA.dup, 'core.csv', true) + gen.add_extension(EXTENSION_DATA.dup, + 'vern.csv', + true, + 'http://rs.gbif.org/terms/1.0/VernacularName') + + gen.add_meta_xml + meta = File.read(File.join(gen.path, 'meta.xml')) + expect(meta).to match %r|core.csv| + end + end + + describe '#add_eml_data' do + it 'adds eml data' do + gen.add_eml_xml(EML_DATA) + eml = File.read(File.join(gen.path, 'eml.xml')) + expect(eml).to match /jdoe@example.com/ + end + end + + describe '#path' do + it 'returns temporary path for assembling DwCA' do + expect(gen.path).to match /dwc_\d+$/ + end + end + + describe '#files' do + it 'returns created files' do + gen.add_core(CORE_DATA.dup, 'core.csv', true) + gen.add_extension(EXTENSION_DATA.dup, + 'vern.csv', + true, + 'http://rs.gbif.org/terms/1.0/VernacularName') + + gen.add_meta_xml + expect(gen.files).to match_array ['core.csv', 'meta.xml', 'vern.csv'] + end + end + + describe '#pack' do + it 'creates final DwCA file' do + FileUtils.rm dwc_path if File.exists?(dwc_path) + gen.add_core(CORE_DATA.dup, 'core.csv', true) + gen.add_extension(EXTENSION_DATA.dup, + 'vern.csv', + true, + 'http://rs.gbif.org/terms/1.0/VernacularName') + + gen.add_meta_xml + gen.add_eml_xml(EML_DATA) + gen.pack + expect(File.exists?(dwc_path)).to be_true + end + end + + describe '#clean' do + it 'removes temporary directory for DwCA' do + gen.add_eml_xml(EML_DATA) + expect(File.exists?(gen.path)).to be true + gen.clean + expect(File.exists?(gen.path)).to be false + end + end + + describe '#eml_xml_data' do + it 'returns current eml data' do + expect(gen.eml_xml_data).to be_kind_of Hash + end + end + +end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 2b4fc11..8a0f392 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -1,3 +1,4 @@ +# encoding: utf-8 # HACK: to suppress warnings $VERBOSE = nil @@ -12,3 +13,66 @@ RSpec.configure do |config| end +unless defined?(SPEC_CONSTANTS) + EML_DATA = { + id: '1234', + license: 'http://creativecommons.org/licenses/by-sa/3.0/', + title: 'Test Classification', + authors: [ + { first_name: 'John', + last_name: 'Doe', + email: 'jdoe@example.com', + organization: 'Example', + position: 'Assistant Professor', + url: 'http://example.org' }, + { first_name: 'Jane', + last_name: 'Doe', + email: 'jane@example.com' } + ], + metadata_providers: [ + { first_name: 'Jim', + last_name: 'Doe', + email: 'jimdoe@example.com', + url: 'http://aggregator.example.org' }], + abstract: 'test classification', + citation: + 'Test classification: Doe John, Doe Jane, Taxnonmy, 10, 1, 2010', + url: 'http://example.com' + } + META_DATA = { + extensions: [ + {fields: [ + 'http://rs.tdwg.org/dwc/terms/TaxonID', + 'http://rs.tdwg.org/dwc/terms/vernacularName'], + ignoreHeaderLines: 1, + location: 'vern.csv', + rowType: 'http://rs.gbif.org/terms/1.0/VernacularName'}], + core: { + fields: [ + 'http://rs.tdwg.org/dwc/terms/taxonID', + 'http://rs.tdwg.org/dwc/terms/parentNameUsageID', + 'http://rs.tdwg.org/dwc/terms/scientificName', + 'http://rs.tdwg.org/dwc/terms/taxonRank'], + ignoreHeaderLines: 1, + location: 'core.csv'}} + CORE_DATA = [ + ["http://rs.tdwg.org/dwc/terms/taxonID", + "http://rs.tdwg.org/dwc/terms/parentNameUsageID", + "http://rs.tdwg.org/dwc/terms/scientificName", + "http://rs.tdwg.org/dwc/terms/taxonRank"], + [1, 0, "Plantae", "kingdom"], + [2, 1, "Betula", "genus"], + [3, 2, "Betula verucosa", "species"] + ] + EXTENSION_DATA = [ + ["http://rs.tdwg.org/dwc/terms/TaxonID", + "http://rs.tdwg.org/dwc/terms/vernacularName"], + [1, "Plants"], + [1, "Растения"], + [2, "Birch"], + [2, "Береза"], + [3, "Wheeping Birch"], + [3, "Береза плакучая"] + ] + SPEC_CONSTANTS = true +end