├── test ├── dummy │ ├── log │ │ └── .keep │ ├── bin │ │ ├── rake │ │ ├── bundle │ │ ├── rails │ │ └── setup │ ├── config.ru │ ├── config │ │ ├── initializers │ │ │ ├── cookies_serializer.rb │ │ │ ├── session_store.rb │ │ │ ├── mime_types.rb │ │ │ ├── filter_parameter_logging.rb │ │ │ ├── backtrace_silencers.rb │ │ │ ├── assets.rb │ │ │ ├── wrap_parameters.rb │ │ │ └── inflections.rb │ │ ├── environment.rb │ │ ├── boot.rb │ │ ├── database.yml │ │ ├── locales │ │ │ └── en.yml │ │ ├── secrets.yml │ │ ├── application.rb │ │ ├── environments │ │ │ ├── development.rb │ │ │ ├── test.rb │ │ │ └── production.rb │ │ └── routes.rb │ ├── Rakefile │ └── db │ │ └── schema.rb ├── test_helper.rb └── generators │ ├── poro_generator_test.rb │ ├── form_generator_test.rb │ ├── service_generator_test.rb │ └── policy_generator_test.rb ├── .travis.yml ├── lib ├── pattern_generator │ └── version.rb ├── generators │ ├── form │ │ ├── templates │ │ │ ├── form.rb │ │ │ ├── form_test.rb │ │ │ └── form_spec.rb │ │ └── form_generator.rb │ ├── poro │ │ ├── templates │ │ │ ├── poro.rb │ │ │ ├── poro_test.rb │ │ │ └── poro_spec.rb │ │ └── poro_generator.rb │ ├── policy │ │ ├── templates │ │ │ ├── policy.rb │ │ │ ├── policy_test.rb │ │ │ └── policy_spec.rb │ │ └── policy_generator.rb │ ├── service │ │ ├── templates │ │ │ ├── service.rb │ │ │ ├── service_test.rb │ │ │ └── service_spec.rb │ │ └── service_generator.rb │ └── base_generator.rb ├── tasks │ └── pattern_generator_tasks.rake └── pattern_generator.rb ├── release_guide.md ├── .gitignore ├── Gemfile ├── Rakefile ├── pattern_generator.gemspec ├── CHANGELOG.md ├── MIT-LICENSE ├── code_of_conduct.md ├── README.md └── Gemfile.lock /test/dummy/log/.keep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: ruby 2 | rvm: 2.2.2 3 | cache: bundler 4 | -------------------------------------------------------------------------------- /lib/pattern_generator/version.rb: -------------------------------------------------------------------------------- 1 | module PatternGenerator 2 | VERSION = "0.1.0" 3 | end 4 | -------------------------------------------------------------------------------- /lib/generators/form/templates/form.rb: -------------------------------------------------------------------------------- 1 | class <%= class_name %> 2 | def initialize 3 | 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /lib/generators/poro/templates/poro.rb: -------------------------------------------------------------------------------- 1 | class <%= class_name %> 2 | def initialize 3 | 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /lib/generators/policy/templates/policy.rb: -------------------------------------------------------------------------------- 1 | class <%= class_name %> 2 | def initialize 3 | 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /lib/generators/service/templates/service.rb: -------------------------------------------------------------------------------- 1 | class <%= class_name %> 2 | def initialize 3 | 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /test/dummy/bin/rake: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require_relative '../config/boot' 3 | require 'rake' 4 | Rake.application.run 5 | -------------------------------------------------------------------------------- /lib/tasks/pattern_generator_tasks.rake: -------------------------------------------------------------------------------- 1 | # desc "Explaining what the task does" 2 | # task :pattern_generator do 3 | # # Task goes here 4 | # end 5 | -------------------------------------------------------------------------------- /test/dummy/bin/bundle: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../Gemfile', __FILE__) 3 | load Gem.bin_path('bundler', 'bundle') 4 | -------------------------------------------------------------------------------- /lib/generators/form/templates/form_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class <%= class_name %>Test < Minitest::Test 4 | def test_call 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /lib/generators/poro/templates/poro_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class <%= class_name %>Test < MiniTest::Test 4 | def test_something 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /lib/generators/policy/templates/policy_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class <%= class_name %>Test < Minitest::Test 4 | def test_something 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /lib/generators/service/templates/service_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class <%= class_name %>Test < Minitest::Test 4 | def test_call 5 | 6 | end 7 | end 8 | -------------------------------------------------------------------------------- /lib/generators/form/templates/form_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | RSpec.describe <%= class_name %>, type: :form do 4 | pending "Add some tests to #{__FILE__}" 5 | end 6 | -------------------------------------------------------------------------------- /test/dummy/bin/rails: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | APP_PATH = File.expand_path('../../config/application', __FILE__) 3 | require_relative '../config/boot' 4 | require 'rails/commands' 5 | -------------------------------------------------------------------------------- /lib/generators/policy/templates/policy_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | RSpec.describe <%= class_name %>, type: :policy do 4 | pending "Add some tests to #{__FILE__}" 5 | end 6 | -------------------------------------------------------------------------------- /lib/generators/service/templates/service_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | RSpec.describe <%= class_name %>, type: :service do 4 | pending "Add some tests to #{__FILE__}" 5 | end 6 | -------------------------------------------------------------------------------- /release_guide.md: -------------------------------------------------------------------------------- 1 | # Release Guide 2 | 3 | - Bump version in `lib/pattern_generator/version.rb` 4 | - Commit 5 | 6 | ``` 7 | bundle install 8 | bundle exec rake release 9 | ``` 10 | -------------------------------------------------------------------------------- /test/dummy/config.ru: -------------------------------------------------------------------------------- 1 | # This file is used by Rack-based servers to start the application. 2 | 3 | require ::File.expand_path('../config/environment', __FILE__) 4 | run Rails.application 5 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/cookies_serializer.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | Rails.application.config.action_dispatch.cookies_serializer = :json 4 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/session_store.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | Rails.application.config.session_store :cookie_store, key: '_dummy_session' 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .bundle/ 2 | log/*.log 3 | pkg/ 4 | test/dummy/db/*.sqlite3 5 | test/dummy/db/*.sqlite3-journal 6 | test/dummy/log/*.log 7 | test/dummy/tmp/ 8 | test/dummy/.sass-cache 9 | *.gem 10 | -------------------------------------------------------------------------------- /test/dummy/config/environment.rb: -------------------------------------------------------------------------------- 1 | # Load the Rails application. 2 | require File.expand_path('../application', __FILE__) 3 | 4 | # Initialize the Rails application. 5 | Rails.application.initialize! 6 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/mime_types.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new mime types for use in respond_to blocks: 4 | # Mime::Type.register "text/richtext", :rtf 5 | -------------------------------------------------------------------------------- /lib/generators/form/form_generator.rb: -------------------------------------------------------------------------------- 1 | class FormGenerator < BaseGenerator 2 | source_root File.expand_path("../templates", __FILE__) 3 | 4 | private 5 | 6 | def pattern_name 7 | "form" 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /lib/generators/poro/templates/poro_spec.rb: -------------------------------------------------------------------------------- 1 | require 'rails_helper' 2 | 3 | RSpec.describe <%= class_name %> do 4 | describe 'something' do 5 | it 'does something' do 6 | 7 | end 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /lib/generators/policy/policy_generator.rb: -------------------------------------------------------------------------------- 1 | class PolicyGenerator < BaseGenerator 2 | source_root File.expand_path('../templates', __FILE__) 3 | 4 | private 5 | 6 | def pattern_name 7 | "policy" 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /lib/generators/service/service_generator.rb: -------------------------------------------------------------------------------- 1 | class ServiceGenerator < BaseGenerator 2 | source_root File.expand_path('../templates', __FILE__) 3 | 4 | private 5 | 6 | def pattern_name 7 | "service" 8 | end 9 | end 10 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/filter_parameter_logging.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Configure sensitive parameters which will be filtered from the log file. 4 | Rails.application.config.filter_parameters += [:password] 5 | -------------------------------------------------------------------------------- /test/dummy/config/boot.rb: -------------------------------------------------------------------------------- 1 | # Set up gems listed in the Gemfile. 2 | ENV['BUNDLE_GEMFILE'] ||= File.expand_path('../../../../Gemfile', __FILE__) 3 | 4 | require 'bundler/setup' if File.exist?(ENV['BUNDLE_GEMFILE']) 5 | $LOAD_PATH.unshift File.expand_path('../../../../lib', __FILE__) 6 | -------------------------------------------------------------------------------- /test/dummy/Rakefile: -------------------------------------------------------------------------------- 1 | # Add your own tasks in files placed in lib/tasks ending in .rake, 2 | # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake. 3 | 4 | require File.expand_path('../config/application', __FILE__) 5 | 6 | Rails.application.load_tasks 7 | -------------------------------------------------------------------------------- /lib/pattern_generator.rb: -------------------------------------------------------------------------------- 1 | require "rails/generators" 2 | 3 | require_relative "./generators/base_generator" 4 | 5 | %w(form policy poro service).each do |pattern| 6 | require_relative "./generators/#{pattern}/#{pattern}_generator" 7 | end 8 | 9 | module PatternGenerator 10 | end 11 | -------------------------------------------------------------------------------- /lib/generators/poro/poro_generator.rb: -------------------------------------------------------------------------------- 1 | class PoroGenerator < BaseGenerator 2 | source_root File.expand_path('../templates', __FILE__) 3 | 4 | private 5 | 6 | def folder_name 7 | "models" 8 | end 9 | 10 | def pattern_name 11 | "poro" 12 | end 13 | 14 | def suffix 15 | "" 16 | end 17 | end 18 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/backtrace_silencers.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # You can add backtrace silencers for libraries that you're using but don't wish to see in your backtraces. 4 | # Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ } 5 | 6 | # You can also remove all the silencers if you're trying to debug a problem that might stem from framework code. 7 | # Rails.backtrace_cleaner.remove_silencers! 8 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/assets.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Version of your assets, change this if you want to expire all your assets. 4 | Rails.application.config.assets.version = '1.0' 5 | 6 | # Add additional assets to the asset load path 7 | # Rails.application.config.assets.paths << Emoji.images_path 8 | 9 | # Precompile additional assets. 10 | # application.js, application.css, and all non-JS/CSS in app/assets folder are already added. 11 | # Rails.application.config.assets.precompile += %w( search.js ) 12 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/wrap_parameters.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # This file contains settings for ActionController::ParamsWrapper which 4 | # is enabled by default. 5 | 6 | # Enable parameter wrapping for JSON. You can disable this by setting :format to an empty array. 7 | ActiveSupport.on_load(:action_controller) do 8 | wrap_parameters format: [:json] if respond_to?(:wrap_parameters) 9 | end 10 | 11 | # To enable root element in JSON for ActiveRecord objects. 12 | # ActiveSupport.on_load(:active_record) do 13 | # self.include_root_in_json = true 14 | # end 15 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | # Declare your gem's dependencies in pattern_generator.gemspec. 4 | # Bundler will treat runtime dependencies like base dependencies, and 5 | # development dependencies will be added by default to the :development group. 6 | gemspec 7 | 8 | # Declare any dependencies that are still in development here instead of in 9 | # your gemspec. These might include edge Rails or gems from your path or 10 | # Git. Remember to move these dependencies to your gemspec before releasing 11 | # your gem to rubygems.org. 12 | 13 | # To use a debugger 14 | # gem 'byebug', group: [:development, :test] 15 | 16 | -------------------------------------------------------------------------------- /test/dummy/config/database.yml: -------------------------------------------------------------------------------- 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: sqlite3 9 | pool: 5 10 | timeout: 5000 11 | 12 | development: 13 | <<: *default 14 | database: db/development.sqlite3 15 | 16 | # Warning: The database defined as "test" will be erased and 17 | # re-generated from your development database when you run "rake". 18 | # Do not set this db to the same as development or production. 19 | test: 20 | <<: *default 21 | database: db/test.sqlite3 22 | 23 | production: 24 | <<: *default 25 | database: db/production.sqlite3 26 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | begin 2 | require 'bundler/setup' 3 | rescue LoadError 4 | puts 'You must `gem install bundler` and `bundle install` to run rake tasks' 5 | end 6 | 7 | require 'rdoc/task' 8 | 9 | RDoc::Task.new(:rdoc) do |rdoc| 10 | rdoc.rdoc_dir = 'rdoc' 11 | rdoc.title = 'PatternGenerator' 12 | rdoc.options << '--line-numbers' 13 | rdoc.rdoc_files.include('README.rdoc') 14 | rdoc.rdoc_files.include('lib/**/*.rb') 15 | end 16 | 17 | Bundler::GemHelper.install_tasks 18 | 19 | require 'rake/testtask' 20 | 21 | Rake::TestTask.new(:test) do |t| 22 | t.libs << 'lib' 23 | t.libs << 'test' 24 | t.pattern = 'test/**/*_test.rb' 25 | t.verbose = false 26 | end 27 | 28 | 29 | task default: :test 30 | -------------------------------------------------------------------------------- /test/dummy/config/initializers/inflections.rb: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Add new inflection rules using the following format. Inflections 4 | # are locale specific, and you may define rules for as many different 5 | # locales as you wish. All of these examples are active by default: 6 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 7 | # inflect.plural /^(ox)$/i, '\1en' 8 | # inflect.singular /^(ox)en/i, '\1' 9 | # inflect.irregular 'person', 'people' 10 | # inflect.uncountable %w( fish sheep ) 11 | # end 12 | 13 | # These inflection rules are supported but not enabled by default: 14 | # ActiveSupport::Inflector.inflections(:en) do |inflect| 15 | # inflect.acronym 'RESTful' 16 | # end 17 | -------------------------------------------------------------------------------- /test/dummy/config/locales/en.yml: -------------------------------------------------------------------------------- 1 | # Files in the config/locales directory are used for internationalization 2 | # and are automatically loaded by Rails. If you want to use locales other 3 | # than English, add the necessary files in this directory. 4 | # 5 | # To use the locales, use `I18n.t`: 6 | # 7 | # I18n.t 'hello' 8 | # 9 | # In views, this is aliased to just `t`: 10 | # 11 | # <%= t('hello') %> 12 | # 13 | # To use a different locale, set it with `I18n.locale`: 14 | # 15 | # I18n.locale = :es 16 | # 17 | # This would use the information in config/locales/es.yml. 18 | # 19 | # To learn more, please read the Rails Internationalization guide 20 | # available at http://guides.rubyonrails.org/i18n.html. 21 | 22 | en: 23 | hello: "Hello world" 24 | -------------------------------------------------------------------------------- /test/test_helper.rb: -------------------------------------------------------------------------------- 1 | # Configure Rails Environment 2 | ENV["RAILS_ENV"] = "test" 3 | 4 | require "byebug" 5 | 6 | require File.expand_path("../../test/dummy/config/environment.rb", __FILE__) 7 | 8 | require "rails/test_help" 9 | 10 | ActiveRecord::Migrator.migrations_paths = [File.expand_path("../../test/dummy/db/migrate", __FILE__)] 11 | 12 | # Filter out Minitest backtrace while allowing backtrace from other libraries 13 | # to be shown. 14 | Minitest.backtrace_filter = Minitest::BacktraceFilter.new 15 | 16 | # Load support files 17 | Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f } 18 | 19 | # Load fixtures from the engine 20 | if ActiveSupport::TestCase.respond_to?(:fixture_path=) 21 | ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__) 22 | ActiveSupport::TestCase.fixtures :all 23 | end 24 | 25 | -------------------------------------------------------------------------------- /test/dummy/db/schema.rb: -------------------------------------------------------------------------------- 1 | # encoding: UTF-8 2 | # This file is auto-generated from the current state of the database. Instead 3 | # of editing this file, please use the migrations feature of Active Record to 4 | # incrementally modify your database, and then regenerate this schema definition. 5 | # 6 | # Note that this schema.rb definition is the authoritative source for your 7 | # database schema. If you need to create the application database on another 8 | # system, you should be using db:schema:load, not running all the migrations 9 | # from scratch. The latter is a flawed and unsustainable approach (the more migrations 10 | # you'll amass, the slower it'll run and the greater likelihood for issues). 11 | # 12 | # It's strongly recommended that you check this file into your version control system. 13 | 14 | ActiveRecord::Schema.define(version: 0) do 15 | 16 | end 17 | -------------------------------------------------------------------------------- /test/dummy/bin/setup: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env ruby 2 | require 'pathname' 3 | 4 | # path to your application root. 5 | APP_ROOT = Pathname.new File.expand_path('../../', __FILE__) 6 | 7 | Dir.chdir APP_ROOT do 8 | # This script is a starting point to setup your application. 9 | # Add necessary setup steps to this file: 10 | 11 | puts "== Installing dependencies ==" 12 | system "gem install bundler --conservative" 13 | system "bundle check || bundle install" 14 | 15 | # puts "\n== Copying sample files ==" 16 | # unless File.exist?("config/database.yml") 17 | # system "cp config/database.yml.sample config/database.yml" 18 | # end 19 | 20 | puts "\n== Preparing database ==" 21 | system "bin/rake db:setup" 22 | 23 | puts "\n== Removing old logs and tempfiles ==" 24 | system "rm -f log/*" 25 | system "rm -rf tmp/cache" 26 | 27 | puts "\n== Restarting application server ==" 28 | system "touch tmp/restart.txt" 29 | end 30 | -------------------------------------------------------------------------------- /pattern_generator.gemspec: -------------------------------------------------------------------------------- 1 | $:.push File.expand_path("../lib", __FILE__) 2 | 3 | # Maintain your gem's version: 4 | require "pattern_generator/version" 5 | 6 | # Describe your gem and declare its dependencies: 7 | Gem::Specification.new do |s| 8 | s.name = "pattern_generator" 9 | s.version = PatternGenerator::VERSION 10 | s.authors = ["Sung Won Cho"] 11 | s.email = ["mikeswcho@gmail.com"] 12 | s.homepage = "https://github.com/sungwoncho/pattern_generator" 13 | s.summary = "The missing generators for Rails design patterns." 14 | s.description = "Pattern generator provides you with convenient commands to generate patterns in your Rails app." 15 | s.license = "MIT" 16 | 17 | s.files = Dir["{app,config,db,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.rdoc"] 18 | s.test_files = Dir["test/**/*"] 19 | 20 | s.add_dependency "rails", ">= 4.0.0" 21 | 22 | s.add_development_dependency "sqlite3" 23 | s.add_development_dependency "byebug" 24 | s.add_development_dependency "rake" 25 | end 26 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) 5 | and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). 6 | 7 | ## [0.1.0] - 2017-08-07 8 | 9 | ### Added 10 | - `--minitest` option to specify you're using MiniTest. 11 | - `--rspec` option to specify you're using RSpec. It is the default behaviour. 12 | - `--no-suffix` option to specify you don't want any suffixes. 13 | - Form pattern generator 14 | - Generated classes and file names will no longer have suffixes. 15 | ``` 16 | $ rails g form registration 17 | ``` 18 | The above command used to generate `app/forms/registration_form.rb`. Now it will generate `app/forms/registration.rb`. 19 | 20 | If you do want suffixes, you'll need to declare them explicicity. 21 | 22 | ### Changed 23 | - Get back to using suffixes by default. 24 | 25 | ### Removed 26 | - `--test-suite` option to specify which test suite you're using. 27 | 28 | -------------------------------------------------------------------------------- /test/dummy/config/secrets.yml: -------------------------------------------------------------------------------- 1 | # Be sure to restart your server when you modify this file. 2 | 3 | # Your secret key is used for verifying the integrity of signed cookies. 4 | # If you change this key, all old signed cookies will become invalid! 5 | 6 | # Make sure the secret is at least 30 characters and all random, 7 | # no regular words or you'll be exposed to dictionary attacks. 8 | # You can use `rake secret` to generate a secure secret key. 9 | 10 | # Make sure the secrets in this file are kept private 11 | # if you're sharing your code publicly. 12 | 13 | development: 14 | secret_key_base: 11d132c442c624850a339dca72ead7f5d3352cfa2401e6d25c1fd8d6b431c9eb14923579c948a38bb028e4a7fb9da64728a3a080c8dcb571697be74da7997e21 15 | 16 | test: 17 | secret_key_base: e45f1a2e24cc8a3c6228f1ba2bf645bedd1915464237320564159b8f007476500102e7ac7f8867e74267243fcc2f8a2d61cf5ef9621e01fe6bb3dd43918627af 18 | 19 | # Do not keep production secrets in the repository, 20 | # instead read values from the environment. 21 | production: 22 | secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 23 | -------------------------------------------------------------------------------- /test/dummy/config/application.rb: -------------------------------------------------------------------------------- 1 | require File.expand_path('../boot', __FILE__) 2 | 3 | require 'rails/all' 4 | 5 | Bundler.require(*Rails.groups) 6 | require "pattern_generator" 7 | 8 | module Dummy 9 | class Application < Rails::Application 10 | # Settings in config/environments/* take precedence over those specified here. 11 | # Application configuration should go into files in config/initializers 12 | # -- all .rb files in that directory are automatically loaded. 13 | 14 | # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone. 15 | # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC. 16 | # config.time_zone = 'Central Time (US & Canada)' 17 | 18 | # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded. 19 | # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s] 20 | # config.i18n.default_locale = :de 21 | 22 | # Do not swallow errors in after_commit/after_rollback callbacks. 23 | end 24 | end 25 | 26 | -------------------------------------------------------------------------------- /MIT-LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2015 Sung Won Cho 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /test/generators/poro_generator_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class PoroGeneratorTest < Rails::Generators::TestCase 4 | tests PoroGenerator 5 | 6 | destination File.join(Rails.root) 7 | teardown :cleanup 8 | 9 | def cleanup 10 | FileUtils.rm_rf(File.join(Rails.root, 'app/models')) 11 | FileUtils.rm_rf(File.join(Rails.root, 'spec/models')) 12 | FileUtils.rm_rf(File.join(Rails.root, 'test/models')) 13 | end 14 | 15 | test 'correct file is generated' do 16 | run_generator %w(grade) 17 | 18 | assert_file 'app/models/grade.rb' do |content| 19 | assert_match /class Grade/, content 20 | assert_no_match /ActiveRecord::Base/, content 21 | end 22 | end 23 | 24 | test 'rspec file is generated' do 25 | run_generator %w(grade) 26 | 27 | assert_file 'spec/models/grade_spec.rb' do |content| 28 | assert_match /RSpec.describe Grade do/, content 29 | end 30 | end 31 | 32 | test 'minitest file is generated when test-suite is minitest' do 33 | run_generator %w(grade --minitest) 34 | 35 | assert_file 'test/models/grade_test.rb' do |content| 36 | assert_match /class GradeTest < MiniTest::Test/, content 37 | end 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /code_of_conduct.md: -------------------------------------------------------------------------------- 1 | # Contributor Code of Conduct 2 | 3 | As contributors and maintainers of this project, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities. 4 | 5 | We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, or religion. 6 | 7 | Examples of unacceptable behavior by participants include the use of sexual language or imagery, derogatory comments or personal attacks, trolling, public or private harassment, insults, or other unprofessional conduct. 8 | 9 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. Project maintainers who do not follow the Code of Conduct may be removed from the project team. 10 | 11 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers. 12 | 13 | This Code of Conduct is adapted from the [Contributor Covenant](http:contributor-covenant.org), version 1.0.0, available at [http://contributor-covenant.org/version/1/0/0/](http://contributor-covenant.org/version/1/0/0/) 14 | -------------------------------------------------------------------------------- /test/dummy/config/environments/development.rb: -------------------------------------------------------------------------------- 1 | Rails.application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # In the development environment your application's code is reloaded on 5 | # every request. This slows down response time but is perfect for development 6 | # since you don't have to restart the web server when you make code changes. 7 | config.cache_classes = false 8 | 9 | # Do not eager load code on boot. 10 | config.eager_load = false 11 | 12 | # Show full error reports and disable caching. 13 | config.consider_all_requests_local = true 14 | config.action_controller.perform_caching = false 15 | 16 | # Don't care if the mailer can't send. 17 | config.action_mailer.raise_delivery_errors = false 18 | 19 | # Print deprecation notices to the Rails logger. 20 | config.active_support.deprecation = :log 21 | 22 | # Raise an error on page load if there are pending migrations. 23 | config.active_record.migration_error = :page_load 24 | 25 | # Debug mode disables concatenation and preprocessing of assets. 26 | # This option may cause significant delays in view rendering with a large 27 | # number of complex assets. 28 | config.assets.debug = true 29 | 30 | # Asset digests allow you to set far-future HTTP expiration dates on all assets, 31 | # yet still be able to expire them through the digest params. 32 | config.assets.digest = true 33 | 34 | # Adds additional error checking when serving assets at runtime. 35 | # Checks for improperly declared sprockets dependencies. 36 | # Raises helpful error messages. 37 | config.assets.raise_runtime_errors = true 38 | 39 | # Raises error for missing translations 40 | # config.action_view.raise_on_missing_translations = true 41 | end 42 | -------------------------------------------------------------------------------- /test/generators/form_generator_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class FormGeneratorTest < Rails::Generators::TestCase 4 | tests FormGenerator 5 | 6 | destination File.join(Rails.root) 7 | teardown :cleanup 8 | 9 | def cleanup 10 | FileUtils.rm_rf(File.join(Rails.root, 'app/forms')) 11 | FileUtils.rm_rf(File.join(Rails.root, 'spec/forms')) 12 | FileUtils.rm_rf(File.join(Rails.root, 'test/forms')) 13 | end 14 | 15 | test 'correct file is generated' do 16 | run_generator %w(registration) 17 | 18 | assert_file 'app/forms/registration_form.rb' do |content| 19 | assert_match /RegistrationForm/, content 20 | assert_match /def initialize/, content 21 | end 22 | end 23 | 24 | test 'correct spec file is generated' do 25 | run_generator %w(registration) 26 | 27 | assert_file 'spec/forms/registration_form_spec.rb' do |content| 28 | assert_match /RSpec.describe RegistrationForm, type: :form/, content 29 | assert_match /pending/, content 30 | end 31 | end 32 | 33 | test 'generates minitest file if --minitest options is passed' do 34 | run_generator %w(registration --minitest) 35 | 36 | assert_file 'test/forms/registration_form_test.rb' do |content| 37 | assert_match /class RegistrationFormTest < Minitest::Test/, content 38 | end 39 | end 40 | 41 | test 'generates files with no suffixes if --no-sufix option is passed' do 42 | run_generator %w(registration --no-suffix) 43 | 44 | assert_file 'app/forms/registration.rb' do |content| 45 | assert_match /Registration/, content 46 | assert_match /def initialize/, content 47 | end 48 | 49 | assert_file 'spec/forms/registration_spec.rb' do |content| 50 | assert_match /RSpec.describe Registration, type: :form/, content 51 | end 52 | end 53 | end 54 | -------------------------------------------------------------------------------- /test/generators/service_generator_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class ServiceGeneratorTest < Rails::Generators::TestCase 4 | tests ServiceGenerator 5 | 6 | destination File.join(Rails.root) 7 | teardown :cleanup 8 | 9 | def cleanup 10 | FileUtils.rm_rf(File.join(Rails.root, 'app/services')) 11 | FileUtils.rm_rf(File.join(Rails.root, 'spec/services')) 12 | FileUtils.rm_rf(File.join(Rails.root, 'test/services')) 13 | end 14 | 15 | test 'correct file is generated' do 16 | run_generator %w(find_match) 17 | 18 | assert_file 'app/services/find_match_service.rb' do |content| 19 | assert_match /class FindMatchService/, content 20 | assert_match /def initialize/, content 21 | end 22 | end 23 | 24 | test 'correct spec file is generated' do 25 | run_generator %w(find_match) 26 | 27 | assert_file 'spec/services/find_match_service_spec.rb' do |content| 28 | assert_match /RSpec.describe FindMatchService, type: :service/, content 29 | assert_match /pending/, content 30 | end 31 | end 32 | 33 | test 'generates minitest file if test-framework is minitest' do 34 | run_generator %w(find_match --minitest) 35 | 36 | assert_file 'test/services/find_match_service_test.rb' do |content| 37 | assert_match /class FindMatchServiceTest < Minitest::Test/, content 38 | end 39 | end 40 | 41 | test 'generates files with no suffixes if --no-sufix option is passed' do 42 | run_generator %w(find_match --no-suffix) 43 | 44 | assert_file 'app/services/find_match.rb' do |content| 45 | assert_match /FindMatch/, content 46 | assert_match /def initialize/, content 47 | end 48 | 49 | assert_file 'spec/services/find_match_spec.rb' do |content| 50 | assert_match /RSpec.describe FindMatch, type: :service/, content 51 | end 52 | end 53 | end 54 | -------------------------------------------------------------------------------- /test/generators/policy_generator_test.rb: -------------------------------------------------------------------------------- 1 | require 'test_helper' 2 | 3 | class PolicyGeneratorTest < Rails::Generators::TestCase 4 | tests PolicyGenerator 5 | 6 | destination File.join(Rails.root) 7 | teardown :cleanup 8 | 9 | def cleanup 10 | FileUtils.rm_rf(File.join(Rails.root, 'app/policies')) 11 | FileUtils.rm_rf(File.join(Rails.root, 'spec/policies')) 12 | FileUtils.rm_rf(File.join(Rails.root, 'test/policies')) 13 | end 14 | 15 | 16 | test "correct file is generated" do 17 | run_generator %w(active_user) 18 | 19 | assert_file 'app/policies/active_user_policy.rb' do |content| 20 | assert_match /class ActiveUserPolicy/, content 21 | assert_match /def initialize/, content 22 | end 23 | end 24 | 25 | test "rspec file is generated" do 26 | run_generator %w(active_user) 27 | 28 | assert_file 'spec/policies/active_user_policy_spec.rb' do |content| 29 | assert_match /RSpec.describe ActiveUserPolicy, type: :policy do/, content 30 | assert_match /pending/, content 31 | end 32 | end 33 | 34 | test "if minitest is specified, minitest file is generated" do 35 | run_generator %w(active_user --minitest) 36 | 37 | assert_file 'test/policies/active_user_policy_test.rb' do |content| 38 | assert_match /class ActiveUserPolicyTest < Minitest::Test/, content 39 | end 40 | end 41 | 42 | test 'generates files with no suffixes if --no-sufix option is passed' do 43 | run_generator %w(active_user --no-suffix) 44 | 45 | assert_file 'app/policies/active_user.rb' do |content| 46 | assert_match /ActiveUser/, content 47 | assert_match /def initialize/, content 48 | end 49 | 50 | assert_file 'spec/policies/active_user_spec.rb' do |content| 51 | assert_match /RSpec.describe ActiveUser, type: :policy/, content 52 | end 53 | end 54 | end 55 | -------------------------------------------------------------------------------- /test/dummy/config/routes.rb: -------------------------------------------------------------------------------- 1 | Rails.application.routes.draw do 2 | # The priority is based upon order of creation: first created -> highest priority. 3 | # See how all your routes lay out with "rake routes". 4 | 5 | # You can have the root of your site routed with "root" 6 | # root 'welcome#index' 7 | 8 | # Example of regular route: 9 | # get 'products/:id' => 'catalog#view' 10 | 11 | # Example of named route that can be invoked with purchase_url(id: product.id) 12 | # get 'products/:id/purchase' => 'catalog#purchase', as: :purchase 13 | 14 | # Example resource route (maps HTTP verbs to controller actions automatically): 15 | # resources :products 16 | 17 | # Example resource route with options: 18 | # resources :products do 19 | # member do 20 | # get 'short' 21 | # post 'toggle' 22 | # end 23 | # 24 | # collection do 25 | # get 'sold' 26 | # end 27 | # end 28 | 29 | # Example resource route with sub-resources: 30 | # resources :products do 31 | # resources :comments, :sales 32 | # resource :seller 33 | # end 34 | 35 | # Example resource route with more complex sub-resources: 36 | # resources :products do 37 | # resources :comments 38 | # resources :sales do 39 | # get 'recent', on: :collection 40 | # end 41 | # end 42 | 43 | # Example resource route with concerns: 44 | # concern :toggleable do 45 | # post 'toggle' 46 | # end 47 | # resources :posts, concerns: :toggleable 48 | # resources :photos, concerns: :toggleable 49 | 50 | # Example resource route within a namespace: 51 | # namespace :admin do 52 | # # Directs /admin/products/* to Admin::ProductsController 53 | # # (app/controllers/admin/products_controller.rb) 54 | # resources :products 55 | # end 56 | end 57 | -------------------------------------------------------------------------------- /test/dummy/config/environments/test.rb: -------------------------------------------------------------------------------- 1 | Rails.application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # The test environment is used exclusively to run your application's 5 | # test suite. You never need to work with it otherwise. Remember that 6 | # your test database is "scratch space" for the test suite and is wiped 7 | # and recreated between test runs. Don't rely on the data there! 8 | config.cache_classes = true 9 | 10 | # Do not eager load code on boot. This avoids loading your whole application 11 | # just for the purpose of running a single test. If you are using a tool that 12 | # preloads Rails for running tests, you may have to set it to true. 13 | config.eager_load = false 14 | 15 | # Configure static file server for tests with Cache-Control for performance. 16 | config.serve_static_files = true 17 | config.static_cache_control = 'public, max-age=3600' 18 | 19 | # Show full error reports and disable caching. 20 | config.consider_all_requests_local = true 21 | config.action_controller.perform_caching = false 22 | 23 | # Raise exceptions instead of rendering exception templates. 24 | config.action_dispatch.show_exceptions = false 25 | 26 | # Disable request forgery protection in test environment. 27 | config.action_controller.allow_forgery_protection = false 28 | 29 | # Tell Action Mailer not to deliver emails to the real world. 30 | # The :test delivery method accumulates sent emails in the 31 | # ActionMailer::Base.deliveries array. 32 | config.action_mailer.delivery_method = :test 33 | 34 | # Randomize the order test cases are executed. 35 | config.active_support.test_order = :random 36 | 37 | # Print deprecation notices to the stderr. 38 | config.active_support.deprecation = :stderr 39 | 40 | # Raises error for missing translations 41 | # config.action_view.raise_on_missing_translations = true 42 | end 43 | -------------------------------------------------------------------------------- /lib/generators/base_generator.rb: -------------------------------------------------------------------------------- 1 | require "active_support/inflector" 2 | 3 | # Base class for all generators to come. If you want to override some behaviour, all you 4 | # got to do is override a method in the child class. 5 | class BaseGenerator < Rails::Generators::NamedBase 6 | class_option :rspec, type: :boolean, desc: 'DEFAULT: Define rspec as your test framework.' 7 | class_option :minitest, type: :boolean, desc: 'Test framework to generate test. (rspec or minitest)' 8 | class_option :no_suffix, type: :boolean, desc: "If you don't want any pattern suffix. Ex: AuthenticationService. Service is the suffix." 9 | 10 | # Creates the file for the requested pattern based on a template file. 11 | def copy_pattern_file 12 | template "#{pattern_name}.rb", generated_file_path 13 | end 14 | 15 | # Creates the test file for the request pattern based on a template file. 16 | def copy_pattern_test_file 17 | template "#{pattern_name}_#{test_suite_identifier}.rb", generated_test_file_path 18 | end 19 | 20 | private 21 | 22 | # Determines the class name based on the file name given by the user. 23 | def class_name 24 | file_name.classify + suffix.classify 25 | end 26 | 27 | # This method must be overrided in the child classes. 28 | def pattern_name 29 | raise NotImplementedError 30 | end 31 | 32 | def folder_name 33 | pattern_name.pluralize 34 | end 35 | 36 | # Generates the pattern suffix. 37 | # Ex: _service 38 | def suffix 39 | options.no_suffix? ? "" : "_#{pattern_name}" 40 | end 41 | 42 | # Generates the file path. 43 | # Ex: app/services/authentication.rb 44 | def generated_file_path 45 | "app/#{folder_name}/#{file_name}#{suffix}.rb" 46 | end 47 | 48 | def test_suite_identifier 49 | identifier = "spec" 50 | identifier = "test" if options.minitest? 51 | identifier 52 | end 53 | 54 | # Generates the test file path. 55 | # Ex: spec/services/authentication_spec.rb 56 | def generated_test_file_path 57 | "#{test_suite_identifier}/#{folder_name}/#{file_name}#{suffix}_#{test_suite_identifier}.rb" 58 | end 59 | end 60 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Pattern Generator [![Build Status](https://travis-ci.org/sungwoncho/pattern_generator.svg?branch=master)](https://travis-ci.org/sungwoncho/pattern_generator) 2 | 3 | Pattern Generator lets you generate various Rails patterns and tests with a single 4 | command. 5 | 6 | 7 | ## Install 8 | 9 | In your Gemfile, add the gem in the development group. 10 | 11 | ```ruby 12 | gem 'pattern_generator', group: :development 13 | ``` 14 | 15 | Run `bundle install` to install the gem. 16 | 17 | Now you are ready to rock the pattern generator! 18 | 19 | 20 | ## Usage 21 | 22 | ``` 23 | rails generate [PATTERN_TYPE] [YOUR_FILE_NAME (in snake_case)] 24 | ``` 25 | 26 | Currently, PATTERN_TYPE can be: 27 | 28 | * Service 29 | * Policy 30 | * PORO (Plain Old Ruby Object) 31 | * Form 32 | 33 | Destroy command is also supported. 34 | 35 | 36 | ## Examples 37 | 38 | Here are usage examples with commands and generated files. 39 | 40 | ### Service 41 | 42 | ``` 43 | rails generate service find_match 44 | ``` 45 | 46 | generates: 47 | 48 | 49 | *app/services/find_match_service.rb* 50 | ```ruby 51 | class FindMatchService 52 | def initialize 53 | 54 | end 55 | end 56 | ``` 57 | 58 | *spec/services/find_match_service_spec.rb* 59 | ```ruby 60 | require 'rails_helper' 61 | 62 | RSpec.describe FindMatchService, type: :service do 63 | describe '#call' do 64 | pending "Add some tests to #{__FILE__}" 65 | end 66 | end 67 | ``` 68 | 69 | ### Policy 70 | 71 | ``` 72 | rails generate policy voting 73 | ``` 74 | 75 | generates: 76 | 77 | 78 | *app/policies/voting_policy.rb* 79 | ```ruby 80 | class VotingPolicy 81 | def initialize 82 | 83 | end 84 | end 85 | ``` 86 | 87 | *spec/policies/voting_policy_spec.rb* 88 | ```ruby 89 | require 'rails_helper' 90 | 91 | RSpec.describe VotingPolicy, type: :policy do 92 | describe '#policy_method' do 93 | pending "Add some tests to #{__FILE__}" 94 | end 95 | end 96 | ``` 97 | 98 | ### PORO (Plain Old Ruby Object) 99 | 100 | a minimalistic non-ActiveRecord model that can be customized to fit your needs 101 | 102 | ``` 103 | rails generate poro payment_gateway 104 | ``` 105 | 106 | generates: 107 | 108 | 109 | *app/models/payment_gateway.rb* 110 | ```ruby 111 | class PaymentGateway 112 | def initialize 113 | 114 | end 115 | end 116 | 117 | ``` 118 | 119 | *spec/policies/payment_gateway_spec.rb* 120 | ```ruby 121 | require 'rails_helper' 122 | 123 | RSpec.describe PaymentGateway do 124 | describe 'something' do 125 | pending "Add some tests to #{__FILE__}" 126 | end 127 | end 128 | 129 | ``` 130 | 131 | 132 | ## Options 133 | 134 | * `--minitest` 135 | * Will create your test files inside test folder. 136 | * DEFAULT: `--rspec` 137 | * Will create your test files inside spec folder. 138 | 139 | * Usage: `rails generate service subscribe_user --minitest` 140 | 141 | 142 | ## Where can I learn about more patterns? 143 | 144 | * [7 Patterns to Refactor Fat ActiveRecord Models](http://blog.codeclimate.com/blog/2012/10/17/7-ways-to-decompose-fat-activerecord-models/) 145 | 146 | Feel free to add good blog articles or tutorials here. 147 | 148 | 149 | ## Contributing 150 | 151 | Know your patterns? Open a pull request! 152 | 153 | This project respects the [contributor code of conduct](https://github.com/sungwoncho/pattern_generator/blob/master/code_of_conduct.md). 154 | 155 | 156 | ## License 157 | 158 | This project rocks and uses MIT-LICENSE. 159 | 160 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | PATH 2 | remote: . 3 | specs: 4 | pattern_generator (0.1.0) 5 | rails (>= 4.0.0) 6 | 7 | GEM 8 | remote: https://rubygems.org/ 9 | specs: 10 | actioncable (5.1.3) 11 | actionpack (= 5.1.3) 12 | nio4r (~> 2.0) 13 | websocket-driver (~> 0.6.1) 14 | actionmailer (5.1.3) 15 | actionpack (= 5.1.3) 16 | actionview (= 5.1.3) 17 | activejob (= 5.1.3) 18 | mail (~> 2.5, >= 2.5.4) 19 | rails-dom-testing (~> 2.0) 20 | actionpack (5.1.3) 21 | actionview (= 5.1.3) 22 | activesupport (= 5.1.3) 23 | rack (~> 2.0) 24 | rack-test (~> 0.6.3) 25 | rails-dom-testing (~> 2.0) 26 | rails-html-sanitizer (~> 1.0, >= 1.0.2) 27 | actionview (5.1.3) 28 | activesupport (= 5.1.3) 29 | builder (~> 3.1) 30 | erubi (~> 1.4) 31 | rails-dom-testing (~> 2.0) 32 | rails-html-sanitizer (~> 1.0, >= 1.0.3) 33 | activejob (5.1.3) 34 | activesupport (= 5.1.3) 35 | globalid (>= 0.3.6) 36 | activemodel (5.1.3) 37 | activesupport (= 5.1.3) 38 | activerecord (5.1.3) 39 | activemodel (= 5.1.3) 40 | activesupport (= 5.1.3) 41 | arel (~> 8.0) 42 | activesupport (5.1.3) 43 | concurrent-ruby (~> 1.0, >= 1.0.2) 44 | i18n (~> 0.7) 45 | minitest (~> 5.1) 46 | tzinfo (~> 1.1) 47 | arel (8.0.0) 48 | builder (3.2.3) 49 | byebug (5.0.0) 50 | columnize (= 0.9.0) 51 | columnize (0.9.0) 52 | concurrent-ruby (1.0.5) 53 | erubi (1.6.1) 54 | globalid (0.4.0) 55 | activesupport (>= 4.2.0) 56 | i18n (0.8.6) 57 | loofah (2.0.3) 58 | nokogiri (>= 1.5.9) 59 | mail (2.6.6) 60 | mime-types (>= 1.16, < 4) 61 | method_source (0.8.2) 62 | mime-types (3.1) 63 | mime-types-data (~> 3.2015) 64 | mime-types-data (3.2016.0521) 65 | mini_portile2 (2.2.0) 66 | minitest (5.10.3) 67 | nio4r (2.1.0) 68 | nokogiri (1.8.0) 69 | mini_portile2 (~> 2.2.0) 70 | rack (2.0.3) 71 | rack-test (0.6.3) 72 | rack (>= 1.0) 73 | rails (5.1.3) 74 | actioncable (= 5.1.3) 75 | actionmailer (= 5.1.3) 76 | actionpack (= 5.1.3) 77 | actionview (= 5.1.3) 78 | activejob (= 5.1.3) 79 | activemodel (= 5.1.3) 80 | activerecord (= 5.1.3) 81 | activesupport (= 5.1.3) 82 | bundler (>= 1.3.0) 83 | railties (= 5.1.3) 84 | sprockets-rails (>= 2.0.0) 85 | rails-dom-testing (2.0.3) 86 | activesupport (>= 4.2.0) 87 | nokogiri (>= 1.6) 88 | rails-html-sanitizer (1.0.3) 89 | loofah (~> 2.0) 90 | railties (5.1.3) 91 | actionpack (= 5.1.3) 92 | activesupport (= 5.1.3) 93 | method_source 94 | rake (>= 0.8.7) 95 | thor (>= 0.18.1, < 2.0) 96 | rake (10.4.2) 97 | sprockets (3.7.1) 98 | concurrent-ruby (~> 1.0) 99 | rack (> 1, < 3) 100 | sprockets-rails (3.2.0) 101 | actionpack (>= 4.0) 102 | activesupport (>= 4.0) 103 | sprockets (>= 3.0.0) 104 | sqlite3 (1.3.10) 105 | thor (0.19.4) 106 | thread_safe (0.3.6) 107 | tzinfo (1.2.3) 108 | thread_safe (~> 0.1) 109 | websocket-driver (0.6.5) 110 | websocket-extensions (>= 0.1.0) 111 | websocket-extensions (0.1.2) 112 | 113 | PLATFORMS 114 | ruby 115 | 116 | DEPENDENCIES 117 | byebug 118 | pattern_generator! 119 | rake 120 | sqlite3 121 | 122 | BUNDLED WITH 123 | 1.15.3 124 | -------------------------------------------------------------------------------- /test/dummy/config/environments/production.rb: -------------------------------------------------------------------------------- 1 | Rails.application.configure do 2 | # Settings specified here will take precedence over those in config/application.rb. 3 | 4 | # Code is not reloaded between requests. 5 | config.cache_classes = true 6 | 7 | # Eager load code on boot. This eager loads most of Rails and 8 | # your application in memory, allowing both threaded web servers 9 | # and those relying on copy on write to perform better. 10 | # Rake tasks automatically ignore this option for performance. 11 | config.eager_load = true 12 | 13 | # Full error reports are disabled and caching is turned on. 14 | config.consider_all_requests_local = false 15 | config.action_controller.perform_caching = true 16 | 17 | # Enable Rack::Cache to put a simple HTTP cache in front of your application 18 | # Add `rack-cache` to your Gemfile before enabling this. 19 | # For large-scale production use, consider using a caching reverse proxy like 20 | # NGINX, varnish or squid. 21 | # config.action_dispatch.rack_cache = true 22 | 23 | # Disable serving static files from the `/public` folder by default since 24 | # Apache or NGINX already handles this. 25 | config.serve_static_files = ENV['RAILS_SERVE_STATIC_FILES'].present? 26 | 27 | # Compress JavaScripts and CSS. 28 | config.assets.js_compressor = :uglifier 29 | # config.assets.css_compressor = :sass 30 | 31 | # Do not fallback to assets pipeline if a precompiled asset is missed. 32 | config.assets.compile = false 33 | 34 | # Asset digests allow you to set far-future HTTP expiration dates on all assets, 35 | # yet still be able to expire them through the digest params. 36 | config.assets.digest = true 37 | 38 | # `config.assets.precompile` and `config.assets.version` have moved to config/initializers/assets.rb 39 | 40 | # Specifies the header that your server uses for sending files. 41 | # config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache 42 | # config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for NGINX 43 | 44 | # Force all access to the app over SSL, use Strict-Transport-Security, and use secure cookies. 45 | # config.force_ssl = true 46 | 47 | # Use the lowest log level to ensure availability of diagnostic information 48 | # when problems arise. 49 | config.log_level = :debug 50 | 51 | # Prepend all log lines with the following tags. 52 | # config.log_tags = [ :subdomain, :uuid ] 53 | 54 | # Use a different logger for distributed setups. 55 | # config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new) 56 | 57 | # Use a different cache store in production. 58 | # config.cache_store = :mem_cache_store 59 | 60 | # Enable serving of images, stylesheets, and JavaScripts from an asset server. 61 | # config.action_controller.asset_host = 'http://assets.example.com' 62 | 63 | # Ignore bad email addresses and do not raise email delivery errors. 64 | # Set this to true and configure the email server for immediate delivery to raise delivery errors. 65 | # config.action_mailer.raise_delivery_errors = false 66 | 67 | # Enable locale fallbacks for I18n (makes lookups for any locale fall back to 68 | # the I18n.default_locale when a translation cannot be found). 69 | config.i18n.fallbacks = true 70 | 71 | # Send deprecation notices to registered listeners. 72 | config.active_support.deprecation = :notify 73 | 74 | # Use default logging formatter so that PID and timestamp are not suppressed. 75 | config.log_formatter = ::Logger::Formatter.new 76 | 77 | # Do not dump schema after migrations. 78 | config.active_record.dump_schema_after_migration = false 79 | end 80 | --------------------------------------------------------------------------------