psychgus 1.0.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +29 -0
- data/README.md +139 -23
- data/Rakefile +16 -11
- data/lib/psychgus.rb +138 -11
- data/lib/psychgus/ext/yaml_tree_ext.rb +8 -6
- data/lib/psychgus/stylables.rb +273 -0
- data/lib/psychgus/stylers.rb +308 -0
- data/lib/psychgus/super_sniffer.rb +7 -4
- data/lib/psychgus/super_sniffer/parent.rb +40 -22
- data/lib/psychgus/version.rb +1 -1
- data/psychgus.gemspec +18 -16
- data/test/sniffer_test.rb +7 -40
- data/test/stylers_test.rb +93 -0
- metadata +7 -2
@@ -89,7 +89,7 @@ module Psychgus
|
|
89
89
|
# Then the levels and positions will be as follows:
|
90
90
|
# # (level:position):current_node - <parent:(parent_level:parent_position)>
|
91
91
|
#
|
92
|
-
# (1:1):Psych::Nodes::Stream - <
|
92
|
+
# (1:1):Psych::Nodes::Stream - <root:(0:0)>
|
93
93
|
# (1:1):Psych::Nodes::Document - <stream:(1:1)>
|
94
94
|
# (1:1):Psych::Nodes::Mapping - <doc:(1:1)>
|
95
95
|
# (2:1):Burgers - <map:(1:1)>
|
@@ -168,15 +168,18 @@ module Psychgus
|
|
168
168
|
def initialize()
|
169
169
|
@aliases = []
|
170
170
|
@documents = []
|
171
|
-
@level =
|
171
|
+
@level = 0
|
172
172
|
@mappings = []
|
173
173
|
@nodes = []
|
174
174
|
@parent = nil
|
175
175
|
@parents = []
|
176
|
-
@position =
|
176
|
+
@position = 0
|
177
177
|
@scalars = []
|
178
178
|
@sequences = []
|
179
179
|
@streams = []
|
180
|
+
|
181
|
+
# Do not pass in "top_level: true"
|
182
|
+
start_parent(nil,debug_tag: :root)
|
180
183
|
end
|
181
184
|
|
182
185
|
# Add a Psych::Nodes::Alias to this class only (not to the YAML).
|
@@ -406,7 +409,7 @@ module Psychgus
|
|
406
409
|
@parent = Parent.new(self,node,**extra)
|
407
410
|
|
408
411
|
@parents.push(@parent)
|
409
|
-
@nodes.push(node)
|
412
|
+
@nodes.push(node) unless node.nil?()
|
410
413
|
|
411
414
|
if top_level
|
412
415
|
@level = 1
|
@@ -85,34 +85,34 @@ module Psychgus
|
|
85
85
|
# @see Psych::Nodes::Scalar#anchor=
|
86
86
|
# @see Psych::Nodes::Sequence#anchor=
|
87
87
|
def anchor=(anchor)
|
88
|
-
node.anchor = anchor
|
88
|
+
@node.anchor = anchor
|
89
89
|
end
|
90
90
|
|
91
91
|
# @see Psych::Nodes::Scalar#plain=
|
92
92
|
def plain=(plain)
|
93
|
-
node.plain = plain
|
93
|
+
@node.plain = plain
|
94
94
|
end
|
95
95
|
|
96
96
|
# @see Psych::Nodes::Scalar#quoted=
|
97
97
|
def quoted=(quoted)
|
98
|
-
node.quoted = quoted
|
98
|
+
@node.quoted = quoted
|
99
99
|
end
|
100
100
|
|
101
101
|
# @see Psych::Nodes::Mapping#style=
|
102
102
|
# @see Psych::Nodes::Scalar#style=
|
103
103
|
# @see Psych::Nodes::Sequence#style=
|
104
104
|
def style=(style)
|
105
|
-
node.style = style
|
105
|
+
@node.style = style
|
106
106
|
end
|
107
107
|
|
108
108
|
# @see Psych::Nodes::Node#tag=
|
109
109
|
def tag=(tag)
|
110
|
-
node.tag = tag
|
110
|
+
@node.tag = tag
|
111
111
|
end
|
112
112
|
|
113
113
|
# @see Psych::Nodes::Scalar#value=
|
114
114
|
def value=(value)
|
115
|
-
node.value = value
|
115
|
+
@node.value = value
|
116
116
|
end
|
117
117
|
|
118
118
|
# @see Psych::Nodes::Alias#anchor
|
@@ -120,86 +120,104 @@ module Psychgus
|
|
120
120
|
# @see Psych::Nodes::Scalar#anchor
|
121
121
|
# @see Psych::Nodes::Sequence#anchor
|
122
122
|
def anchor()
|
123
|
-
return node.anchor
|
123
|
+
return @node.anchor
|
124
|
+
end
|
125
|
+
|
126
|
+
# Check if the children of this parent are keys to a Mapping.
|
127
|
+
#
|
128
|
+
# @return [true,false] whether the children are keys to a Mapping
|
129
|
+
#
|
130
|
+
# @since 1.2.0
|
131
|
+
def child_key?()
|
132
|
+
return @child_type == :key
|
133
|
+
end
|
134
|
+
|
135
|
+
# Check if the children of this parent are values to a Mapping (i.e., values to a key).
|
136
|
+
#
|
137
|
+
# @return [true,false] whether the children are values to a Mapping (i.e., values to a key)
|
138
|
+
#
|
139
|
+
# @since 1.2.0
|
140
|
+
def child_value?()
|
141
|
+
return @child_type == :value
|
124
142
|
end
|
125
143
|
|
126
144
|
# @see Psych::Nodes::Stream#encoding
|
127
145
|
def encoding()
|
128
|
-
return node.encoding
|
146
|
+
return @node.encoding
|
129
147
|
end
|
130
148
|
|
131
149
|
# @see Psych::Nodes::Node#end_column
|
132
150
|
def end_column()
|
133
|
-
return node.end_column
|
151
|
+
return @node.end_column
|
134
152
|
end
|
135
153
|
|
136
154
|
# @see Psych::Nodes::Node#end_line
|
137
155
|
def end_line()
|
138
|
-
return node.end_line
|
156
|
+
return @node.end_line
|
139
157
|
end
|
140
158
|
|
141
159
|
# @see Psych::Nodes::Document#implicit
|
142
160
|
# @see Psych::Nodes::Mapping#implicit
|
143
161
|
# @see Psych::Nodes::Sequence#implicit
|
144
162
|
def implicit?()
|
145
|
-
return node.implicit
|
163
|
+
return @node.implicit
|
146
164
|
end
|
147
165
|
|
148
166
|
# @see Psych::Nodes::Document#implicit_end
|
149
167
|
def implicit_end?()
|
150
|
-
return node.implicit_end
|
168
|
+
return @node.implicit_end
|
151
169
|
end
|
152
170
|
|
153
171
|
# (see Ext::NodeExt#node_of?)
|
154
172
|
def node_of?(*names)
|
155
|
-
return node.node_of?(*names)
|
173
|
+
return @node.node_of?(*names)
|
156
174
|
end
|
157
175
|
|
158
176
|
# @see Psych::Nodes::Scalar#plain
|
159
177
|
def plain?()
|
160
|
-
return node.plain
|
178
|
+
return @node.plain
|
161
179
|
end
|
162
180
|
|
163
181
|
# @see Psych::Nodes::Scalar#quoted
|
164
182
|
def quoted?()
|
165
|
-
return node.quoted
|
183
|
+
return @node.quoted
|
166
184
|
end
|
167
185
|
|
168
186
|
# @see Psych::Nodes::Node#start_column
|
169
187
|
def start_column()
|
170
|
-
return node.start_column
|
188
|
+
return @node.start_column
|
171
189
|
end
|
172
190
|
|
173
191
|
# @see Psych::Nodes::Node#start_line
|
174
192
|
def start_line()
|
175
|
-
return node.start_line
|
193
|
+
return @node.start_line
|
176
194
|
end
|
177
195
|
|
178
196
|
# @see Psych::Nodes::Mapping#style
|
179
197
|
# @see Psych::Nodes::Scalar#style
|
180
198
|
# @see Psych::Nodes::Sequence#style
|
181
199
|
def style()
|
182
|
-
return node.style
|
200
|
+
return @node.style
|
183
201
|
end
|
184
202
|
|
185
203
|
# @see Psych::Nodes::Node#tag
|
186
204
|
def tag()
|
187
|
-
return node.tag
|
205
|
+
return @node.tag
|
188
206
|
end
|
189
207
|
|
190
208
|
# @see Psych::Nodes::Document#tag_directives
|
191
209
|
def tag_directives()
|
192
|
-
return node.tag_directives
|
210
|
+
return @node.tag_directives
|
193
211
|
end
|
194
212
|
|
195
213
|
# @see Psych::Nodes::Scalar#value
|
196
214
|
def value()
|
197
|
-
return node.value
|
215
|
+
return @node.value
|
198
216
|
end
|
199
217
|
|
200
218
|
# @see Psych::Nodes::Document#version
|
201
219
|
def version()
|
202
|
-
return node.version
|
220
|
+
return @node.version
|
203
221
|
end
|
204
222
|
|
205
223
|
# @note If this method is modified, then tests will fail
|
data/lib/psychgus/version.rb
CHANGED
data/psychgus.gemspec
CHANGED
@@ -26,30 +26,32 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
26
26
|
require 'psychgus/version'
|
27
27
|
|
28
28
|
Gem::Specification.new do |spec|
|
29
|
-
spec.name
|
30
|
-
spec.version
|
31
|
-
spec.authors
|
32
|
-
spec.email
|
33
|
-
spec.licenses
|
29
|
+
spec.name = 'psychgus'
|
30
|
+
spec.version = Psychgus::VERSION
|
31
|
+
spec.authors = ['Jonathan Bradley Whited (@esotericpig)']
|
32
|
+
spec.email = ['bradley@esotericpig.com']
|
33
|
+
spec.licenses = ['LGPL-3.0-or-later']
|
34
|
+
spec.homepage = 'https://github.com/esotericpig/psychgus'
|
35
|
+
spec.summary = %q(Easily style YAML files using Psych, like Sequence/Mapping Flow style.)
|
36
|
+
spec.description = %q(Easily style YAML files using Psych, like Sequence/Mapping Flow style.)
|
34
37
|
|
35
38
|
spec.metadata = {
|
36
39
|
'bug_tracker_uri' => 'https://github.com/esotericpig/psychgus/issues',
|
40
|
+
'changelog_uri' => 'https://github.com/esotericpig/psychgus/blob/master/CHANGELOG.md',
|
37
41
|
'documentation_uri' => 'https://esotericpig.github.io/docs/psychgus/yardoc/index.html',
|
38
42
|
'homepage_uri' => 'https://github.com/esotericpig/psychgus',
|
39
43
|
'source_code_uri' => 'https://github.com/esotericpig/psychgus'
|
40
44
|
}
|
41
45
|
|
42
|
-
spec.
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
README.md
|
52
|
-
)
|
46
|
+
spec.files = Dir.glob(File.join('{lib,test,yard}','**','*.{erb,rb}')) +
|
47
|
+
%w(
|
48
|
+
CHANGELOG.md
|
49
|
+
Gemfile
|
50
|
+
LICENSE.txt
|
51
|
+
psychgus.gemspec
|
52
|
+
Rakefile
|
53
|
+
README.md
|
54
|
+
)
|
53
55
|
spec.require_paths = ['lib']
|
54
56
|
|
55
57
|
spec.required_ruby_version = '>= 2.1.10'
|
data/test/sniffer_test.rb
CHANGED
@@ -24,46 +24,20 @@ require 'psychgus_tester'
|
|
24
24
|
|
25
25
|
require 'stringio'
|
26
26
|
|
27
|
-
class IOStyler
|
28
|
-
include Psychgus::Styler
|
29
|
-
|
30
|
-
attr_reader :io
|
31
|
-
|
32
|
-
def initialize(io=StringIO.new())
|
33
|
-
@io = io
|
34
|
-
end
|
35
|
-
|
36
|
-
def style(sniffer,node)
|
37
|
-
(1...sniffer.level).each do
|
38
|
-
@io.print ' '
|
39
|
-
end
|
40
|
-
|
41
|
-
name = node.node_of?(:scalar) ? node.value : node.class.name
|
42
|
-
parent = sniffer.parent
|
43
|
-
|
44
|
-
@io.print "(#{sniffer.level}:#{sniffer.position}):#{name} - "
|
45
|
-
@io.print parent.nil?() ? '<nil>' : parent
|
46
|
-
@io.puts
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
27
|
class SnifferTest < PsychgusTester
|
51
28
|
def setup()
|
52
29
|
end
|
53
30
|
|
54
|
-
def assert_hierarchy(data,expected)
|
31
|
+
def assert_hierarchy(*data,expected)
|
55
32
|
expected = self.class.lstrip_pipe(expected)
|
56
|
-
|
57
|
-
|
58
|
-
data.to_yaml(stylers: io_styler)
|
59
|
-
hierarchy = io_styler.io.string
|
33
|
+
hierarchy = Psychgus.hierarchy(*data,verbose: true)
|
60
34
|
|
61
35
|
assert_equal expected,hierarchy
|
62
36
|
end
|
63
37
|
|
64
38
|
def test_multi_doc()
|
65
|
-
|
66
|
-
|(1:1):Psych::Nodes::Stream - <
|
39
|
+
assert_hierarchy(BURGERS_DATA,COURSES_DATA,DOLPHINS_DATA,<<-EOH
|
40
|
+
|(1:1):Psych::Nodes::Stream - <root:(0:0)::(:1)>
|
67
41
|
|(1:1):Psych::Nodes::Document - <stream:(1:1)::(:1)>
|
68
42
|
|(1:1):Psych::Nodes::Mapping - <doc:(1:1)::(:1)>
|
69
43
|
| (2:1):Burgers - <map:(1:1):key:(:1)>
|
@@ -180,19 +154,12 @@ class SnifferTest < PsychgusTester
|
|
180
154
|
| (4:1):Psych::Nodes::Alias - <seq:(3:1)::(:1)>
|
181
155
|
| (4:2):Psych::Nodes::Alias - <seq:(3:1)::(:2)>
|
182
156
|
EOH
|
183
|
-
|
184
|
-
expected = self.class.lstrip_pipe(expected)
|
185
|
-
io_styler = IOStyler.new()
|
186
|
-
|
187
|
-
Psychgus.dump_stream(BURGERS_DATA,COURSES_DATA,DOLPHINS_DATA,stylers: io_styler)
|
188
|
-
hierarchy = io_styler.io.string
|
189
|
-
|
190
|
-
assert_equal expected,hierarchy
|
157
|
+
)
|
191
158
|
end
|
192
159
|
|
193
160
|
def test_single_docs()
|
194
161
|
assert_hierarchy(BURGERS_DATA,<<-EOH
|
195
|
-
|(1:1):Psych::Nodes::Stream - <
|
162
|
+
|(1:1):Psych::Nodes::Stream - <root:(0:0)::(:1)>
|
196
163
|
|(1:1):Psych::Nodes::Document - <stream:(1:1)::(:1)>
|
197
164
|
|(1:1):Psych::Nodes::Mapping - <doc:(1:1)::(:1)>
|
198
165
|
| (2:1):Burgers - <map:(1:1):key:(:1)>
|
@@ -242,7 +209,7 @@ class SnifferTest < PsychgusTester
|
|
242
209
|
)
|
243
210
|
|
244
211
|
assert_hierarchy(COURSES_DATA,<<-EOH
|
245
|
-
|(1:1):Psych::Nodes::Stream - <
|
212
|
+
|(1:1):Psych::Nodes::Stream - <root:(0:0)::(:1)>
|
246
213
|
|(1:1):Psych::Nodes::Document - <stream:(1:1)::(:1)>
|
247
214
|
|(1:1):Psych::Nodes::Mapping - <doc:(1:1)::(:1)>
|
248
215
|
| (2:1):Courses - <map:(1:1):key:(:1)>
|
@@ -0,0 +1,93 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
#--
|
5
|
+
# This file is part of Psychgus.
|
6
|
+
# Copyright (c) 2019 Jonathan Bradley Whited (@esotericpig)
|
7
|
+
#
|
8
|
+
# Psychgus is free software: you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU Lesser General Public License as published by
|
10
|
+
# the Free Software Foundation, either version 3 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# Psychgus is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU Lesser General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU Lesser General Public License
|
19
|
+
# along with Psychgus. If not, see <http://www.gnu.org/licenses/>.
|
20
|
+
#++
|
21
|
+
|
22
|
+
|
23
|
+
require 'psychgus_tester'
|
24
|
+
|
25
|
+
class EggCarton
|
26
|
+
include Psychgus::Blueberry
|
27
|
+
|
28
|
+
def initialize()
|
29
|
+
@eggs = {
|
30
|
+
:styles => ['omelette','BBQ eggs','hard-boiled eggs','soft_boiled eggs','fried@eggs'],
|
31
|
+
:colors => ['brown','white',['blue','green']]
|
32
|
+
}
|
33
|
+
end
|
34
|
+
|
35
|
+
def psychgus_stylers(sniffer)
|
36
|
+
return Psychgus::FlowStyler.new(4)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
###
|
41
|
+
# @since 1.2.0
|
42
|
+
###
|
43
|
+
class StylersTest < PsychgusTester
|
44
|
+
def setup()
|
45
|
+
@egg_carton = EggCarton.new()
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_capstyler()
|
49
|
+
actual = @egg_carton.to_yaml(stylers: Psychgus::CapStyler.new(each_word: false))
|
50
|
+
expected = <<-EOY
|
51
|
+
|--- !ruby/object:EggCarton
|
52
|
+
|Eggs:
|
53
|
+
| :styles: [Omelette, BBQ eggs, Hard-boiled eggs, Soft_boiled eggs, Fried@eggs]
|
54
|
+
| :colors: [Brown, White, [Blue, Green]]
|
55
|
+
EOY
|
56
|
+
|
57
|
+
assert_equal self.class.lstrip_pipe(expected),actual
|
58
|
+
|
59
|
+
actual = @egg_carton.to_yaml(stylers: Psychgus::CapStyler.new(new_delim: '+',delim: /[\s_\-@]/))
|
60
|
+
expected = <<-EOY
|
61
|
+
|--- !ruby/object:EggCarton
|
62
|
+
|Eggs:
|
63
|
+
| :styles: [Omelette, BBQ+Eggs, Hard+Boiled+Eggs, Soft+Boiled+Eggs, Fried+Eggs]
|
64
|
+
| :colors: [Brown, White, [Blue, Green]]
|
65
|
+
EOY
|
66
|
+
|
67
|
+
assert_equal self.class.lstrip_pipe(expected),actual
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_nosymstyler()
|
71
|
+
actual = @egg_carton.to_yaml(stylers: Psychgus::NoSymStyler.new())
|
72
|
+
expected = <<-EOY
|
73
|
+
|--- !ruby/object:EggCarton
|
74
|
+
|eggs:
|
75
|
+
| Styles: [omelette, BBQ eggs, hard-boiled eggs, soft_boiled eggs, fried@eggs]
|
76
|
+
| Colors: [brown, white, [blue, green]]
|
77
|
+
EOY
|
78
|
+
|
79
|
+
assert_equal self.class.lstrip_pipe(expected),actual
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_notagstyler()
|
83
|
+
actual = @egg_carton.to_yaml(stylers: Psychgus::NoTagStyler.new())
|
84
|
+
expected = <<-EOY
|
85
|
+
|---
|
86
|
+
|eggs:
|
87
|
+
| :styles: [omelette, BBQ eggs, hard-boiled eggs, soft_boiled eggs, fried@eggs]
|
88
|
+
| :colors: [brown, white, [blue, green]]
|
89
|
+
EOY
|
90
|
+
|
91
|
+
assert_equal self.class.lstrip_pipe(expected),actual
|
92
|
+
end
|
93
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: psychgus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathan Bradley Whited (@esotericpig)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-07-
|
11
|
+
date: 2019-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: psych
|
@@ -115,6 +115,7 @@ executables: []
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
+
- CHANGELOG.md
|
118
119
|
- Gemfile
|
119
120
|
- LICENSE.txt
|
120
121
|
- README.md
|
@@ -125,9 +126,11 @@ files:
|
|
125
126
|
- lib/psychgus/ext/core_ext.rb
|
126
127
|
- lib/psychgus/ext/node_ext.rb
|
127
128
|
- lib/psychgus/ext/yaml_tree_ext.rb
|
129
|
+
- lib/psychgus/stylables.rb
|
128
130
|
- lib/psychgus/styled_document_stream.rb
|
129
131
|
- lib/psychgus/styled_tree_builder.rb
|
130
132
|
- lib/psychgus/styler.rb
|
133
|
+
- lib/psychgus/stylers.rb
|
131
134
|
- lib/psychgus/super_sniffer.rb
|
132
135
|
- lib/psychgus/super_sniffer/parent.rb
|
133
136
|
- lib/psychgus/version.rb
|
@@ -137,12 +140,14 @@ files:
|
|
137
140
|
- test/psychgus_tester.rb
|
138
141
|
- test/sniffer_test.rb
|
139
142
|
- test/styler_test.rb
|
143
|
+
- test/stylers_test.rb
|
140
144
|
- yard/templates/default/layout/html/footer.erb
|
141
145
|
homepage: https://github.com/esotericpig/psychgus
|
142
146
|
licenses:
|
143
147
|
- LGPL-3.0-or-later
|
144
148
|
metadata:
|
145
149
|
bug_tracker_uri: https://github.com/esotericpig/psychgus/issues
|
150
|
+
changelog_uri: https://github.com/esotericpig/psychgus/blob/master/CHANGELOG.md
|
146
151
|
documentation_uri: https://esotericpig.github.io/docs/psychgus/yardoc/index.html
|
147
152
|
homepage_uri: https://github.com/esotericpig/psychgus
|
148
153
|
source_code_uri: https://github.com/esotericpig/psychgus
|