dkron-rb 0.11.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Gemfile +0 -0
- data/README.md +8 -7
- data/Rakefile +0 -4
- data/dkron-rb.gemspec +10 -11
- data/docs/DefaultApi.md +0 -0
- data/docs/Execution.md +0 -0
- data/docs/ExecutionsApi.md +1 -1
- data/docs/ExecutorConfig.md +0 -0
- data/docs/Job.md +0 -0
- data/docs/JobsApi.md +60 -6
- data/docs/Member.md +0 -0
- data/docs/MembersApi.md +0 -0
- data/docs/Processors.md +0 -0
- data/docs/Status.md +3 -0
- data/git_push.sh +3 -3
- data/lib/dkron-rb.rb +2 -2
- data/lib/dkron-rb/api/default_api.rb +12 -21
- data/lib/dkron-rb/api/executions_api.rb +6 -9
- data/lib/dkron-rb/api/jobs_api.rb +73 -33
- data/lib/dkron-rb/api/members_api.rb +6 -9
- data/lib/dkron-rb/api_client.rb +10 -10
- data/lib/dkron-rb/api_error.rb +2 -2
- data/lib/dkron-rb/configuration.rb +3 -3
- data/lib/dkron-rb/models/execution.rb +7 -11
- data/lib/dkron-rb/models/executor_config.rb +7 -11
- data/lib/dkron-rb/models/job.rb +9 -13
- data/lib/dkron-rb/models/member.rb +7 -11
- data/lib/dkron-rb/models/processors.rb +7 -11
- data/lib/dkron-rb/models/status.rb +37 -11
- data/lib/dkron-rb/version.rb +3 -3
- data/spec/api/default_api_spec.rb +5 -8
- data/spec/api/executions_api_spec.rb +3 -4
- data/spec/api/jobs_api_spec.rb +19 -12
- data/spec/api/members_api_spec.rb +3 -4
- data/spec/api_client_spec.rb +36 -36
- data/spec/configuration_spec.rb +10 -10
- data/spec/models/execution_spec.rb +8 -9
- data/spec/models/executor_config_spec.rb +2 -3
- data/spec/models/job_spec.rb +20 -21
- data/spec/models/member_spec.rb +13 -14
- data/spec/models/processors_spec.rb +2 -3
- data/spec/models/status_spec.rb +20 -3
- data/spec/spec_helper.rb +2 -2
- metadata +18 -45
- data/Gemfile.lock +0 -67
- data/LICENSE +0 -201
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/config.json +0 -5
- data/docs/Agent.md +0 -7
- data/docs/ExecutorShell.md +0 -10
- data/docs/InlineResponse200.md +0 -10
- data/docs/MainApi.md +0 -90
- data/docs/ProcessorFiles.md +0 -9
- data/docs/ProcessorLog.md +0 -8
- data/docs/ProcessorSyslog.md +0 -8
- data/docs/Serf.md +0 -7
- data/docs/Tags.md +0 -7
- data/lib/dkron-rb/cron.rb +0 -152
- data/lib/dkron-rb/models/agent.rb +0 -152
- data/lib/dkron-rb/models/executor_shell.rb +0 -208
- data/lib/dkron-rb/models/inline_response_200.rb +0 -181
- data/lib/dkron-rb/models/processor_files.rb +0 -198
- data/lib/dkron-rb/models/processor_log.rb +0 -189
- data/lib/dkron-rb/models/processor_syslog.rb +0 -189
- data/lib/dkron-rb/models/serf.rb +0 -152
- data/lib/dkron-rb/models/tags.rb +0 -152
- data/lib/dkron-rb/numeric_seconds.rb +0 -48
- data/lib/dkron.rb +0 -9
- data/node_modules/isarray/build/build.js +0 -209
- data/node_modules/mime/build/build.js +0 -11
- data/node_modules/mime/build/test.js +0 -57
data/LICENSE
DELETED
@@ -1,201 +0,0 @@
|
|
1
|
-
Apache License
|
2
|
-
Version 2.0, January 2004
|
3
|
-
http://www.apache.org/licenses/
|
4
|
-
|
5
|
-
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
6
|
-
|
7
|
-
1. Definitions.
|
8
|
-
|
9
|
-
"License" shall mean the terms and conditions for use, reproduction,
|
10
|
-
and distribution as defined by Sections 1 through 9 of this document.
|
11
|
-
|
12
|
-
"Licensor" shall mean the copyright owner or entity authorized by
|
13
|
-
the copyright owner that is granting the License.
|
14
|
-
|
15
|
-
"Legal Entity" shall mean the union of the acting entity and all
|
16
|
-
other entities that control, are controlled by, or are under common
|
17
|
-
control with that entity. For the purposes of this definition,
|
18
|
-
"control" means (i) the power, direct or indirect, to cause the
|
19
|
-
direction or management of such entity, whether by contract or
|
20
|
-
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
21
|
-
outstanding shares, or (iii) beneficial ownership of such entity.
|
22
|
-
|
23
|
-
"You" (or "Your") shall mean an individual or Legal Entity
|
24
|
-
exercising permissions granted by this License.
|
25
|
-
|
26
|
-
"Source" form shall mean the preferred form for making modifications,
|
27
|
-
including but not limited to software source code, documentation
|
28
|
-
source, and configuration files.
|
29
|
-
|
30
|
-
"Object" form shall mean any form resulting from mechanical
|
31
|
-
transformation or translation of a Source form, including but
|
32
|
-
not limited to compiled object code, generated documentation,
|
33
|
-
and conversions to other media types.
|
34
|
-
|
35
|
-
"Work" shall mean the work of authorship, whether in Source or
|
36
|
-
Object form, made available under the License, as indicated by a
|
37
|
-
copyright notice that is included in or attached to the work
|
38
|
-
(an example is provided in the Appendix below).
|
39
|
-
|
40
|
-
"Derivative Works" shall mean any work, whether in Source or Object
|
41
|
-
form, that is based on (or derived from) the Work and for which the
|
42
|
-
editorial revisions, annotations, elaborations, or other modifications
|
43
|
-
represent, as a whole, an original work of authorship. For the purposes
|
44
|
-
of this License, Derivative Works shall not include works that remain
|
45
|
-
separable from, or merely link (or bind by name) to the interfaces of,
|
46
|
-
the Work and Derivative Works thereof.
|
47
|
-
|
48
|
-
"Contribution" shall mean any work of authorship, including
|
49
|
-
the original version of the Work and any modifications or additions
|
50
|
-
to that Work or Derivative Works thereof, that is intentionally
|
51
|
-
submitted to Licensor for inclusion in the Work by the copyright owner
|
52
|
-
or by an individual or Legal Entity authorized to submit on behalf of
|
53
|
-
the copyright owner. For the purposes of this definition, "submitted"
|
54
|
-
means any form of electronic, verbal, or written communication sent
|
55
|
-
to the Licensor or its representatives, including but not limited to
|
56
|
-
communication on electronic mailing lists, source code control systems,
|
57
|
-
and issue tracking systems that are managed by, or on behalf of, the
|
58
|
-
Licensor for the purpose of discussing and improving the Work, but
|
59
|
-
excluding communication that is conspicuously marked or otherwise
|
60
|
-
designated in writing by the copyright owner as "Not a Contribution."
|
61
|
-
|
62
|
-
"Contributor" shall mean Licensor and any individual or Legal Entity
|
63
|
-
on behalf of whom a Contribution has been received by Licensor and
|
64
|
-
subsequently incorporated within the Work.
|
65
|
-
|
66
|
-
2. Grant of Copyright License. Subject to the terms and conditions of
|
67
|
-
this License, each Contributor hereby grants to You a perpetual,
|
68
|
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
69
|
-
copyright license to reproduce, prepare Derivative Works of,
|
70
|
-
publicly display, publicly perform, sublicense, and distribute the
|
71
|
-
Work and such Derivative Works in Source or Object form.
|
72
|
-
|
73
|
-
3. Grant of Patent License. Subject to the terms and conditions of
|
74
|
-
this License, each Contributor hereby grants to You a perpetual,
|
75
|
-
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
76
|
-
(except as stated in this section) patent license to make, have made,
|
77
|
-
use, offer to sell, sell, import, and otherwise transfer the Work,
|
78
|
-
where such license applies only to those patent claims licensable
|
79
|
-
by such Contributor that are necessarily infringed by their
|
80
|
-
Contribution(s) alone or by combination of their Contribution(s)
|
81
|
-
with the Work to which such Contribution(s) was submitted. If You
|
82
|
-
institute patent litigation against any entity (including a
|
83
|
-
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
84
|
-
or a Contribution incorporated within the Work constitutes direct
|
85
|
-
or contributory patent infringement, then any patent licenses
|
86
|
-
granted to You under this License for that Work shall terminate
|
87
|
-
as of the date such litigation is filed.
|
88
|
-
|
89
|
-
4. Redistribution. You may reproduce and distribute copies of the
|
90
|
-
Work or Derivative Works thereof in any medium, with or without
|
91
|
-
modifications, and in Source or Object form, provided that You
|
92
|
-
meet the following conditions:
|
93
|
-
|
94
|
-
(a) You must give any other recipients of the Work or
|
95
|
-
Derivative Works a copy of this License; and
|
96
|
-
|
97
|
-
(b) You must cause any modified files to carry prominent notices
|
98
|
-
stating that You changed the files; and
|
99
|
-
|
100
|
-
(c) You must retain, in the Source form of any Derivative Works
|
101
|
-
that You distribute, all copyright, patent, trademark, and
|
102
|
-
attribution notices from the Source form of the Work,
|
103
|
-
excluding those notices that do not pertain to any part of
|
104
|
-
the Derivative Works; and
|
105
|
-
|
106
|
-
(d) If the Work includes a "NOTICE" text file as part of its
|
107
|
-
distribution, then any Derivative Works that You distribute must
|
108
|
-
include a readable copy of the attribution notices contained
|
109
|
-
within such NOTICE file, excluding those notices that do not
|
110
|
-
pertain to any part of the Derivative Works, in at least one
|
111
|
-
of the following places: within a NOTICE text file distributed
|
112
|
-
as part of the Derivative Works; within the Source form or
|
113
|
-
documentation, if provided along with the Derivative Works; or,
|
114
|
-
within a display generated by the Derivative Works, if and
|
115
|
-
wherever such third-party notices normally appear. The contents
|
116
|
-
of the NOTICE file are for informational purposes only and
|
117
|
-
do not modify the License. You may add Your own attribution
|
118
|
-
notices within Derivative Works that You distribute, alongside
|
119
|
-
or as an addendum to the NOTICE text from the Work, provided
|
120
|
-
that such additional attribution notices cannot be construed
|
121
|
-
as modifying the License.
|
122
|
-
|
123
|
-
You may add Your own copyright statement to Your modifications and
|
124
|
-
may provide additional or different license terms and conditions
|
125
|
-
for use, reproduction, or distribution of Your modifications, or
|
126
|
-
for any such Derivative Works as a whole, provided Your use,
|
127
|
-
reproduction, and distribution of the Work otherwise complies with
|
128
|
-
the conditions stated in this License.
|
129
|
-
|
130
|
-
5. Submission of Contributions. Unless You explicitly state otherwise,
|
131
|
-
any Contribution intentionally submitted for inclusion in the Work
|
132
|
-
by You to the Licensor shall be under the terms and conditions of
|
133
|
-
this License, without any additional terms or conditions.
|
134
|
-
Notwithstanding the above, nothing herein shall supersede or modify
|
135
|
-
the terms of any separate license agreement you may have executed
|
136
|
-
with Licensor regarding such Contributions.
|
137
|
-
|
138
|
-
6. Trademarks. This License does not grant permission to use the trade
|
139
|
-
names, trademarks, service marks, or product names of the Licensor,
|
140
|
-
except as required for reasonable and customary use in describing the
|
141
|
-
origin of the Work and reproducing the content of the NOTICE file.
|
142
|
-
|
143
|
-
7. Disclaimer of Warranty. Unless required by applicable law or
|
144
|
-
agreed to in writing, Licensor provides the Work (and each
|
145
|
-
Contributor provides its Contributions) on an "AS IS" BASIS,
|
146
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
147
|
-
implied, including, without limitation, any warranties or conditions
|
148
|
-
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
149
|
-
PARTICULAR PURPOSE. You are solely responsible for determining the
|
150
|
-
appropriateness of using or redistributing the Work and assume any
|
151
|
-
risks associated with Your exercise of permissions under this License.
|
152
|
-
|
153
|
-
8. Limitation of Liability. In no event and under no legal theory,
|
154
|
-
whether in tort (including negligence), contract, or otherwise,
|
155
|
-
unless required by applicable law (such as deliberate and grossly
|
156
|
-
negligent acts) or agreed to in writing, shall any Contributor be
|
157
|
-
liable to You for damages, including any direct, indirect, special,
|
158
|
-
incidental, or consequential damages of any character arising as a
|
159
|
-
result of this License or out of the use or inability to use the
|
160
|
-
Work (including but not limited to damages for loss of goodwill,
|
161
|
-
work stoppage, computer failure or malfunction, or any and all
|
162
|
-
other commercial damages or losses), even if such Contributor
|
163
|
-
has been advised of the possibility of such damages.
|
164
|
-
|
165
|
-
9. Accepting Warranty or Additional Liability. While redistributing
|
166
|
-
the Work or Derivative Works thereof, You may choose to offer,
|
167
|
-
and charge a fee for, acceptance of support, warranty, indemnity,
|
168
|
-
or other liability obligations and/or rights consistent with this
|
169
|
-
License. However, in accepting such obligations, You may act only
|
170
|
-
on Your own behalf and on Your sole responsibility, not on behalf
|
171
|
-
of any other Contributor, and only if You agree to indemnify,
|
172
|
-
defend, and hold each Contributor harmless for any liability
|
173
|
-
incurred by, or claims asserted against, such Contributor by reason
|
174
|
-
of your accepting any such warranty or additional liability.
|
175
|
-
|
176
|
-
END OF TERMS AND CONDITIONS
|
177
|
-
|
178
|
-
APPENDIX: How to apply the Apache License to your work.
|
179
|
-
|
180
|
-
To apply the Apache License to your work, attach the following
|
181
|
-
boilerplate notice, with the fields enclosed by brackets "{}"
|
182
|
-
replaced with your own identifying information. (Don't include
|
183
|
-
the brackets!) The text should be enclosed in the appropriate
|
184
|
-
comment syntax for the file format. We also recommend that a
|
185
|
-
file or class name and description of purpose be included on the
|
186
|
-
same "printed page" as the copyright notice for easier
|
187
|
-
identification within third-party archives.
|
188
|
-
|
189
|
-
Copyright {yyyy} {name of copyright owner}
|
190
|
-
|
191
|
-
Licensed under the Apache License, Version 2.0 (the "License");
|
192
|
-
you may not use this file except in compliance with the License.
|
193
|
-
You may obtain a copy of the License at
|
194
|
-
|
195
|
-
http://www.apache.org/licenses/LICENSE-2.0
|
196
|
-
|
197
|
-
Unless required by applicable law or agreed to in writing, software
|
198
|
-
distributed under the License is distributed on an "AS IS" BASIS,
|
199
|
-
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
200
|
-
See the License for the specific language governing permissions and
|
201
|
-
limitations under the License.
|
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "dkron-rb"
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start
|
data/bin/setup
DELETED
data/config.json
DELETED
data/docs/Agent.md
DELETED
data/docs/ExecutorShell.md
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
# Dkron::ExecutorShell
|
2
|
-
|
3
|
-
## Properties
|
4
|
-
Name | Type | Description | Notes
|
5
|
-
------------ | ------------- | ------------- | -------------
|
6
|
-
**command** | **String** | Command to run | [optional]
|
7
|
-
**env** | **String** | Comma separated environment variables pair | [optional]
|
8
|
-
**shell** | **BOOLEAN** | | [optional]
|
9
|
-
|
10
|
-
|
data/docs/InlineResponse200.md
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
# Dkron::InlineResponse200
|
2
|
-
|
3
|
-
## Properties
|
4
|
-
Name | Type | Description | Notes
|
5
|
-
------------ | ------------- | ------------- | -------------
|
6
|
-
**agent** | [**Agent**](Agent.md) | | [optional]
|
7
|
-
**serf** | [**Serf**](Serf.md) | | [optional]
|
8
|
-
**tags** | [**Tags**](Tags.md) | | [optional]
|
9
|
-
|
10
|
-
|
data/docs/MainApi.md
DELETED
@@ -1,90 +0,0 @@
|
|
1
|
-
# Dkron::MainApi
|
2
|
-
|
3
|
-
All URIs are relative to *http://localhost:8080/v1*
|
4
|
-
|
5
|
-
Method | HTTP request | Description
|
6
|
-
------------- | ------------- | -------------
|
7
|
-
[**get_leader**](MainApi.md#get_leader) | **GET** /leader |
|
8
|
-
[**status**](MainApi.md#status) | **GET** / |
|
9
|
-
|
10
|
-
|
11
|
-
# **get_leader**
|
12
|
-
> Member get_leader
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
List members.\n
|
17
|
-
|
18
|
-
### Example
|
19
|
-
```ruby
|
20
|
-
# load the gem
|
21
|
-
require 'dkron-rb'
|
22
|
-
|
23
|
-
api_instance = Dkron::MainApi.new
|
24
|
-
|
25
|
-
begin
|
26
|
-
result = api_instance.get_leader
|
27
|
-
p result
|
28
|
-
rescue Dkron::ApiError => e
|
29
|
-
puts "Exception when calling MainApi->get_leader: #{e}"
|
30
|
-
end
|
31
|
-
```
|
32
|
-
|
33
|
-
### Parameters
|
34
|
-
This endpoint does not need any parameter.
|
35
|
-
|
36
|
-
### Return type
|
37
|
-
|
38
|
-
[**Member**](Member.md)
|
39
|
-
|
40
|
-
### Authorization
|
41
|
-
|
42
|
-
No authorization required
|
43
|
-
|
44
|
-
### HTTP reuqest headers
|
45
|
-
|
46
|
-
- **Content-Type**: application/json
|
47
|
-
- **Accept**: application/json
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
# **status**
|
52
|
-
> InlineResponse200 status
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
Gets `Status` object.\n
|
57
|
-
|
58
|
-
### Example
|
59
|
-
```ruby
|
60
|
-
# load the gem
|
61
|
-
require 'dkron-rb'
|
62
|
-
|
63
|
-
api_instance = Dkron::MainApi.new
|
64
|
-
|
65
|
-
begin
|
66
|
-
result = api_instance.status
|
67
|
-
p result
|
68
|
-
rescue Dkron::ApiError => e
|
69
|
-
puts "Exception when calling MainApi->status: #{e}"
|
70
|
-
end
|
71
|
-
```
|
72
|
-
|
73
|
-
### Parameters
|
74
|
-
This endpoint does not need any parameter.
|
75
|
-
|
76
|
-
### Return type
|
77
|
-
|
78
|
-
[**InlineResponse200**](InlineResponse200.md)
|
79
|
-
|
80
|
-
### Authorization
|
81
|
-
|
82
|
-
No authorization required
|
83
|
-
|
84
|
-
### HTTP reuqest headers
|
85
|
-
|
86
|
-
- **Content-Type**: application/json
|
87
|
-
- **Accept**: application/json
|
88
|
-
|
89
|
-
|
90
|
-
|
data/docs/ProcessorFiles.md
DELETED
@@ -1,9 +0,0 @@
|
|
1
|
-
# Dkron::ProcessorFiles
|
2
|
-
|
3
|
-
## Properties
|
4
|
-
Name | Type | Description | Notes
|
5
|
-
------------ | ------------- | ------------- | -------------
|
6
|
-
**forward** | **BOOLEAN** | Forward the output to the next processor | [optional]
|
7
|
-
**log_dir** | **String** | | [optional]
|
8
|
-
|
9
|
-
|
data/docs/ProcessorLog.md
DELETED
data/docs/ProcessorSyslog.md
DELETED
data/docs/Serf.md
DELETED
data/docs/Tags.md
DELETED
data/lib/dkron-rb/cron.rb
DELETED
@@ -1,152 +0,0 @@
|
|
1
|
-
require 'chronic'
|
2
|
-
|
3
|
-
module Dkron
|
4
|
-
module Output
|
5
|
-
class Cron
|
6
|
-
KEYWORDS = [:yearly, :annually, :monthly, :weekly, :daily, :midnight, :hourly, :minutely]
|
7
|
-
REGEX = /^(@(#{KEYWORDS.join '|'})|((\*?[\d\/,\-]*)\s*){5})$/
|
8
|
-
|
9
|
-
attr_accessor :time, :task
|
10
|
-
|
11
|
-
def initialize(time = nil, task = nil, at = nil)
|
12
|
-
@at_given = at
|
13
|
-
@time = time
|
14
|
-
@task = task
|
15
|
-
@at = at.is_a?(String) ? (Chronic.parse(at) || 0) : (at || 0)
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.enumerate(item, detect_cron = true)
|
19
|
-
if item and item.is_a?(String)
|
20
|
-
items =
|
21
|
-
if detect_cron && item =~ REGEX
|
22
|
-
[item]
|
23
|
-
else
|
24
|
-
item.split(',')
|
25
|
-
end
|
26
|
-
else
|
27
|
-
items = item
|
28
|
-
items = [items] unless items and items.respond_to?(:each)
|
29
|
-
end
|
30
|
-
items
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.output(times, job)
|
34
|
-
enumerate(times).each do |time|
|
35
|
-
enumerate(job.at, false).each do |at|
|
36
|
-
yield new(time, job.output, at).output
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def output
|
42
|
-
[time_in_cron_syntax, task].compact.join(' ').strip
|
43
|
-
end
|
44
|
-
|
45
|
-
def time_in_cron_syntax
|
46
|
-
@time = @time.to_i if @time.is_a?(Numeric) # Compatibility with `1.day` format using ruby 2.3 and activesupport
|
47
|
-
case @time
|
48
|
-
when REGEX then @time # raw cron syntax given
|
49
|
-
when Symbol then parse_symbol
|
50
|
-
when String then parse_as_string
|
51
|
-
else parse_time
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
protected
|
56
|
-
def day_given?
|
57
|
-
months = %w(jan feb mar apr may jun jul aug sep oct nov dec)
|
58
|
-
@at_given.is_a?(String) && months.any? { |m| @at_given.downcase.index(m) }
|
59
|
-
end
|
60
|
-
|
61
|
-
def parse_symbol
|
62
|
-
shortcut = case @time
|
63
|
-
when :year then Dkron.seconds(12, :months)
|
64
|
-
when :day then Dkron.seconds(1, :day)
|
65
|
-
when :month then Dkron.seconds(1, :month)
|
66
|
-
when :week then Dkron.seconds(1, :week)
|
67
|
-
when :hour then Dkron.seconds(1, :hour)
|
68
|
-
end
|
69
|
-
|
70
|
-
if shortcut.is_a?(Numeric)
|
71
|
-
@time = shortcut
|
72
|
-
parse_time
|
73
|
-
elsif shortcut
|
74
|
-
if @at.is_a?(Time) || (@at.is_a?(Numeric) && @at > 0)
|
75
|
-
raise ArgumentError, "You cannot specify an ':at' when using the shortcuts for times."
|
76
|
-
else
|
77
|
-
return shortcut
|
78
|
-
end
|
79
|
-
else
|
80
|
-
parse_as_string
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def parse_time
|
85
|
-
timing = Array.new(6, '*')
|
86
|
-
case @time
|
87
|
-
when Dkron.seconds(0, :seconds)...Dkron.seconds(1, :minute)
|
88
|
-
raise ArgumentError, "Time must be in minutes or higher"
|
89
|
-
when Dkron.seconds(1, :minute)...Dkron.seconds(1, :hour)
|
90
|
-
minute_frequency = @time / 60
|
91
|
-
timing[0] = comma_separated_timing(minute_frequency, 59, @at || 0)
|
92
|
-
when Dkron.seconds(1, :hour)...Dkron.seconds(1, :day)
|
93
|
-
hour_frequency = (@time / 60 / 60).round
|
94
|
-
timing[0] = @at.is_a?(Time) ? @at.min : @at
|
95
|
-
timing[1] = comma_separated_timing(hour_frequency, 23)
|
96
|
-
when Dkron.seconds(1, :day)...Dkron.seconds(1, :month)
|
97
|
-
day_frequency = (@time / 24 / 60 / 60).round
|
98
|
-
timing[0] = @at.is_a?(Time) ? @at.min : 0
|
99
|
-
timing[1] = @at.is_a?(Time) ? @at.hour : @at
|
100
|
-
timing[2] = comma_separated_timing(day_frequency, 31, 1)
|
101
|
-
when Dkron.seconds(1, :month)..Dkron.seconds(12, :months)
|
102
|
-
month_frequency = (@time / 30 / 24 / 60 / 60).round
|
103
|
-
timing[0] = @at.is_a?(Time) ? @at.min : 0
|
104
|
-
timing[1] = @at.is_a?(Time) ? @at.hour : 0
|
105
|
-
timing[2] = if @at.is_a?(Time)
|
106
|
-
day_given? ? @at.day : 1
|
107
|
-
else
|
108
|
-
@at.zero? ? 1 : @at
|
109
|
-
end
|
110
|
-
timing[3] = comma_separated_timing(month_frequency, 12, 1)
|
111
|
-
else
|
112
|
-
return parse_as_string
|
113
|
-
end
|
114
|
-
timing.join(' ')
|
115
|
-
end
|
116
|
-
|
117
|
-
def parse_as_string
|
118
|
-
return unless @time
|
119
|
-
string = @time.to_s
|
120
|
-
|
121
|
-
timing = Array.new(4, '*')
|
122
|
-
timing[0] = @at.is_a?(Time) ? @at.min : 0
|
123
|
-
timing[1] = @at.is_a?(Time) ? @at.hour : 0
|
124
|
-
|
125
|
-
return (timing << '1-5') * " " if string.downcase.index('weekday')
|
126
|
-
return (timing << '6,0') * " " if string.downcase.index('weekend')
|
127
|
-
|
128
|
-
%w(sun mon tue wed thu fri sat).each_with_index do |day, i|
|
129
|
-
return (timing << i) * " " if string.downcase.index(day)
|
130
|
-
end
|
131
|
-
|
132
|
-
raise ArgumentError, "Couldn't parse: #{@time}"
|
133
|
-
end
|
134
|
-
|
135
|
-
def comma_separated_timing(frequency, max, start = 0)
|
136
|
-
return start if frequency.nil? || frequency == "" || frequency.zero?
|
137
|
-
return '*' if frequency == 1
|
138
|
-
return frequency if frequency > (max * 0.5).ceil
|
139
|
-
|
140
|
-
original_start = start
|
141
|
-
|
142
|
-
start += frequency unless (max + 1).modulo(frequency).zero? || start > 0
|
143
|
-
output = (start..max).step(frequency).to_a
|
144
|
-
|
145
|
-
max_occurances = (max.to_f / (frequency.to_f)).round
|
146
|
-
max_occurances += 1 if original_start.zero?
|
147
|
-
|
148
|
-
output[0, max_occurances].join(',')
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|