athena 0.0.1.53
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/COPYING +676 -0
- data/ChangeLog +5 -0
- data/README +33 -0
- data/Rakefile +23 -0
- data/bin/athena +165 -0
- data/example/config.yaml +72 -0
- data/example/example.xml +26 -0
- data/example/sisis-ex.txt +90 -0
- data/lib/athena.rb +68 -0
- data/lib/athena/formats.rb +77 -0
- data/lib/athena/formats/dbm.rb +65 -0
- data/lib/athena/formats/sisis.rb +83 -0
- data/lib/athena/formats/xml.rb +278 -0
- data/lib/athena/parser.rb +90 -0
- data/lib/athena/record.rb +97 -0
- data/lib/athena/util.rb +50 -0
- data/lib/athena/version.rb +55 -0
- metadata +81 -0
@@ -0,0 +1,90 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of athena, the database file converter. #
|
5
|
+
# #
|
6
|
+
# Copyright (C) 2007 University of Cologne, #
|
7
|
+
# Albertus-Magnus-Platz, #
|
8
|
+
# 50932 Cologne, Germany #
|
9
|
+
# #
|
10
|
+
# Authors: #
|
11
|
+
# Jens Wille <jens.wille@uni-koeln.de> #
|
12
|
+
# #
|
13
|
+
# athena is free software; you can redistribute it and/or modify it under the #
|
14
|
+
# terms of the GNU General Public License as published by the Free Software #
|
15
|
+
# Foundation; either version 3 of the License, or (at your option) any later #
|
16
|
+
# version. #
|
17
|
+
# #
|
18
|
+
# athena is distributed in the hope that it will be useful, but WITHOUT ANY #
|
19
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
|
20
|
+
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more #
|
21
|
+
# details. #
|
22
|
+
# #
|
23
|
+
# You should have received a copy of the GNU General Public License along #
|
24
|
+
# with athena. If not, see <http://www.gnu.org/licenses/>. #
|
25
|
+
# #
|
26
|
+
###############################################################################
|
27
|
+
#++
|
28
|
+
|
29
|
+
module Athena
|
30
|
+
|
31
|
+
class Parser
|
32
|
+
|
33
|
+
include Util
|
34
|
+
|
35
|
+
attr_reader :config, :spec
|
36
|
+
attr_accessor :block
|
37
|
+
|
38
|
+
def initialize(config, spec)
|
39
|
+
@config = build_config(config)
|
40
|
+
@spec = Athena::Formats[:in, spec].new(self)
|
41
|
+
end
|
42
|
+
|
43
|
+
def parse(source, &block)
|
44
|
+
self.block = block
|
45
|
+
|
46
|
+
spec.parse(source)
|
47
|
+
Athena::Record.records
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def build_config(config)
|
53
|
+
config.inject({}) { |hash, (field, v)|
|
54
|
+
if field.to_s =~ /^__/
|
55
|
+
hash.merge(field => v)
|
56
|
+
else
|
57
|
+
case v
|
58
|
+
when String, Array
|
59
|
+
elements = [*v]
|
60
|
+
v = {}
|
61
|
+
when Hash
|
62
|
+
elements = v[:elements] || v[:element].to_a
|
63
|
+
|
64
|
+
raise ArgumentError, "no elements specified for field #{field}" unless elements.is_a?(Array)
|
65
|
+
else
|
66
|
+
raise ArgumentError, "illegal value for field #{field}"
|
67
|
+
end
|
68
|
+
|
69
|
+
separator = v[:separator] || ', '
|
70
|
+
|
71
|
+
elements.each { |element|
|
72
|
+
verbose(:config) do
|
73
|
+
spit "#{field.to_s.upcase} -> #{element}"
|
74
|
+
end
|
75
|
+
|
76
|
+
(hash[element] ||= {})[field] = {
|
77
|
+
:string => v[:string] || ['%s'] * elements.size * separator,
|
78
|
+
:empty => v[:empty] || '<<EMPTY>>',
|
79
|
+
:elements => elements
|
80
|
+
}
|
81
|
+
}
|
82
|
+
|
83
|
+
hash
|
84
|
+
end
|
85
|
+
}
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of athena, the database file converter. #
|
5
|
+
# #
|
6
|
+
# Copyright (C) 2007 University of Cologne, #
|
7
|
+
# Albertus-Magnus-Platz, #
|
8
|
+
# 50932 Cologne, Germany #
|
9
|
+
# #
|
10
|
+
# Authors: #
|
11
|
+
# Jens Wille <jens.wille@uni-koeln.de> #
|
12
|
+
# #
|
13
|
+
# athena is free software; you can redistribute it and/or modify it under the #
|
14
|
+
# terms of the GNU General Public License as published by the Free Software #
|
15
|
+
# Foundation; either version 3 of the License, or (at your option) any later #
|
16
|
+
# version. #
|
17
|
+
# #
|
18
|
+
# athena is distributed in the hope that it will be useful, but WITHOUT ANY #
|
19
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
|
20
|
+
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more #
|
21
|
+
# details. #
|
22
|
+
# #
|
23
|
+
# You should have received a copy of the GNU General Public License along #
|
24
|
+
# with athena. If not, see <http://www.gnu.org/licenses/>. #
|
25
|
+
# #
|
26
|
+
###############################################################################
|
27
|
+
#++
|
28
|
+
|
29
|
+
module Athena
|
30
|
+
|
31
|
+
class Record
|
32
|
+
|
33
|
+
include Util
|
34
|
+
|
35
|
+
@records = []
|
36
|
+
|
37
|
+
class << self
|
38
|
+
|
39
|
+
def records
|
40
|
+
@records
|
41
|
+
end
|
42
|
+
|
43
|
+
def [](field = nil, config = nil)
|
44
|
+
record = records.last
|
45
|
+
raise NoRecordError unless record
|
46
|
+
|
47
|
+
record.fill(field, config) if field && config
|
48
|
+
record
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
attr_reader :struct, :block, :id
|
54
|
+
|
55
|
+
def initialize(block, id = object_id.abs)
|
56
|
+
self.class.records << self
|
57
|
+
|
58
|
+
@struct = {}
|
59
|
+
@block = block
|
60
|
+
@id = id
|
61
|
+
end
|
62
|
+
|
63
|
+
def fill(field, config)
|
64
|
+
struct[field] ||= config.merge({ :values => Hash.new { |h, k| h[k] = [] } })
|
65
|
+
end
|
66
|
+
|
67
|
+
def update(element, data, field_config = nil)
|
68
|
+
if field_config
|
69
|
+
field_config.each { |field, config|
|
70
|
+
fill(field, config)
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
struct.each_key { |field|
|
75
|
+
verbose(:data) do
|
76
|
+
value = data.strip
|
77
|
+
spit "#{field.to_s.upcase}[#{element}] << #{value}" unless value.empty?
|
78
|
+
end
|
79
|
+
|
80
|
+
struct[field][:values][element] << data
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
def close
|
85
|
+
block ? block[self] : self
|
86
|
+
end
|
87
|
+
|
88
|
+
def to(format)
|
89
|
+
Athena::Formats[:out, format].convert(self)
|
90
|
+
end
|
91
|
+
|
92
|
+
class NoRecordError < StandardError
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
end
|
data/lib/athena/util.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of athena, the database file converter. #
|
5
|
+
# #
|
6
|
+
# Copyright (C) 2007 University of Cologne, #
|
7
|
+
# Albertus-Magnus-Platz, #
|
8
|
+
# 50932 Cologne, Germany #
|
9
|
+
# #
|
10
|
+
# Authors: #
|
11
|
+
# Jens Wille <jens.wille@uni-koeln.de> #
|
12
|
+
# #
|
13
|
+
# athena is free software; you can redistribute it and/or modify it under the #
|
14
|
+
# terms of the GNU General Public License as published by the Free Software #
|
15
|
+
# Foundation; either version 3 of the License, or (at your option) any later #
|
16
|
+
# version. #
|
17
|
+
# #
|
18
|
+
# athena is distributed in the hope that it will be useful, but WITHOUT ANY #
|
19
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
|
20
|
+
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more #
|
21
|
+
# details. #
|
22
|
+
# #
|
23
|
+
# You should have received a copy of the GNU General Public License along #
|
24
|
+
# with athena. If not, see <http://www.gnu.org/licenses/>. #
|
25
|
+
# #
|
26
|
+
###############################################################################
|
27
|
+
#++
|
28
|
+
|
29
|
+
module Athena
|
30
|
+
|
31
|
+
module Util
|
32
|
+
|
33
|
+
extend self
|
34
|
+
|
35
|
+
def verbose(what, klass = self.class, &block)
|
36
|
+
if $_VERBOSE[what]
|
37
|
+
klass.send(:define_method, :spit) { |msg|
|
38
|
+
warn "*#{what}: #{msg}"
|
39
|
+
}
|
40
|
+
klass.send(:define_method, :indent) { |*level|
|
41
|
+
' ' * (level.first || 0)
|
42
|
+
}
|
43
|
+
|
44
|
+
instance_eval(&block)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
#--
|
2
|
+
###############################################################################
|
3
|
+
# #
|
4
|
+
# A component of athena, the database file converter. #
|
5
|
+
# #
|
6
|
+
# Copyright (C) 2007 University of Cologne, #
|
7
|
+
# Albertus-Magnus-Platz, #
|
8
|
+
# 50932 Cologne, Germany #
|
9
|
+
# #
|
10
|
+
# Authors: #
|
11
|
+
# Jens Wille <jens.wille@uni-koeln.de> #
|
12
|
+
# #
|
13
|
+
# athena is free software; you can redistribute it and/or modify it under the #
|
14
|
+
# terms of the GNU General Public License as published by the Free Software #
|
15
|
+
# Foundation; either version 3 of the License, or (at your option) any later #
|
16
|
+
# version. #
|
17
|
+
# #
|
18
|
+
# athena is distributed in the hope that it will be useful, but WITHOUT ANY #
|
19
|
+
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
|
20
|
+
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more #
|
21
|
+
# details. #
|
22
|
+
# #
|
23
|
+
# You should have received a copy of the GNU General Public License along #
|
24
|
+
# with athena. If not, see <http://www.gnu.org/licenses/>. #
|
25
|
+
# #
|
26
|
+
###############################################################################
|
27
|
+
#++
|
28
|
+
|
29
|
+
module Athena
|
30
|
+
|
31
|
+
module Version
|
32
|
+
|
33
|
+
MAJOR = 0
|
34
|
+
MINOR = 0
|
35
|
+
TINY = 1
|
36
|
+
|
37
|
+
class << self
|
38
|
+
|
39
|
+
# Returns array representation.
|
40
|
+
def to_a
|
41
|
+
[MAJOR, MINOR, TINY]
|
42
|
+
end
|
43
|
+
|
44
|
+
# Short-cut for version string.
|
45
|
+
def to_s
|
46
|
+
to_a.join('.')
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
VERSION = Version.to_s
|
54
|
+
|
55
|
+
end
|
metadata
ADDED
@@ -0,0 +1,81 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.4
|
3
|
+
specification_version: 1
|
4
|
+
name: athena
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.0.1.53
|
7
|
+
date: 2007-10-11 00:00:00 +02:00
|
8
|
+
summary: Convert database files to various formats
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email: jens.wille@uni-koeln.de
|
12
|
+
homepage:
|
13
|
+
rubyforge_project:
|
14
|
+
description:
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors:
|
30
|
+
- Jens Wille
|
31
|
+
files:
|
32
|
+
- lib/athena.rb
|
33
|
+
- lib/athena/formats.rb
|
34
|
+
- lib/athena/version.rb
|
35
|
+
- lib/athena/util.rb
|
36
|
+
- lib/athena/record.rb
|
37
|
+
- lib/athena/parser.rb
|
38
|
+
- lib/athena/formats/sisis.rb
|
39
|
+
- lib/athena/formats/xml.rb
|
40
|
+
- lib/athena/formats/dbm.rb
|
41
|
+
- bin/athena
|
42
|
+
- COPYING
|
43
|
+
- README
|
44
|
+
- ChangeLog
|
45
|
+
- Rakefile
|
46
|
+
- example/sisis-ex.txt
|
47
|
+
- example/config.yaml
|
48
|
+
- example/example.xml
|
49
|
+
test_files: []
|
50
|
+
|
51
|
+
rdoc_options: []
|
52
|
+
|
53
|
+
extra_rdoc_files:
|
54
|
+
- README
|
55
|
+
- COPYING
|
56
|
+
- ChangeLog
|
57
|
+
executables:
|
58
|
+
- athena
|
59
|
+
extensions: []
|
60
|
+
|
61
|
+
requirements: []
|
62
|
+
|
63
|
+
dependencies:
|
64
|
+
- !ruby/object:Gem::Dependency
|
65
|
+
name: xmlstreamin
|
66
|
+
version_requirement:
|
67
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">"
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 0.0.0
|
72
|
+
version:
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: ruby-nuggets
|
75
|
+
version_requirement:
|
76
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 0.0.0
|
81
|
+
version:
|