edn_turbo 0.5.5 → 0.5.6
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.
- checksums.yaml +4 -4
- data/README.md +7 -7
- data/ext/edn_turbo/extconf.rb +39 -15
- data/lib/edn_turbo/edn_parser.rb +11 -9
- data/lib/edn_turbo/version.rb +2 -2
- data/test/test_output_diff.rb +16 -22
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 55486f37f4ec63643add89b5ca31256f4e5e71eb
|
4
|
+
data.tar.gz: 1114085a545a160ab5329c0332574850a02bbf3e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e10e95095bebcfc3b2216dd231642c0dfaf007e9a63ff05f177eb8e9f227ede8ff5ca2645bddd5dfaadb8b653c7413d8c8db96700e3bc6af4a2892b1e0f52b63
|
7
|
+
data.tar.gz: e1468de18ccd2b6de6d8ade7674dbcc863aa5a9119961697f186a081a0b3b22f7ba595d563e598587b83febf5b92239b39023233bad0482ab9e5a11867863c30
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
edn_turbo
|
2
|
-
|
1
|
+
edn_turbo 0.5.6
|
2
|
+
===============
|
3
3
|
|
4
4
|
Fast Ragel-based EDN parser for Ruby.
|
5
5
|
|
@@ -37,8 +37,8 @@ Dependencies
|
|
37
37
|
============
|
38
38
|
|
39
39
|
- ruby gems:
|
40
|
-
- [rake
|
41
|
-
- [rake-compiler 0
|
40
|
+
- [rake](http://rake.rubyforge.org)
|
41
|
+
- [rake-compiler 1.0](http://rake-compiler.rubyforge.org)
|
42
42
|
- [edn 1.1](https://github.com/relevance/edn-ruby)
|
43
43
|
- [icu4c](http://icu-project.org/apiref/icu4c/)
|
44
44
|
|
@@ -49,9 +49,9 @@ Notes:
|
|
49
49
|
- `edn_turbo` uses a ragel-based parser but the generated .cc file is
|
50
50
|
bundled so ragel should not need to be installed.
|
51
51
|
|
52
|
-
-
|
53
|
-
|
54
|
-
|
52
|
+
- If the gem fails to install due to a compilation error, make sure you
|
53
|
+
have `icu4c` installed. The reported gem install error doesn't make
|
54
|
+
it clear this is the issue.
|
55
55
|
|
56
56
|
Usage
|
57
57
|
=====
|
data/ext/edn_turbo/extconf.rb
CHANGED
@@ -2,24 +2,48 @@
|
|
2
2
|
|
3
3
|
require 'mkmf'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
5
|
+
header_dirs =
|
6
|
+
if RUBY_PLATFORM =~ /darwin/
|
7
|
+
abort "\n>> failed to find pkg-config binary - Is brew installed? If so, run 'brew install pkg-config'?\n\n" unless
|
8
|
+
File.exist?('/usr/local/bin/pkg-config')
|
9
|
+
|
10
|
+
abort "\n>> failed to find icu4c package - Did you run 'brew install icu4c'?\n\n" unless
|
11
|
+
File.exist?('/usr/local/opt/icu4c/lib/pkgconfig/icu-uc.pc')
|
12
|
+
|
13
|
+
i_opt = %x[ export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig" && /usr/local/bin/pkg-config --cflags-only-I icu-uc ]
|
14
|
+
[
|
15
|
+
i_opt[/-I(.+?)\s/,1]
|
16
|
+
].freeze
|
17
|
+
else
|
18
|
+
[
|
19
|
+
'/usr/local/include',
|
20
|
+
'/usr/local/opt/icu4c/include',
|
21
|
+
'/usr/include'
|
22
|
+
].freeze
|
23
|
+
end
|
24
|
+
|
25
|
+
lib_dirs =
|
26
|
+
if RUBY_PLATFORM =~ /darwin/
|
27
|
+
l_opt = %x[ /usr/local/bin/pkg-config --libs icu-uc ]
|
28
|
+
[
|
29
|
+
l_opt[/-L(.+?)\s/,1]
|
30
|
+
].freeze
|
31
|
+
else
|
32
|
+
[
|
33
|
+
'/usr/local/lib', # must be the first entry; add others after it
|
34
|
+
'/usr/local/opt/icu4c/lib'
|
35
|
+
].freeze
|
36
|
+
end
|
37
|
+
|
38
|
+
dir_config('icuuc', header_dirs, lib_dirs)
|
17
39
|
|
18
40
|
# feels very hackish to do this but the new icu4c needs it on MacOS
|
19
|
-
$CXXFLAGS << ' -stdlib=libc++ -std=c++11' if RUBY_PLATFORM
|
41
|
+
$CXXFLAGS << ' -stdlib=libc++ -std=c++11' if RUBY_PLATFORM.match?(/darwin/)
|
20
42
|
|
21
|
-
abort
|
43
|
+
abort "\n>> failed to find icu4c headers - is icu4c installed?\n\n" unless
|
44
|
+
find_header('unicode/uversion.h')
|
22
45
|
|
23
|
-
abort
|
46
|
+
abort "\n>> failed to find icu4c library - is icu4c installed?\n\n" unless
|
47
|
+
have_library('icuuc')
|
24
48
|
|
25
49
|
create_makefile('edn_turbo/edn_turbo')
|
data/lib/edn_turbo/edn_parser.rb
CHANGED
@@ -5,15 +5,7 @@
|
|
5
5
|
module EDNT
|
6
6
|
# Bind the given meta to the value.
|
7
7
|
def self.extend_for_meta(value, ext_meta)
|
8
|
-
|
9
|
-
|
10
|
-
metadata = meta.reduce({}) do |acc, m|
|
11
|
-
case m
|
12
|
-
when Symbol then acc.merge(m => true)
|
13
|
-
when EDN::Type::Symbol then acc.merge(tag: m)
|
14
|
-
else acc.merge(m)
|
15
|
-
end
|
16
|
-
end
|
8
|
+
metadata = EDNT.merge_meta(ext_meta)
|
17
9
|
|
18
10
|
unless metadata.empty?
|
19
11
|
value.extend EDN::Metadata
|
@@ -22,4 +14,14 @@ module EDNT
|
|
22
14
|
|
23
15
|
value
|
24
16
|
end
|
17
|
+
|
18
|
+
def self.merge_meta(meta)
|
19
|
+
meta.reduce({}) do |acc, m|
|
20
|
+
case m
|
21
|
+
when Symbol then acc.merge(m => true)
|
22
|
+
when EDN::Type::Symbol then acc.merge(tag: m)
|
23
|
+
else acc.merge(m)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
25
27
|
end
|
data/lib/edn_turbo/version.rb
CHANGED
data/test/test_output_diff.rb
CHANGED
@@ -1,23 +1,27 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
3
5
|
$LOAD_PATH << File.expand_path(File.dirname(__FILE__) + '/../lib')
|
4
6
|
require 'minitest/autorun'
|
5
7
|
require 'edn_turbo'
|
6
8
|
require 'date'
|
7
9
|
|
8
10
|
class EDNT_Test < Minitest::Test
|
11
|
+
#
|
12
|
+
# helpers
|
9
13
|
def setup
|
10
14
|
@parser = EDNT::Parser.new
|
11
15
|
end
|
12
16
|
|
13
17
|
def check_file(file, expected_output)
|
14
18
|
output = nil
|
15
|
-
File.open(file)
|
19
|
+
File.open(file) do |source|
|
16
20
|
input = source.instance_of?(String) ? source : source.read
|
17
21
|
|
18
22
|
# test using parse() first
|
19
23
|
output = @parser.parse(input)
|
20
|
-
if expected_output
|
24
|
+
if expected_output.nil?
|
21
25
|
assert_nil(output)
|
22
26
|
else
|
23
27
|
assert_equal(expected_output, output)
|
@@ -26,23 +30,23 @@ class EDNT_Test < Minitest::Test
|
|
26
30
|
# now test setting the source and using read (although one-shot)
|
27
31
|
@parser.set_input(input)
|
28
32
|
output = @parser.read
|
29
|
-
if expected_output
|
33
|
+
if expected_output.nil?
|
30
34
|
assert_nil(output)
|
31
35
|
else
|
32
36
|
assert_equal(expected_output, output)
|
33
37
|
end
|
34
|
-
|
38
|
+
end
|
35
39
|
|
36
40
|
# and test passing the IO
|
37
|
-
File.open(file)
|
41
|
+
File.open(file) do |file_io|
|
38
42
|
@parser.set_input(file_io)
|
39
43
|
output = @parser.read
|
40
|
-
if expected_output
|
44
|
+
if expected_output.nil?
|
41
45
|
assert_nil(output)
|
42
46
|
else
|
43
47
|
assert_equal(expected_output, output)
|
44
48
|
end
|
45
|
-
|
49
|
+
end
|
46
50
|
output
|
47
51
|
end
|
48
52
|
|
@@ -74,33 +78,26 @@ class EDNT_Test < Minitest::Test
|
|
74
78
|
end
|
75
79
|
|
76
80
|
def test_number
|
77
|
-
|
78
81
|
check_file('test/number.edn',
|
79
82
|
[0, 0, 5, 12, 232, -98798, 13213, 0.11, 231.312, -2321.0, 11.22, 432,
|
80
83
|
123412341231212121241234,
|
81
84
|
123412341231212121241234,
|
82
|
-
4.54e+44, 4.5e+44]
|
83
|
-
)
|
85
|
+
4.54e+44, 4.5e+44])
|
84
86
|
end
|
85
87
|
|
86
88
|
def test_keyword
|
87
|
-
|
88
89
|
check_file('test/keyword.edn',
|
89
|
-
[:key1, :"key_2/adsd2", :key_3, :"key-4", :"key_5/asd-32_ee", :"#/:a"]
|
90
|
-
)
|
90
|
+
[:key1, :"key_2/adsd2", :key_3, :"key-4", :"key_5/asd-32_ee", :"#/:a"])
|
91
91
|
end
|
92
92
|
|
93
93
|
def test_values
|
94
|
-
|
95
94
|
check_file('test/values.edn',
|
96
95
|
[false, true, nil, "this is a test", "this\tis\\only\ta\ttest\rof\"various\nescaped\\values",
|
97
96
|
['c', "\n", "\t"],
|
98
|
-
'123➪456®789']
|
99
|
-
)
|
97
|
+
'123➪456®789'])
|
100
98
|
end
|
101
99
|
|
102
100
|
def test_builtin_tagged_inst
|
103
|
-
|
104
101
|
check_file('test/inst.edn',
|
105
102
|
[
|
106
103
|
DateTime.rfc3339('1985-04-12T23:20:50.52Z'),
|
@@ -108,14 +105,11 @@ class EDNT_Test < Minitest::Test
|
|
108
105
|
DateTime.rfc3339('1990-12-31T23:59:60Z'),
|
109
106
|
DateTime.rfc3339('1990-12-31T15:59:60-08:00'),
|
110
107
|
DateTime.rfc3339('1937-01-01T12:00:27.87+00:20')
|
111
|
-
]
|
112
|
-
)
|
108
|
+
])
|
113
109
|
end
|
114
110
|
|
115
111
|
def test_builtin_tagged_uuid
|
116
|
-
|
117
112
|
check_file('test/uuid.edn', 'f81d4fae-7dec-11d0-a765-00a0c91e6bf6')
|
118
|
-
|
119
113
|
end
|
120
114
|
|
121
115
|
def test_sets
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: edn_turbo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ed Porras
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: edn
|
@@ -28,30 +28,30 @@ dependencies:
|
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake-compiler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0
|
47
|
+
version: '1.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0
|
54
|
+
version: '1.0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: minitest
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '5.7'
|
69
|
-
description:
|
69
|
+
description: Optimized plugin for parsing EDN files using ragel
|
70
70
|
email: ed@motologic.com
|
71
71
|
executables:
|
72
72
|
- ppedn
|