taskflow-mongoid 0.1.1 → 0.1.2

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