tangle 0.8.2 → 0.11.0

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.
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
4
+ require_relative '../edge'
5
+
6
+ module Tangle
7
+ module Undirected
8
+ #
9
+ # An edge in an undirected graph, connecting two vertices
10
+ #
11
+ class Edge < Tangle::Edge
12
+ def each_vertex(&block)
13
+ @vertices.each_key(&block)
14
+ end
15
+
16
+ def to_s
17
+ vertex1, vertex2 = @vertices.keys
18
+ "{#{vertex1}<->#{vertex2}}"
19
+ end
20
+ alias inspect to_s
21
+
22
+ private
23
+
24
+ def initialize_vertices(vertex1, vertex2 = vertex1)
25
+ super
26
+ @vertices = { vertex1 => vertex2, vertex2 => vertex1 }.freeze
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,73 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../base_graph'
4
+ require_relative 'edge'
5
+
6
+ module Tangle
7
+ module Undirected
8
+ #
9
+ # Undirected graph
10
+ #
11
+ class Graph < Tangle::BaseGraph
12
+ # Two vertices are adjacent if there is an edge between them
13
+ def adjacent?(vertex, other)
14
+ edges(vertex).any? { |edge| edge[vertex] == other }
15
+ end
16
+
17
+ # Return the set of adjacent vertices
18
+ def adjacent(vertex)
19
+ Set.new(edges(vertex).map { |edge| edge.walk(vertex) })
20
+ end
21
+
22
+ # Get the largest connected subgraph for a vertex.
23
+ # Also aliased as :component and :connected_component
24
+ #
25
+ # connected_subgraph(vertex) => Graph
26
+ #
27
+ def connected_subgraph(vertex)
28
+ subgraph { |other| connected?(vertex, other) }
29
+ end
30
+ alias component connected_subgraph
31
+ alias connected_component connected_subgraph
32
+
33
+ # Get the largest subgraph that is not connected to a vertex, or what's
34
+ # left after removing the connected subgraph.
35
+ #
36
+ def disconnected_subgraph(vertex)
37
+ subgraph { |other| !connected?(vertex, other) }
38
+ end
39
+
40
+ # A graph is connected if all vertices are connected to all vertices
41
+ # An empty graph is disconnected.
42
+ #
43
+ def connected?(*tested_vertices)
44
+ tested_vertices = vertices if tested_vertices.empty?
45
+ return false if tested_vertices.empty?
46
+
47
+ tested_vertices.combination(2).all? do |pair|
48
+ this, that = pair.to_a
49
+ reachable(this).any? { |other| other == that }
50
+ end
51
+ end
52
+
53
+ # A graph is disconnected if any vertex is not connected to all other.
54
+ # An empty graph is disconnected.
55
+ #
56
+ def disconnected?(*tested_vertices)
57
+ !connected?(*tested_vertices)
58
+ end
59
+
60
+ # Return a breadth-first Enumerator for all reachable vertices,
61
+ # by transitive adjacency.
62
+ def reachable(start_vertex)
63
+ vertex_enumerator(start_vertex, :adjacent)
64
+ end
65
+
66
+ private
67
+
68
+ def new_edge(*args, **kwargs)
69
+ Edge.new(*args, **kwargs)
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../graph'
4
+
5
+ module Tangle
6
+ module Undirected
7
+ module Simple
8
+ #
9
+ # A simple graph, without loops and multiple edges
10
+ class Graph < Tangle::Undirected::Graph
11
+ protected
12
+
13
+ def insert_edge(edge)
14
+ raise LoopError if edge.loop?
15
+ raise MultiEdgeError if adjacent?(*edge.each_vertex)
16
+
17
+ super
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -1,6 +1,10 @@
1
- require 'git-version-bump'
1
+ # frozen_string_literal: true
2
2
 
3
- module Tangle
4
- VERSION = GVB.version.freeze
5
- DATE = GVB.date.freeze
3
+ module Tangle # rubocop:disable Style/Documentation
4
+ begin
5
+ require 'git-version-bump'
6
+ VERSION = GVB.version.freeze
7
+ rescue LoadError
8
+ VERSION = '0.0.0.UNDEF'
9
+ end
6
10
  end
@@ -0,0 +1,8 @@
1
+ {
2
+ "folders":
3
+ [
4
+ {
5
+ "path": "."
6
+ }
7
+ ]
8
+ }
data/tangle.gemspec CHANGED
@@ -1,12 +1,25 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'tangle/version'
5
6
 
7
+ dev_deps = {
8
+ 'bundler' => '~> 2.2',
9
+ 'codecov' => '~> 0.5.0',
10
+ 'fasterer' => '~> 0.9.0',
11
+ 'pry' => '~> 0.14.0',
12
+ 'rake' => '~> 13.0',
13
+ 'rspec' => '~> 3.10',
14
+ 'rubocop' => '~> 1.15',
15
+ 'rubocop-rake' => '~> 0.5.1',
16
+ 'rubocop-rspec' => '~> 2.3',
17
+ 'simplecov' => '~> 0.21.0'
18
+ }
19
+
6
20
  Gem::Specification.new do |spec|
7
21
  spec.name = 'tangle'
8
22
  spec.version = Tangle::VERSION
9
- spec.date = Tangle::DATE
10
23
  spec.authors = ['Calle Englund']
11
24
  spec.email = ['calle@discord.bofh.se']
12
25
 
@@ -21,11 +34,10 @@ Gem::Specification.new do |spec|
21
34
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
35
  spec.require_paths = ['lib']
23
36
 
24
- spec.add_dependency 'git-version-bump', '~> 0.15'
37
+ spec.platform = Gem::Platform::RUBY
38
+ spec.required_ruby_version = '>= 2.6', '< 4.0'
39
+
40
+ spec.add_dependency 'git-version-bump', '~> 0.17.0'
25
41
 
26
- spec.add_development_dependency 'bundler', '~> 1.16'
27
- spec.add_development_dependency 'fasterer', '~> 0.4'
28
- spec.add_development_dependency 'rake', '~> 10.0'
29
- spec.add_development_dependency 'rspec', '~> 3.0'
30
- spec.add_development_dependency 'rubocop', '~> 0.52'
42
+ dev_deps.each { |d| spec.add_development_dependency(*d) }
31
43
  end
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.2
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Calle Englund
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-05-15 00:00:00.000000000 Z
11
+ date: 2021-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: git-version-bump
@@ -16,95 +16,166 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.15'
19
+ version: 0.17.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0.15'
26
+ version: 0.17.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.16'
33
+ version: '2.2'
34
34
  type: :development
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: '1.16'
40
+ version: '2.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: codecov
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.5.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.5.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: fasterer
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0.4'
61
+ version: 0.9.0
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0.4'
68
+ version: 0.9.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.14.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.14.0
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: rake
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: '10.0'
89
+ version: '13.0'
62
90
  type: :development
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: '10.0'
96
+ version: '13.0'
69
97
  - !ruby/object:Gem::Dependency
70
98
  name: rspec
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: '3.0'
103
+ version: '3.10'
76
104
  type: :development
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: '3.0'
110
+ version: '3.10'
83
111
  - !ruby/object:Gem::Dependency
84
112
  name: rubocop
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: '0.52'
117
+ version: '1.15'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '0.52'
97
- description:
124
+ version: '1.15'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-rake
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: 0.5.1
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: 0.5.1
139
+ - !ruby/object:Gem::Dependency
140
+ name: rubocop-rspec
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '2.3'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '2.3'
153
+ - !ruby/object:Gem::Dependency
154
+ name: simplecov
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - "~>"
158
+ - !ruby/object:Gem::Version
159
+ version: 0.21.0
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - "~>"
165
+ - !ruby/object:Gem::Version
166
+ version: 0.21.0
167
+ description:
98
168
  email:
99
169
  - calle@discord.bofh.se
100
170
  executables: []
101
171
  extensions: []
102
172
  extra_rdoc_files: []
103
173
  files:
174
+ - ".github/workflows/ruby.yml"
104
175
  - ".gitignore"
105
176
  - ".rspec"
106
177
  - ".rubocop.yml"
107
- - ".travis.yml"
178
+ - CHANGELOG.md
108
179
  - CODE_OF_CONDUCT.md
109
180
  - Gemfile
110
181
  - LICENSE.txt
@@ -113,26 +184,29 @@ files:
113
184
  - bin/console
114
185
  - bin/setup
115
186
  - lib/tangle.rb
187
+ - lib/tangle/base_graph.rb
188
+ - lib/tangle/base_graph_private.rb
189
+ - lib/tangle/base_graph_protected.rb
190
+ - lib/tangle/currify.rb
116
191
  - lib/tangle/directed/acyclic/graph.rb
117
192
  - lib/tangle/directed/acyclic/partial_order.rb
118
193
  - lib/tangle/directed/edge.rb
119
194
  - lib/tangle/directed/graph.rb
120
195
  - lib/tangle/edge.rb
121
196
  - lib/tangle/errors.rb
122
- - lib/tangle/graph.rb
123
- - lib/tangle/graph_edges.rb
124
- - lib/tangle/graph_vertices.rb
125
197
  - lib/tangle/mixin.rb
126
- - lib/tangle/mixin/connectedness.rb
127
198
  - lib/tangle/mixin/directory.rb
128
- - lib/tangle/simple/graph.rb
199
+ - lib/tangle/undirected/edge.rb
200
+ - lib/tangle/undirected/graph.rb
201
+ - lib/tangle/undirected/simple/graph.rb
129
202
  - lib/tangle/version.rb
203
+ - ruby-tangle.sublime-project
130
204
  - tangle.gemspec
131
205
  homepage: https://github.com/notcalle/ruby-tangle
132
206
  licenses:
133
207
  - MIT
134
208
  metadata: {}
135
- post_install_message:
209
+ post_install_message:
136
210
  rdoc_options: []
137
211
  require_paths:
138
212
  - lib
@@ -140,16 +214,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
140
214
  requirements:
141
215
  - - ">="
142
216
  - !ruby/object:Gem::Version
143
- version: '0'
217
+ version: '2.6'
218
+ - - "<"
219
+ - !ruby/object:Gem::Version
220
+ version: '4.0'
144
221
  required_rubygems_version: !ruby/object:Gem::Requirement
145
222
  requirements:
146
223
  - - ">="
147
224
  - !ruby/object:Gem::Version
148
225
  version: '0'
149
226
  requirements: []
150
- rubyforge_project:
151
- rubygems_version: 2.7.6
152
- signing_key:
227
+ rubygems_version: 3.2.15
228
+ signing_key:
153
229
  specification_version: 4
154
230
  summary: Tangle implements graphs of things
155
231
  test_files: []