sumcli 0.1.0 → 0.4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 94b43a29661d0deb26d7fe4cf3e0f2128a9812b82986f4a04fd7e34973545bff
4
- data.tar.gz: 483c020c4eae626fcbc6ae98034239218cd02929b6cf0c86adbf95a232e17e16
3
+ metadata.gz: 1fb17357faf9b0a79218491f726464b6ed260d22f959873cefaed9a99e981174
4
+ data.tar.gz: 70c9974d8181fe817cf2a5dfc139d8454b66678e10870a75de6478bf986f4a8a
5
5
  SHA512:
6
- metadata.gz: da0b86d8b42d721f6b6fa41da1c4d56715d9795fcdd06fc61bde51e56321754f5ea5d0275603400f602a5c2ffd36fb6badeea1742315a2229c906229b7db4261
7
- data.tar.gz: 68fa839a31d1dc61f977bb7b5d544e36347ad5af4caa32e5c15d9e02af8fa98f08dc4a8601494dc586721527f2a2f5cfbecbd6ed249df2fc981c8abe8153b0cf
6
+ metadata.gz: 21e9b27cf7ade308bd38a1939695dfb3dd026d7b5c50ca20ff3333ce1b531adbf5f9252544996d4b97c05e1918ab8bfae6c79c896e3700b1e55fba22b48f9c55
7
+ data.tar.gz: 7f2ff870eb6d5248879ff34636eae35bf48ca797669c89eb7ec2f96f529abc191215a6832bd61e4d9e50a5ab1640a3ed2fb823a1ce8415fa82a5062a5f411701
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sumcli (0.1.0)
4
+ sumcli (0.4.0)
5
5
  activesupport (~> 5.0)
6
6
  pastel (~> 0.7.2)
7
7
  thor (~> 0.20.0)
data/lib/sumcli/cli.rb CHANGED
@@ -18,11 +18,10 @@ module Sumcli
18
18
  end
19
19
  map %w(--version -v) => :version
20
20
 
21
- require_relative 'commands/g'
22
21
  require_relative 'commands/new'
23
22
  require_relative 'commands/add'
24
- register Sumcli::Commands::G, 'g', 'g endpoint', 'Generates a new REST endpoint'
25
- register Sumcli::Commands::Add, 'add', 'add service', 'It adds a service to the docker file'
23
+ register Sumcli::Commands::Add, 'add', 'add [SUBCOMMAND]', 'Adds services to your project'
24
+
26
25
  desc 'new NAME', 'Creates a new application'
27
26
  method_option :help, aliases: '-h', type: :boolean,
28
27
  desc: 'Display usage information'
@@ -8,15 +8,27 @@ module Sumcli
8
8
 
9
9
  namespace :add
10
10
 
11
- desc 'service NAME', 'Command description...'
11
+ desc 'service NAME', 'Installs infrastructure components and their initializers'
12
12
  method_option :help, aliases: '-h', type: :boolean,
13
13
  desc: 'Display usage information'
14
- def service(name)
14
+ def service(name, version = nil)
15
15
  if options[:help]
16
16
  invoke :help, ['service']
17
17
  else
18
18
  require_relative 'add/service'
19
- Sumcli::Commands::Add::Service.new(name, options).execute
19
+ Sumcli::Commands::Add::Service.new(name, version, options).execute
20
+ end
21
+ end
22
+
23
+ desc 'endpoint NAME [METHOD] [ROUTE]', 'Generate a new endpoint using METHOD verb and matching url ROUTE'
24
+ method_option :help, aliases: '-h', type: :boolean,
25
+ desc: 'Display usage information'
26
+ def endpoint(name, method = nil, route = nil)
27
+ if options[:help]
28
+ invoke :help, ['endpoint']
29
+ else
30
+ require_relative 'add/endpoint'
31
+ Sumcli::Commands::Add::Endpoint.new(name, method, route, options).execute
20
32
  end
21
33
  end
22
34
  end
@@ -5,12 +5,15 @@ require_relative '../../command'
5
5
 
6
6
  module Sumcli
7
7
  module Commands
8
- class G
8
+ class Add
9
9
  class Endpoint < Sumcli::Command
10
10
  ENDPOINT_PATH = 'api/endpoints'
11
+ MODELS_PATH = 'app/models'
11
12
  ENTITIES_PATH = 'api/entities'
12
13
  TESTS_PATH = 'spec/api'
13
14
 
15
+ TEMPLATES_PATH = File.expand_path('../../templates/add/endpoint', __dir__)
16
+
14
17
  def initialize(name, method, route, options)
15
18
  @name = name
16
19
  @method = method
@@ -26,6 +29,13 @@ module Sumcli
26
29
  inject_route unless @method.nil?
27
30
  end
28
31
 
32
+ def inject_mount
33
+ generator.inject_into_file("#{ENDPOINT_PATH}/base.rb", after: "# APIs\n") do <<-RB
34
+ mount API::#{@name.capitalize}
35
+ RB
36
+ end
37
+ end
38
+
29
39
  def inject_route
30
40
  generator.inject_into_file("#{ENDPOINT_PATH}/#{@name.underscore}.rb", after: "# ENDPOINTS\n") do <<-RB
31
41
 
@@ -42,7 +52,7 @@ module Sumcli
42
52
 
43
53
  def create_test
44
54
  generator.copy_file(
45
- 'lib/sumcli/templates/g/endpoint/test.rb.erb',
55
+ "#{TEMPLATES_PATH}/test.rb.erb",
46
56
  "#{TESTS_PATH}/#{@name.underscore}_spec.rb",
47
57
  context: @variables
48
58
  )
@@ -50,7 +60,7 @@ module Sumcli
50
60
 
51
61
  def create_entity
52
62
  generator.copy_file(
53
- 'lib/sumcli/templates/g/endpoint/entity.rb.erb',
63
+ "#{TEMPLATES_PATH}/entity.rb.erb",
54
64
  "#{ENTITIES_PATH}/#{@name.underscore}.rb",
55
65
  context: @variables
56
66
  )
@@ -58,10 +68,20 @@ module Sumcli
58
68
 
59
69
  def create_endpoint
60
70
  generator.copy_file(
61
- 'lib/sumcli/templates/g/endpoint/new.rb.erb',
71
+ "#{TEMPLATES_PATH}/new.rb.erb",
62
72
  "#{ENDPOINT_PATH}/#{@name.underscore}.rb",
63
73
  context: @variables
64
74
  )
75
+
76
+ inject_mount
77
+ end
78
+
79
+ def create_model
80
+ generator.copy_file(
81
+ "#{TEMPLATES_PATH}/model.rb.erb",
82
+ "#{MODELS_PATH}/#{@name.underscore}.rb",
83
+ context: @variables
84
+ )
65
85
  end
66
86
  end
67
87
  end
@@ -8,21 +8,88 @@ module Sumcli
8
8
  class Service < Sumcli::Command
9
9
 
10
10
  DOCKER_FILE = 'docker-compose.yml'
11
+ TEMPLATES_PATH = File.expand_path('../../templates/add/service', __dir__)
12
+ CONFIGS_PATH = 'config'
11
13
 
12
- def initialize(name, options)
14
+ def initialize(name, version, options)
13
15
  @name = name
16
+ @version = version
14
17
  @options = options
15
18
  end
16
19
 
17
20
  def execute(input: $stdin, output: $stdout)
18
- self.send("add_#{@name}")
21
+ if !service_exists?
22
+ self.send("add_#{@name}")
23
+ output.puts "\n #{@name} added to docker-compose"
24
+ else
25
+ output.puts "\n #{@name} already added to docker-compose"
26
+ end
27
+ end
28
+
29
+ def copy_database_files
30
+ generator.inject_into_file('Gemfile', after: "# GEMS\n\n") do <<~RUBY
31
+ gem 'pg', '~> 1.1'
32
+ gem "otr-activerecord", '~> 1.3.0'
33
+ RUBY
34
+ end
35
+ generator.copy_file("#{TEMPLATES_PATH}/database.yml", "#{CONFIGS_PATH}/database.yml")
36
+ generator.copy_file("#{TEMPLATES_PATH}/database.yml.ctmpl", "#{CONFIGS_PATH}/database.yml.ctmpl")
37
+ generator.copy_file("#{TEMPLATES_PATH}/database.rb", "#{CONFIGS_PATH}/initializers/database.rb")
38
+ generator.inject_into_file("#{CONFIGS_PATH}/application.rb", after: "require_rel '../api'\n") do
39
+ 'require_rel \'initializers\''
40
+ end
41
+ generator.inject_into_file('Rakefile', after: "# TASKS\n") do <<~RUBY.strip
42
+ load "tasks/otr-activerecord.rake"
43
+
44
+ namespace :db do
45
+ task :environment do
46
+ require_relative 'config/environment'
47
+ end
48
+ end
49
+ RUBY
50
+ end
51
+ end
52
+
53
+ def require_exists?
54
+ File.readlines(APPLICATION_FILE).grep(/#{INITIALIZERS_REQUIRE}/).any?
55
+ end
56
+
57
+ def add_postgres
58
+ ver = '10'
59
+ response = ask_to_set(ver) if ver != @version && !@version.nil?
60
+ ver = @version if response
61
+
62
+ content =
63
+ <<-TEXT
64
+ db:
65
+ image: 'postgres:#{ver}'
66
+ ports:
67
+ - '5432'
68
+ TEXT
69
+
70
+ generator.safe_inject_into_file DOCKER_FILE, content, after: "services:\n"
71
+ copy_database_files
72
+ end
73
+
74
+ def add_redis
75
+ content =
76
+ <<-TEXT
77
+ redis:
78
+ image: 'redis:#{@version}'
79
+ ports:
80
+ - '6379'
81
+ TEXT
82
+
83
+ generator.safe_inject_into_file DOCKER_FILE, content, after: "services:\n"
84
+ end
19
85
 
20
- output.puts @name + ' added to docker-compose'
86
+ def service_exists?
87
+ File.readlines(DOCKER_FILE).grep(/#{@name}/).any?
21
88
  end
22
89
 
23
- def add_postgres()
24
- generator.inject_into_file DOCKER_FILE,
25
- " db:\n" + " image: 'postgres:9.6.3'\n" + " ports:\n" + " - '5432'", after: "services:\n"
90
+ def ask_to_set(ver)
91
+ prompt.yes?("The default version of #{@name} is #{ver}." +
92
+ "\n\nDo you want to add version #{@version}?")
26
93
  end
27
94
  end
28
95
  end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../command'
4
+
5
+ module Sumcli
6
+ module Commands
7
+ class Add
8
+ class Service
9
+ class Postgres < Sumcli::Command
10
+
11
+ DOCKER_FILE = 'docker-compose.yml'
12
+
13
+ def initialize(name, version, options)
14
+ @name = name
15
+ @version = version
16
+ @options = options
17
+ end
18
+
19
+ def execute(input: $stdin, output: $stdout)
20
+ generator.copy_file 'lib/sumcli/templates/add/service/database.yml.erb',
21
+ 'config/database.yml'
22
+ generator.copy_file 'lib/sumcli/templates/add/service/database.yml.ctmpl.erb',
23
+ 'config/database.yml.ctmpl'
24
+
25
+ output.puts "\n #{@name} added to docker-compose" if self.send("add_#{@name}")
26
+ end
27
+
28
+ def add_postgres
29
+ content =
30
+ <<-TEXT
31
+ db:
32
+ image: 'postgres:#{@version}'
33
+ ports:
34
+ - '5432'
35
+ TEXT
36
+
37
+ generator.safe_inject_into_file DOCKER_FILE, content, after: "services:\n"
38
+ end
39
+
40
+ def ask_to_set(ver)
41
+ prompt.yes?("The default version of #{@name} is #{ver}." +
42
+ "\n\nDo you want to add with version #{@version}?")
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -15,7 +15,8 @@ module Sumcli
15
15
 
16
16
  unless @name.nil? or File.directory?(@name)
17
17
  directory = File.expand_path('../../templates/new/app', __FILE__)
18
- return generator.copy_directory(directory, @name)
18
+ generator.copy_directory(directory, @name)
19
+ return File.chmod(0744, "#{@name}/bin/console")
19
20
  end
20
21
 
21
22
  output.puts "Directory #{@name} already exists."
File without changes
@@ -0,0 +1,4 @@
1
+ class <%= name.capitalize %> < ActiveRecord::Base
2
+
3
+ end
4
+
File without changes
@@ -0,0 +1,2 @@
1
+ ActiveRecord::Base.default_timezone = :utc
2
+ OTR::ActiveRecord.configure_from_hash!(Global.database.to_hash)
@@ -0,0 +1,2 @@
1
+ ActiveRecord::Base.default_timezone = :utc
2
+ OTR::ActiveRecord.configure_from_hash!(Global.database.to_hash)
@@ -0,0 +1,20 @@
1
+ development:
2
+ adapter: postgresql
3
+ encoding: utf8
4
+ pool: 5
5
+ host: localhost
6
+ port: 5432
7
+ username: postgres
8
+ password: ''
9
+ database: app
10
+
11
+ test:
12
+ adapter: postgresql
13
+ encoding: utf8
14
+ pool: 5
15
+ host: localhost
16
+ port: 5432
17
+ username: postgres
18
+ password: ''
19
+ database: app
20
+
@@ -0,0 +1,11 @@
1
+ production:
2
+ encoding: unicode
3
+ adapter: postgresql
4
+ database: {{ with secret "secret/partners/database/name" }}{{ .Data.value }}{{ end }}
5
+ username: {{ with secret "secret/partners/database/username" }}{{ .Data.value }}{{ end }}
6
+ password: {{ with secret "secret/partners/database/password" }}{{ .Data.value }}{{ end }}
7
+ schema_search_path: {{ with secret "secret/partners/database/schema" }}{{ .Data.value }}{{ end }}
8
+ port: {{ keyOrDefault "service/partners/database/port" "5432" }}
9
+ host: {{ key "service/partners/database/host" }}
10
+ pool: {{ keyOrDefault "service/global/database/pool" "5" }}
11
+ timeout: {{ keyOrDefault "service/global/database/timeout" "5000" }}
@@ -0,0 +1,19 @@
1
+ development:
2
+ adapter: postgresql
3
+ encoding: utf8
4
+ pool: 5
5
+ host: localhost
6
+ port: 5432
7
+ username: postgres
8
+ password: ''
9
+ database: sidekiq
10
+
11
+ test:
12
+ adapter: postgresql
13
+ encoding: utf8
14
+ pool: 5
15
+ host: localhost
16
+ port: 5432
17
+ username: postgres
18
+ password: ''
19
+ database: sidekiq
@@ -4,6 +4,9 @@ source 'https://rubygems.org'
4
4
 
5
5
  ruby '2.6.2'
6
6
 
7
+ # AUTO-GENERATED (DO NOT ERASE)
8
+ # GEMS
9
+
7
10
  gem 'rack', '~> 2.0'
8
11
  gem 'grape', '~> 1.2'
9
12
  gem 'grape-entity', '~> 0.7'
@@ -24,14 +24,8 @@
24
24
  end
25
25
  end
26
26
 
27
- # load "tasks/otr-activerecord.rake"
28
-
29
- namespace :db do
30
- task :environment do
31
- require_relative 'config/environment'
32
- end
33
- end
34
-
27
+ # AUTO-GENERATED (DO NOT ERASE)
28
+ # TASKS
35
29
 
36
30
  #Load tasks
37
31
  Dir.glob('lib/tasks/*.rake').each { |task| load task }
@@ -10,6 +10,8 @@ module API
10
10
  end
11
11
  end
12
12
 
13
+ # AUTO-GENERATED (DO NOT ERASE)
14
+ # APIs
13
15
  end
14
16
  end
15
17
 
@@ -1,3 +1,3 @@
1
1
  module Sumcli
2
- VERSION = "0.1.0"
2
+ VERSION = "0.4.0"
3
3
  end
data/sumcli.gemspec CHANGED
@@ -7,8 +7,8 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "sumcli"
8
8
  spec.license = "MIT"
9
9
  spec.version = Sumcli::VERSION
10
- spec.authors = ["Rodrigo Alves"]
11
- spec.email = ["rodrigo.souza@sumup.com"]
10
+ spec.authors = ["Rodrigo Alves", "Danilo Lima", "Lucas Mari"]
11
+ spec.email = ["rodrigo.souza@sumup.com", "danilo.lima@sumup.com", "lucas.mari@sumup.com"]
12
12
 
13
13
  spec.summary = %q{Scaffolds SumUp microservices code.}
14
14
  spec.description = %q{Scaffolds SumUp microservices code.}
metadata CHANGED
@@ -1,14 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sumcli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rodrigo Alves
8
+ - Danilo Lima
9
+ - Lucas Mari
8
10
  autorequire:
9
11
  bindir: exe
10
12
  cert_chain: []
11
- date: 2019-06-04 00:00:00.000000000 Z
13
+ date: 2019-06-05 00:00:00.000000000 Z
12
14
  dependencies:
13
15
  - !ruby/object:Gem::Dependency
14
16
  name: tty-box
@@ -363,6 +365,8 @@ dependencies:
363
365
  description: Scaffolds SumUp microservices code.
364
366
  email:
365
367
  - rodrigo.souza@sumup.com
368
+ - danilo.lima@sumup.com
369
+ - lucas.mari@sumup.com
366
370
  executables:
367
371
  - sumcli
368
372
  extensions: []
@@ -386,16 +390,22 @@ files:
386
390
  - lib/sumcli/command.rb
387
391
  - lib/sumcli/commands/.gitkeep
388
392
  - lib/sumcli/commands/add.rb
393
+ - lib/sumcli/commands/add/endpoint.rb
389
394
  - lib/sumcli/commands/add/service.rb
390
- - lib/sumcli/commands/g.rb
391
- - lib/sumcli/commands/g/endpoint.rb
395
+ - lib/sumcli/commands/add/service/postgres.rb
392
396
  - lib/sumcli/commands/new.rb
393
397
  - lib/sumcli/templates/.gitkeep
398
+ - lib/sumcli/templates/add/endpoint/.gitkeep
399
+ - lib/sumcli/templates/add/endpoint/entity.rb.erb
400
+ - lib/sumcli/templates/add/endpoint/model.rb.erb
401
+ - lib/sumcli/templates/add/endpoint/new.rb.erb
402
+ - lib/sumcli/templates/add/endpoint/test.rb.erb
394
403
  - lib/sumcli/templates/add/service/.gitkeep
395
- - lib/sumcli/templates/g/endpoint/.gitkeep
396
- - lib/sumcli/templates/g/endpoint/entity.rb.erb
397
- - lib/sumcli/templates/g/endpoint/new.rb.erb
398
- - lib/sumcli/templates/g/endpoint/test.rb.erb
404
+ - lib/sumcli/templates/add/service/database.rb
405
+ - lib/sumcli/templates/add/service/database.rb.erb
406
+ - lib/sumcli/templates/add/service/database.yml
407
+ - lib/sumcli/templates/add/service/database.yml.ctmpl
408
+ - lib/sumcli/templates/add/service/database.yml.erb
399
409
  - lib/sumcli/templates/new/.gitkeep
400
410
  - lib/sumcli/templates/new/app/.editorconfig
401
411
  - lib/sumcli/templates/new/app/.gitignore
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'thor'
4
-
5
- module Sumcli
6
- module Commands
7
- class G < Thor
8
-
9
- namespace :g
10
-
11
- desc 'endpoint NAME METHOD ROUTE', 'Generate a new endpoint using METHOD verb and matching url ROUTE'
12
- method_option :help, aliases: '-h', type: :boolean,
13
- desc: 'Display usage information'
14
- def endpoint(name, method = nil, route = nil)
15
- if options[:help]
16
- invoke :help, ['endpoint']
17
- else
18
- require_relative 'g/endpoint'
19
- Sumcli::Commands::G::Endpoint.new(name, method, route, options).execute
20
- end
21
- end
22
- end
23
- end
24
- end