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.
@@ -0,0 +1,22 @@
1
+ # encoding: utf-8
2
+
3
+ require 'libis/workflow/worker'
4
+ require 'sidekiq'
5
+
6
+ module Libis
7
+ module Workflow
8
+ module Mongoid
9
+
10
+ class Worker < Libis::Workflow::Worker
11
+
12
+ def get_job(job_config)
13
+ job_name = job_config.delete(:name)
14
+ job = ::Libis::Workflow::Mongoid::Job.find(name: job_name).first
15
+ raise RuntimeError.new "Workflow #{job_name} not found" unless job.is_a? ::Libis::Workflow::Mongoid::Job
16
+ job
17
+ end
18
+
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,48 @@
1
+ # encoding: utf-8
2
+
3
+ require 'libis/workflow/base/workflow'
4
+ require 'libis/workflow/mongoid/base'
5
+ require 'libis/tools/config_file'
6
+ require 'libis/tools/extend/hash'
7
+
8
+ module Libis
9
+ module Workflow
10
+ module Mongoid
11
+
12
+ module Workflow
13
+
14
+ def self.included(klass)
15
+ klass.class_eval do
16
+ include ::Libis::Workflow::Base::Workflow
17
+ include ::Libis::Workflow::Mongoid::Base
18
+
19
+ store_in collection: 'workflow_definitions'
20
+
21
+ field :name, type: String
22
+ field :description, type: String
23
+ field :config, type: Hash, default: -> { Hash.new }
24
+
25
+ index({name: 1}, {unique: 1})
26
+
27
+ def klass.job_class(job_klass)
28
+ has_many :jobs, inverse_of: :workflow, class_name: job_klass.to_s,
29
+ dependent: :destroy, autosave: true, order: :c_at.asc
30
+ end
31
+
32
+ def klass.load(file_or_hash)
33
+ config = Libis::Tools::ConfigFile.new
34
+ config << file_or_hash
35
+ return nil if config.empty?
36
+ workflow = self.new
37
+ workflow.configure(config.to_hash.key_strings_to_symbols(recursive: true))
38
+ workflow
39
+ end
40
+
41
+ end
42
+
43
+ end
44
+
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+
3
+ require 'libis-workflow'
4
+
5
+ require_relative 'mongoid/version'
6
+
7
+ module Libis
8
+ module Workflow
9
+ module Mongoid
10
+
11
+ autoload :Base, 'libis/workflow/mongoid/base'
12
+ autoload :Config, 'libis/workflow/mongoid/config'
13
+ autoload :LogEntry, 'libis/workflow/mongoid/log_entry'
14
+ autoload :Job, 'libis/workflow/mongoid/job'
15
+ autoload :Run, 'libis/workflow/mongoid/run'
16
+ autoload :WorkItem, 'libis/workflow/mongoid/work_item'
17
+ autoload :WorkItemBase, 'libis/workflow/mongoid/work_item_base'
18
+ autoload :Worker, 'libis/workflow/mongoid/worker'
19
+ autoload :Workflow, 'libis/workflow/mongoid/workflow'
20
+
21
+ def self.configure
22
+ yield ::Libis::Workflow::Mongoid::Config.instance
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+ end
@@ -0,0 +1,2 @@
1
+ # encoding: utf-8
2
+ require 'libis/workflow/mongoid'
@@ -0,0 +1,39 @@
1
+ # encoding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'libis/workflow/mongoid/version'
7
+
8
+ Gem::Specification.new do |spec|
9
+ spec.name = 'libis-workflow-mongoid'
10
+ spec.version = ::Libis::Workflow::Mongoid::VERSION
11
+ spec.date = Date.today.to_s
12
+
13
+ spec.summary = %q{Mongoid persistence for the LIBIS Workflow framework.}
14
+ spec.description = %q{Class implementations that use Mongoid storage for the LIBIS Workflow framework.}
15
+
16
+ spec.author = 'Kris Dekeyser'
17
+ spec.email = 'kris.dekeyser@libis.be'
18
+ spec.homepage = 'https://github.com/libis/workflow-mongoid'
19
+ spec.license = 'MIT'
20
+
21
+ spec.platform = Gem::Platform::JAVA if defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
22
+
23
+ spec.files = `git ls-files -z`.split("\0")
24
+ spec.executables = spec.files.grep(%r{^bin/}).map { |f| File.basename(f) }
25
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
26
+
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.add_runtime_dependency 'libis-workflow', '~> 2.0.beta'
30
+
31
+ spec.add_runtime_dependency 'mongoid', '~> 5.0'
32
+ spec.add_runtime_dependency 'sidekiq'
33
+
34
+ spec.add_development_dependency 'bundler', '~> 1.6'
35
+ spec.add_development_dependency 'rake'
36
+ spec.add_development_dependency 'rspec'
37
+ spec.add_development_dependency 'coveralls'
38
+
39
+ end
data/mongoid.yml ADDED
@@ -0,0 +1,127 @@
1
+ # Mongoid Configuration for Travis CI
2
+ # ===================================
3
+
4
+ test:
5
+ # Configure available database clients. (required)
6
+ clients:
7
+ # Defines the default client. (required)
8
+ default:
9
+ # Defines the name of the default database that Mongoid can connect to.
10
+ # (required).
11
+ database: workflow_test
12
+ # Provides the hosts the default client can connect to. Must be an array
13
+ # of host:port pairs. (required)
14
+ hosts:
15
+ - localhost:27017
16
+ options:
17
+ # Change the default write concern. (default = { w: 1 })
18
+ #write:
19
+ # w: 1
20
+
21
+ # Change the default read preference. Valid options for mode are: :secondary,
22
+ # :secondary_preferred, :primary, :primary_preferred, :nearest
23
+ # (default: primary)
24
+ #read:
25
+ # mode: :secondary_preferred
26
+
27
+ # The name of the user for authentication.
28
+ #user: 'user'
29
+
30
+ # The password of the user for authentication.
31
+ #password: 'password'
32
+
33
+ # The user's database roles.
34
+ #roles:
35
+ # - 'dbOwner'
36
+
37
+ # Change the default authentication mechanism. Valid options are: :scram,
38
+ # :mongodb_cr, :mongodb_x509, and :plain. (default on 3.0 is :scram, default
39
+ # on 2.4 and 2.6 is :plain)
40
+ #auth_mech: :scram
41
+
42
+ # The database or source to authenticate the user against. (default: admin)
43
+ #auth_source: admin
44
+
45
+ # Force a the driver cluster to behave in a certain manner instead of auto-
46
+ # discovering. Can be one of: :direct, :replica_set, :sharded. Set to :direct
47
+ # when connecting to hidden members of a replica set.
48
+ #connect: :direct
49
+
50
+ # Changes the default time in seconds the server monitors refresh their status
51
+ # via ismaster commands. (default: 10)
52
+ #heartbeat_frequency: 10
53
+
54
+ # The time in seconds for selecting servers for a near read preference. (default: 5)
55
+ #local_threshold: 5
56
+
57
+ # The timeout in seconds for selecting a server for an operation. (default: 30)
58
+ #server_selection_timeout: 30
59
+
60
+ # The maximum number of connections in the connection pool. (default: 5)
61
+ #max_pool_size: 5
62
+
63
+ # The minimum number of connections in the connection pool. (default: 1)
64
+ #min_pool_size: 1
65
+
66
+ # The time to wait, in seconds, in the connection pool for a connection
67
+ # to be checked in before timing out. (default: 5)
68
+ #wait_queue_timeout: 5
69
+
70
+ # The time to wait to establish a connection before timing out, in seconds.
71
+ # (default: 5)
72
+ #connect_timeout: 5
73
+
74
+ # The timeout to wait to execute operations on a socket before raising an error.
75
+ # (default: 5)
76
+ #socket_timeout: 5
77
+
78
+ # The name of the replica set to connect to. Servers provided as seeds that do
79
+ # not belong to this replica set will be ignored.
80
+ #replica_set: my_replica_set
81
+
82
+ # Whether to connect to the servers via ssl. (default: false)
83
+ #ssl: true
84
+
85
+ # The certificate file used to identify the connection against MongoDB.
86
+ #ssl_cert: /path/to/my.cert
87
+
88
+ # The private keyfile used to identify the connection against MongoDB.
89
+ # Note that even if the key is stored in the same file as the certificate,
90
+ # both need to be explicitly specified.
91
+ #ssl_key: /path/to/my.key
92
+
93
+ # A passphrase for the private key.
94
+ #ssl_key_pass_phrase: password
95
+
96
+ # Whether or not to do peer certification validation. (default: false)
97
+ #ssl_verify: true
98
+
99
+ # The file containing a set of concatenated certification authority certifications
100
+ # used to validate certs passed from the other end of the connection.
101
+ #ssl_ca_cert: /path/to/ca.cert
102
+
103
+ # Configure Mongoid specific options. (optional)
104
+ options:
105
+ # Includes the root model name in json serialization. (default: false)
106
+ #include_root_in_json: false
107
+
108
+ # Include the _type field in serialization. (default: false)
109
+ include_type_for_serialization: true
110
+
111
+ # Preload all models in development, needed when models use
112
+ # inheritance. (default: false)
113
+ #preload_models: false
114
+
115
+ # Raise an error when performing a #find and the document is not found.
116
+ # (default: true)
117
+ raise_not_found_error: false
118
+
119
+ # Raise an error when defining a scope with the same name as an
120
+ # existing method. (default: false)
121
+ scope_overwrite_exception: true
122
+
123
+ # Use Active Support's time zone in conversions. (default: true)
124
+ #use_activesupport_time_zone: true
125
+
126
+ # Ensure all times are UTC in the app side. (default: false)
127
+ #use_utc: false
data/spec/db_env.sh ADDED
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+ export DB_HOST="kahana.mongohq.com:10053"
3
+ export DB_HOST="localhost:27017"
4
+ export DB_USER="test"
5
+ export DB_PASS="abc123"
data/spec/db_start.sh ADDED
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+ cd `dirname $0`
3
+ mkdir -p ./data/db
4
+ /opt/mongodb/bin/mongod --dbpath ./data/db
5
+
@@ -0,0 +1,17 @@
1
+ # encoding: utf-8
2
+ require 'libis/workflow'
3
+ require_relative 'test_item'
4
+
5
+ class TestDirItem < TestItem
6
+ include ::Libis::Workflow::Base::DirItem
7
+
8
+ def name=(dir)
9
+ raise RuntimeError, "'#{dir}' is not a directory" unless File.directory? dir
10
+ super dir
11
+ end
12
+
13
+ def name
14
+ self.properties[:name] || super
15
+ end
16
+
17
+ end
@@ -0,0 +1,28 @@
1
+ # encoding: utf-8
2
+ require 'libis-tools'
3
+ require 'libis-workflow'
4
+
5
+ require_relative 'test_item'
6
+
7
+ class TestFileItem < TestItem
8
+ include ::Libis::Workflow::Base::FileItem
9
+
10
+ def filename=(file)
11
+ raise RuntimeError, "'#{file}' is not a file" unless File.file? file
12
+ set_checksum :SHA256, ::Libis::Tools::Checksum.hexdigest(file, :SHA256)
13
+ super file
14
+ end
15
+
16
+ def name
17
+ self.properties[:name] || super
18
+ end
19
+
20
+ def filesize
21
+ properties[:size]
22
+ end
23
+
24
+ def fixity_check(checksum)
25
+ properties[:checksum] == checksum
26
+ end
27
+
28
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require 'libis/workflow/mongoid/work_item'
4
+
5
+ class TestItem
6
+ include Libis::Workflow::Mongoid::WorkItem
7
+ run_class 'TestRun'
8
+ end
@@ -0,0 +1,12 @@
1
+ # encoding: utf-8
2
+ require 'libis-workflow-mongoid'
3
+
4
+ class TestRun
5
+ include ::Libis::Workflow::Mongoid::Run
6
+
7
+ item_class 'TestItem'
8
+ job_class 'TestJob'
9
+
10
+ def name; 'TestRun'; end
11
+
12
+ end
data/spec/items.rb ADDED
@@ -0,0 +1,3 @@
1
+ require_relative 'items/test_dir_item'
2
+ require_relative 'items/test_file_item'
3
+ require_relative 'items/test_run'
@@ -0,0 +1,8 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ require 'bundler/setup'
5
+ Bundler.setup
6
+
7
+ require 'rspec'
8
+ require 'libis-workflow-mongoid'
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ require 'backports/rails/string'
3
+ require 'libis-workflow'
4
+
5
+ class CamelizeName < ::Libis::Workflow::Task
6
+
7
+ def process(item)
8
+ return unless (item.is_a?(TestFileItem) || item.is_a?(TestDirItem))
9
+ item.properties[:name] = item.name.camelize
10
+ item.save!
11
+ end
12
+
13
+ end
@@ -0,0 +1,34 @@
1
+ # encoding: utf-8
2
+ require 'libis/tools/checksum'
3
+
4
+ require 'libis/exceptions'
5
+ require 'libis-workflow'
6
+
7
+ class ChecksumTester < ::Libis::Workflow::Task
8
+
9
+ parameter checksum_type: nil,
10
+ description: 'Checksum type to use.',
11
+ constraint: ::Libis::Tools::Checksum::CHECKSUM_TYPES.map {|x| x.to_s}
12
+ parameter checksum_file: nil, description: 'File with checksums of the files.'
13
+
14
+ def process(item)
15
+ return unless item.is_a? TestFileItem
16
+
17
+ checksum_type = parameter(:checksum_type)
18
+
19
+ if checksum_type.nil?
20
+ ::Libis::Tools::Checksum::CHECKSUM_TYPES.each do |x|
21
+ test_checksum(item, x) if item.checksum(x)
22
+ end
23
+ else
24
+ test_checksum(item, checksum_type)
25
+ end
26
+ end
27
+
28
+ def test_checksum(item, checksum_type)
29
+ checksum = ::Libis::Tools::Checksum.hexdigest(item.fullpath, checksum_type.to_sym)
30
+ return if item.checksum(checksum_type) == checksum
31
+ raise ::Libis::WorkflowError, "Checksum test #{checksum_type} failed for #{item.filepath}"
32
+ end
33
+
34
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ require 'libis/exceptions'
3
+
4
+ require_relative '../items'
5
+
6
+ class CollectFiles < ::Libis::Workflow::Task
7
+
8
+ parameter location: '.',
9
+ description: 'Dir location to start scanning for files.'
10
+ parameter subdirs: false,
11
+ description: 'Look for files in subdirs too.'
12
+ parameter selection: nil,
13
+ description: 'Only select files that match the given regular expression. Ignored if empty.'
14
+
15
+ def process(item)
16
+ if item.is_a? TestRun
17
+ add_item(item, parameter(:location))
18
+ elsif item.is_a? TestDirItem
19
+ collect_files(item, item.fullpath)
20
+ end
21
+ end
22
+
23
+ def collect_files(item, dir)
24
+ glob_string = dir
25
+ glob_string = File.join(glob_string, '**') if parameter(:subdirs)
26
+ glob_string = File.join(glob_string, '*')
27
+
28
+ Dir.glob(glob_string).select do |x|
29
+ parameter(:selection) && !parameter(:selection).empty? ? x =~ Regexp.new(parameter(:selection)) : true
30
+ end.sort.each do |file|
31
+ next if %w'. ..'.include? file
32
+ add_item(item, file)
33
+ end
34
+ end
35
+
36
+ def add_item(item, file)
37
+ child = if File.file?(file)
38
+ TestFileItem.new
39
+ elsif File.directory?(file)
40
+ TestDirItem.new
41
+ else
42
+ error 'Bad file type encountered: %s', file
43
+ nil
44
+ end
45
+ unless child
46
+ return
47
+ end
48
+ child.filename = file
49
+ item << child
50
+ end
51
+
52
+ end
data/spec/test_job.rb ADDED
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ require 'libis/workflow/mongoid/job'
4
+
5
+ class TestJob
6
+ include ::Libis::Workflow::Mongoid::Job
7
+ run_class 'TestRun'
8
+ workflow_class 'TestWorkflow'
9
+ end
@@ -0,0 +1,8 @@
1
+ # encoding: utf-8
2
+
3
+ require 'libis/workflow/mongoid/workflow'
4
+
5
+ class TestWorkflow
6
+ include ::Libis::Workflow::Mongoid::Workflow
7
+ job_class 'TestJob'
8
+ end