sxp 0.0.1 → 0.0.2
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/AUTHORS +2 -1
- data/VERSION +1 -1
- data/lib/sxp/reader.rb +47 -20
- data/lib/sxp/version.rb +13 -4
- metadata +38 -12
- data/Rakefile +0 -8
data/AUTHORS
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
* Arto Bendiken <arto.bendiken@gmail.com>
|
1
|
+
* Arto Bendiken <arto.bendiken@gmail.com>
|
2
|
+
* Ben Lavender <blavender@gmail.com>
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.2
|
data/lib/sxp/reader.rb
CHANGED
@@ -1,29 +1,54 @@
|
|
1
1
|
module SXP
|
2
|
-
|
3
|
-
# Reads
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
#
|
9
|
-
def self.
|
10
|
-
|
2
|
+
##
|
3
|
+
# Reads all S-expressions from a given input URI using the HTTP or FTP
|
4
|
+
# protocols.
|
5
|
+
#
|
6
|
+
# @param [String, #to_s] url
|
7
|
+
# @param [Hash{Symbol => Object}] options
|
8
|
+
# @return [Enumerable<Object>]
|
9
|
+
def self.read_url(url, options = {})
|
10
|
+
require 'openuri'
|
11
|
+
open(url.to_s, 'rb', nil, options) { |io| read_all(io, options) }
|
11
12
|
end
|
12
13
|
|
14
|
+
##
|
13
15
|
# Reads all S-expressions from the given input files.
|
16
|
+
#
|
17
|
+
# @param [Enumerable<String>] filenames
|
18
|
+
# @param [Hash{Symbol => Object}] options
|
19
|
+
# @return [Enumerable<Object>]
|
14
20
|
def self.read_files(*filenames)
|
15
|
-
filenames.map { |filename| read_file(filename) }.inject { |sxps, sxp| sxps + sxp }
|
21
|
+
filenames.map { |filename| read_file(filename, options) }.inject { |sxps, sxp| sxps + sxp }
|
16
22
|
end
|
17
23
|
|
24
|
+
##
|
18
25
|
# Reads all S-expressions from a given input file.
|
19
|
-
|
20
|
-
|
26
|
+
#
|
27
|
+
# @param [String, #to_s] filename
|
28
|
+
# @param [Hash{Symbol => Object}] options
|
29
|
+
# @return [Enumerable<Object>]
|
30
|
+
def self.read_file(filename, options = {})
|
31
|
+
File.open(filename.to_s, 'rb') { |io| read_all(io, options) }
|
21
32
|
end
|
22
33
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
34
|
+
##
|
35
|
+
# Reads all S-expressions from the given input stream.
|
36
|
+
#
|
37
|
+
# @param [IO, StringIO, String] input
|
38
|
+
# @param [Hash{Symbol => Object}] options
|
39
|
+
# @return [Enumerable<Object>]
|
40
|
+
def self.read_all(input, options = {})
|
41
|
+
Reader.new(input, options).read_all
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# Reads one S-expression from the given input stream.
|
46
|
+
#
|
47
|
+
# @param [IO, StringIO, String] input
|
48
|
+
# @param [Hash{Symbol => Object}] options
|
49
|
+
# @return [Object]
|
50
|
+
def self.read(input, options = {})
|
51
|
+
Reader.new(input, options).read
|
27
52
|
end
|
28
53
|
|
29
54
|
class << self
|
@@ -31,7 +56,9 @@ module SXP
|
|
31
56
|
alias_method :parse_all, :read_all
|
32
57
|
alias_method :parse_files, :read_files
|
33
58
|
alias_method :parse_file, :read_file
|
34
|
-
alias_method :
|
59
|
+
alias_method :parse_url, :read_url
|
60
|
+
alias_method :parse_uri, :read_url # @deprecated
|
61
|
+
alias_method :read_uri, :read_url # @deprecated
|
35
62
|
end
|
36
63
|
|
37
64
|
class Reader
|
@@ -40,7 +67,7 @@ module SXP
|
|
40
67
|
class Error < StandardError; end
|
41
68
|
class EOF < Error; end
|
42
69
|
|
43
|
-
FLOAT = /^[+-]?(
|
70
|
+
FLOAT = /^[+-]?(\d*)?\.\d*$/
|
44
71
|
INTEGER_BASE_2 = /^[+-]?[01]+$/
|
45
72
|
INTEGER_BASE_8 = /^[+-]?[0-7]+$/
|
46
73
|
INTEGER_BASE_10 = /^[+-]?\d+$/
|
@@ -50,7 +77,7 @@ module SXP
|
|
50
77
|
|
51
78
|
attr_reader :input
|
52
79
|
|
53
|
-
def initialize(input)
|
80
|
+
def initialize(input, options = {})
|
54
81
|
case
|
55
82
|
when [:getc, :ungetc, :eof?].all? { |x| input.respond_to?(x) }
|
56
83
|
@input = input
|
@@ -68,7 +95,7 @@ module SXP
|
|
68
95
|
|
69
96
|
def read_all(options = {})
|
70
97
|
list = []
|
71
|
-
catch (:eof) { list << read(:eof => :throw
|
98
|
+
catch (:eof) { list << read(options.merge(:eof => :throw)) until eof? }
|
72
99
|
list
|
73
100
|
end
|
74
101
|
|
data/lib/sxp/version.rb
CHANGED
@@ -1,14 +1,23 @@
|
|
1
1
|
module SXP
|
2
|
-
module VERSION
|
2
|
+
module VERSION
|
3
3
|
MAJOR = 0
|
4
4
|
MINOR = 0
|
5
|
-
TINY =
|
5
|
+
TINY = 2
|
6
6
|
EXTRA = nil
|
7
7
|
|
8
8
|
STRING = [MAJOR, MINOR, TINY].join('.')
|
9
|
-
STRING << "
|
9
|
+
STRING << ".#{EXTRA}" if EXTRA
|
10
10
|
|
11
|
-
|
11
|
+
##
|
12
|
+
# @return [String]
|
13
|
+
def self.to_s() STRING end
|
14
|
+
|
15
|
+
##
|
16
|
+
# @return [String]
|
12
17
|
def self.to_str() STRING end
|
18
|
+
|
19
|
+
##
|
20
|
+
# @return [Array(Integer, Integer, Integer)]
|
21
|
+
def self.to_a() [MAJOR, MINOR, TINY] end
|
13
22
|
end
|
14
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sxp
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Arto Bendiken
|
@@ -9,24 +14,42 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date:
|
13
|
-
default_executable:
|
17
|
+
date: 2010-05-13 00:00:00 +02:00
|
18
|
+
default_executable: sxp2rdf
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: rspec
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 3
|
30
|
+
- 0
|
31
|
+
version: 1.3.0
|
17
32
|
type: :development
|
18
|
-
|
19
|
-
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: yard
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
20
38
|
requirements:
|
21
39
|
- - ">="
|
22
40
|
- !ruby/object:Gem::Version
|
23
|
-
|
24
|
-
|
41
|
+
segments:
|
42
|
+
- 0
|
43
|
+
- 5
|
44
|
+
- 4
|
45
|
+
version: 0.5.4
|
46
|
+
type: :development
|
47
|
+
version_requirements: *id002
|
25
48
|
description: " SXP is a data interchange format based on S-expressions, the simplest and\n most versatile known means of representing complex data structures such as\n lists, trees and graphs.\n"
|
26
49
|
email: arto.bendiken@gmail.com
|
27
50
|
executables:
|
28
|
-
- sxp2json
|
29
51
|
- sxp2rdf
|
52
|
+
- sxp2json
|
30
53
|
- sxp2xml
|
31
54
|
- sxp2yaml
|
32
55
|
extensions: []
|
@@ -36,7 +59,6 @@ extra_rdoc_files: []
|
|
36
59
|
files:
|
37
60
|
- AUTHORS
|
38
61
|
- README
|
39
|
-
- Rakefile
|
40
62
|
- UNLICENSE
|
41
63
|
- VERSION
|
42
64
|
- lib/sxp/extensions.rb
|
@@ -60,18 +82,22 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
60
82
|
requirements:
|
61
83
|
- - ">="
|
62
84
|
- !ruby/object:Gem::Version
|
85
|
+
segments:
|
86
|
+
- 1
|
87
|
+
- 8
|
88
|
+
- 2
|
63
89
|
version: 1.8.2
|
64
|
-
version:
|
65
90
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
91
|
requirements:
|
67
92
|
- - ">="
|
68
93
|
- !ruby/object:Gem::Version
|
94
|
+
segments:
|
95
|
+
- 0
|
69
96
|
version: "0"
|
70
|
-
version:
|
71
97
|
requirements: []
|
72
98
|
|
73
99
|
rubyforge_project: sxp
|
74
|
-
rubygems_version: 1.3.
|
100
|
+
rubygems_version: 1.3.6
|
75
101
|
signing_key:
|
76
102
|
specification_version: 3
|
77
103
|
summary: A pure-Ruby implementation of the SXP data interchange format.
|