hash_graph 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/VERSION +1 -1
  2. data/lib/hash_graph.rb +6 -5
  3. data/spec/hash_graph_spec.rb +13 -0
  4. metadata +34 -17
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
@@ -89,23 +89,24 @@ module HashGraph
89
89
  end
90
90
 
91
91
  # returns graph components
92
- def components()
92
+ def components(&include_v)
93
93
  seen = Set.new
94
94
  comps = []
95
95
  keys.each do |vertex|
96
- if !seen.include?(vertex)
96
+ if !seen.include?(vertex) && (!include_v || include_v.call(vertex))
97
97
  seen.add(vertex)
98
- comps << explore_component(seen, Set.new([vertex]), vertex).to_a
98
+ comps << explore_component(seen, Set.new([vertex]), vertex, include_v).to_a
99
99
  end
100
100
  end
101
101
  comps
102
102
  end
103
103
 
104
- def explore_component(seen, component, vertex)
104
+ def explore_component(seen, component, vertex, include_v)
105
105
  self[vertex].keys.each do |conn_v|
106
106
  explore_component(seen.add(conn_v),
107
107
  component.add(conn_v),
108
- conn_v) if !seen.include?(conn_v)
108
+ conn_v,
109
+ include_v) if !seen.include?(conn_v) && (!include_v || include_v.call(conn_v))
109
110
  end
110
111
  component
111
112
  end
@@ -90,6 +90,19 @@ describe HashGraph do
90
90
  h.components.map(&:to_set).to_set.should == [[:foo, :bar, :baz].to_set,
91
91
  [:boo, :woo].to_set].to_set
92
92
  end
93
+
94
+ it "should permit nodes to be filtered out when extracting components" do
95
+ h=UndirectedGraph.new
96
+ h[:foo][:bar]=1
97
+ h[:foo][:baz]=1
98
+ h[:boo][:woo]=1
99
+ h[:foo][:foofoo]=1
100
+ h[:foofoo][:boo]=1
101
+
102
+ h.components.size.should ==(1)
103
+ h.components{|v| v!=:foofoo}.map(&:to_set).to_set.should == [[:foo, :bar, :baz].to_set,
104
+ [:boo, :woo].to_set].to_set
105
+ end
93
106
  end
94
107
 
95
108
  end
metadata CHANGED
@@ -1,7 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_graph
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 4
8
+ - 0
9
+ version: 0.4.0
5
10
  platform: ruby
6
11
  authors:
7
12
  - mccraig mccraig of the clan mccraig
@@ -9,39 +14,49 @@ autorequire:
9
14
  bindir: bin
10
15
  cert_chain: []
11
16
 
12
- date: 2010-02-23 00:00:00 +00:00
17
+ date: 2010-03-03 00:00:00 +00:00
13
18
  default_executable:
14
19
  dependencies:
15
20
  - !ruby/object:Gem::Dependency
16
21
  name: rspec
17
- type: :development
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
20
24
  requirements:
21
25
  - - ">="
22
26
  - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 2
30
+ - 9
23
31
  version: 1.2.9
24
- version:
32
+ type: :development
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: yard
27
- type: :development
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
30
38
  requirements:
31
39
  - - ">="
32
40
  - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
33
43
  version: "0"
34
- version:
44
+ type: :development
45
+ version_requirements: *id002
35
46
  - !ruby/object:Gem::Dependency
36
47
  name: rr
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
40
50
  requirements:
41
51
  - - ">="
42
52
  - !ruby/object:Gem::Version
53
+ segments:
54
+ - 0
55
+ - 10
56
+ - 5
43
57
  version: 0.10.5
44
- version:
58
+ type: :development
59
+ version_requirements: *id003
45
60
  description: Hash based directed and undirected graph implementations for Ruby
46
61
  email: craig@trampolinesystems.com
47
62
  executables: []
@@ -75,18 +90,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
75
90
  requirements:
76
91
  - - ">="
77
92
  - !ruby/object:Gem::Version
93
+ segments:
94
+ - 0
78
95
  version: "0"
79
- version:
80
96
  required_rubygems_version: !ruby/object:Gem::Requirement
81
97
  requirements:
82
98
  - - ">="
83
99
  - !ruby/object:Gem::Version
100
+ segments:
101
+ - 0
84
102
  version: "0"
85
- version:
86
103
  requirements: []
87
104
 
88
105
  rubyforge_project:
89
- rubygems_version: 1.3.5
106
+ rubygems_version: 1.3.6
90
107
  signing_key:
91
108
  specification_version: 3
92
109
  summary: simple Hash based directed and undirected graph implementations for Ruby