generators_rails 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +23 -0
  5. data/lib/generators/codestyle/config/USAGE +9 -0
  6. data/lib/generators/codestyle/config/config_generator.rb +28 -0
  7. data/lib/generators/codestyle/config/templates/rubocop.yml +7 -0
  8. data/lib/generators/codestyle/config/templates/rubocop_config/default.yml +1613 -0
  9. data/lib/generators/codestyle/config/templates/rubocop_config/disabled.yml +118 -0
  10. data/lib/generators/codestyle/config/templates/rubocop_config/enabled.yml +1863 -0
  11. data/lib/generators/codestyle/config/templates/rubocop_todo.yml +0 -0
  12. data/lib/generators/concern/concern.rb +19 -0
  13. data/lib/generators/concern/controller/USAGE +8 -0
  14. data/lib/generators/concern/controller/controller_generator.rb +6 -0
  15. data/lib/generators/concern/model/USAGE +8 -0
  16. data/lib/generators/concern/model/model_generator.rb +6 -0
  17. data/lib/generators/concern/templates/concern.rb +10 -0
  18. data/lib/generators/direnv/config/USAGE +8 -0
  19. data/lib/generators/direnv/config/config_generator.rb +11 -0
  20. data/lib/generators/docker/config/USAGE +15 -0
  21. data/lib/generators/docker/config/config_generator.rb +135 -0
  22. data/lib/generators/docker/config/templates/Dockerfile +9 -0
  23. data/lib/generators/docker/config/templates/database.mysql.yml +31 -0
  24. data/lib/generators/docker/config/templates/database.postgres.yml +86 -0
  25. data/lib/generators/docker/config/templates/docker-compose.debug.yml +18 -0
  26. data/lib/generators/docker/config/templates/docker-compose.yml +16 -0
  27. data/lib/generators/docker/config/templates/docker.rake +95 -0
  28. data/lib/generators/docker/config/templates/dockercfg.yml +7 -0
  29. data/lib/generators/docker/config/templates/mongo.erb +6 -0
  30. data/lib/generators/docker/config/templates/mongoid.yml +32 -0
  31. data/lib/generators/docker/config/templates/mysql.erb +8 -0
  32. data/lib/generators/docker/config/templates/postgres.erb +6 -0
  33. data/lib/generators/rancher/config/USAGE +8 -0
  34. data/lib/generators/rancher/config/config_generator.rb +35 -0
  35. data/lib/generators/rancher/config/templates/rancher +6 -0
  36. data/lib/generators/rspec/config/USAGE +8 -0
  37. data/lib/generators/rspec/config/config_generator.rb +82 -0
  38. data/lib/generators/setup/full/USAGE +8 -0
  39. data/lib/generators/setup/full/full_generator.rb +11 -0
  40. data/lib/generators_rails/version.rb +3 -0
  41. data/lib/generators_rails.rb +2 -0
  42. data/lib/tasks/generators_rails_tasks.rake +4 -0
  43. metadata +99 -0
@@ -0,0 +1,19 @@
1
+ module Concern
2
+ module Generator
3
+ extend ActiveSupport::Concern
4
+ module ClassMethods
5
+ end
6
+
7
+ included do
8
+ source_root File.expand_path('../templates', __FILE__)
9
+ def copy_template
10
+ type=if self.class.name.demodulize.start_with?("Model")
11
+ "models"
12
+ else
13
+ "controllers"
14
+ end
15
+ template 'concern.rb', "app/#{type}/concerns/#{file_name}.rb"
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ generate a concern from controllers
3
+
4
+ Example:
5
+ rails generate concern:controller thing
6
+
7
+ This will create:
8
+ app/controllers/concerns/thing.rb
@@ -0,0 +1,6 @@
1
+ require 'generators/concern/concern'
2
+ module Concern
3
+ class ControllerGenerator < Rails::Generators::NamedBase
4
+ include Generator
5
+ end
6
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Generate a concern module for models
3
+
4
+ Example:
5
+ rails generate concern:model thing
6
+
7
+ This will create:
8
+ app/models/concerns/thing.rb
@@ -0,0 +1,6 @@
1
+ require 'generators/concern/concern'
2
+ module Concern
3
+ class ModelGenerator < Rails::Generators::NamedBase
4
+ include Generator
5
+ end
6
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module <%=class_name%>
4
+ extend ActiveSupport::Concern
5
+ module ClassMethods
6
+ end
7
+
8
+ included do
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ create dir based env setting for this project
3
+
4
+ Example:
5
+ rails generate direnv:config
6
+
7
+ This will create:
8
+ .envrc and it will be set in gitignore and dockerignore
@@ -0,0 +1,11 @@
1
+ module Direnv
2
+ class ConfigGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+ def setup
5
+ end
6
+
7
+ def create_direnv_config
8
+ template ".direnv",".envrc"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,15 @@
1
+ Description:
2
+ Dockerize this project and enable debug mode with docker way
3
+
4
+ Example:
5
+ rails generate docker:config
6
+
7
+ This will create:
8
+ 1. Dockerfile
9
+ 2. Docker-Compose
10
+ 3. Rake tasks of docker
11
+ - rake docker:debug
12
+ - rake docker:up
13
+ - rake docker:build
14
+ - rake docker:release
15
+ - rake docker:bash
@@ -0,0 +1,135 @@
1
+ module Docker
2
+ class ConfigGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+
5
+ def setup
6
+ @base_image_name = ask_with_default('Which Image do you want to from(Base Image)?', default_base_image_name)
7
+ @author = ask_with_default('Who is the Author', ENV['USER'])
8
+ @service_name = ask_with_default('What is the Service Name', 'app')
9
+ db_type = %w[mongo mysql postgres]
10
+ say('what type of DB you are using:')
11
+ print_table(db_type.map.with_index { |a, i| [i + 1, a] })
12
+ default_choice = if file?('config/mongoid.yml')
13
+ 1
14
+ else
15
+ 2
16
+ end
17
+ db_select = ask_with_default('choice:', default_choice).to_i
18
+ @db_type = db_type[db_select - 1]
19
+ @db = db_content(@db_type)
20
+ @service_image_name = ask_with_default('Service Image Name ', default_service_image_name)
21
+ @docker_repo_url = ask_with_default('Your docker repo', default_docker_repo)
22
+ @secret = `rake secret`.chop
23
+ end
24
+
25
+ def create_docker_file
26
+ say('creating docker file')
27
+ @db_config_file = if @db_type == 'mongo'
28
+ 'mongoid'
29
+ else
30
+ 'database'
31
+ end
32
+ template 'Dockerfile', 'docker/Dockerfile'
33
+ end
34
+
35
+ def create_docker_ignore
36
+ content = <<-CODE
37
+ config/database.yml
38
+ config/mongoid.yml
39
+ Dockerfile
40
+ docker-compose*.yml
41
+ CODE
42
+ filename = '.dockerignore'
43
+ if file? filename
44
+ append_to_file filename, content
45
+ else
46
+ create_file filename, content
47
+ end
48
+ end
49
+
50
+ def create_git_ignore
51
+ content = <<-CODE
52
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
53
+ #
54
+ # If you find yourself ignoring temporary files generated by your text editor
55
+ # or operating system, you probably want to add a global ignore instead:
56
+ # git config --global core.excludesfile '~/.gitignore_global'
57
+
58
+ # Ignore bundler config.
59
+ /.bundle
60
+
61
+ # Ignore all logfiles and tempfiles.
62
+ .rake_tasks
63
+ /log/*
64
+ !/log/.keep
65
+ /tmp
66
+ *~
67
+ .#*
68
+ public/assets
69
+ config/settings.local.yml
70
+ config/settings/*.local.yml
71
+ config/environments/*.local.yml
72
+ config/mongoid.yml
73
+ cache
74
+ spring/*
75
+ vendor/*
76
+ CODE
77
+ filename = '.gitignore'
78
+ if file? filename
79
+ append_to_file filename, content
80
+ else
81
+ create_file filename, content
82
+ end
83
+ end
84
+
85
+ def create_docker_composer_file
86
+ say('creating docker composer file')
87
+ template 'docker-compose.yml', 'docker/docker-compose.yml'
88
+ end
89
+
90
+ def create_db_config_for_docker
91
+ if @db_type == 'mongo'
92
+ template 'mongoid.yml', 'config/mongoid.docker.yml'
93
+ else
94
+ template "database.#{@db_type}.yml", 'config/database.docker.yml'
95
+ end
96
+ end
97
+
98
+ def create_docker_composer_debug_file
99
+ say('creating docker composer debug file')
100
+ template 'docker-compose.debug.yml', 'docker/docker-compose.debug.yml'
101
+ end
102
+
103
+ def create_docker_task
104
+ say('creating docker task')
105
+ template 'docker.rake', 'lib/tasks/docker.rake'
106
+ end
107
+
108
+ private
109
+
110
+ def file?(path)
111
+ File.exist?(path)
112
+ end
113
+
114
+ def ask_with_default(statement, default_value)
115
+ answer = ask("#{statement}[#{default_value}]:", Thor::Shell::Color::BLUE)
116
+ answer.present? ? answer : default_value
117
+ end
118
+
119
+ def default_base_image_name
120
+ 'shaoyang/ruby:2.3.4'
121
+ end
122
+
123
+ def default_service_image_name
124
+ File.basename(Dir.getwd)
125
+ end
126
+
127
+ def default_docker_repo
128
+ ENV['DEFAULT_DOCKER_REPO'] || "docker.io/#{@author}"
129
+ end
130
+
131
+ def db_content(db_type)
132
+ File.read("#{source_paths.first}/#{db_type}.erb").chop
133
+ end
134
+ end
135
+ end
@@ -0,0 +1,9 @@
1
+ #**********************************************
2
+ FROM <%=@base_image_name%>
3
+ MAINTAINER <%=@author%>
4
+ ADD . /usr/src/app
5
+ ADD config/<%=@db_config_file%>.docker.yml /usr/src/app/config/<%=@db_config_file%>.yml
6
+ ENV RAILS_ENV=production
7
+ RUN bundle install --local
8
+ RUN rake assets:precompile
9
+ CMD bash -c "rake db:setup&&rails s -b0.0.0.0"
@@ -0,0 +1,31 @@
1
+ # SQLite version 3.x
2
+ # gem install sqlite3
3
+ #
4
+ # Ensure the SQLite 3 gem is defined in your Gemfile
5
+ # gem 'sqlite3'
6
+ #
7
+ default: &default
8
+ adapter: mysql2
9
+ encoding: utf8
10
+ username: root
11
+ password:
12
+ host: db
13
+ pool: 5
14
+ timeout: 5000
15
+
16
+ development:
17
+ <<: *default
18
+ database: <%=@service_image_name%>_dev
19
+
20
+ # Warning: The database defined as "test" will be erased and
21
+ # re-generated from your development database when you run "rake".
22
+ # Do not set this db to the same as development or production.
23
+ test:
24
+ <<: *default
25
+ database: <%=@service_image_name%>_test
26
+
27
+ production:
28
+ <<: *default
29
+ host: db
30
+ password:
31
+ database: <%=@service_image_name%>
@@ -0,0 +1,86 @@
1
+ # PostgreSQL. Versions 8.2 and up are supported.
2
+ #
3
+ # Install the pg driver:
4
+ # gem install pg
5
+ # On OS X with Homebrew:
6
+ # gem install pg -- --with-pg-config=/usr/local/bin/pg_config
7
+ # On OS X with MacPorts:
8
+ # gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
9
+ # On Windows:
10
+ # gem install pg
11
+ # Choose the win32 build.
12
+ # Install PostgreSQL and put its /bin directory on your path.
13
+ #
14
+ # Configure Using Gemfile
15
+ # gem 'pg'
16
+ #
17
+ default: &default
18
+ adapter: postgresql
19
+ encoding: unicode
20
+ host: db
21
+ username: postgres
22
+ # For details on connection pooling, see rails configuration guide
23
+ # http://guides.rubyonrails.org/configuring.html#database-pooling
24
+ pool: 5
25
+
26
+ development:
27
+ <<: *default
28
+ database: <%=@service_image_name%>_dev
29
+
30
+ # The specified database role being used to connect to postgres.
31
+ # To create additional roles in postgres see `$ createuser --help`.
32
+ # When left blank, postgres will use the default role. This is
33
+ # the same name as the operating system user that initialized the database.
34
+ #username: <%=@service_image_name%>
35
+
36
+ # The password associated with the postgres role (username).
37
+ #password:
38
+
39
+ # Connect on a TCP socket. Omitted by default since the client uses a
40
+ # domain socket that doesn't need configuration. Windows does not have
41
+ # domain sockets, so uncomment these lines.
42
+ #host: localhost
43
+
44
+ # The TCP port the server listens on. Defaults to 5432.
45
+ # If your server runs on a different port number, change accordingly.
46
+ #port: 5432
47
+
48
+ # Schema search path. The server defaults to $user,public
49
+ #schema_search_path: myapp,sharedapp,public
50
+
51
+ # Minimum log levels, in increasing order:
52
+ # debug5, debug4, debug3, debug2, debug1,
53
+ # log, notice, warning, error, fatal, and panic
54
+ # Defaults to warning.
55
+ #min_messages: notice
56
+
57
+ # Warning: The database defined as "test" will be erased and
58
+ # re-generated from your development database when you run "rake".
59
+ # Do not set this db to the same as development or production.
60
+ test:
61
+ <<: *default
62
+ database: <%=@service_image_name%>_test
63
+
64
+ # As with config/secrets.yml, you never want to store sensitive information,
65
+ # like your database password, in your source code. If your source code is
66
+ # ever seen by anyone, they now have access to your database.
67
+ #
68
+ # Instead, provide the password as a unix environment variable when you boot
69
+ # the app. Read http://guides.rubyonrails.org/configuring.html#configuring-a-database
70
+ # for a full rundown on how to provide these environment variables in a
71
+ # production deployment.
72
+ #
73
+ # On Heroku and other platform providers, you may have a full connection URL
74
+ # available as an environment variable. For example:
75
+ #
76
+ # DATABASE_URL="postgres://myuser:mypass@localhost/somedatabase"
77
+ #
78
+ # You can use this database configuration with:
79
+ #
80
+ # production:
81
+ # url: <%= ENV['DATABASE_URL'] %>
82
+ #
83
+ production:
84
+ <<: *default
85
+ database: <%=@service_image_name%>_prod
86
+ password:
@@ -0,0 +1,18 @@
1
+ version: '2'
2
+ volumes:
3
+ db-volume:
4
+ driver: local
5
+ services:
6
+ <%=@service_name%>:
7
+ image: <%="#{@service_image_name}"%>
8
+ environment:
9
+ - RAILS_ENV=development
10
+ links:
11
+ - db:db
12
+ volumes:
13
+ - ../:/usr/src/app
14
+ - ../config/<%=@db_config_file%>.docker.yml:/usr/src/app/config/<%=@db_config_file%>.yml
15
+ ports:
16
+ - 3000:3000/tcp
17
+ command: bash -c "rake db:setup&&tail -f /dev/null"
18
+ <%=@db%>
@@ -0,0 +1,16 @@
1
+ version: '2'
2
+ volumes:
3
+ db-volume:
4
+ driver: local
5
+ services:
6
+ <%=@service_name%>:
7
+ image: <%="#{@docker_repo_url}/#{@service_image_name}"%>
8
+ environment:
9
+ - RAILS_ENV=production
10
+ - RAILS_SERVE_STATIC_FILES=true
11
+ - SECRET_KEY_BASE=<%= @secret %>
12
+ links:
13
+ - db:db
14
+ ports:
15
+ - 3000:3000/tcp
16
+ <%=@db%>
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'thor'
4
+ class Hammer < Thor
5
+ include Thor::Actions
6
+ end
7
+
8
+ namespace :docker do
9
+ SERVICE = '<%=@service_name%>'.freeze
10
+ debug_yml = 'docker/docker-compose.debug.yml'
11
+ prod_yml = 'docker/docker-compose.yml'
12
+ docker_file = 'docker/Dockerfile'
13
+
14
+ desc 'exec bash for service container'
15
+ task :bash, [:service] do |_t, args|
16
+ exec_cmd("docker-compose -f #{debug_yml} exec #{args[:service] || SERVICE} /bin/bash")
17
+ end
18
+
19
+ desc 'destroy all services container'
20
+ task :down do |_t, _args|
21
+ exec_cmd("docker-compose -f #{debug_yml} down")
22
+ end
23
+
24
+ desc 'run rspec with docker'
25
+ task test: :up do
26
+ exec_cmd("docker-compose -f #{debug_yml}\\
27
+ exec #{SERVICE} bundle exec rspec spec --format documentation
28
+ ")
29
+ end
30
+
31
+ desc 'start service with docker with prod env'
32
+ task :run do
33
+ exec_cmd("docker-compose -f #{prod_yml} up -d")
34
+ end
35
+
36
+ desc 'start service with docker in debug mode '
37
+ task :up do
38
+ exec_cmd("docker-compose -f #{debug_yml} up -d")
39
+ end
40
+
41
+ desc 'debug service with docker '
42
+ task debug: :up do
43
+ exec_cmd("docker-compose -f #{debug_yml} exec #{SERVICE} rails s -b0.0.0.0")
44
+ end
45
+
46
+ desc 'rubocop service with docker '
47
+ task rubocop: :up do
48
+ exec_cmd("docker-compose -f #{debug_yml} exec -T #{SERVICE} rubocop -a")
49
+ end
50
+
51
+ desc 'gitpull'
52
+ task :gitpull do
53
+ exec_cmd('ggpull')
54
+ end
55
+
56
+ desc 'precheck before release'
57
+ task precommit: %i[rubocop test gitpull] do |_t, _args|
58
+ exec_cmd("docker-compose -f #{debug_yml} down")
59
+ hammer.say 'Precommit succeed.'
60
+ end
61
+
62
+ desc 'build as docker image '
63
+ task :build do
64
+ exec_cmd('bundle package --all')
65
+ exec_cmd("docker build -t <%=@service_image_name%> -f #{docker_file} .")
66
+ end
67
+
68
+ desc 'release docker image '
69
+ task :release, [:tag] do |_t, _args|
70
+ tag = _args[:tag] || 'latest'
71
+ if `docker images -f reference=<%=@service_image_name%>:#{tag} -q`.chop.present?
72
+ remote_image = "<%=@docker_repo_url%>/<%=@service_image_name%>:#{tag}"
73
+ tag_cmd = "docker tag <%=@service_image_name%> #{remote_image}"
74
+ exec_cmd(tag_cmd)
75
+ push_cmd = "docker push #{remote_image}"
76
+ exec_cmd(push_cmd)
77
+ rmi_cmd = "docker rmi #{remote_image}"
78
+ exec_cmd(rmi_cmd)
79
+ hammer.say('pls commit code and push it manually!!')
80
+ else
81
+ hammer.say('There is no local image for push')
82
+ end
83
+ end
84
+
85
+ private
86
+
87
+ def exec_cmd(cmdstr)
88
+ hammer.say cmdstr
89
+ hammer.run(cmdstr)
90
+ end
91
+
92
+ def hammer
93
+ Hammer.new
94
+ end
95
+ end
@@ -0,0 +1,7 @@
1
+ dockerserver: "registry.cn-beijing.aliyuncs.com/shaoyang_builds"
2
+ repository: "<%=file_name%>"
3
+ default_tag: "latest"
4
+ servers:
5
+ - docker.io/shaoyang
6
+ - quay.io/shaoyang_yu
7
+ - registry.cn-beijing.aliyuncs.com/shaoyang_builds
@@ -0,0 +1,6 @@
1
+ db:
2
+ image: mongo
3
+ volumes:
4
+ - db-volume:/data/db
5
+ ports:
6
+ - 27017:27017/tcp
@@ -0,0 +1,32 @@
1
+ development:
2
+ clients:
3
+ default:
4
+ database: <%=@service_image_name%>_dev
5
+ hosts:
6
+ - db:27017
7
+ options:
8
+ raise_not_found_error: false
9
+
10
+ production:
11
+ clients:
12
+ default:
13
+ database: <%=@service_image_name%>
14
+ hosts:
15
+ - db:27017
16
+ options:
17
+ raise_not_found_error: false
18
+
19
+ test:
20
+ clients:
21
+ default:
22
+ hosts:
23
+ - db:27017
24
+ database: <%=@service_image_name%>_test
25
+ options:
26
+ read: primary
27
+ # In the test environment we lower the retries and retry interval to
28
+ # low amounts for fast failures.
29
+ max_retries: 1
30
+ retry_interval: 0
31
+ options:
32
+ raise_not_found_error: false
@@ -0,0 +1,8 @@
1
+ db:
2
+ image: mysql:latest
3
+ environment:
4
+ MYSQL_ALLOW_EMPTY_PASSWORD: "true"
5
+ volumes:
6
+ - db-volume:/var/lib/mysql
7
+ ports:
8
+ - 3306:3306/tcp
@@ -0,0 +1,6 @@
1
+ db:
2
+ image: postgres
3
+ volumes:
4
+ - db-volume:/var/lib/postgresql/data
5
+ ports:
6
+ - 5432:5432/tcp
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Create Rancher environment variable for this project
3
+
4
+ Example:
5
+ rails generate rancher:config
6
+
7
+ This will create:
8
+ .envrc will be created to keep the Rancher Env variable
@@ -0,0 +1,35 @@
1
+ module Rancher
2
+ class ConfigGenerator < Rails::Generators::Base
3
+ source_root File.expand_path('../templates', __FILE__)
4
+ def setup
5
+ @url = ask('Rancher URL:[example:http://<server_ip>:8080]')
6
+ @access_key = ask('ACCESS KEY:')
7
+ @secret_key = ask('SECRET KEY:')
8
+ @environment = ask('Enviroment Id Or Name:')
9
+ @debug = false
10
+ end
11
+
12
+ def create_rancher_wrapper
13
+ template 'rancher', 'bin/rancher'
14
+ run('chmod +x bin/rancher')
15
+ end
16
+
17
+ private
18
+
19
+ def create_env_var
20
+ generate('direnv:config') unless file?('.envrc')
21
+ content = <<-CODE
22
+ export RANCHER_URL=#{@url}
23
+ export RANCHER_ACCESS_KEY=#{@access_key}
24
+ export RANCHER_SECRET_KEY=#{@secret_key}
25
+ export RANCHER_ENVIORONMENT=#{@environment}
26
+ export RANCHER_CLIENT_DEBUG=#{@debug}
27
+ CODE
28
+ append_to_file '.envrc', content
29
+ end
30
+
31
+ def file?(path)
32
+ File.exist?(path)
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,6 @@
1
+ #!/bin/bash
2
+ rancher --url <%=@RANCHER_URL%>\
3
+ --access-key <%=@RANCHER_ACCESS_KEY%>\
4
+ --secret-key <%=@RANCHER_SECRET_KEY%>\
5
+ --env <%=@RANCHER_ENVIORONMENT%>\
6
+ $@
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Enable Rspec and it's config for the project
3
+
4
+ Example:
5
+ rails generate rspec:config
6
+
7
+ This will create:
8
+ Adding related gems and generators config in application and config of rails_help in rspec