legion-cli 0.2.0
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/.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
|