drain 0.3.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ruby.yml +25 -0
- data/.travis.yml +7 -3
- data/ChangeLog.md +159 -2
- data/Gemfile +4 -1
- data/LICENSE.txt +1 -1
- data/README.md +14 -3
- data/Rakefile +15 -10
- data/drain.gemspec +1 -0
- data/gemspec.yml +3 -3
- data/lib/dr/base/delegate.rb +28 -0
- data/lib/dr/base/graph.rb +26 -9
- data/lib/dr/base/uri.rb +224 -192
- data/lib/dr/base/utils.rb +39 -8
- data/lib/dr/parse/simple_keywords.rb +1 -1
- data/lib/dr/parse/time_parse.rb +29 -23
- data/lib/dr/ruby_ext/core_modules.rb +5 -3
- data/lib/dr/version.rb +1 -1
- data/test/helper.rb +12 -2
- data/test/test_converter.rb +7 -7
- data/test/test_core_ext.rb +24 -24
- data/test/test_date_parse.rb +8 -4
- data/test/test_graph.rb +26 -26
- data/test/test_meta.rb +3 -3
- data/test/test_simple_keywords.rb +6 -6
- data/test/test_simple_parser.rb +9 -9
- data/test/test_time_parse.rb +43 -0
- data/test/test_uri.rb +35 -0
- metadata +20 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8da4d9b373952c13931d7ed377565f1cd60297107413a4230f3cbdc2481af952
|
4
|
+
data.tar.gz: ba54f1c1946487b37916d0d6e0a14542d273f3dccd5f86109586cd275d8d2e32
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97028489d945221d6aed71741954a1dec636d2961cf8fa6c22988fa447e8c5548d8450f3c8f0d5dd9d2f25d35ad0e54a7a1d485cf1af667e8f47a462afe86538
|
7
|
+
data.tar.gz: bbd72c1baaf24811cc950c7003ec9d5911dadd73ee38cce08d2c80191376f17066e3494ce7b3d63556219fb35af6f30a9a4cdf99d33d3a29302cf87c64d736ae
|
@@ -0,0 +1,25 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on: [push]
|
4
|
+
jobs:
|
5
|
+
test:
|
6
|
+
strategy:
|
7
|
+
fail-fast: false
|
8
|
+
matrix:
|
9
|
+
os: [ ubuntu-latest, macos-latest ]
|
10
|
+
ruby: [ 2.3, 2.4, 2.5, 2.6, 2.7, jruby, truffleruby ]
|
11
|
+
runs-on: ${{ matrix.os }}
|
12
|
+
steps:
|
13
|
+
- name: 'Git checkout'
|
14
|
+
uses: actions/checkout@v2
|
15
|
+
- name: 'Setup ruby'
|
16
|
+
uses: ruby/setup-ruby@v1
|
17
|
+
with:
|
18
|
+
ruby-version: ${{ matrix.ruby }}
|
19
|
+
- name: 'Install bundler and gems'
|
20
|
+
run: |
|
21
|
+
gem install bundler
|
22
|
+
bundle install --jobs 4 --retry 3
|
23
|
+
- name: "Run tests"
|
24
|
+
run: |
|
25
|
+
bundle exec rake test
|
data/.travis.yml
CHANGED
data/ChangeLog.md
CHANGED
@@ -1,4 +1,161 @@
|
|
1
|
-
|
1
|
+
== Release v0.7.0 (2020-07-09) ==
|
2
2
|
|
3
|
-
*
|
3
|
+
* Update test for new uri.rb API
|
4
|
+
* uri.rb: Add alias
|
5
|
+
* DR::URI
|
6
|
+
* utils.rb: switch to amazing_print
|
7
|
+
* graph.rb: <<
|
8
|
+
|
9
|
+
== Release v0.6.0 (2020-02-26) ==
|
10
|
+
|
11
|
+
* Add github actions for tests
|
12
|
+
* Add github action for tests
|
13
|
+
* Bump travis versions
|
14
|
+
* Fix ruby 2.7 warning
|
15
|
+
* graph.rb: add merge! and merge
|
16
|
+
* test: fix minitest warnings
|
17
|
+
* gemspec: add chronic and chronic_duration
|
18
|
+
|
19
|
+
== Release v0.5.1 (2020-02-18) ==
|
20
|
+
|
21
|
+
* DR::URI -> DR::URIEscape
|
22
|
+
|
23
|
+
== Release v0.5 (2020-02-18) ==
|
24
|
+
|
25
|
+
* Bump version
|
26
|
+
* DR::URI.escape
|
27
|
+
* Fixes for ruby 2.7
|
28
|
+
* URI.encode is obsolete
|
29
|
+
|
30
|
+
== Release v0.4 (2019-09-13) ==
|
31
|
+
|
32
|
+
* Bump version
|
33
|
+
* Delegator.access_methods
|
34
|
+
* delegate: add missing require
|
35
|
+
* Delegator.delegate_h
|
36
|
+
* Fix a bug in deep_merge
|
37
|
+
* Utils: pretty = true means color by default
|
38
|
+
* Utils: PPHelper and pretty_print colors
|
39
|
+
* time_parse: do not load active_support/time
|
40
|
+
* Fix test failures
|
41
|
+
* Update Rakefile
|
42
|
+
* Update Rakefile
|
43
|
+
* Comments
|
44
|
+
* graph: to_s and inspect
|
45
|
+
* Doc: add warning
|
46
|
+
|
47
|
+
== Release v0.3.0 (2018-09-07) ==
|
48
|
+
|
49
|
+
* Bump version
|
50
|
+
* test_date_parse.rb: set TZ to GMT to get test working on travis
|
51
|
+
* Update travis
|
52
|
+
* Utils.rsplit
|
53
|
+
* Formatter: clean ups
|
54
|
+
* simple_formatter: ability to expand messages
|
55
|
+
* Fix test
|
56
|
+
* Ad formatter/simple_formatter
|
57
|
+
* simple_keywords: strip by default + can now change delims
|
58
|
+
* simple_keywords: switch from a Module to a Class
|
59
|
+
* parse/simple_keywords
|
60
|
+
* URI: rename to_s to to_ssh
|
61
|
+
* URI::Ssh.parse: handle empty string
|
62
|
+
* SSH Uri: allow non standard hosts
|
63
|
+
* Hash#has_keys: bug fix
|
64
|
+
* URIWrapper::Ssh
|
65
|
+
* Hash#has_keys?
|
66
|
+
* Hash#add_to_key: configure behavior via keywords
|
67
|
+
* Hash#add_to_key, Hash#set_key
|
68
|
+
* Hash#deep_merge: configure how to merge arrays
|
69
|
+
* Hash#add_key
|
70
|
+
* Hash: add_key, dig_with_default
|
71
|
+
* bool.rb: allow to keep Strings/Symbols
|
72
|
+
* slice_with_default
|
73
|
+
* simple_parser: more parsing methods
|
74
|
+
* bool: bug fixes
|
75
|
+
* Copyright
|
76
|
+
* Hash#reverse_merge
|
77
|
+
* Graph#dump: be more flexible to how we dump
|
78
|
+
* Graph: allow to merge with a Hash
|
79
|
+
* to_caml_case and to_snake_case
|
80
|
+
* pretty_print: preserve options
|
81
|
+
* base: uri
|
82
|
+
|
83
|
+
== Release v0.2.0 (2018-02-01) ==
|
84
|
+
|
85
|
+
* Bump version
|
86
|
+
* Update tests
|
87
|
+
* utils: pretty_print
|
88
|
+
* eruby: add Eruby.process_eruby
|
89
|
+
* Eruby: indent Context the same way as other modules
|
90
|
+
* Move git.rb to git_helpers
|
91
|
+
* fix somg bug in refinements usage
|
92
|
+
* tests + more comments
|
93
|
+
* graph: Add Graph.build
|
94
|
+
* eruby: comments about a possible ruby bug fix in 2.4.1
|
95
|
+
* graph: allow to merge graphs
|
96
|
+
* graph: bug fixes
|
97
|
+
* Eruby: automatically wrap into unbound_instance if a block is passed
|
98
|
+
* eruby: streamline implementation and bug fixes
|
99
|
+
* eruby: more template possibilities
|
100
|
+
* eruby.rb: start adding features from Tilt
|
101
|
+
* Eruby: be uniform accross erubi/erubis/erb
|
102
|
+
* Clean up comments
|
103
|
+
* test_drain: test for Drain::VERSION
|
104
|
+
* Add drain.rb which calls dr.rb
|
105
|
+
* travis: test agains ruby HEAD
|
106
|
+
* Update drain.gemspec
|
107
|
+
* Configure travis and streamline rake and test files
|
108
|
+
* simple_parser: renders globalopts fully customisable
|
109
|
+
* I don't need bundler for travis
|
110
|
+
* travis
|
111
|
+
* gitignore
|
112
|
+
* Try to do a minimal example for ruby's segfault
|
113
|
+
* descendants/ancestors: propagate ourselves
|
114
|
+
* Correct a bug in graph.rb
|
115
|
+
* parse_string: allows to customize the splitting characters
|
116
|
+
* Remove Hash#set_keyed_value!
|
117
|
+
* Hash#set_keyed_value
|
118
|
+
* Copyright
|
119
|
+
* simple_parser: document the splitting order
|
120
|
+
* simple_parser: add tests
|
121
|
+
* Add missing require
|
122
|
+
* graph: allow ancestors and descendants on a node
|
123
|
+
* Deprecation warning
|
124
|
+
* Copyright
|
125
|
+
* tests + comments
|
126
|
+
* Still more tests for core_ext.rb
|
127
|
+
* Still more tests
|
128
|
+
* More tests
|
129
|
+
* Test Hash#deep_merge
|
130
|
+
* Add tests
|
131
|
+
* Useless use of slef
|
132
|
+
* Converter: test on recursive object
|
133
|
+
* git: get config
|
134
|
+
* Add Hash#leafs
|
135
|
+
* Add to_h to graph
|
136
|
+
* graph construction now accepts a lambda
|
137
|
+
* Add hash conversion ton graph.rb
|
138
|
+
* Add converter.rb (converts an object to an hash) and tests
|
139
|
+
* graph: add .compact in to_nodes
|
140
|
+
* graph: method to updat node attributes
|
141
|
+
* graph: show attributes
|
142
|
+
* Graph: improved unneeded, and bug fix in unneeded_descendants
|
143
|
+
* Graph#connected: bug fix
|
144
|
+
* Graph: check that children are of the same type
|
145
|
+
* Refinements: fix syntax errors
|
146
|
+
* unneeded_descendants(ancestors) is bigger than ancestors(unneeded_descendants)
|
147
|
+
* graph: bug fixes
|
148
|
+
* Use dr rather than drain for brevity
|
149
|
+
* Graph.rb
|
150
|
+
* Git: add a submodules command
|
151
|
+
* Graph#build_node
|
152
|
+
* Rework Graph#build
|
153
|
+
* Test includes_extends_host_with
|
154
|
+
* Split core_ext into two files
|
155
|
+
|
156
|
+
== Release v0.1.0 (2015-02-24) ==
|
157
|
+
|
158
|
+
* Description
|
159
|
+
* Add library files
|
160
|
+
* Initial commit.
|
4
161
|
|
data/Gemfile
CHANGED
data/LICENSE.txt
CHANGED
data/README.md
CHANGED
@@ -3,9 +3,10 @@
|
|
3
3
|
* [Homepage](https://github.com/DamienRobert/drain#readme)
|
4
4
|
* [Issues](https://github.com/DamienRobert/drain/issues)
|
5
5
|
* [Documentation](http://rubydoc.info/gems/drain)
|
6
|
-
* [Email](mailto:Damien.Olivier.Robert+gems
|
6
|
+
* [Email](mailto:Damien.Olivier.Robert+gems@gmail.com)
|
7
7
|
|
8
8
|
[![Gem Version](https://img.shields.io/gem/v/drain.svg)](https://rubygems.org/gems/drain)
|
9
|
+
[![Ruby test result](https://github.com/DamienRobert/drain/workflows/Ruby/badge.svg)](https://github.com/DamienRobert/drain/actions?query=workflow%3ARuby)
|
9
10
|
[![Build Status](https://travis-ci.org/DamienRobert/drain.svg?branch=master)](https://travis-ci.org/DamienRobert/drain)
|
10
11
|
|
11
12
|
## Description
|
@@ -17,15 +18,25 @@ The Api is far from stable yet, so use at your own risk!
|
|
17
18
|
|
18
19
|
For now the API is experimental and some parts are not ready to use!
|
19
20
|
|
21
|
+
## Examples
|
22
|
+
|
23
|
+
~~~ ruby
|
24
|
+
require 'drain'
|
25
|
+
~~~
|
26
|
+
|
27
|
+
## Requirements
|
28
|
+
|
20
29
|
## Install
|
21
30
|
|
31
|
+
~~~ sh
|
22
32
|
$ gem install drain
|
33
|
+
~~~
|
23
34
|
|
24
35
|
## Copyright
|
25
36
|
|
26
|
-
Copyright © 2015–
|
37
|
+
Copyright © 2015–2020 Damien Robert
|
27
38
|
|
28
|
-
MIT License. See [LICENSE.txt](
|
39
|
+
MIT License. See [`LICENSE.txt`](LICENSE.txt) for details.
|
29
40
|
|
30
41
|
Some of the code is inspired by other project, in general I give proper
|
31
42
|
acknowledgement in the corresponding file.
|
data/Rakefile
CHANGED
@@ -1,15 +1,11 @@
|
|
1
|
+
## Uncomment to use `rake` directly rather than `bundle exec rake`
|
2
|
+
#begin
|
3
|
+
# require 'bundler/setup'
|
4
|
+
#rescue LoadError => e
|
5
|
+
# warn "Could not setup bundler: #{e.message}"
|
6
|
+
#end
|
1
7
|
require 'rake'
|
2
8
|
|
3
|
-
begin
|
4
|
-
require 'rubygems/tasks'
|
5
|
-
Gem::Tasks.new(sign: {checksum: true, pgp: true},
|
6
|
-
scm: {status: true}) do |tasks|
|
7
|
-
tasks.console.command = 'pry'
|
8
|
-
end
|
9
|
-
rescue LoadError => e
|
10
|
-
warn e.message
|
11
|
-
end
|
12
|
-
|
13
9
|
require 'rake/testtask'
|
14
10
|
Rake::TestTask.new do |test|
|
15
11
|
test.libs << 'test'
|
@@ -25,5 +21,14 @@ rescue LoadError => e
|
|
25
21
|
warn e.message
|
26
22
|
end
|
27
23
|
end
|
24
|
+
desc 'Generate docs'
|
28
25
|
task :doc => :yard
|
29
26
|
|
27
|
+
begin
|
28
|
+
require 'dr/rake_gems'
|
29
|
+
Gem::MyTasks.new
|
30
|
+
rescue LoadError => e
|
31
|
+
warn e.message
|
32
|
+
end
|
33
|
+
|
34
|
+
task :default => :test
|
data/drain.gemspec
CHANGED
@@ -33,6 +33,7 @@ Gem::Specification.new do |gem|
|
|
33
33
|
end
|
34
34
|
end
|
35
35
|
gem.files = glob[gemspec['files']] if gemspec['files']
|
36
|
+
gem.files = gem.files + gemspec['extra_files'] if gemspec['extra_files']
|
36
37
|
|
37
38
|
gem.executables = gemspec.fetch('executables') do
|
38
39
|
glob['bin/*'].map { |path| File.basename(path) }
|
data/gemspec.yml
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
module DR
|
2
|
+
module Delegator
|
3
|
+
extend self
|
4
|
+
def delegate_h(klass, var)
|
5
|
+
require 'forwardable'
|
6
|
+
# put in a Module so that they are easier to distinguish from the
|
7
|
+
# 'real' functions
|
8
|
+
m=Module.new do
|
9
|
+
extend(Forwardable)
|
10
|
+
methods=[:[], :[]=, :any?, :assoc, :clear, :compact, :compact!, :delete, :delete_if, :dig, :each, :each_key, :each_pair, :each_value, :empty?, :fetch, :fetch_values, :has_key?, :has_value?, :include?, :index, :invert, :keep_if, :key, :key?, :keys, :length, :member?, :merge, :merge!, :rassoc, :reject, :reject!, :select, :select!, :shift, :size, :slice, :store, :to_a, :to_h, :to_s, :transform_keys, :transform_keys!, :transform_values, :transform_values!, :update, :value?, :values, :values_at]
|
11
|
+
include(Enumerable)
|
12
|
+
def_delegators var, *methods
|
13
|
+
end
|
14
|
+
klass.include(m)
|
15
|
+
end
|
16
|
+
|
17
|
+
def access_methods(klass, var, *methods)
|
18
|
+
methods.each do |k|
|
19
|
+
klass.define_method k do
|
20
|
+
instance_variable_get(var)[k]
|
21
|
+
end
|
22
|
+
klass.defined_method :"#{k}=" do |*args|
|
23
|
+
instance_variable_get(var).send(:[]=, k, *args)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/dr/base/graph.rb
CHANGED
@@ -7,7 +7,7 @@ module DR
|
|
7
7
|
attr_reader :graph
|
8
8
|
attr_accessor :name, :attributes, :parents, :children
|
9
9
|
def initialize(name, attributes: {}, graph: nil)
|
10
|
-
@name = name
|
10
|
+
@name = name
|
11
11
|
@children = []
|
12
12
|
@parents = []
|
13
13
|
@attributes = attributes
|
@@ -78,7 +78,7 @@ module DR
|
|
78
78
|
|
79
79
|
STEP = 4
|
80
80
|
def to_s(show_attr: true)
|
81
|
-
@name + (show_attr && ! attributes.empty? ? " #{attributes}" : "")
|
81
|
+
@name.to_s + (show_attr && ! attributes.empty? ? " #{attributes}" : "")
|
82
82
|
end
|
83
83
|
def inspect
|
84
84
|
"#{self.class}: #{to_s(show_attr: true)}"+(graph.nil? ? "" : " (#{graph})")
|
@@ -107,10 +107,12 @@ module DR
|
|
107
107
|
class Graph
|
108
108
|
attr_accessor :nodes
|
109
109
|
include Enumerable
|
110
|
+
# note: passing a graph won't work
|
110
111
|
def initialize(*nodes, attributes: {}, infos: nil)
|
111
112
|
@nodes=[]
|
112
113
|
# a node can be a Hash or a Node
|
113
|
-
|
114
|
+
# so nodes really is a list of subgraphs
|
115
|
+
build(*nodes, attributes: attributes, infos: infos)
|
114
116
|
end
|
115
117
|
def each(&b)
|
116
118
|
@nodes.each(&b)
|
@@ -123,6 +125,10 @@ module DR
|
|
123
125
|
def to_a
|
124
126
|
return @nodes
|
125
127
|
end
|
128
|
+
def names
|
129
|
+
@nodes.map(&:name)
|
130
|
+
end
|
131
|
+
|
126
132
|
def to_hash(methods: [:children,:parents,:attributes], compact: true, recursive: true)
|
127
133
|
require 'dr/base/converter'
|
128
134
|
Converter.to_hash(@nodes, methods: methods, recursive: recursive, compact: compact)
|
@@ -142,7 +148,7 @@ module DR
|
|
142
148
|
h=to_hash(methods: [:children])
|
143
149
|
Hash[h.map {|k,v| [k.name, v.map(&:name)]}]
|
144
150
|
end
|
145
|
-
alias to_children to_h
|
151
|
+
#alias to_children to_h
|
146
152
|
|
147
153
|
def to_children
|
148
154
|
require 'dr/base/converter'
|
@@ -150,8 +156,11 @@ module DR
|
|
150
156
|
end
|
151
157
|
|
152
158
|
def inspect
|
153
|
-
"#{self.class}: #{map {|x| x.to_s}}"
|
159
|
+
"#{self.class}: #{map {|x| x.to_s(show_attr: false)}}"
|
154
160
|
end
|
161
|
+
# def to_s
|
162
|
+
# "#{self.class}: #{map {|x| x.to_s(show_attr: false)}}"
|
163
|
+
# end
|
155
164
|
|
156
165
|
#construct a node (without edges)
|
157
166
|
def new_node(node,**attributes)
|
@@ -204,6 +213,11 @@ module DR
|
|
204
213
|
end
|
205
214
|
self
|
206
215
|
end
|
216
|
+
|
217
|
+
# alias << build
|
218
|
+
def <<(node, **opts)
|
219
|
+
build(node, **opts)
|
220
|
+
end
|
207
221
|
|
208
222
|
def all
|
209
223
|
@nodes.sort
|
@@ -216,14 +230,17 @@ module DR
|
|
216
230
|
end
|
217
231
|
|
218
232
|
# allow a hash too
|
219
|
-
def
|
220
|
-
graph=Graph.new(graph) unless Graph===graph
|
233
|
+
def merge!(graph)
|
234
|
+
graph=Graph.new(graph, **{}) unless Graph===graph
|
221
235
|
build(*graph.all, recursive: false)
|
222
236
|
end
|
223
|
-
def
|
237
|
+
def merge(graph)
|
224
238
|
clone.|(graph)
|
225
239
|
end
|
226
240
|
|
241
|
+
alias | merge!
|
242
|
+
alias + merge
|
243
|
+
|
227
244
|
def dump(mode: :graph, nodes_list: :roots, show_attr: true, out: [], **_opts)
|
228
245
|
n=case nodes_list
|
229
246
|
when :roots; roots
|
@@ -368,7 +385,7 @@ module DR
|
|
368
385
|
while !new_nodes.empty?
|
369
386
|
g2=yield(*new_nodes)
|
370
387
|
g2=Graph.new(g2) unless g2.is_a?(Graph)
|
371
|
-
g
|
388
|
+
g.merge!(g2)
|
372
389
|
nodes=nodes.concat(new_nodes)
|
373
390
|
new_nodesg.nodes.map(&:name)-nodes
|
374
391
|
end
|