shortorder 0.0.1
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/CHANGELOG.md +2 -0
- data/CONTRIBUTING.md +0 -0
- data/LICENSE +0 -0
- data/README.md +1 -0
- data/bin/shortorder +24 -0
- data/lib/shortorder.rb +6 -0
- data/lib/shortorder/command.rb +9 -0
- data/lib/shortorder/command/custom_service.rb +245 -0
- data/lib/shortorder/version.rb +4 -0
- data/shortorder.gemspec +16 -0
- metadata +69 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a945a1189ea397f0e2f6fbfae0f1466c0b8d56ec
|
4
|
+
data.tar.gz: 73611b62f011c2475c4b68a60ed6a56a93c6a3d2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ed76dc40eb4ee5aa56b13f722eedf5cee4fd18fa7e5d20cad15c645cd4ef263a9b367119d9af4fde8da741b336df41d4d1472a9a74fadaad0964dec5644e8fca
|
7
|
+
data.tar.gz: 5aae992699f53edf21fd6e9591aaf70f3a0ee1eed85c6f31bf66a44dbd4630d6c56f92bb43cdea9779721ab0fe3df373d5a7c4da19c522f3efc8f6befac32ba5
|
data/CHANGELOG.md
ADDED
data/CONTRIBUTING.md
ADDED
File without changes
|
data/LICENSE
ADDED
File without changes
|
data/README.md
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# Short Order
|
data/bin/shortorder
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'shortorder'
|
4
|
+
|
5
|
+
Bogo::Cli::Setup.define do
|
6
|
+
|
7
|
+
on :v, :version, 'Print version' do
|
8
|
+
puts "shortorder - Short Order CLI tools and helpers - [Version: #{Shortorder::VERSION}]"
|
9
|
+
exit
|
10
|
+
end
|
11
|
+
|
12
|
+
command 'custom-service' do
|
13
|
+
description 'Generate custom service scaffold'
|
14
|
+
|
15
|
+
on :r, :root=, 'Root module namespace', :default => 'CustomShort'
|
16
|
+
on :c, :callback=, 'Callback class name', :default => 'Runner'
|
17
|
+
on :p, 'service-path=', 'Custom path to containing directory', :default => '.'
|
18
|
+
|
19
|
+
run do |opts, args|
|
20
|
+
Shortorder::Command::CustomService.new({:custom_service => opts.to_hash}, args).execute!
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
data/lib/shortorder.rb
ADDED
@@ -0,0 +1,245 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'shortorder'
|
3
|
+
|
4
|
+
module Shortorder
|
5
|
+
class Command
|
6
|
+
|
7
|
+
class CustomService < Command
|
8
|
+
|
9
|
+
attr_reader :root_name, :root_class
|
10
|
+
attr_reader :task_name, :task_class
|
11
|
+
attr_reader :callback_name, :callback_class
|
12
|
+
attr_reader :full_name, :full_class
|
13
|
+
attr_reader :service_path
|
14
|
+
|
15
|
+
# Generate custom service scaffold.
|
16
|
+
def execute!
|
17
|
+
unless(arguments.size == 1)
|
18
|
+
raise ArgumentError.new('Single argument name of service is required!')
|
19
|
+
end
|
20
|
+
|
21
|
+
@root_name = Bogo::Utility.snake(config[:root].tr('-.', '_'))
|
22
|
+
@root_class = Bogo::Utility.camel(root_name)
|
23
|
+
@task_name = Bogo::Utility.snake(arguments.first.tr('-.', '_'))
|
24
|
+
@task_class = Bogo::Utility.camel(task_name)
|
25
|
+
@callback_name = Bogo::Utility.snake(config[:callback].tr('-.', '_'))
|
26
|
+
@callback_class = Bogo::Utility.camel(callback_name)
|
27
|
+
|
28
|
+
@full_name = "#{root_name}-#{task_name}".tr('_', '-')
|
29
|
+
@full_class = "#{root_class}::#{task_class}"
|
30
|
+
@service_path = File.join(config[:service_path], full_name)
|
31
|
+
|
32
|
+
run_action 'Validating service directory' do
|
33
|
+
if(File.directory?(service_path))
|
34
|
+
ui.puts ui.color('path exists', :yellow)
|
35
|
+
ui.confirm 'Overwrite existing contents of service path'
|
36
|
+
ui.info 'Validating service directory... ', :nonewline
|
37
|
+
end
|
38
|
+
FileUtils.mkdir_p(service_path)
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
|
42
|
+
run_action 'Generating service directory structure' do
|
43
|
+
FileUtils.mkdir_p(File.join(service_path, 'lib', full_name))
|
44
|
+
nil
|
45
|
+
end
|
46
|
+
|
47
|
+
run_action 'Writing service scaffolding files' do
|
48
|
+
write_gemspec!
|
49
|
+
write_version!
|
50
|
+
write_loader!
|
51
|
+
write_callback!
|
52
|
+
write_readme!
|
53
|
+
nil
|
54
|
+
end
|
55
|
+
|
56
|
+
run_action 'Writing Gemfile for local bundle' do
|
57
|
+
write_gemfile!
|
58
|
+
nil
|
59
|
+
end
|
60
|
+
|
61
|
+
run_action 'Writing service configuration file' do
|
62
|
+
write_config!
|
63
|
+
nil
|
64
|
+
end
|
65
|
+
|
66
|
+
ui.info "Created new custom service `#{ui.color(task_name, :green, :bold)}` at #{service_path}"
|
67
|
+
ui.puts " To get started, change directory to: #{ui.color(service_path, :bold)}"
|
68
|
+
ui.puts " Install the bundle: #{ui.color('bundle install', :bold)}"
|
69
|
+
ui.puts " Start the service: #{ui.color('bundle exec jackal -c config.json', :bold)}"
|
70
|
+
end
|
71
|
+
|
72
|
+
protected
|
73
|
+
|
74
|
+
# Write scaffold gemspec for new service
|
75
|
+
def write_gemspec!
|
76
|
+
File.open(File.join(service_path, "#{full_name}.gemspec"), 'w+') do |file|
|
77
|
+
file.puts <<-EOF
|
78
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + '/lib/'
|
79
|
+
require '#{full_name}/version'
|
80
|
+
Gem::Specification.new do |s|
|
81
|
+
s.name = '#{full_name}'
|
82
|
+
s.version = #{full_class}::VERSION.version
|
83
|
+
s.summary = 'Custom Short Order Service'
|
84
|
+
s.author = 'CHANGE ME'
|
85
|
+
s.email = 'changeme@example.com'
|
86
|
+
s.homepage = 'https://example.com'
|
87
|
+
s.description = 'Custom Short Order Service: #{task_name}'
|
88
|
+
s.require_path = 'lib'
|
89
|
+
s.license = 'Apache 2.0'
|
90
|
+
s.add_runtime_dependency 'jackal', '~> 0.3.18'
|
91
|
+
s.add_runtime_dependency 'carnivore-http', '~> 0.2.8'
|
92
|
+
s.files = Dir['{lib}/**/**/*'] + %w(#{full_name}.gemspec)
|
93
|
+
end
|
94
|
+
EOF
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Write scaffold version for new service
|
99
|
+
def write_version!
|
100
|
+
File.open(File.join(service_path, 'lib', full_name, 'version.rb'), 'w+') do |file|
|
101
|
+
file.puts <<-EOF
|
102
|
+
module #{root_class}
|
103
|
+
module #{task_class}
|
104
|
+
# Current version
|
105
|
+
VERSION = Gem::Version.new('0.1.0')
|
106
|
+
end
|
107
|
+
end
|
108
|
+
EOF
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Write scaffold loader for new service
|
113
|
+
def write_loader!
|
114
|
+
File.open(File.join(service_path, 'lib', "#{full_name}.rb"), 'w+') do |file|
|
115
|
+
file.puts <<-EOF
|
116
|
+
require '#{full_name}/version'
|
117
|
+
require 'jackal'
|
118
|
+
|
119
|
+
module #{root_class}
|
120
|
+
module #{task_class}
|
121
|
+
autoload :#{callback_class}, '#{full_name}/#{callback_name}'
|
122
|
+
end
|
123
|
+
end
|
124
|
+
EOF
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
# Write scaffold callback for new service
|
129
|
+
def write_callback!
|
130
|
+
File.open(File.join(service_path, 'lib', full_name, "#{callback_name}.rb"), 'w+') do |file|
|
131
|
+
file.puts <<-EOF
|
132
|
+
require '#{full_name}'
|
133
|
+
|
134
|
+
module #{root_class}
|
135
|
+
module #{task_class}
|
136
|
+
class #{callback_class} < Jackal::Callback
|
137
|
+
|
138
|
+
# Perform any setup tasks required for this callback. This
|
139
|
+
# method is called after the callback is initialized and
|
140
|
+
# prior to any message processing.
|
141
|
+
def setup(*_)
|
142
|
+
end
|
143
|
+
|
144
|
+
# Determine if the received message is valid for this
|
145
|
+
# callback. If valid, the message will be processed.
|
146
|
+
#
|
147
|
+
# @param message [Carnivore::Message] received message
|
148
|
+
# @return [Truthy, Falsey]
|
149
|
+
# @note: Original scaffold generation always returns true
|
150
|
+
def valid?(message)
|
151
|
+
super do |payload|
|
152
|
+
true
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
156
|
+
# Perform a task based on the received message.
|
157
|
+
#
|
158
|
+
# @param message [Carnivore::Message] received message
|
159
|
+
# @return [Object, NilClass] returned value is not used
|
160
|
+
def execute(message)
|
161
|
+
failure_wrap(message) do |payload|
|
162
|
+
info 'Received new message from Short Order!'
|
163
|
+
info "Message payload contents:\\n\#{MultiJson.dump(payload, :pretty => true)}"
|
164
|
+
info 'Setting task as complete and notifying Short Order'
|
165
|
+
job_completed(:#{task_name}, payload, message)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
172
|
+
EOF
|
173
|
+
end
|
174
|
+
end
|
175
|
+
|
176
|
+
# Write scaffold Gemfile for new service
|
177
|
+
def write_gemfile!
|
178
|
+
File.open(File.join(service_path, 'Gemfile'), 'w+') do |file|
|
179
|
+
file.puts <<-EOF
|
180
|
+
source 'https://rubygems.org'
|
181
|
+
|
182
|
+
gemspec
|
183
|
+
EOF
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
# Write scaffold readme file for new service
|
188
|
+
def write_readme!
|
189
|
+
File.open(File.join(service_path, 'README.md'), 'w+') do |file|
|
190
|
+
file.puts <<-EOF
|
191
|
+
# Custom Short Order Service: #{task_name}
|
192
|
+
|
193
|
+
Provide information about #{task_name} here.
|
194
|
+
EOF
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
# Write scaffold configuration file for new service
|
199
|
+
def write_config!
|
200
|
+
File.open(File.join(service_path, 'config.json'), 'w+') do |file|
|
201
|
+
file.puts MultiJson.dump(
|
202
|
+
Smash.new(
|
203
|
+
:jackal => {
|
204
|
+
:require => [
|
205
|
+
'carnivore-http',
|
206
|
+
full_name
|
207
|
+
]
|
208
|
+
},
|
209
|
+
root_name => {
|
210
|
+
task_name => {
|
211
|
+
:config => {
|
212
|
+
},
|
213
|
+
:sources => {
|
214
|
+
:input => {
|
215
|
+
:type => :http_paths,
|
216
|
+
:args => {
|
217
|
+
:port => 9090,
|
218
|
+
:path => "/#{task_name}",
|
219
|
+
:method => :post
|
220
|
+
}
|
221
|
+
},
|
222
|
+
:output => {
|
223
|
+
:type => :http,
|
224
|
+
:args => {
|
225
|
+
:method => :post,
|
226
|
+
:endpoint => 'https://api.d2o.io/v1/restore',
|
227
|
+
:auto_process => false,
|
228
|
+
:enable_processing => false
|
229
|
+
}
|
230
|
+
}
|
231
|
+
},
|
232
|
+
:callbacks => [
|
233
|
+
"#{full_class}::#{callback_class}"
|
234
|
+
]
|
235
|
+
}
|
236
|
+
}
|
237
|
+
),
|
238
|
+
:pretty => true
|
239
|
+
)
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
end
|
244
|
+
end
|
245
|
+
end
|
data/shortorder.gemspec
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__)) + '/lib/'
|
2
|
+
require 'shortorder/version'
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = 'shortorder'
|
5
|
+
s.version = Shortorder::VERSION.version
|
6
|
+
s.summary = 'Short Order CLI'
|
7
|
+
s.author = 'Heavy Water'
|
8
|
+
s.email = 'support@shortorder.io'
|
9
|
+
s.homepage = 'https://github.com/shortorder/shortorder'
|
10
|
+
s.description = 'Short Order CLI tools and helpers'
|
11
|
+
s.require_path = 'lib'
|
12
|
+
s.license = 'Apache 2.0'
|
13
|
+
s.add_runtime_dependency 'bogo-cli', '~> 0.1'
|
14
|
+
s.files = Dir['{lib,bin}/**/**/*'] + %w(shortorder.gemspec README.md CHANGELOG.md CONTRIBUTING.md LICENSE)
|
15
|
+
s.executables << 'shortorder'
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: shortorder
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Heavy Water
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-07-29 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bogo-cli
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.1'
|
27
|
+
description: Short Order CLI tools and helpers
|
28
|
+
email: support@shortorder.io
|
29
|
+
executables:
|
30
|
+
- shortorder
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- CHANGELOG.md
|
35
|
+
- CONTRIBUTING.md
|
36
|
+
- LICENSE
|
37
|
+
- README.md
|
38
|
+
- bin/shortorder
|
39
|
+
- lib/shortorder.rb
|
40
|
+
- lib/shortorder/command.rb
|
41
|
+
- lib/shortorder/command/custom_service.rb
|
42
|
+
- lib/shortorder/version.rb
|
43
|
+
- shortorder.gemspec
|
44
|
+
homepage: https://github.com/shortorder/shortorder
|
45
|
+
licenses:
|
46
|
+
- Apache 2.0
|
47
|
+
metadata: {}
|
48
|
+
post_install_message:
|
49
|
+
rdoc_options: []
|
50
|
+
require_paths:
|
51
|
+
- lib
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '0'
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
requirements: []
|
63
|
+
rubyforge_project:
|
64
|
+
rubygems_version: 2.2.2
|
65
|
+
signing_key:
|
66
|
+
specification_version: 4
|
67
|
+
summary: Short Order CLI
|
68
|
+
test_files: []
|
69
|
+
has_rdoc:
|