libis-workflow-mongoid 2.0.beta.13-java
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 +7 -0
- data/.gitignore +38 -0
- data/.travis/create_users.js +31 -0
- data/.travis/db_prepare.sh +7 -0
- data/.travis.yml +45 -0
- data/Gemfile +4 -0
- data/LICENSE +21 -0
- data/README.md +8 -0
- data/Rakefile +7 -0
- data/lib/libis/workflow/mongoid/base.rb +58 -0
- data/lib/libis/workflow/mongoid/config.rb +27 -0
- data/lib/libis/workflow/mongoid/dynamic.rb +32 -0
- data/lib/libis/workflow/mongoid/job.rb +47 -0
- data/lib/libis/workflow/mongoid/log_entry.rb +28 -0
- data/lib/libis/workflow/mongoid/run.rb +72 -0
- data/lib/libis/workflow/mongoid/sequence.rb +79 -0
- data/lib/libis/workflow/mongoid/version.rb +9 -0
- data/lib/libis/workflow/mongoid/work_item.rb +39 -0
- data/lib/libis/workflow/mongoid/work_item_base.rb +107 -0
- data/lib/libis/workflow/mongoid/worker.rb +22 -0
- data/lib/libis/workflow/mongoid/workflow.rb +48 -0
- data/lib/libis/workflow/mongoid.rb +28 -0
- data/lib/libis-workflow-mongoid.rb +2 -0
- data/libis-workflow-mongoid.gemspec +39 -0
- data/mongoid.yml +127 -0
- data/spec/db_env.sh +5 -0
- data/spec/db_start.sh +5 -0
- data/spec/items/test_dir_item.rb +17 -0
- data/spec/items/test_file_item.rb +28 -0
- data/spec/items/test_item.rb +8 -0
- data/spec/items/test_run.rb +12 -0
- data/spec/items.rb +3 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/tasks/camelize_name.rb +13 -0
- data/spec/tasks/checksum_tester.rb +34 -0
- data/spec/tasks/collect_files.rb +52 -0
- data/spec/test_job.rb +9 -0
- data/spec/test_workflow.rb +8 -0
- data/spec/workflow_spec.rb +201 -0
- metadata +193 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8f7cd89f49cbe129eb23fb80e198faa04fb78fd6
|
4
|
+
data.tar.gz: da74e5eadbcda157fe4cb3643806398a35971a4a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 18456535f45deb883997f265b568ed638b9d0c1f0354dda2659664769137abf90f49704f8cd88b22aca9511357410ccb46323f24582abf29eb6e5e10db200311
|
7
|
+
data.tar.gz: 78c5fe4f27a5a140baf5bd0b5fb6965e5807a176dff500790e92975b03853153012b9699a8458774ad64dbe7e582dd38a5feaf64ad948fcc830c56d234f4e42e
|
data/.gitignore
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/test/tmp/
|
9
|
+
/test/version_tmp/
|
10
|
+
/tmp/
|
11
|
+
|
12
|
+
## Specific to RubyMotion:
|
13
|
+
.dat*
|
14
|
+
.repl_history
|
15
|
+
build/
|
16
|
+
|
17
|
+
## Documentation cache and generated files:
|
18
|
+
/.yardoc/
|
19
|
+
/_yardoc/
|
20
|
+
/doc/
|
21
|
+
/rdoc/
|
22
|
+
|
23
|
+
## Environment normalisation:
|
24
|
+
/.bundle/
|
25
|
+
/lib/bundler/man/
|
26
|
+
|
27
|
+
# for a library or gem, you might want to ignore these files since the code is
|
28
|
+
# intended to run in multiple environments; otherwise, check them in:
|
29
|
+
Gemfile.lock
|
30
|
+
.ruby-version
|
31
|
+
.ruby-gemset
|
32
|
+
|
33
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
34
|
+
.rvmrc
|
35
|
+
|
36
|
+
.idea
|
37
|
+
projectFilesBackup
|
38
|
+
spec/data
|
@@ -0,0 +1,31 @@
|
|
1
|
+
db = db.getSiblingDB("admin");
|
2
|
+
|
3
|
+
db.createUser(
|
4
|
+
{
|
5
|
+
"user" : "useradmin",
|
6
|
+
"pwd" : "useradmin",
|
7
|
+
"roles" : [
|
8
|
+
{
|
9
|
+
"role" : "userAdminAnyDatabase",
|
10
|
+
"db" : "admin"
|
11
|
+
}
|
12
|
+
]
|
13
|
+
}
|
14
|
+
);
|
15
|
+
|
16
|
+
db.auth("useradmin", "useradmin");
|
17
|
+
|
18
|
+
db = db.getSiblingDB("workflow_test");
|
19
|
+
|
20
|
+
db.createUser(
|
21
|
+
{
|
22
|
+
"user" : "test",
|
23
|
+
"pwd" : "abc123",
|
24
|
+
"roles" : [
|
25
|
+
{
|
26
|
+
"role" : "readWriteAnyDatabase",
|
27
|
+
"db" : "admin"
|
28
|
+
}
|
29
|
+
]
|
30
|
+
}
|
31
|
+
);
|
data/.travis.yml
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
language: ruby
|
2
|
+
sudo: false
|
3
|
+
bundler_args: --without development
|
4
|
+
cache: bundler
|
5
|
+
|
6
|
+
rvm:
|
7
|
+
- 2.1.7
|
8
|
+
- 2.2.3
|
9
|
+
- ruby-head
|
10
|
+
- jruby-9.0.1.0
|
11
|
+
jdk:
|
12
|
+
- openjdk7
|
13
|
+
- oraclejdk7
|
14
|
+
- oraclejdk8
|
15
|
+
matrix:
|
16
|
+
exclude:
|
17
|
+
- rvm: 2.1.7
|
18
|
+
jdk: oraclejdk7
|
19
|
+
- rvm: 2.1.7
|
20
|
+
jdk: oraclejdk8
|
21
|
+
- rvm: 2.2.3
|
22
|
+
jdk: oraclejdk7
|
23
|
+
- rvm: 2.2.3
|
24
|
+
jdk: oraclejdk8
|
25
|
+
- rvm: ruby-head
|
26
|
+
jdk: oraclejdk7
|
27
|
+
- rvm: ruby-head
|
28
|
+
jdk: oraclejdk8
|
29
|
+
allow_failures:
|
30
|
+
- rvm: ruby-head
|
31
|
+
branches:
|
32
|
+
only:
|
33
|
+
- master
|
34
|
+
env:
|
35
|
+
global:
|
36
|
+
- MONGODB_VERSION=3.2.0
|
37
|
+
- JRUBY_OPTS="-Xcli.debug=true --debug"
|
38
|
+
before_install:
|
39
|
+
- wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-$MONGODB_VERSION.tgz
|
40
|
+
- tar xfz mongodb-linux-x86_64-$MONGODB_VERSION.tgz
|
41
|
+
- export PATH=`pwd`/mongodb-linux-x86_64-$MONGODB_VERSION/bin:$PATH
|
42
|
+
- mkdir -p data/db
|
43
|
+
- mongod --dbpath=data/db &> /dev/null &
|
44
|
+
- sleep 3
|
45
|
+
before_script: ./.travis/db_prepare.sh
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 LIBIS
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
|
2
|
+
[](https://travis-ci.org/libis/workflow-mongoid)
|
3
|
+
[](https://coveralls.io/r/libis/workflow-monoid)
|
4
|
+
|
5
|
+
workflow-mongoid
|
6
|
+
================
|
7
|
+
|
8
|
+
Mongoid persistence for the workflow framework
|
data/Rakefile
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'mongoid'
|
3
|
+
require 'mongoid/document'
|
4
|
+
# require 'mongoid_indifferent_access'
|
5
|
+
require_relative 'sequence'
|
6
|
+
|
7
|
+
require 'active_support/core_ext/object/deep_dup'
|
8
|
+
|
9
|
+
module Libis
|
10
|
+
module Workflow
|
11
|
+
module Mongoid
|
12
|
+
|
13
|
+
module Base
|
14
|
+
|
15
|
+
def self.included(klass)
|
16
|
+
klass.class_eval do
|
17
|
+
include ::Mongoid::Document
|
18
|
+
include ::Mongoid::Timestamps::Created::Short
|
19
|
+
# include ::Mongoid::Extensions::Hash::IndifferentAccess
|
20
|
+
include ::Libis::Workflow::Mongoid::Sequence
|
21
|
+
field :_id, type: Integer, overwrite: true
|
22
|
+
sequence :_id
|
23
|
+
index c_at: 1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def dup
|
28
|
+
new_obj = self.class.new
|
29
|
+
new_obj.copy_attributes(self)
|
30
|
+
end
|
31
|
+
|
32
|
+
def info
|
33
|
+
self.attributes.deep_dup.reject { |k,v| v.blank? || volatile_attributes.include?(k) }.to_hash
|
34
|
+
end
|
35
|
+
|
36
|
+
protected
|
37
|
+
|
38
|
+
def volatile_attributes
|
39
|
+
%w'_id c_at'
|
40
|
+
end
|
41
|
+
private
|
42
|
+
|
43
|
+
def copy_attributes(other)
|
44
|
+
self.set(
|
45
|
+
other.attributes.reject do |k, _|
|
46
|
+
%W(_id c_at).include? k.to_s
|
47
|
+
end.each_with_object({}) do |(k, v), h|
|
48
|
+
h[k] = v.duplicable? ? v.dup : v
|
49
|
+
end
|
50
|
+
)
|
51
|
+
self
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'singleton'
|
3
|
+
require 'mongoid'
|
4
|
+
|
5
|
+
require 'libis/workflow/config'
|
6
|
+
require 'libis/workflow/mongoid/run'
|
7
|
+
|
8
|
+
module Libis
|
9
|
+
module Workflow
|
10
|
+
module Mongoid
|
11
|
+
|
12
|
+
# noinspection RubyConstantNamingConvention
|
13
|
+
Config = ::Libis::Workflow::Config
|
14
|
+
|
15
|
+
Config.define_singleton_method(:database_connect) do |config_file = './mongoid.yml', environment = nil|
|
16
|
+
# noinspection RubyResolve
|
17
|
+
instance.database_connect(config_file, environment)
|
18
|
+
end
|
19
|
+
|
20
|
+
Config.send(:define_method, :database_connect) do |config_file = './mongoid.yml', environment = nil|
|
21
|
+
::Mongoid.load! config_file, environment
|
22
|
+
::Mongo::Logger.logger.level = Logger::ERROR
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'mongoid'
|
2
|
+
require 'mongoid/document'
|
3
|
+
|
4
|
+
module Libis
|
5
|
+
module Workflow
|
6
|
+
module Mongoid
|
7
|
+
module Dynamic
|
8
|
+
def self.included(klass)
|
9
|
+
klass.class_eval do
|
10
|
+
include ::Mongoid::Document
|
11
|
+
include ::Mongoid::Attributes::Dynamic
|
12
|
+
include ::Libis::Workflow::Mongoid::Sequence
|
13
|
+
field :_id, type: Integer, overwrite: true
|
14
|
+
sequence :_id
|
15
|
+
index _id: 1
|
16
|
+
|
17
|
+
def has_key?(key)
|
18
|
+
self.attributes.has_key?(key.to_s) || self.attributes.has_key?(key.to_sym)
|
19
|
+
end
|
20
|
+
|
21
|
+
def each(&block)
|
22
|
+
self.attributes.reject { |k,_| k == '_id' }.each(&block)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'libis/workflow/base/job'
|
4
|
+
require 'libis/workflow/mongoid/base'
|
5
|
+
|
6
|
+
module Libis
|
7
|
+
module Workflow
|
8
|
+
module Mongoid
|
9
|
+
|
10
|
+
module Job
|
11
|
+
|
12
|
+
def self.included(klass)
|
13
|
+
klass.class_eval do
|
14
|
+
include ::Libis::Workflow::Base::Job
|
15
|
+
include ::Libis::Workflow::Mongoid::Base
|
16
|
+
|
17
|
+
store_in collection: 'workflow_jobs'
|
18
|
+
|
19
|
+
field :name, type: String
|
20
|
+
field :description, type: String
|
21
|
+
field :input, type: Hash, default: -> { Hash.new }
|
22
|
+
field :run_object, type: String
|
23
|
+
|
24
|
+
index({name: 1}, {unique: 1})
|
25
|
+
|
26
|
+
def klass.run_class(run_klass)
|
27
|
+
has_many :runs, inverse_of: :job, class_name: run_klass.to_s,
|
28
|
+
dependent: :destroy, autosave: true, order: :c_at.asc
|
29
|
+
end
|
30
|
+
|
31
|
+
def klass.workflow_class(workflow_klass)
|
32
|
+
belongs_to :workflow, inverse_of: :jobs, class_name: workflow_klass.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
# def create_run_object
|
36
|
+
# # noinspection RubyResolve
|
37
|
+
# self.runs.build
|
38
|
+
# end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'libis-workflow'
|
3
|
+
require 'libis/workflow/mongoid/base'
|
4
|
+
|
5
|
+
require 'mongoid/extensions/time_with_zone'
|
6
|
+
|
7
|
+
module Libis
|
8
|
+
module Workflow
|
9
|
+
module Mongoid
|
10
|
+
|
11
|
+
class LogEntry
|
12
|
+
include Libis::Workflow::Mongoid::Base
|
13
|
+
|
14
|
+
store_in collection: 'log'
|
15
|
+
|
16
|
+
field :severity, type: String
|
17
|
+
field :task, type: String, default: '*UNKNOWN*'
|
18
|
+
field :code, type: Integer
|
19
|
+
field :message, type: String
|
20
|
+
field :status, type: String
|
21
|
+
|
22
|
+
belongs_to :logger, polymorphic: true
|
23
|
+
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
require 'libis/workflow/base/run'
|
5
|
+
require 'libis/workflow/mongoid/work_item_base'
|
6
|
+
|
7
|
+
module Libis
|
8
|
+
module Workflow
|
9
|
+
module Mongoid
|
10
|
+
|
11
|
+
module Run
|
12
|
+
# extend ActiveSupport::Concern
|
13
|
+
|
14
|
+
def self.included(klass)
|
15
|
+
klass.class_eval do
|
16
|
+
include ::Libis::Workflow::Base::Run
|
17
|
+
include ::Libis::Workflow::Mongoid::WorkItemBase
|
18
|
+
|
19
|
+
store_in collection: 'workflow_runs'
|
20
|
+
|
21
|
+
field :start_date, type: Time, default: -> { Time.now }
|
22
|
+
|
23
|
+
set_callback(:destroy, :before) do |document|
|
24
|
+
document.items.each { |item| item.destroy }
|
25
|
+
wd = document.work_dir
|
26
|
+
FileUtils.rmtree wd if wd && !wd.blank? && Dir.exist?(wd)
|
27
|
+
end
|
28
|
+
|
29
|
+
index start_date: 1
|
30
|
+
|
31
|
+
def klass.job_class(job_klass)
|
32
|
+
belongs_to :job, inverse_of: :runs, class_name: job_klass.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def klass.item_class(item_klass)
|
36
|
+
has_many :items, inverse_of: :run, class_name: item_klass.to_s,
|
37
|
+
dependent: :destroy, autosave: true, order: :c_at.asc
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def run
|
43
|
+
self.tasks = []
|
44
|
+
self.items = []
|
45
|
+
# noinspection RubySuperCallWithoutSuperclassInspection
|
46
|
+
super
|
47
|
+
end
|
48
|
+
|
49
|
+
# Add a child work item
|
50
|
+
#
|
51
|
+
# @param [Libis::Workflow::Mongoid::WorkItem] item to be added to the child list :items
|
52
|
+
def add_item(item)
|
53
|
+
# noinspection RubyResolve
|
54
|
+
item.run = self
|
55
|
+
super
|
56
|
+
end
|
57
|
+
|
58
|
+
alias_method :<<, :add_item
|
59
|
+
|
60
|
+
def parent
|
61
|
+
nil
|
62
|
+
end
|
63
|
+
|
64
|
+
def parent=(_)
|
65
|
+
nil
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
#require 'mongoid/fields/validators/macro'
|
2
|
+
|
3
|
+
module Libis
|
4
|
+
module Workflow
|
5
|
+
module Mongoid
|
6
|
+
|
7
|
+
# Include this module to add automatic sequence feature (also works for _id field, so SQL-Like autoincrement primary key can easily be simulated)
|
8
|
+
# usage:
|
9
|
+
# class KlassName
|
10
|
+
# include Mongoid::Document
|
11
|
+
# include LIBIS::Mongoid::Sequence
|
12
|
+
# ...
|
13
|
+
# field :number, :type=>Integer
|
14
|
+
# sequence :number
|
15
|
+
# ...
|
16
|
+
# Note: only tested on Mongoid 3.x and 4.x
|
17
|
+
module Sequence
|
18
|
+
extend ActiveSupport::Concern
|
19
|
+
|
20
|
+
#noinspection ALL
|
21
|
+
module ClassMethods
|
22
|
+
|
23
|
+
def sequence(_field, prefix = nil)
|
24
|
+
# REPLACE FIELD DEFAULT VALUE
|
25
|
+
_field = _field.to_s
|
26
|
+
options = fields[_field].options.merge(
|
27
|
+
default: lambda {
|
28
|
+
self.class.set_from_sequence(_field, prefix)
|
29
|
+
},
|
30
|
+
pre_processed: false,
|
31
|
+
overwrite: true
|
32
|
+
)
|
33
|
+
(options.keys - ::Mongoid::Fields::Validators::Macro::OPTIONS).each { |key| options.delete key }
|
34
|
+
field(_field, options)
|
35
|
+
end
|
36
|
+
|
37
|
+
def set_from_sequence(_field, prefix)
|
38
|
+
# Increase the sequence value and also avoids conflicts
|
39
|
+
catch(:value) do
|
40
|
+
value = nil
|
41
|
+
begin
|
42
|
+
value = seq_upsert(counter_id(_field), {'$inc' => {'value' => 1}}).send('[]', 'value')
|
43
|
+
value = "#{prefix.is_a?(Proc) ? instance_eval(prefix.call) : prefix}_#{value}" if prefix
|
44
|
+
end until self.where(_field => value).count == 0
|
45
|
+
throw :value, value
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def reset_sequence(_field, value = 0)
|
50
|
+
seq_upsert(counter_id(_field), {'$set' => {'value' => value}})
|
51
|
+
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
|
55
|
+
def counter_id(_field)
|
56
|
+
#"#{self.name.underscore}##{_field}"
|
57
|
+
"#{collection_name.to_s}##{_field}"
|
58
|
+
end
|
59
|
+
|
60
|
+
def sequences
|
61
|
+
# mongo_session["#{self.collection_name.to_s}__seq"]
|
62
|
+
mongo_client["__sequences__"]
|
63
|
+
end
|
64
|
+
|
65
|
+
def seq_upsert(counter_id, change)
|
66
|
+
sequences.find_one_and_update({_id: counter_id},
|
67
|
+
change,
|
68
|
+
upsert: true,
|
69
|
+
return_document: :after
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'libis/workflow/mongoid/work_item_base'
|
3
|
+
|
4
|
+
module Libis
|
5
|
+
module Workflow
|
6
|
+
module Mongoid
|
7
|
+
|
8
|
+
module WorkItem
|
9
|
+
|
10
|
+
def self.included(klass)
|
11
|
+
klass.class_eval do
|
12
|
+
include Libis::Workflow::Mongoid::WorkItemBase
|
13
|
+
|
14
|
+
store_in collection: 'workflow_items'
|
15
|
+
|
16
|
+
has_many :items, inverse_of: :parent, class_name: klass.to_s,
|
17
|
+
dependent: :destroy, autosave: true, order: :_id.asc
|
18
|
+
belongs_to :parent, inverse_of: :items, class_name: klass.to_s
|
19
|
+
|
20
|
+
set_callback(:destroy, :before) do |document|
|
21
|
+
document.items.each { |item| item.destroy! }
|
22
|
+
end
|
23
|
+
|
24
|
+
def klass.run_class(run_klass)
|
25
|
+
belongs_to :run, inverse_of: :items, class_name: run_klass.to_s
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_parent
|
32
|
+
self.parent || self.run
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,107 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'libis-workflow'
|
3
|
+
require_relative 'dynamic'
|
4
|
+
|
5
|
+
module Libis
|
6
|
+
module Workflow
|
7
|
+
module Mongoid
|
8
|
+
|
9
|
+
module WorkItemBase
|
10
|
+
|
11
|
+
class Options
|
12
|
+
include Libis::Workflow::Mongoid::Dynamic
|
13
|
+
embedded_in :work_item, class_name: Libis::Workflow::Mongoid::WorkItemBase.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
class Properties
|
17
|
+
include Libis::Workflow::Mongoid::Dynamic
|
18
|
+
embedded_in :work_item, class_name: Libis::Workflow::Mongoid::WorkItemBase.to_s
|
19
|
+
end
|
20
|
+
|
21
|
+
class Summary
|
22
|
+
include Libis::Workflow::Mongoid::Dynamic
|
23
|
+
embedded_in :work_item, class_name: Libis::Workflow::Mongoid::WorkItemBase.to_s
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.included(klass)
|
27
|
+
klass.class_eval do
|
28
|
+
include Libis::Workflow::Base::WorkItem
|
29
|
+
include Libis::Workflow::Mongoid::Base
|
30
|
+
|
31
|
+
embeds_one :options, class_name: Libis::Workflow::Mongoid::WorkItemBase::Options.to_s
|
32
|
+
embeds_one :properties, class_name: Libis::Workflow::Mongoid::WorkItemBase::Properties.to_s
|
33
|
+
embeds_one :summary, class_name: Libis::Workflow::Mongoid::WorkItemBase::Summary.to_s
|
34
|
+
|
35
|
+
has_many :logs, as: :logger, class_name: Libis::Workflow::Mongoid::LogEntry.to_s,
|
36
|
+
dependent: :destroy, autosave: true, order: :_id.asc do
|
37
|
+
def log_history
|
38
|
+
where(:status.exists => false)
|
39
|
+
end
|
40
|
+
|
41
|
+
def status_log
|
42
|
+
where(:status.exists => true)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# def destroy
|
47
|
+
# # noinspection RubyResolve
|
48
|
+
# self.logs.each { |log| log.destroy }
|
49
|
+
# end
|
50
|
+
|
51
|
+
set_callback(:destroy, :before) do |document|
|
52
|
+
# noinspection RubyResolve
|
53
|
+
document.logs.each { |log| log.destroy! }
|
54
|
+
end
|
55
|
+
|
56
|
+
set_callback(:initialize, :after) do |document|
|
57
|
+
document.options = {}
|
58
|
+
document.properties = {}
|
59
|
+
document.summary = {}
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
def each
|
67
|
+
self.items.each { |item| yield item }
|
68
|
+
end
|
69
|
+
|
70
|
+
def get_items
|
71
|
+
self.items.to_a
|
72
|
+
end
|
73
|
+
|
74
|
+
def item_count
|
75
|
+
self.items.count
|
76
|
+
end
|
77
|
+
|
78
|
+
alias_method :count, :item_count
|
79
|
+
alias_method :size, :item_count
|
80
|
+
|
81
|
+
def log_history
|
82
|
+
# noinspection RubyResolve
|
83
|
+
self.logs.log_history.all || []
|
84
|
+
end
|
85
|
+
|
86
|
+
def status_log
|
87
|
+
# noinspection RubyResolve
|
88
|
+
self.logs.status_log.all || []
|
89
|
+
end
|
90
|
+
|
91
|
+
protected
|
92
|
+
|
93
|
+
def add_log_entry(msg)
|
94
|
+
# noinspection RubyResolve
|
95
|
+
self.logs.build(msg)
|
96
|
+
end
|
97
|
+
|
98
|
+
def add_status_log(info)
|
99
|
+
# noinspection RubyResolve
|
100
|
+
self.logs.build(info)
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|