dwc-archive 0.5.9 → 0.5.10

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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.9
1
+ 0.5.10
data/lib/dwc-archive.rb CHANGED
@@ -17,6 +17,7 @@ else
17
17
  end
18
18
 
19
19
  require 'logger'
20
+ require 'dwc-archive/xml_reader'
20
21
  require 'dwc-archive/ingester'
21
22
  require 'dwc-archive/errors'
22
23
  require 'dwc-archive/expander'
@@ -8,8 +8,8 @@ class DarwinCore
8
8
  @expander = DarwinCore::Expander.new(@archive_path, @tmp_dir)
9
9
  @expander.unpack
10
10
  if valid?
11
- @meta = Hash.from_xml(open(File.join(@expander.path, 'meta.xml')))
12
- @eml = files.include?("eml.xml") ? Hash.from_xml(open(File.join(@expander.path, 'eml.xml'))) : nil
11
+ @meta = DarwinCore::XmlReader.from_xml(open(File.join(@expander.path, 'meta.xml')))
12
+ @eml = files.include?("eml.xml") ? DarwinCore::XmlReader.from_xml(open(File.join(@expander.path, 'eml.xml'))) : nil
13
13
  else
14
14
  clean
15
15
  raise InvalidArchiveError
@@ -0,0 +1,64 @@
1
+ # USAGE: Hash.from_xml:(YOUR_XML_STRING)
2
+ require 'nokogiri'
3
+ # modified from http://stackoverflow.com/questions/1230741/convert-a-nokogiri-document-to-a-ruby-hash/1231297#1231297
4
+ class DarwinCore
5
+ module XmlReader
6
+ class << self
7
+ def from_xml(xml_io)
8
+ begin
9
+ result = Nokogiri::XML(xml_io)
10
+ return { result.root.name.to_sym => xml_node_to_hash(result.root)}
11
+ rescue Exception => e
12
+ raise e
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def xml_node_to_hash(node)
19
+ # If we are at the root of the document, start the hash
20
+ if node.element?
21
+ result_hash = {}
22
+ if node.attributes != {}
23
+ result_hash[:attributes] = {}
24
+ node.attributes.keys.each do |key|
25
+ result_hash[:attributes][node.attributes[key].name.to_sym] = prepare(node.attributes[key].value)
26
+ end
27
+ end
28
+ if node.children.size > 0
29
+ node.children.each do |child|
30
+ result = xml_node_to_hash(child)
31
+
32
+ if child.name == "text"
33
+ unless child.next_sibling || child.previous_sibling
34
+ return prepare(result)
35
+ end
36
+ elsif result_hash[child.name.to_sym]
37
+ if result_hash[child.name.to_sym].is_a?(Object::Array)
38
+ result_hash[child.name.to_sym] << prepare(result)
39
+ else
40
+ result_hash[child.name.to_sym] = [result_hash[child.name.to_sym]] << prepare(result)
41
+ end
42
+ else
43
+ result_hash[child.name.to_sym] = prepare(result)
44
+ end
45
+ end
46
+
47
+ return result_hash
48
+ else
49
+ return result_hash
50
+ end
51
+ else
52
+ return prepare(node.content.to_s)
53
+ end
54
+ end
55
+
56
+ def prepare(data)
57
+ return data if data.class != String
58
+ return true if data.strip == "true"
59
+ return false if data.strip == "false"
60
+ data.to_i.to_s == data ? data.to_i : data
61
+ end
62
+ end
63
+ end
64
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dwc-archive
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
- - 9
10
- version: 0.5.9
9
+ - 10
10
+ version: 0.5.10
11
11
  platform: ruby
12
12
  authors:
13
13
  - Dmitry Mozzherin
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-12-03 00:00:00 -05:00
18
+ date: 2010-12-13 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -75,7 +75,6 @@ extra_rdoc_files:
75
75
  - README.rdoc
76
76
  files:
77
77
  - .document
78
- - .gitignore
79
78
  - LICENSE
80
79
  - README.rdoc
81
80
  - Rakefile
@@ -99,7 +98,7 @@ files:
99
98
  - lib/dwc-archive/ingester.rb
100
99
  - lib/dwc-archive/metadata.rb
101
100
  - lib/dwc-archive/utf_regex_ruby18.rb
102
- - lib/ruby_extensions.rb
101
+ - lib/dwc-archive/xml_reader.rb
103
102
  - spec/files/broken.tar.gz
104
103
  - spec/files/data.tar.gz
105
104
  - spec/files/data.zip
@@ -123,8 +122,8 @@ homepage: http://github.com/GlobalNamesArchitecture/dwc-archive
123
122
  licenses: []
124
123
 
125
124
  post_install_message:
126
- rdoc_options:
127
- - --charset=UTF-8
125
+ rdoc_options: []
126
+
128
127
  require_paths:
129
128
  - lib
130
129
  required_ruby_version: !ruby/object:Gem::Requirement
data/.gitignore DELETED
@@ -1,24 +0,0 @@
1
- ## MAC OS
2
- .DS_Store
3
-
4
- ## TEXTMATE
5
- *.tmproj
6
- tmtags
7
-
8
- ## EMACS
9
- *~
10
- \#*
11
- .\#*
12
-
13
- ## VIM
14
- *.swp
15
-
16
- ## PROJECT::GENERAL
17
- coverage
18
- rdoc
19
- pkg
20
- *.gemspec
21
-
22
- ## PROJECT::SPECIFIC
23
- tags
24
- bin
@@ -1,67 +0,0 @@
1
- # USAGE: Hash.from_xml:(YOUR_XML_STRING)
2
- require 'nokogiri'
3
- # modified from http://stackoverflow.com/questions/1230741/convert-a-nokogiri-document-to-a-ruby-hash/1231297#1231297
4
-
5
- class Hash
6
- class << self
7
- def from_xml(xml_io)
8
- begin
9
- result = Nokogiri::XML(xml_io)
10
- return { result.root.name.to_sym => xml_node_to_hash(result.root)}
11
- rescue Exception => e
12
- raise e
13
- end
14
- end
15
-
16
- def xml_node_to_hash(node)
17
- # If we are at the root of the document, start the hash
18
- if node.element?
19
- result_hash = {}
20
- if node.attributes != {}
21
- result_hash[:attributes] = {}
22
- node.attributes.keys.each do |key|
23
- result_hash[:attributes][node.attributes[key].name.to_sym] = prepare(node.attributes[key].value)
24
- end
25
- end
26
- if node.children.size > 0
27
- node.children.each do |child|
28
- result = xml_node_to_hash(child)
29
-
30
- if child.name == "text"
31
- unless child.next_sibling || child.previous_sibling
32
- return prepare(result)
33
- end
34
- elsif result_hash[child.name.to_sym]
35
- if result_hash[child.name.to_sym].is_a?(Object::Array)
36
- result_hash[child.name.to_sym] << prepare(result)
37
- else
38
- result_hash[child.name.to_sym] = [result_hash[child.name.to_sym]] << prepare(result)
39
- end
40
- else
41
- result_hash[child.name.to_sym] = prepare(result)
42
- end
43
- end
44
-
45
- return result_hash
46
- else
47
- return result_hash
48
- end
49
- else
50
- return prepare(node.content.to_s)
51
- end
52
- end
53
-
54
- def prepare(data)
55
- return data if data.class != String
56
- return true if data.strip == "true"
57
- return false if data.strip == "false"
58
- data.to_i.to_s == data ? data.to_i : data
59
- end
60
- end
61
-
62
- def to_struct(struct_name)
63
- Struct.new(struct_name,*keys).new(*values)
64
- end
65
- end
66
-
67
-