taskflow-mongoid 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1d7fcb6e49960147821299b3fadcfa8cb29c4ea6
4
- data.tar.gz: 3aab13db0e1dc980bc0c2d7ca759d78025f27bdf
3
+ metadata.gz: eeeffb90deeb6366c7eb33ed0af49391f1f89353
4
+ data.tar.gz: 9ccc0648722b456c3820c351edd278817e971150
5
5
  SHA512:
6
- metadata.gz: e3265a9cd061760cb56d2e43ce5417b86043834ccb8f7850387eb483aa77d8e6d97f689eef9e616937c853db7d5109819c09885c79ebb1443db4da6fd41fc529
7
- data.tar.gz: 9184401ef5b052ecd3761fcb2c50ce7379a1bbdcda05f3d65f141a1938c049bda11dfab4693b07bd4f589f652b174368b4fdd1b4471a362cc04678561cba4bd2
6
+ metadata.gz: 07f79dc97c64af40fbfc204d10f4a760768080b5f007edb3f89950a66e3c8ab73e9c66226e8d915ae65e5cc658702e501c27d04f560f0f089c3ad343f422e67c
7
+ data.tar.gz: 83f96943374f2bef0c92591627bd09862f2613bd196c276cccc7bbef99dd021f1ba8f6e36622ab0f60b9025c92386c77eb55e33994d9b93f7d9a74610152f74f
@@ -46,28 +46,6 @@ class Taskflow::Flow
46
46
  self.tasks.in(state: ['running','paused'])
47
47
  end
48
48
 
49
- # opts support :name,:params
50
- def run(klass,opts={})
51
- obj = {
52
- klass: klass.to_s,
53
- name: opts[:name] || klass.to_s,
54
- input: opts[:params],
55
- index: self.tasks.size + 1
56
- }
57
- task = klass.create obj.select{|k,v| v }
58
- if opts[:before]
59
- task.downstream << opts[:before]
60
- end
61
- if opts[:after]
62
- task.upstream << opts[:after]
63
- end
64
- if opts[:before].nil? && opts[:after].nil? && self.tasks.last
65
- self.tasks.last.downstream << task
66
- end
67
- self.tasks << task
68
- task
69
- end
70
-
71
49
  def stop!(user_id=nil)
72
50
  percent = self.tasks.map(&:progress).sum / self.tasks.size
73
51
  self.update_attributes! progress: percent,halt_by: user_id,ended_at: Time.now, state: 'stopped',result: 'warning'
@@ -94,10 +72,14 @@ class Taskflow::Flow
94
72
  end
95
73
 
96
74
  private
75
+
97
76
  def configure_tasks
98
77
  begin
78
+ @task_list = []
99
79
  configure
100
80
  sort_index 1,[]
81
+ TaskFlow::Task.collection.insert @task_list
82
+ @task_list = nil
101
83
  rescue=>exception
102
84
  self.destroy
103
85
  raise exception
@@ -105,12 +87,61 @@ class Taskflow::Flow
105
87
  reload
106
88
  end
107
89
 
90
+ # opts support :name,:params
91
+ def run(klass,opts={})
92
+ task_data = {
93
+ klass: klass.to_s,
94
+ name: opts[:name] || klass.to_s,
95
+ input: opts[:params] || {},
96
+ index: @task_list.size + 1,
97
+ _type: klass.to_s,
98
+ state: 'pending',
99
+ output: {},
100
+ progress: 0,
101
+ data: {},
102
+ flow_id: self.id,
103
+ _id: BSON::ObjectId.new,
104
+ downstream_ids: [],
105
+ upstream_ids: []
106
+ }.select{|k,v| v }
107
+ if opts[:before]
108
+ if opts[:before].is_a? Array
109
+ opts[:before].flatten!
110
+ opts[:before].each do |b|
111
+ b[:upstream_ids] << task_data[:_id]
112
+ task_data[:downstream_ids] << b[:_id]
113
+ end
114
+ else
115
+ task_data[:downstream_ids] << opts[:before][:_id]
116
+ opts[:before][:upstream_ids] << task_data[:_id]
117
+ end
118
+ end
119
+ if opts[:after]
120
+ if opts[:after].is_a? Array
121
+ opts[:after].flatten!
122
+ opts[:after].each do |a|
123
+ task_data[:upstream_ids] << a[:_id]
124
+ a[:downstream_ids] << task_data[:_id]
125
+ end
126
+ else
127
+ task_data[:upstream_ids] << opts[:after][:_id]
128
+ opts[:after][:downstream_ids] << task_data[:_id]
129
+ end
130
+ end
131
+ if opts[:before].nil? && opts[:after].nil? && @task_list.last
132
+ @task_list.last[:downstream_ids] << task_data
133
+ task_data[:upstream_ids] << @task_list.last[:_id]
134
+ end
135
+ @task_list << task_data
136
+ task_data
137
+ end
138
+
108
139
  def sort_index(i,scanned)
109
- queue = self.tasks.nin(id: scanned).select{|t| t.upstream.empty? || t.upstream.all?{|upt| scanned.include?(upt.id.to_s)}}
140
+ queue = @task_list.select{|t| !scanned.include?(t[:_id]) && (t[:upstream_ids].nil? || t[:upstream_ids].empty? || t[:upstream_ids].all?{|uid| scanned.include?(uid)}) }
110
141
  return if queue.empty?
111
142
  queue.each do |task|
112
- task.update_attributes index: i
113
- scanned << task.id.to_s
143
+ task[:index] = i
144
+ scanned << task[:_id]
114
145
  end
115
146
  sort_index i + 1,scanned
116
147
  end
@@ -1,3 +1,3 @@
1
1
  module Taskflow
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -69,9 +69,9 @@ class Taskflow::Worker
69
69
  flow.state = 'stopped'
70
70
  elsif flow.tasks.all?{|t| %w(stopped skipped).include? t.state }
71
71
  flow.state = 'stopped'
72
- elsif flow.tasks.any?{|t| t.state == 'paused' }
72
+ elsif paused_task = flow.tasks.find_by(state: 'paused')
73
73
  flow.state = 'paused'
74
- flow.result = flow.tasks.find_by(state: 'paused').result
74
+ flow.result = paused_task.result
75
75
  else
76
76
  flow.state = 'running'
77
77
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: taskflow-mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - qujianping
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-07-10 00:00:00.000000000 Z
11
+ date: 2015-08-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -116,3 +116,4 @@ signing_key:
116
116
  specification_version: 4
117
117
  summary: Easy task flow based on sidekiq.
118
118
  test_files: []
119
+ has_rdoc: