legion-cli 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.circleci/config.yml +61 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.rubocop.yml +17 -0
- data/Gemfile +4 -0
- data/README.md +3 -0
- data/Rakefile +6 -0
- data/bitbucket-pipelines.yml +69 -0
- data/exe/legionio +4 -0
- data/exe/lex_gen +5 -0
- data/legion-cli.gemspec +35 -0
- data/lib/legion/cli.rb +56 -0
- data/lib/legion/cli/chain.rb +36 -0
- data/lib/legion/cli/cohort.rb +10 -0
- data/lib/legion/cli/function.rb +41 -0
- data/lib/legion/cli/lex/actor.rb +31 -0
- data/lib/legion/cli/lex/exchange.rb +32 -0
- data/lib/legion/cli/lex/message.rb +32 -0
- data/lib/legion/cli/lex/queue.rb +32 -0
- data/lib/legion/cli/lex/runner.rb +71 -0
- data/lib/legion/cli/lex/templates/actor.erb +6 -0
- data/lib/legion/cli/lex/templates/actor_spec.erb +0 -0
- data/lib/legion/cli/lex/templates/base/bitbucket.yml.erb +69 -0
- data/lib/legion/cli/lex/templates/base/gemfile.erb +3 -0
- data/lib/legion/cli/lex/templates/base/gemspec.erb +26 -0
- data/lib/legion/cli/lex/templates/base/gitignore.erb +11 -0
- data/lib/legion/cli/lex/templates/base/lex.erb +9 -0
- data/lib/legion/cli/lex/templates/base/lex_spec.erb +5 -0
- data/lib/legion/cli/lex/templates/base/lic.erb +21 -0
- data/lib/legion/cli/lex/templates/base/rakefile.erb +6 -0
- data/lib/legion/cli/lex/templates/base/readme.md.erb +2 -0
- data/lib/legion/cli/lex/templates/base/rubocop.yml.erb +15 -0
- data/lib/legion/cli/lex/templates/base/spec_helper.rb.erb +11 -0
- data/lib/legion/cli/lex/templates/base/version.erb +7 -0
- data/lib/legion/cli/lex/templates/exchange.erb +11 -0
- data/lib/legion/cli/lex/templates/exchange_spec.erb +0 -0
- data/lib/legion/cli/lex/templates/message.erb +27 -0
- data/lib/legion/cli/lex/templates/message_spec.erb +0 -0
- data/lib/legion/cli/lex/templates/queue.erb +8 -0
- data/lib/legion/cli/lex/templates/queue_spec.erb +0 -0
- data/lib/legion/cli/lex/templates/runner.erb +11 -0
- data/lib/legion/cli/lex/templates/runner_spec.erb +11 -0
- data/lib/legion/cli/relationship.rb +22 -0
- data/lib/legion/cli/task.rb +49 -0
- data/lib/legion/cli/trigger.rb +81 -0
- data/lib/legion/cli/version.rb +5 -0
- data/lib/legion/lex.rb +91 -0
- metadata +176 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 99b0d47013aa08972ea6dd4f47dad8f62dff6351454b1fca17233bf008cef4b9
|
4
|
+
data.tar.gz: f5a13a255bdde0f10f98c87f562b71718660989363cf549abf570aa05d431495
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c8516deee3d22b3ff4772915c0120a0dfb360dc26a144b03d70dc124b87e0d5b4ac671c3d196e42efdc3a13fb5a590dae9799cc8e49595f80faf4e9dd34d3f94
|
7
|
+
data.tar.gz: a2c5bd97e6a4cf942b8c1f2ca29c7efcc2b085f57f1f8e050438608652a7f9faa79e8e72173209f950ee37010ca96d61f061b4e72875e6dfeb19caed68db6f3e
|
@@ -0,0 +1,61 @@
|
|
1
|
+
version: 2.1
|
2
|
+
orbs:
|
3
|
+
ruby: circleci/ruby@0.2.1
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
"rubocop":
|
7
|
+
docker:
|
8
|
+
- image: circleci/ruby:2.5-node
|
9
|
+
steps:
|
10
|
+
- checkout
|
11
|
+
- ruby/load-cache
|
12
|
+
- ruby/install-deps
|
13
|
+
- run:
|
14
|
+
name: Run Rubocop
|
15
|
+
command: bundle exec rubocop
|
16
|
+
- ruby/save-cache
|
17
|
+
"ruby-two-five":
|
18
|
+
docker:
|
19
|
+
- image: circleci/ruby:2.5
|
20
|
+
- image: memcached:1.5-alpine
|
21
|
+
steps:
|
22
|
+
- checkout
|
23
|
+
- ruby/load-cache
|
24
|
+
- ruby/install-deps
|
25
|
+
- ruby/run-tests
|
26
|
+
- ruby/save-cache
|
27
|
+
"ruby-two-six":
|
28
|
+
docker:
|
29
|
+
- image: circleci/ruby:2.6
|
30
|
+
- image: memcached:1.5-alpine
|
31
|
+
steps:
|
32
|
+
- checkout
|
33
|
+
- ruby/load-cache
|
34
|
+
- ruby/install-deps
|
35
|
+
- ruby/run-tests
|
36
|
+
- ruby/save-cache
|
37
|
+
"ruby-two-seven":
|
38
|
+
docker:
|
39
|
+
- image: circleci/ruby:2.7
|
40
|
+
- image: memcached:1.5-alpine
|
41
|
+
steps:
|
42
|
+
- checkout
|
43
|
+
- ruby/load-cache
|
44
|
+
- ruby/install-deps
|
45
|
+
- ruby/run-tests
|
46
|
+
- ruby/save-cache
|
47
|
+
|
48
|
+
workflows:
|
49
|
+
version: 2
|
50
|
+
rubocop-rspec:
|
51
|
+
jobs:
|
52
|
+
- rubocop
|
53
|
+
- ruby-two-five:
|
54
|
+
requires:
|
55
|
+
- rubocop
|
56
|
+
- ruby-two-six:
|
57
|
+
requires:
|
58
|
+
- ruby-two-five
|
59
|
+
- ruby-two-seven:
|
60
|
+
requires:
|
61
|
+
- ruby-two-five
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
Metrics/LineLength:
|
2
|
+
Max: 120
|
3
|
+
Metrics/MethodLength:
|
4
|
+
Max: 30
|
5
|
+
Metrics/ClassLength:
|
6
|
+
Max: 1500
|
7
|
+
Metrics/BlockLength:
|
8
|
+
Max: 50
|
9
|
+
Style/Documentation:
|
10
|
+
Enabled: false
|
11
|
+
AllCops:
|
12
|
+
TargetRubyVersion: 2.5
|
13
|
+
NewCops: enable
|
14
|
+
Style/FrozenStringLiteralComment:
|
15
|
+
Enabled: false
|
16
|
+
Naming/FileName:
|
17
|
+
Enabled: false
|
data/Gemfile
ADDED
data/README.md
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
image: ruby:2.7
|
2
|
+
|
3
|
+
pipelines:
|
4
|
+
tags:
|
5
|
+
"v*":
|
6
|
+
- step:
|
7
|
+
name: Rubocop
|
8
|
+
caches:
|
9
|
+
- bundler
|
10
|
+
script:
|
11
|
+
- gem install rubocop
|
12
|
+
- gem update rubocop
|
13
|
+
- rubocop
|
14
|
+
- step:
|
15
|
+
name: RSpec
|
16
|
+
caches:
|
17
|
+
- bundler
|
18
|
+
script:
|
19
|
+
- gem install bundler
|
20
|
+
- gem update bundler
|
21
|
+
- bundle update
|
22
|
+
- bundle exec rspec
|
23
|
+
- step:
|
24
|
+
name: Push to RubyGems
|
25
|
+
deployment: RubyGems
|
26
|
+
script:
|
27
|
+
- gem install bundler gem-release rspec
|
28
|
+
- bundle install
|
29
|
+
- (umask 077 ; echo $gem_creds | base64 --decode > ~/.gem/credentials)
|
30
|
+
- gem release
|
31
|
+
artifacts:
|
32
|
+
- pkg/**
|
33
|
+
branches:
|
34
|
+
master:
|
35
|
+
- step:
|
36
|
+
caches:
|
37
|
+
- bundler
|
38
|
+
script:
|
39
|
+
- gem install rubocop
|
40
|
+
- gem update rubocop
|
41
|
+
- rubocop
|
42
|
+
- step:
|
43
|
+
caches:
|
44
|
+
- bundler
|
45
|
+
script:
|
46
|
+
- gem install bundler
|
47
|
+
- gem update bundler
|
48
|
+
- bundle update
|
49
|
+
- bundle exec rspec
|
50
|
+
develop:
|
51
|
+
- step:
|
52
|
+
caches:
|
53
|
+
- bundler
|
54
|
+
script:
|
55
|
+
- gem install rubocop
|
56
|
+
- gem update rubocop
|
57
|
+
- rubocop
|
58
|
+
- step:
|
59
|
+
caches:
|
60
|
+
- bundler
|
61
|
+
script:
|
62
|
+
- gem install bundler
|
63
|
+
- gem update bundler
|
64
|
+
- bundle update
|
65
|
+
- bundle exec rspec
|
66
|
+
|
67
|
+
definitions:
|
68
|
+
caches:
|
69
|
+
bundle: /usr/local/bundle
|
data/exe/legionio
ADDED
data/exe/lex_gen
ADDED
data/legion-cli.gemspec
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'legion/cli/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'legion-cli'
|
7
|
+
spec.version = Legion::Cli::VERSION
|
8
|
+
spec.authors = ['Esity']
|
9
|
+
spec.email = ['matthewdiverson@gmail.com']
|
10
|
+
|
11
|
+
spec.summary = 'Legion::CLI'
|
12
|
+
spec.description = 'Legion::CLI'
|
13
|
+
spec.homepage = 'https://bitbucket.org/legion-io/legion-cli'
|
14
|
+
|
15
|
+
spec.metadata['homepage_uri'] = spec.homepage
|
16
|
+
spec.metadata['source_code_uri'] = 'https://bitbucket.org/legion-io/legion-cli'
|
17
|
+
spec.metadata['changelog_uri'] = 'https://bitbucket.org/legion-io/legion-cli'
|
18
|
+
spec.required_ruby_version = '>= 2.5.0'
|
19
|
+
|
20
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
21
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
22
|
+
end
|
23
|
+
|
24
|
+
# spec.bindir = 'exe'
|
25
|
+
# spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
26
|
+
spec.require_paths = ['lib']
|
27
|
+
|
28
|
+
spec.add_development_dependency 'bundler'
|
29
|
+
spec.add_development_dependency 'legionio'
|
30
|
+
spec.add_development_dependency 'rake'
|
31
|
+
spec.add_development_dependency 'rspec'
|
32
|
+
spec.add_development_dependency 'rubocop'
|
33
|
+
|
34
|
+
spec.add_dependency 'thor'
|
35
|
+
end
|
data/lib/legion/cli.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# require 'legion/cli/version'
|
2
|
+
require 'thor'
|
3
|
+
require 'legion'
|
4
|
+
require 'legion/service'
|
5
|
+
|
6
|
+
require 'legion/lex'
|
7
|
+
require 'legion/cli/cohort'
|
8
|
+
|
9
|
+
require 'legion/cli/relationship'
|
10
|
+
require 'legion/cli/task'
|
11
|
+
require 'legion/cli/chain'
|
12
|
+
require 'legion/cli/trigger'
|
13
|
+
require 'legion/cli/function'
|
14
|
+
|
15
|
+
module Legion
|
16
|
+
class CLI < Thor
|
17
|
+
include Thor::Actions
|
18
|
+
check_unknown_options!
|
19
|
+
|
20
|
+
def self.exit_on_failure?
|
21
|
+
true
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.source_root
|
25
|
+
File.dirname(__FILE__)
|
26
|
+
end
|
27
|
+
|
28
|
+
desc 'version', 'Display MyGem version'
|
29
|
+
map %w[-v --version] => :version
|
30
|
+
|
31
|
+
def version
|
32
|
+
say "Legion::CLI #{VERSION}"
|
33
|
+
end
|
34
|
+
|
35
|
+
desc 'lex', 'used to build LEXs'
|
36
|
+
subcommand 'lex', Legion::Cli::LexBuilder
|
37
|
+
|
38
|
+
desc 'cohort', ''
|
39
|
+
subcommand 'cohort', Legion::Cli::Cohort
|
40
|
+
|
41
|
+
desc 'function', 'deal with functions'
|
42
|
+
subcommand 'function', Legion::Cli::Function
|
43
|
+
|
44
|
+
desc 'relationship', 'creates and manages relationships'
|
45
|
+
subcommand 'relationship', Legion::Cli::Relationship
|
46
|
+
|
47
|
+
desc 'task', 'creates and manages tasks'
|
48
|
+
subcommand 'task', Legion::Cli::Task
|
49
|
+
|
50
|
+
desc 'chain', 'creates and manages chains'
|
51
|
+
subcommand 'chain', Legion::Cli::Chain
|
52
|
+
|
53
|
+
desc 'trigger', 'sends a task to a worker'
|
54
|
+
subcommand 'trigger', Legion::Cli::Trigger
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Legion
|
2
|
+
class Cli
|
3
|
+
class Chain < Thor
|
4
|
+
desc 'create', 'create'
|
5
|
+
def create(name)
|
6
|
+
Legion::Service.new(cache: false, crypt: false, extensions: false, log_level: 'error')
|
7
|
+
say "chain created, id: #{Legion::Data::Model::Chain.insert({ name: name })}", :green
|
8
|
+
end
|
9
|
+
|
10
|
+
desc 'show', 'show'
|
11
|
+
option :limit, type: :numeric, required: true, default: 10, desc: 'how many tasks to return'
|
12
|
+
def show
|
13
|
+
Legion::Service.new(cache: false, crypt: false, extensions: false, log_level: 'error')
|
14
|
+
rows = [%w[id name active]]
|
15
|
+
Legion::Data::Model::Chain.limit(options[:limit]).order(:id).reverse_each do |row|
|
16
|
+
rows.push([row.values[:id], row.values[:name], row.values[:active]])
|
17
|
+
end
|
18
|
+
|
19
|
+
print_table rows
|
20
|
+
end
|
21
|
+
|
22
|
+
desc 'delete', 'delete'
|
23
|
+
option :confirm, type: :boolean
|
24
|
+
def delete(id)
|
25
|
+
Legion::Service.new(cache: false, crypt: false, extensions: false, log_level: 'error')
|
26
|
+
unless options[:confirm]
|
27
|
+
return unless yes? "Are you sure you want to delete chain #{id} and all dependent relationships", :red
|
28
|
+
end
|
29
|
+
Legion::Data::Model::Chain[id].delete
|
30
|
+
say 'Deleted!'
|
31
|
+
end
|
32
|
+
|
33
|
+
default_task :show
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Legion
|
2
|
+
class Cli
|
3
|
+
class Function < Thor
|
4
|
+
desc 'find', 'find'
|
5
|
+
option :internal, type: :boolean, default: false
|
6
|
+
def find
|
7
|
+
Legion::Service.new(cache: false, crypt: false, extensions: false, log_level: 'error')
|
8
|
+
response = ask 'trigger extension?', limited_to: Legion::Data::Model::Extension.map(:name)
|
9
|
+
trigger_extension = Legion::Data::Model::Extension.where(name: response).first
|
10
|
+
runners = Legion::Data::Model::Runner.where(extension_id: trigger_extension.values[:id])
|
11
|
+
if runners.count === 1
|
12
|
+
trigger_runner = runners.first
|
13
|
+
say "Auto selecting #{trigger_runner.values[:name]} since it is the only option"
|
14
|
+
else
|
15
|
+
response = ask 'trigger runner?', limited_to: runners.map(:name)
|
16
|
+
trigger_runner = Legion::Data::Model::Runner.where(name: response).where(extension_id: trigger_extension.values[:id]).first
|
17
|
+
end
|
18
|
+
|
19
|
+
functions = Legion::Data::Model::Function.where(runner_id: trigger_runner.values[:id])
|
20
|
+
|
21
|
+
if functions.count === 1
|
22
|
+
trigger_function = functions.first
|
23
|
+
say "Auto selecting #{trigger_function.values[:name]} since it is the only option"
|
24
|
+
else
|
25
|
+
response = ask 'trigger function?', limited_to: Legion::Data::Model::Function.where(runner_id: trigger_runner.values[:id]).map(:name)
|
26
|
+
trigger_function = trigger_runner.functions(name: response).first
|
27
|
+
end
|
28
|
+
# say "#{trigger_runner.values[:namespace]}.#{trigger_function.values[:name]} selected as trigger", :green, :italicized
|
29
|
+
# mute { trigger_function.values[:id] }
|
30
|
+
say trigger_function.values[:id]
|
31
|
+
# puts self.methods(false)
|
32
|
+
end
|
33
|
+
|
34
|
+
desc 'delete', 'delete'
|
35
|
+
def delete; end
|
36
|
+
|
37
|
+
desc 'activate', 'activate'
|
38
|
+
def activate; end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Legion
|
2
|
+
class Cli
|
3
|
+
module Lex
|
4
|
+
class Actor < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
def self.source_root
|
8
|
+
File.dirname(__FILE__)
|
9
|
+
end
|
10
|
+
|
11
|
+
no_commands do
|
12
|
+
def lex
|
13
|
+
Dir.pwd.split('/').last.split('-').last
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'create :name', 'creates a new actor'
|
18
|
+
method_option :type, enum: %w[subscription every poll once loop], default: 'subscription'
|
19
|
+
def create(name)
|
20
|
+
template('templates/actor.erb', "#{lex}/lib/actors/#{name}.rb", { name: name, lex: lex, type: options[:type] })
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'delete :name', 'deletes an actor'
|
24
|
+
def delete(name)
|
25
|
+
remove_file("lib/legion/extensions/#{lex}/actors/#{name}.rb")
|
26
|
+
remove_file("spec/actors/#{name}_spec.rb")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Legion
|
2
|
+
class Cli
|
3
|
+
module Lex
|
4
|
+
class Exchange < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
def self.source_root
|
8
|
+
File.dirname(__FILE__)
|
9
|
+
end
|
10
|
+
|
11
|
+
no_commands do
|
12
|
+
def lex
|
13
|
+
Dir.pwd.split('/').last.split('-').last
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
desc 'create :name', 'creates a new exchange class'
|
18
|
+
def create(name)
|
19
|
+
template('templates/queue.erb', "lib/legion/extensions/#{lex}/transport/exchanges/#{name}.rb", { name: name, lex: lex })
|
20
|
+
template('templates/queue_spec.erb', "spec/exchanges/#{name}_spec.rb", { name: name, lex: lex })
|
21
|
+
end
|
22
|
+
|
23
|
+
desc 'delete :name', 'deletes an exchange class'
|
24
|
+
def delete(name)
|
25
|
+
remove_file("lib/legion/extensions/#{lex}/transport/exchanges/#{name}.rb")
|
26
|
+
remove_file("spec/exchanges/#{name}_spec.rb")
|
27
|
+
remove_file("spec/transport/exchanges/#{name}_spec.rb")
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|