legion-cli 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/.circleci/config.yml +61 -0
  3. data/.gitignore +12 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +17 -0
  6. data/Gemfile +4 -0
  7. data/README.md +3 -0
  8. data/Rakefile +6 -0
  9. data/bitbucket-pipelines.yml +69 -0
  10. data/exe/legionio +4 -0
  11. data/exe/lex_gen +5 -0
  12. data/legion-cli.gemspec +35 -0
  13. data/lib/legion/cli.rb +56 -0
  14. data/lib/legion/cli/chain.rb +36 -0
  15. data/lib/legion/cli/cohort.rb +10 -0
  16. data/lib/legion/cli/function.rb +41 -0
  17. data/lib/legion/cli/lex/actor.rb +31 -0
  18. data/lib/legion/cli/lex/exchange.rb +32 -0
  19. data/lib/legion/cli/lex/message.rb +32 -0
  20. data/lib/legion/cli/lex/queue.rb +32 -0
  21. data/lib/legion/cli/lex/runner.rb +71 -0
  22. data/lib/legion/cli/lex/templates/actor.erb +6 -0
  23. data/lib/legion/cli/lex/templates/actor_spec.erb +0 -0
  24. data/lib/legion/cli/lex/templates/base/bitbucket.yml.erb +69 -0
  25. data/lib/legion/cli/lex/templates/base/gemfile.erb +3 -0
  26. data/lib/legion/cli/lex/templates/base/gemspec.erb +26 -0
  27. data/lib/legion/cli/lex/templates/base/gitignore.erb +11 -0
  28. data/lib/legion/cli/lex/templates/base/lex.erb +9 -0
  29. data/lib/legion/cli/lex/templates/base/lex_spec.erb +5 -0
  30. data/lib/legion/cli/lex/templates/base/lic.erb +21 -0
  31. data/lib/legion/cli/lex/templates/base/rakefile.erb +6 -0
  32. data/lib/legion/cli/lex/templates/base/readme.md.erb +2 -0
  33. data/lib/legion/cli/lex/templates/base/rubocop.yml.erb +15 -0
  34. data/lib/legion/cli/lex/templates/base/spec_helper.rb.erb +11 -0
  35. data/lib/legion/cli/lex/templates/base/version.erb +7 -0
  36. data/lib/legion/cli/lex/templates/exchange.erb +11 -0
  37. data/lib/legion/cli/lex/templates/exchange_spec.erb +0 -0
  38. data/lib/legion/cli/lex/templates/message.erb +27 -0
  39. data/lib/legion/cli/lex/templates/message_spec.erb +0 -0
  40. data/lib/legion/cli/lex/templates/queue.erb +8 -0
  41. data/lib/legion/cli/lex/templates/queue_spec.erb +0 -0
  42. data/lib/legion/cli/lex/templates/runner.erb +11 -0
  43. data/lib/legion/cli/lex/templates/runner_spec.erb +11 -0
  44. data/lib/legion/cli/relationship.rb +22 -0
  45. data/lib/legion/cli/task.rb +49 -0
  46. data/lib/legion/cli/trigger.rb +81 -0
  47. data/lib/legion/cli/version.rb +5 -0
  48. data/lib/legion/lex.rb +91 -0
  49. metadata +176 -0
@@ -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
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ *.key
10
+
11
+ # rspec failure tracking
12
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
@@ -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
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in legion-cli.gemspec
4
+ gemspec
@@ -0,0 +1,3 @@
1
+ # Legion::Cli
2
+
3
+ Don't install this gem directly. Instead, install the LegionIO gem
@@ -0,0 +1,6 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -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
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'thor'
3
+ require 'legion/cli'
4
+ Legion::CLI.start
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ require 'thor'
3
+ require 'legion/lex'
4
+
5
+ Legion::Cli::LexBuilder.start
@@ -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
@@ -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,10 @@
1
+ module Legion
2
+ class Cli
3
+ class Cohort < Thor
4
+ desc 'import :id', 'imports a cohort for usage'
5
+ def import(id)
6
+ say "Importing Cohort #{id}", :green
7
+ end
8
+ end
9
+ end
10
+ 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