tangle 0.8.1 → 0.8.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.
- checksums.yaml +4 -4
- data/.rubocop.yml +5 -0
- data/Rakefile +17 -5
- data/lib/tangle/directed/graph.rb +4 -4
- data/lib/tangle/graph_vertices.rb +15 -1
- data/lib/tangle/mixin/directory.rb +55 -0
- data/tangle.gemspec +1 -0
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ee56b345a6f81de14bbc7bb9d16fbb10f9e2174b2588140a6881bd1ff31d0d5
|
4
|
+
data.tar.gz: 2172244bbb6ab3a91dff9fb4e6491fadc1f56762d984edf75c7f325b1ce9bed5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7bb4eeacbdf97538cef1a19738ac0260e47b56a19a6854d2de4dd735203001f7000f09239fbd3d6dcce377d8acf24a3b9647f1ddbbb2c152129b16e78de5fb16
|
7
|
+
data.tar.gz: 71837d3d43769c939200f450fb823ce6e82aec754527989e93ffac3db58eac2a8a99c816c9afc648dbbf97bf101b63e78656af86e487f6d3568f40333e2fa078
|
data/.rubocop.yml
CHANGED
data/Rakefile
CHANGED
@@ -1,14 +1,26 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'bundler/gem_tasks'
|
3
3
|
|
4
|
-
desc 'Run RuboCop'
|
5
4
|
require 'rubocop/rake_task'
|
6
|
-
RuboCop::RakeTask.new
|
5
|
+
RuboCop::RakeTask.new do |task|
|
7
6
|
task.options << '--display-cop-names'
|
8
7
|
end
|
9
8
|
|
10
|
-
desc 'Run RSpec'
|
11
9
|
require 'rspec/core/rake_task'
|
12
|
-
RSpec::Core::RakeTask.new
|
10
|
+
RSpec::Core::RakeTask.new
|
13
11
|
|
14
|
-
|
12
|
+
desc 'Run Fasterer'
|
13
|
+
task :fasterer do
|
14
|
+
require 'fasterer/cli'
|
15
|
+
Fasterer::CLI.execute
|
16
|
+
end
|
17
|
+
|
18
|
+
desc 'Check if version is fit for release'
|
19
|
+
task :check_version do
|
20
|
+
raise 'Internal revision!' unless GVB.internal_revision.empty?
|
21
|
+
end
|
22
|
+
|
23
|
+
task test: %i[spec rubocop]
|
24
|
+
task build: %i[spec]
|
25
|
+
task release: %i[rubocop check_version]
|
26
|
+
task default: %i[test]
|
@@ -16,7 +16,7 @@ module Tangle
|
|
16
16
|
|
17
17
|
# Return the direct predecessors of +vertex+
|
18
18
|
def direct_predecessors(vertex)
|
19
|
-
|
19
|
+
in_edges(vertex).map(&:tail).to_set
|
20
20
|
end
|
21
21
|
|
22
22
|
# Is +other+ a direct predecessor of +vertex+?
|
@@ -31,7 +31,7 @@ module Tangle
|
|
31
31
|
|
32
32
|
# Is +other+ a predecessor of +vertex+?
|
33
33
|
def predecessor?(vertex, other)
|
34
|
-
predecessors(vertex).
|
34
|
+
predecessors(vertex).any? { |vtx| other.eql?(vtx) }
|
35
35
|
end
|
36
36
|
|
37
37
|
# Return a subgraph with all predecessors of a +vertex+
|
@@ -46,7 +46,7 @@ module Tangle
|
|
46
46
|
|
47
47
|
# Return the direct successors of +vertex+
|
48
48
|
def direct_successors(vertex)
|
49
|
-
|
49
|
+
out_edges(vertex).map(&:head).to_set
|
50
50
|
end
|
51
51
|
|
52
52
|
# Is +other+ a direct successor of +vertex+?
|
@@ -61,7 +61,7 @@ module Tangle
|
|
61
61
|
|
62
62
|
# Is +other+ a successor of +vertex+?
|
63
63
|
def successor?(vertex, other)
|
64
|
-
successors(vertex).
|
64
|
+
successors(vertex).any? { |vtx| other.eql?(vtx) }
|
65
65
|
end
|
66
66
|
|
67
67
|
# Return a subgraph with all successors of a +vertex+
|
@@ -3,14 +3,27 @@ require 'set'
|
|
3
3
|
module Tangle
|
4
4
|
# Vertex related methods in a graph
|
5
5
|
module GraphVertices
|
6
|
+
# Fetch a vertex by its name
|
7
|
+
def fetch(name)
|
8
|
+
@vertices_by_name.fetch(name)
|
9
|
+
end
|
10
|
+
|
11
|
+
# Return a named vertex
|
12
|
+
def [](name)
|
13
|
+
@vertices_by_name[name]
|
14
|
+
end
|
15
|
+
|
6
16
|
# Return all vertices in the graph
|
7
17
|
def vertices
|
8
18
|
@vertices.keys
|
9
19
|
end
|
10
20
|
|
11
21
|
# Add a vertex into the graph
|
12
|
-
|
22
|
+
#
|
23
|
+
# If a name: is given, it will be registered by name
|
24
|
+
def add_vertex(vertex, name: nil)
|
13
25
|
@vertices[vertex] = Set[]
|
26
|
+
@vertices_by_name[name] = vertex unless name.nil?
|
14
27
|
self
|
15
28
|
end
|
16
29
|
alias << add_vertex
|
@@ -28,6 +41,7 @@ module Tangle
|
|
28
41
|
# Initialize vertex related attributes
|
29
42
|
def initialize_vertices
|
30
43
|
@vertices = {}
|
44
|
+
@vertices_by_name = {}
|
31
45
|
end
|
32
46
|
|
33
47
|
# Yield each reachable vertex to a block, breadth first
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Tangle
|
2
|
+
module Mixin
|
3
|
+
# Tangle mixin for loading a directory structure as a graph
|
4
|
+
#
|
5
|
+
# Graph.new(directory: { options })
|
6
|
+
#
|
7
|
+
# options are:
|
8
|
+
# root: root directory for the structure (mandatory)
|
9
|
+
# loaders: list of object loader lambdas (mandatory)
|
10
|
+
# follow_links: bool for following symlinks to directories
|
11
|
+
# (default false)
|
12
|
+
#
|
13
|
+
# A loader lambda will be called like
|
14
|
+
# ->(graph, path, parent_path) { ... }
|
15
|
+
#
|
16
|
+
# The lambdas are called in order until one returns true
|
17
|
+
#
|
18
|
+
# Example:
|
19
|
+
# loader = lambda do |g, path, parent|
|
20
|
+
# vertex = File::Stat.new(path)
|
21
|
+
# g.add_vertex(vertex, name: path)
|
22
|
+
# g.add_edge(g[parent], vertex) unless parent.nil?
|
23
|
+
# end
|
24
|
+
# Tangle::DiGraph.new(mixins: [Tangle::Mixins::Directory],
|
25
|
+
# directory: { root: '.', loaders: [loader] })
|
26
|
+
module Directory
|
27
|
+
# Tangle::Graph mixin for loading a directory structure
|
28
|
+
module Graph
|
29
|
+
attr_reader :root_directory
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def initialize_kwarg_directory(**options)
|
34
|
+
@root_directory = options.fetch(:root)
|
35
|
+
@directory_loaders = options.fetch(:loaders)
|
36
|
+
@follow_directory_links = options[:follow_links]
|
37
|
+
load_directory_graph(@root_directory)
|
38
|
+
end
|
39
|
+
|
40
|
+
def load_directory_graph(path, parent = nil)
|
41
|
+
@directory_loaders.any? do |loader|
|
42
|
+
loader.to_proc.call(self, path, parent)
|
43
|
+
end
|
44
|
+
|
45
|
+
return if File.symlink?(path) && !@follow_directory_links
|
46
|
+
return unless File.directory?(path)
|
47
|
+
|
48
|
+
Dir.each_child(path) do |file|
|
49
|
+
load_directory_graph(File.join(path, file), path)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/tangle.gemspec
CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency 'git-version-bump', '~> 0.15'
|
25
25
|
|
26
26
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
27
|
+
spec.add_development_dependency 'fasterer', '~> 0.4'
|
27
28
|
spec.add_development_dependency 'rake', '~> 10.0'
|
28
29
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
29
30
|
spec.add_development_dependency 'rubocop', '~> 0.52'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tangle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Calle Englund
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: git-version-bump
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '1.16'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: fasterer
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0.4'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0.4'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rake
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,6 +124,7 @@ files:
|
|
110
124
|
- lib/tangle/graph_vertices.rb
|
111
125
|
- lib/tangle/mixin.rb
|
112
126
|
- lib/tangle/mixin/connectedness.rb
|
127
|
+
- lib/tangle/mixin/directory.rb
|
113
128
|
- lib/tangle/simple/graph.rb
|
114
129
|
- lib/tangle/version.rb
|
115
130
|
- tangle.gemspec
|