qyu 1.0.1 → 1.0.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 +5 -5
- data/.gitignore +3 -0
- data/CHANGELOG.md +31 -0
- data/README.md +46 -2
- data/lib/qyu/config.rb +11 -0
- data/lib/qyu/errors/workflow_descriptor_validation_error.rb +3 -3
- data/lib/qyu/factory.rb +11 -1
- data/lib/qyu/models/concerns/workflow_descriptor_validator.rb +40 -15
- data/lib/qyu/models/enums/status.rb +1 -0
- data/lib/qyu/models/job.rb +1 -0
- data/lib/qyu/models/task.rb +1 -0
- data/lib/qyu/models/workflow.rb +2 -1
- data/lib/qyu/queue/memory/adapter.rb +1 -0
- data/lib/qyu/store/memory/adapter.rb +1 -0
- data/lib/qyu/ui.rb +1 -1
- data/lib/qyu/ui/helpers/pagination.rb +1 -0
- data/lib/qyu/utils.rb +13 -0
- data/lib/qyu/version.rb +1 -1
- data/lib/qyu/workers/base.rb +18 -0
- data/lib/qyu/workers/concerns/callback.rb +24 -6
- data/lib/qyu/workers/concerns/failure_queue.rb +14 -7
- data/lib/qyu/workers/concerns/payload_validator.rb +26 -8
- data/lib/qyu/workers/sync.rb +1 -0
- data/qyu.gemspec +5 -3
- metadata +12 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 856ddbf8f80f887606bc72bc83bc901f5c8516a2
|
4
|
+
data.tar.gz: 026e1996fb30e4e3d8fe45febefabae331196a61
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56aef9a753f450f32e9e33fa398b6758bee60dcc62e7b79aa04527d623f40416a117bc343ac94c45f020c9c54da706ae6cefa86e687ae0a001e59df144f83131
|
7
|
+
data.tar.gz: 8e7b894defa30e3e183d90db0be04ac8b88a6a58bc1b3b6d66adca8505d9b530a8cd6d029240b1a8b6b1252fed6adcd823ef8f365906a618a99378a3ee01ccf7
|
data/.gitignore
CHANGED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# Changelog
|
2
|
+
- All notable changes to this project will be documented in this file.
|
3
|
+
- This project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
4
|
+
|
5
|
+
---
|
6
|
+
|
7
|
+
[Unreleased]: https://github.com/QyuTeam/qyu/compare/v1.0.2...HEAD
|
8
|
+
## [Unreleased]
|
9
|
+
|
10
|
+
[v1.0.2]: https://github.com/QyuTeam/qyu/compare/v1.0.1...v1.0.2
|
11
|
+
## [v1.0.2]
|
12
|
+
### Added
|
13
|
+
- Added first `CHANGELOG.md`
|
14
|
+
- [TESTS] WorkflowDescriptorValidator tests
|
15
|
+
|
16
|
+
### Changed
|
17
|
+
- [BUGFIX] WorkflowDescriptorValidator: Validation was not working due to a missed `&&`
|
18
|
+
- [BUGFIX] Fix error name `Qyu::Errors::WorkflowDescriptorValidationError`
|
19
|
+
|
20
|
+
---
|
21
|
+
|
22
|
+
[Template]: https://github.com/QyuTeam/qyu/compare/release-1...release-2
|
23
|
+
## [Template]
|
24
|
+
### Added
|
25
|
+
- Added something
|
26
|
+
|
27
|
+
### Changed
|
28
|
+
- Changed something
|
29
|
+
|
30
|
+
### Removed
|
31
|
+
- Removed something
|
data/README.md
CHANGED
@@ -2,6 +2,8 @@
|
|
2
2
|
|
3
3
|
[](https://rubygems.org/gems/qyu)
|
4
4
|
[](https://travis-ci.org/FindHotel/qyu)
|
5
|
+
[](https://codeclimate.com/github/QyuTeam/qyu/maintainability)
|
6
|
+
[](https://rubyweekly.com/link/44495/web)
|
5
7
|
|
6
8
|
## Requirements:
|
7
9
|
* Ruby 2.4.0 or newer
|
@@ -39,7 +41,49 @@ Qyu.configure(
|
|
39
41
|
```
|
40
42
|
|
41
43
|
## Usage
|
42
|
-
|
44
|
+
[1] Connect all instances to the same state store and message queue
|
45
|
+
[2] Create a workflow
|
46
|
+
[3] Initialize a worker as follows
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
w = Qyu::Worker.new do
|
50
|
+
# callbacks
|
51
|
+
callback :execute, :before do
|
52
|
+
Qyu.logger.info 'Waiting for task..'
|
53
|
+
end
|
54
|
+
|
55
|
+
callback :execute, :after do
|
56
|
+
Qyu.logger.info 'Done'
|
57
|
+
end
|
58
|
+
|
59
|
+
# payload validation
|
60
|
+
validates :times, presence: true, type: :integer
|
61
|
+
|
62
|
+
# failure queue
|
63
|
+
failure_queue false
|
64
|
+
end
|
65
|
+
|
66
|
+
w.work('queue-name') do |task|
|
67
|
+
# to get the payload passed to the task
|
68
|
+
task.payload
|
69
|
+
# = { 'param_1' => true, 'param_2': [10, 11, 12], 'param_3' => 2 }
|
70
|
+
|
71
|
+
# get the job
|
72
|
+
task.job
|
73
|
+
|
74
|
+
# to manually start a task
|
75
|
+
task.job.create_task(task, 'next-task-name', payload)
|
76
|
+
rescue StandardError => ex
|
77
|
+
# If you rescue the error for debugging or reporting purposes, you have to raise it at the end
|
78
|
+
#
|
79
|
+
# do something
|
80
|
+
#
|
81
|
+
raise ex
|
82
|
+
end
|
83
|
+
```
|
84
|
+
|
85
|
+
[4] Start worker
|
86
|
+
[5] Start creating Jobs using the previously created workflow
|
43
87
|
|
44
88
|
## Plugins
|
45
89
|
The memory queue and store is just for testing purposes. For production; use one of the following:
|
@@ -87,4 +131,4 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
87
131
|
|
88
132
|
## Contributing
|
89
133
|
|
90
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
134
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/QyuTeam/qyu.
|
data/lib/qyu/config.rb
CHANGED
@@ -7,14 +7,25 @@ module Qyu
|
|
7
7
|
|
8
8
|
class ServiceConfig
|
9
9
|
class << self
|
10
|
+
# Register a service (Queue/Store)
|
11
|
+
#
|
12
|
+
# @param adapter_class [Class] service Class to Register
|
13
|
+
# @return [Class] service Class to Register
|
10
14
|
def register(adapter_class)
|
11
15
|
types[adapter_class::TYPE] = adapter_class
|
12
16
|
end
|
13
17
|
|
18
|
+
# Validate provided config
|
19
|
+
#
|
20
|
+
# @param config [Hash] configuration
|
21
|
+
# @return [Boolean]
|
14
22
|
def valid?(config)
|
15
23
|
types[config[:type]].valid_config?(config)
|
16
24
|
end
|
17
25
|
|
26
|
+
# Get registered services
|
27
|
+
#
|
28
|
+
# @return [Hash] registereds services
|
18
29
|
def types
|
19
30
|
@__types ||= {}
|
20
31
|
end
|
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
module Qyu
|
4
4
|
module Errors
|
5
|
-
# Qyu::Errors::
|
6
|
-
class
|
5
|
+
# Qyu::Errors::WorkflowDescriptorValidationError
|
6
|
+
class WorkflowDescriptorValidationError < Base
|
7
7
|
attr_reader :validation_errors
|
8
8
|
def initialize(validation_errors)
|
9
|
-
super(
|
9
|
+
super("invalid workflow descriptor: #{validation_errors.join(', ')}")
|
10
10
|
@validation_errors = validation_errors
|
11
11
|
end
|
12
12
|
end
|
data/lib/qyu/factory.rb
CHANGED
@@ -2,17 +2,27 @@
|
|
2
2
|
|
3
3
|
module Qyu
|
4
4
|
# Qyu::Factory
|
5
|
-
class Factory
|
5
|
+
class Factory #:nodoc:
|
6
6
|
class ServiceFactory
|
7
7
|
class << self
|
8
|
+
# Register a service (Queue/Store)
|
9
|
+
#
|
10
|
+
# @param adapter_class [Class] service Class to Register
|
11
|
+
# @return [Class] service Class to Register
|
8
12
|
def register(adapter_class)
|
9
13
|
types[adapter_class::TYPE] = adapter_class
|
10
14
|
end
|
11
15
|
|
16
|
+
# Get registered services
|
17
|
+
#
|
18
|
+
# @return [Hash] registereds services
|
12
19
|
def types
|
13
20
|
@__types ||= {}
|
14
21
|
end
|
15
22
|
|
23
|
+
# Initialize Queue/Store service with provided configuration
|
24
|
+
#
|
25
|
+
# @return [Object] an adapter
|
16
26
|
def get(config)
|
17
27
|
Qyu.logger.info "Got factory #{types[config[:type]]}"
|
18
28
|
types[config[:type]].new(config)
|
@@ -12,6 +12,9 @@ module Qyu
|
|
12
12
|
@errors = []
|
13
13
|
end
|
14
14
|
|
15
|
+
# validates a workflow's descriptor
|
16
|
+
#
|
17
|
+
# @return [Boolean]
|
15
18
|
def valid?
|
16
19
|
validate
|
17
20
|
@errors.empty?
|
@@ -28,19 +31,19 @@ module Qyu
|
|
28
31
|
|
29
32
|
tasks.keys.each do |task_name|
|
30
33
|
unless validate_queue_presence(task_name)
|
31
|
-
@errors << "#{task_name} must have a valid queue
|
34
|
+
@errors << "#{task_name} must have a valid queue"
|
32
35
|
end
|
33
36
|
unless validate_task_keys(task_name)
|
34
|
-
@errors << "#{task_name} must only contain the following keys: #{ALLOWED_KEYS}
|
37
|
+
@errors << "#{task_name} must only contain the following keys: #{ALLOWED_KEYS}"
|
35
38
|
end
|
36
39
|
unless validate_task_reference_formats(task_name)
|
37
|
-
@errors << "#{task_name} must follow the reference declaration format
|
40
|
+
@errors << "#{task_name} must follow the reference declaration format"
|
38
41
|
end
|
39
|
-
unless
|
40
|
-
@errors << "#{task_name} must list existing tasks in its references
|
42
|
+
unless validate_referenced_tasks(task_name)
|
43
|
+
@errors << "#{task_name} must list existing tasks in its references"
|
41
44
|
end
|
42
45
|
unless validate_sync_condition_params(task_name)
|
43
|
-
@errors << "#{task_name} must pass the correct parameters to the sync task
|
46
|
+
@errors << "#{task_name} must pass the correct parameters to the sync task"
|
44
47
|
end
|
45
48
|
end
|
46
49
|
rescue => ex
|
@@ -81,17 +84,17 @@ module Qyu
|
|
81
84
|
end
|
82
85
|
|
83
86
|
def validate_task_reference_formats(task_name)
|
84
|
-
(
|
85
|
-
|
86
|
-
|
87
|
-
(
|
87
|
+
validate_format(task_name, 'starts', Array) &&
|
88
|
+
validate_format(task_name, 'starts_manually', Array) &&
|
89
|
+
validate_format(task_name, 'starts_with_params', Hash) &&
|
90
|
+
validate_format(task_name, 'waits_for', Hash)
|
88
91
|
end
|
89
92
|
|
90
|
-
def
|
91
|
-
(
|
92
|
-
|
93
|
-
|
94
|
-
(
|
93
|
+
def validate_referenced_tasks(task_name)
|
94
|
+
validate_presence_of_reference_tasks(task_name, 'starts', Array) &&
|
95
|
+
validate_presence_of_reference_tasks(task_name, 'starts_manually', Array) &&
|
96
|
+
validate_presence_of_reference_tasks(task_name, 'starts_with_params', Hash) &&
|
97
|
+
validate_presence_of_reference_tasks(task_name, 'waits_for', Hash)
|
95
98
|
end
|
96
99
|
|
97
100
|
def validate_sync_condition_params(task_name)
|
@@ -105,6 +108,28 @@ module Qyu
|
|
105
108
|
end
|
106
109
|
end
|
107
110
|
|
111
|
+
# checks whether a task reference key is present and in valid format
|
112
|
+
#
|
113
|
+
# @param task_name [String] name of task currently being validated
|
114
|
+
# @param reference_key [String] reference key to validate tasks in it
|
115
|
+
# @param klass [Class] class to validate against
|
116
|
+
# @return [Boolean]
|
117
|
+
def validate_format(task_name, reference_key, klass)
|
118
|
+
(tasks[task_name][reference_key].nil? || tasks[task_name][reference_key].is_a?(klass))
|
119
|
+
end
|
120
|
+
|
121
|
+
# validates that a task descriptor is present and is a Hash
|
122
|
+
#
|
123
|
+
# @param task_name [String] name of task currently being validated
|
124
|
+
# @param reference_key [String] reference key to validate tasks in it
|
125
|
+
# @param klass [Class] how this reference key is represented
|
126
|
+
# @return [Boolean]
|
127
|
+
def validate_presence_of_reference_tasks(task_name, reference_key, klass)
|
128
|
+
task_names = (tasks[task_name][reference_key] || klass.new)
|
129
|
+
task_names = task_names.keys if klass.eql?(Hash)
|
130
|
+
task_names.all? { |t_name| tasks[t_name].is_a?(Hash) }
|
131
|
+
end
|
132
|
+
|
108
133
|
def entry_points
|
109
134
|
@descriptor['starts']
|
110
135
|
end
|
data/lib/qyu/models/job.rb
CHANGED
data/lib/qyu/models/task.rb
CHANGED
data/lib/qyu/models/workflow.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Qyu
|
4
|
+
# Qyu::Workflow
|
4
5
|
class Workflow
|
5
6
|
attr_reader :id, :name, :descriptor, :created_at, :updated_at
|
6
7
|
|
7
8
|
class << self
|
8
9
|
def create(name:, descriptor:)
|
9
10
|
validator = Qyu::Concerns::WorkflowDescriptorValidator.new(descriptor)
|
10
|
-
fail Qyu::Errors::
|
11
|
+
fail Qyu::Errors::WorkflowDescriptorValidationError, validator.errors unless validator.valid?
|
11
12
|
id = persist(name, descriptor)
|
12
13
|
time = Time.now
|
13
14
|
new(id, name, descriptor, time, time)
|
data/lib/qyu/ui.rb
CHANGED
data/lib/qyu/utils.rb
CHANGED
@@ -1,15 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Qyu
|
4
|
+
# Qyu::Utils
|
4
5
|
module Utils
|
6
|
+
# Calculates end time after a number of seconds
|
7
|
+
#
|
8
|
+
# @param seconds [Integer] number of seconds after time
|
9
|
+
# @param start_time [Time] time to start from
|
10
|
+
# @return [Time] end time
|
5
11
|
def self.seconds_after_time(seconds, start_time = Time.now)
|
6
12
|
start_time + seconds
|
7
13
|
end
|
8
14
|
|
15
|
+
# Generates a unique UUID
|
16
|
+
#
|
17
|
+
# @return [String] UUID
|
9
18
|
def self.uuid
|
10
19
|
SecureRandom.uuid
|
11
20
|
end
|
12
21
|
|
22
|
+
# Convert all hash keys to strings
|
23
|
+
#
|
24
|
+
# @param object [Hash] Hash to stringify its keys
|
25
|
+
# @return [String] Hash with string keys
|
13
26
|
def self.stringify_hash_keys(object)
|
14
27
|
object.map { |k, v| [k.to_s, v] }.to_h
|
15
28
|
end
|
data/lib/qyu/version.rb
CHANGED
data/lib/qyu/workers/base.rb
CHANGED
@@ -2,6 +2,24 @@
|
|
2
2
|
|
3
3
|
module Qyu
|
4
4
|
module Workers
|
5
|
+
# Qyu::Workers::Base
|
6
|
+
# A Worker is sitting on a queue, waiting for something.
|
7
|
+
# Qyu::Worker#work(queue_name)
|
8
|
+
#
|
9
|
+
# Worker lifecycle:
|
10
|
+
# - Start an infinte loop:
|
11
|
+
# while (true)
|
12
|
+
# - Fetch a message (Task) from its queue:
|
13
|
+
# t = Task.fetch(queue_name)
|
14
|
+
# - Check the completion:
|
15
|
+
# if t.completed? t.acknowledge_message
|
16
|
+
# - Lock it:
|
17
|
+
# t.lock! && t.mark_working
|
18
|
+
# - Works: yield(t)
|
19
|
+
# - Create the next steps/tasks:
|
20
|
+
# t.job.create_next_tasks(t, t.job.payload (...))
|
21
|
+
# - Finish:
|
22
|
+
# t.unlock! && t.mark_finished && t.acknowledge_message
|
5
23
|
class Base
|
6
24
|
include Concerns::Callback
|
7
25
|
include Concerns::PayloadValidator
|
@@ -3,18 +3,36 @@
|
|
3
3
|
module Qyu
|
4
4
|
module Workers
|
5
5
|
module Concerns
|
6
|
+
# Qyu::Workers::Concerns::Callback
|
7
|
+
#
|
8
|
+
# Meant to add callbacks to Qyu::Worker
|
9
|
+
#
|
10
|
+
# Usage:
|
11
|
+
#
|
12
|
+
# Qyu::Worker.new do
|
13
|
+
# callback :execute, :after do
|
14
|
+
# # Do something after execution
|
15
|
+
# end
|
16
|
+
# end
|
17
|
+
#
|
6
18
|
module Callback
|
7
|
-
#
|
19
|
+
# Adds a callback option to worker
|
8
20
|
#
|
9
|
-
# Usage:
|
10
|
-
#
|
11
|
-
# Qyu::Worker.new do
|
12
21
|
# callback :execute, :after do
|
13
22
|
# # Do something after execution
|
14
23
|
# end
|
15
|
-
# end
|
16
24
|
#
|
17
|
-
|
25
|
+
# callback :execute, :before do
|
26
|
+
# # Do something before execution
|
27
|
+
# end
|
28
|
+
#
|
29
|
+
# callback :execute, :around do
|
30
|
+
# # Do something around execution
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# @param [Symbol] just :execute for now
|
34
|
+
# @param [Symbol] callback type
|
35
|
+
# @param [block] block to execute as callback
|
18
36
|
def callback(method, type, &block)
|
19
37
|
@_callbacks ||= {}
|
20
38
|
@_callbacks[method] ||= {}
|
@@ -3,17 +3,24 @@
|
|
3
3
|
module Qyu
|
4
4
|
module Workers
|
5
5
|
module Concerns
|
6
|
-
# Qyu::Concerns::FailureQueue
|
6
|
+
# Qyu::Workers::Concerns::FailureQueue
|
7
|
+
#
|
8
|
+
# Adds ability to workers enqueue failed task to another queue
|
9
|
+
#
|
10
|
+
# Qyu::Worker.new do
|
11
|
+
# failure_queue true
|
12
|
+
# # or
|
13
|
+
# failure_queue false
|
14
|
+
# end
|
15
|
+
#
|
7
16
|
module FailureQueue
|
8
|
-
|
17
|
+
|
18
|
+
# Configures failure queue
|
9
19
|
#
|
10
|
-
#
|
20
|
+
# failure_queue false # default
|
11
21
|
# failure_queue true
|
12
|
-
# # or
|
13
|
-
# failure_queue false
|
14
|
-
# end
|
15
22
|
#
|
16
|
-
|
23
|
+
# @param [Boolean]
|
17
24
|
def failure_queue(fq)
|
18
25
|
@failure_queue = fq
|
19
26
|
end
|
@@ -3,26 +3,43 @@
|
|
3
3
|
module Qyu
|
4
4
|
module Workers
|
5
5
|
module Concerns
|
6
|
-
# Qyu::Concerns::PayloadValidator
|
6
|
+
# Qyu::Workers::Concerns::PayloadValidator
|
7
|
+
#
|
8
|
+
# Adds ability to workers to perform validations on
|
9
|
+
# params for the task to be processed
|
10
|
+
#
|
11
|
+
# Usage:
|
12
|
+
#
|
13
|
+
# Qyu::Worker.new do
|
14
|
+
# validates :user_id, presence: true, type: :integer, unless: :no_user
|
15
|
+
# validates :name, presence: true, type: :string
|
16
|
+
# validates :hotels, presence: true, type: :array
|
17
|
+
# validates :account_id, absence: true, if: :customer_id
|
18
|
+
# validates :account_id, presence: true, unless: :customer_id
|
19
|
+
# end
|
20
|
+
#
|
7
21
|
module PayloadValidator
|
8
|
-
# Adds
|
9
|
-
# params for the task to be processed
|
22
|
+
# Adds a validation option to worker
|
10
23
|
#
|
11
|
-
# Usage:
|
12
|
-
#
|
13
|
-
# Qyu::Worker.new do
|
14
24
|
# validates :user_id, presence: true, type: :integer, unless: :no_user
|
15
25
|
# validates :name, presence: true, type: :string
|
16
26
|
# validates :account_id, absence: true, if: :customer_id
|
17
27
|
# validates :account_id, presence: true, unless: :customer_id
|
18
|
-
# end
|
19
28
|
#
|
20
|
-
|
29
|
+
# @param [Symbol] payload key to validate
|
30
|
+
# @param [Hash] options for validation
|
31
|
+
# @return [Hash] registereds services
|
21
32
|
def validates(parameter, opts = {})
|
22
33
|
@_validations ||= {}
|
23
34
|
@_validations[parameter.to_s] = Qyu::Utils.stringify_hash_keys(opts)
|
24
35
|
end
|
25
36
|
|
37
|
+
# Validates payload in processing task and raises a Qyu::Errors::PayloadValidationError
|
38
|
+
# if any of the conditions do not hold up
|
39
|
+
#
|
40
|
+
# @param [Task] task with payload
|
41
|
+
# @return [nil]
|
42
|
+
# @raise [Qyu::Errors::PayloadValidationError]
|
26
43
|
def validate_payload!(model)
|
27
44
|
return unless @_validations
|
28
45
|
payload = Qyu::Utils.stringify_hash_keys(model.payload || {})
|
@@ -48,6 +65,7 @@ module Qyu
|
|
48
65
|
|
49
66
|
private
|
50
67
|
|
68
|
+
# :nodoc:
|
51
69
|
def run_validation(option, param, value)
|
52
70
|
# Skip if and unless conditionals (return nil)
|
53
71
|
return if option.eql?('if')
|
data/lib/qyu/workers/sync.rb
CHANGED
data/qyu.gemspec
CHANGED
@@ -21,6 +21,8 @@ Gem::Specification.new do |spec|
|
|
21
21
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
22
|
spec.require_paths = ["lib"]
|
23
23
|
|
24
|
+
spec.metadata["yard.run"] = "yri"
|
25
|
+
|
24
26
|
spec.add_runtime_dependency 'activesupport', '~> 5.1'
|
25
27
|
|
26
28
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
@@ -28,9 +30,9 @@ Gem::Specification.new do |spec|
|
|
28
30
|
spec.add_development_dependency 'rack-test'
|
29
31
|
spec.add_development_dependency 'pry'
|
30
32
|
spec.add_development_dependency 'pry-byebug'
|
31
|
-
spec.add_development_dependency 'rake', '~>
|
32
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
33
|
+
spec.add_development_dependency 'rake', '~> 12.0'
|
34
|
+
spec.add_development_dependency 'rspec', '~> 3.7'
|
33
35
|
spec.add_development_dependency 'simplecov'
|
34
36
|
spec.add_development_dependency 'sinatra'
|
35
|
-
spec.add_development_dependency 'timecop', '~> 0.
|
37
|
+
spec.add_development_dependency 'timecop', '~> 0.9'
|
36
38
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qyu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Elod Peter
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2018-
|
12
|
+
date: 2018-03-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
@@ -101,28 +101,28 @@ dependencies:
|
|
101
101
|
requirements:
|
102
102
|
- - "~>"
|
103
103
|
- !ruby/object:Gem::Version
|
104
|
-
version: '
|
104
|
+
version: '12.0'
|
105
105
|
type: :development
|
106
106
|
prerelease: false
|
107
107
|
version_requirements: !ruby/object:Gem::Requirement
|
108
108
|
requirements:
|
109
109
|
- - "~>"
|
110
110
|
- !ruby/object:Gem::Version
|
111
|
-
version: '
|
111
|
+
version: '12.0'
|
112
112
|
- !ruby/object:Gem::Dependency
|
113
113
|
name: rspec
|
114
114
|
requirement: !ruby/object:Gem::Requirement
|
115
115
|
requirements:
|
116
116
|
- - "~>"
|
117
117
|
- !ruby/object:Gem::Version
|
118
|
-
version: '3.
|
118
|
+
version: '3.7'
|
119
119
|
type: :development
|
120
120
|
prerelease: false
|
121
121
|
version_requirements: !ruby/object:Gem::Requirement
|
122
122
|
requirements:
|
123
123
|
- - "~>"
|
124
124
|
- !ruby/object:Gem::Version
|
125
|
-
version: '3.
|
125
|
+
version: '3.7'
|
126
126
|
- !ruby/object:Gem::Dependency
|
127
127
|
name: simplecov
|
128
128
|
requirement: !ruby/object:Gem::Requirement
|
@@ -157,14 +157,14 @@ dependencies:
|
|
157
157
|
requirements:
|
158
158
|
- - "~>"
|
159
159
|
- !ruby/object:Gem::Version
|
160
|
-
version: '0.
|
160
|
+
version: '0.9'
|
161
161
|
type: :development
|
162
162
|
prerelease: false
|
163
163
|
version_requirements: !ruby/object:Gem::Requirement
|
164
164
|
requirements:
|
165
165
|
- - "~>"
|
166
166
|
- !ruby/object:Gem::Version
|
167
|
-
version: '0.
|
167
|
+
version: '0.9'
|
168
168
|
description: Distributed task execution system for complex workflows
|
169
169
|
email:
|
170
170
|
- bejmuller@gmail.com
|
@@ -176,6 +176,7 @@ files:
|
|
176
176
|
- ".gitignore"
|
177
177
|
- ".rspec"
|
178
178
|
- ".travis.yml"
|
179
|
+
- CHANGELOG.md
|
179
180
|
- CODE_OF_CONDUCT.md
|
180
181
|
- Gemfile
|
181
182
|
- LICENSE
|
@@ -254,7 +255,8 @@ files:
|
|
254
255
|
- qyu.gemspec
|
255
256
|
homepage: https://github.com/FindHotel/qyu
|
256
257
|
licenses: []
|
257
|
-
metadata:
|
258
|
+
metadata:
|
259
|
+
yard.run: yri
|
258
260
|
post_install_message:
|
259
261
|
rdoc_options: []
|
260
262
|
require_paths:
|
@@ -271,7 +273,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
271
273
|
version: '0'
|
272
274
|
requirements: []
|
273
275
|
rubyforge_project:
|
274
|
-
rubygems_version: 2.
|
276
|
+
rubygems_version: 2.6.8
|
275
277
|
signing_key:
|
276
278
|
specification_version: 4
|
277
279
|
summary: Distributed task execution system for complex workflows
|