generators_rails 0.0.1

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.
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