usecasing 0.1.2 → 0.1.3

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.
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