usecasing 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -7,10 +7,7 @@
7
7
 
8
8
  Add this line to your application's Gemfile:
9
9
 
10
- I did not (YET) upload this code to the rubygems.
11
- To early adopters use the :git path
12
-
13
- gem 'usecasing', :git => 'https://github.com/tdantas/usecasing.git'
10
+ gem 'usecasing'
14
11
 
15
12
  And then execute:
16
13
 
@@ -1,9 +1,12 @@
1
+ require 'set'
2
+ require 'tsort'
3
+
1
4
  module UseCase
2
5
 
3
6
  class ExecutionOrder
4
7
 
5
8
  def self.run(start_node)
6
- any_ciclic, ciclic = CyclicFinder.new(start_node).cyclic?
9
+ any_ciclic, ciclic = CyclicFinder.cyclic?(start_node)
7
10
  raise StandardError.new("cyclic detected: #{ciclic}") if any_ciclic
8
11
  post_order(start_node, [])
9
12
  end
@@ -18,6 +21,47 @@ module UseCase
18
21
 
19
22
  result.push(node)
20
23
  end
24
+ end
25
+
26
+ class CyclicFinder
27
+ include TSort
28
+
29
+ def self.cyclic?(start_point)
30
+ new(start_point).cyclic?
31
+ end
32
+
33
+ def initialize(start_point)
34
+ @start_point = start_point
35
+ @nodes = discover_nodes
36
+ end
37
+
38
+ def tsort_each_node(&block)
39
+ @nodes.each &block
40
+ end
41
+
42
+ def tsort_each_child(node, &block)
43
+ node.dependencies.each &block
44
+ end
45
+
46
+ def cyclic?
47
+ components = strongly_connected_components
48
+ result = components.any?{ |component| component.size != 1 }
49
+ [ result, components.select{|component| component.size != 1 } ]
50
+ end
51
+
52
+ private
53
+ def discover_nodes
54
+ visited = {}
55
+ stack = [@start_point]
56
+ result = Set.new
57
+ until stack.empty?
58
+ node = stack.pop
59
+ result.add node
60
+ stack.push(*(node.dependencies)) if not visited[node]
61
+ visited[node] = true
62
+ end
63
+ return result
64
+ end
21
65
 
22
66
  end
23
67
  end
@@ -1,3 +1,3 @@
1
1
  module Usecasing
2
- VERSION = "0.1.2"
2
+ VERSION = "0.1.3"
3
3
  end
data/lib/usecasing.rb CHANGED
@@ -3,6 +3,5 @@ require "usecasing/version"
3
3
  module UseCase
4
4
  autoload :Context, 'usecasing/context'
5
5
  autoload :Base, 'usecasing/base'
6
- autoload :CyclicFinder, 'usecasing/cyclic_finder'
7
6
  autoload :ExecutionOrder, 'usecasing/execution_order'
8
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: usecasing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-12-23 00:00:00.000000000 Z
12
+ date: 2013-12-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
@@ -76,7 +76,6 @@ files:
76
76
  - lib/usecasing.rb
77
77
  - lib/usecasing/base.rb
78
78
  - lib/usecasing/context.rb
79
- - lib/usecasing/cyclic_finder.rb
80
79
  - lib/usecasing/execution_order.rb
81
80
  - lib/usecasing/version.rb
82
81
  - spec/context_spec.rb
@@ -98,7 +97,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
98
97
  version: '0'
99
98
  segments:
100
99
  - 0
101
- hash: 183179680279514934
100
+ hash: 3012714953632075920
102
101
  required_rubygems_version: !ruby/object:Gem::Requirement
103
102
  none: false
104
103
  requirements:
@@ -107,7 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
106
  version: '0'
108
107
  segments:
109
108
  - 0
110
- hash: 183179680279514934
109
+ hash: 3012714953632075920
111
110
  requirements: []
112
111
  rubyforge_project:
113
112
  rubygems_version: 1.8.24
@@ -1,44 +0,0 @@
1
- require 'set'
2
- require 'tsort'
3
-
4
- module UseCase
5
-
6
- class CyclicFinder
7
- include TSort
8
-
9
- def initialize(start_point)
10
- @start_point = start_point
11
- @nodes = discover_nodes
12
- end
13
-
14
- def tsort_each_node(&block)
15
- @nodes.each &block
16
- end
17
-
18
- def tsort_each_child(node, &block)
19
- node.dependencies.each &block
20
- end
21
-
22
- def cyclic?
23
- components = strongly_connected_components
24
- result = components.any?{ |component| component.size != 1 }
25
- [ result, components.select{|component| component.size != 1 } ]
26
- end
27
-
28
- private
29
- def discover_nodes
30
- visited = {}
31
- stack = [@start_point]
32
- result = Set.new
33
- until stack.empty?
34
- node = stack.pop
35
- result.add node
36
- stack.push(*(node.dependencies)) if not visited[node]
37
- visited[node] = true
38
- end
39
-
40
- return result
41
- end
42
-
43
- end
44
- end