tractor_beam 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 7f49e5bfadcf96d455602acc17ecdde6d7d87504c2dc24c4b34317e5949a4300
4
+ data.tar.gz: fdbe9a0b243273b8f3e940febe616be01e3f158fe66e744ad06d55d16c879bc7
5
+ SHA512:
6
+ metadata.gz: 04ba7de3e527c5122ed8b6e76b1dc8adeac43082cad13db0c4c1b36e79beab5b29f561c52261334b877d8e839faccae87489e628e353a259bf2af7f1c99ee5be
7
+ data.tar.gz: 5d68257efcb7144cf0386fa25ad07a339afafcf064b77726944d02c20cc1b4f2a112a4c52dc6710f854bf3d6f3d7f9ed4965d3ef5977e1fa9614584975fb5669
data/.gitignore ADDED
@@ -0,0 +1,11 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.5.0
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.5.0
5
+ before_install: gem install bundler -v 1.16.1
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in tractor_beam.gemspec
6
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Gabriel Gizotti
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,127 @@
1
+ # Tractor Beam
2
+
3
+ <img src="https://www.dropbox.com/s/cidq3h3jta78fto/tractor-beam.png?raw=1"
4
+ data-canonical-src="https://www.dropbox.com/s/cidq3h3jta78fto/tractor-beam.png?raw=1"
5
+ width=400 />
6
+
7
+ ## Acknowledgments
8
+
9
+ This gem has two major source or inspiration, and I am deeply grateful for the awesome work done by both of them.
10
+
11
+ ### Evil Martians
12
+
13
+ All the frontend setup Tractor Beam does is a representation of the good work put together by the folks at [Evil Martians](https://evilmartians.com), specifically described on their [Modern Front-end in Rails](https://evilmartians.com/chronicles/evil-front-part-1) series of blog posts.
14
+
15
+ ### thoughtbot
16
+
17
+ When looking at how to build a custom rails generator there's no better example than [thoughtbot/suspenders](https://github.com/thoughtbot/suspenders).
18
+ I have used suspenders as the starting point for Tractor Beam, and ~stole~ borrowed some of its ideas
19
+ on top of my main goal of building a Rails app with modern frontend tooling.
20
+
21
+ ## Goals
22
+
23
+ The main goal of this gem is to bootstrap a Rails application with all the modern component-based frontend goodness described by Evil Martians [Modern Front-end in Rails](https://evilmartians.com/chronicles/evil-front-part-1) series of blog posts.
24
+ It also sets up a lot of the go to gems and tools for development in Rails, thus avoiding the initial configuration boilerplate that every new project brings.
25
+
26
+ ## Installation
27
+
28
+ ```
29
+ gem install tractor_beam
30
+ ```
31
+
32
+ Then run:
33
+
34
+ ```
35
+ tractor_beam project-name
36
+ ```
37
+
38
+ ## Versions
39
+
40
+ `ruby 2.5.0`
41
+ `rails ~> 5.1.4`
42
+
43
+ ## Gemfile
44
+
45
+ Tractor Beam copies [Gemfile.erb](https://github.com/gizotti/tractor_beam/blob/master/templates/Gemfile.erb) to project-name/Gemfile.
46
+
47
+ It includes application gems:
48
+
49
+ * [Postgres](https://github.com/ged/ruby-pg) for access to the Postgres database.
50
+ * [Puma](https://github.com/puma/puma) to serve HTTP requests.
51
+ * [Webpacker](https://github.com/rails/webpacker) to Webpack to manage app-like JavaScript modules in Rails.
52
+
53
+ Development gems:
54
+
55
+ * [pry-rails](https://github.com/rweng/pry-rails) Rails >= 3 pry initializer.
56
+ * [pry-byebug](https://github.com/deivid-rodriguez/pry-byebug) step-by-step debugging and stack navigation. capabilities to [pry] using [byebug].
57
+ * [Spring](https://github.com/rails/spring) for fast Rails actions via pre-loading.
58
+ * [Web Console](https://github.com/rails/web-console) for better debugging via in-browser IRB consoles.
59
+
60
+ ## Other Sweet Sweet Goodness
61
+
62
+ ### Component Generator
63
+
64
+ ```shell
65
+ rails g component component-name
66
+ ```
67
+
68
+ Will generate:
69
+
70
+ ```shell
71
+ frontend/components
72
+ ├── component-name
73
+ │ ├── _component-name.html.erb
74
+ │ ├── component-name.css
75
+ │ └── component-name.js
76
+ ```
77
+
78
+ ### General Linting
79
+ * [lint-staged](https://github.com/okonet/lint-staged) run linters on git staged files.
80
+ * [pre-commit](https://github.com/pre-commit/pre-commit) manage multi-language pre-commit hooks.
81
+
82
+ ### Javascript Linting
83
+ * [babel-eslint](https://github.com/babel/babel-eslint) ESLint using Babel as the parser.
84
+ * [eslint](https://github.com/eslint/eslint) identify and report on patterns found in ECMAScript/JavaScript code.
85
+ * [eslint-config-airbnb-base](https://www.npmjs.com/package/eslint-config-airbnb-base) provides Airbnb's base JS .eslintrc.
86
+ * [prettier](https://github.com/prettier/prettier) code formatter that enforces a consistent style by parsing your code and re-printing it with its own rules.
87
+ * [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) turns off all rules that are unnecessary or might conflict with Prettier.
88
+ * [eslint-import-resolver-webpack](https://www.npmjs.com/package/eslint-import-resolver-webpack) webpack-literate module resolution plugin for eslint-plugin-import.
89
+ * [eslint-plugin-import](https://www.npmjs.com/package/eslint-plugin-import) support linting of ES2015+ (ES6+) import/export syntax.
90
+
91
+ ### CSS Linting
92
+ * [stylelint](https://github.com/stylelint/stylelint) a mighty, modern CSS linter.
93
+ * [stylelint-config-standard](https://github.com/stylelint/stylelint-config-standard) the standard shareable config for stylelint.
94
+
95
+ ## Todo List
96
+ - [ ] Write Specs
97
+ - [ ] Setup rubocop for gem (not generated project)
98
+ - [ ] Edit Readme.md.erb so it's not just a copy of thoughtbot's template
99
+ - [ ] jquery-ujs yarn package
100
+ - [ ] ActionCable yarn package unless skip-actioncable
101
+ - [ ] Turbolinks yarn package and config unless skip-turbolinks
102
+ - [ ] Normalize css
103
+ - [ ] Simple Form
104
+ - [ ] Testing configuration
105
+ - [ ] Coverage
106
+ - [ ] shoulda-matchers
107
+ - [ ] Factory Bot
108
+ - [ ] CI configuration
109
+ - [ ] Dotenv configuration
110
+ - [ ] Bundler Audit
111
+ - [ ] Rubocop (Maybe reinteractive-style)
112
+ - [ ] option to make app Heroku ready
113
+
114
+ ## Maybe TODO (Stolen ideas from [https://github.com/thoughtbot/suspenders](https://github.com/thoughtbot/suspenders))
115
+
116
+ - The ./bin/setup convention for new developer setup
117
+ - The ./bin/deploy convention for deploying to Heroku
118
+ - Rails' flashes set up and in application layout
119
+ - A few nice time formats set up for localization
120
+ - Rack::Deflater to compress responses with Gzip
121
+ - A low database connection pool limit
122
+ - Safe binstubs
123
+ - t() and l() in specs without prefixing with I18n
124
+ - An automatically-created SECRET_KEY_BASE environment variable in all environments
125
+ - Configuration for CircleCI Continuous Integration (tests)
126
+ - Configuration for Hound Continuous Integration (style)
127
+ - The analytics adapter Segment (and therefore config for Google Analytics, Intercom, Facebook Ads, Twitter Ads, etc.)
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "tractor_beam"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/bin/tractor_beam ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+
4
+ source_path = (Pathname.new(__FILE__).dirname + '../lib').expand_path
5
+ $LOAD_PATH << source_path
6
+
7
+ require 'tractor_beam'
8
+
9
+ if ARGV.empty?
10
+ puts "Please provide a path for the new application"
11
+ puts
12
+ puts "See --help for more info"
13
+ exit 0
14
+ elsif ['-v', '--version'].include? ARGV[0]
15
+ puts TractorBeam::VERSION
16
+ exit 0
17
+ end
18
+
19
+ templates_root = File.expand_path(File.join("..", "templates"), File.dirname(__FILE__))
20
+ TractorBeam::AppGenerator.source_root(templates_root)
21
+ TractorBeam::AppGenerator.source_paths << Rails::Generators::AppGenerator.source_root << templates_root
22
+
23
+ TractorBeam::AppGenerator.start
@@ -0,0 +1,143 @@
1
+ module TractorBeam
2
+ class AppBuilder < Rails::AppBuilder
3
+ def readme
4
+ template "README.md.erb", "README.md"
5
+ end
6
+
7
+ def gitignore
8
+ copy_file "tractor_beam_gitignore", ".gitignore"
9
+ end
10
+
11
+ def gemfile
12
+ template "Gemfile.erb", "Gemfile"
13
+ end
14
+
15
+ def set_ruby_version
16
+ create_file '.ruby-version', "#{TractorBeam::RUBY_VERSION}\n"
17
+ end
18
+
19
+ def procfile_dev
20
+ template "Procfile.dev", "Procfile.dev"
21
+ end
22
+
23
+ def procfile
24
+ template "Procfile", "Procfile"
25
+ end
26
+
27
+ def provide_setup_script
28
+ template "bin_setup", "bin/setup", force: true
29
+ run "chmod a+x bin/setup"
30
+ end
31
+
32
+ # Component Based frontend
33
+
34
+ def remove_legacy_assets_folder
35
+ remove_dir "app/assets"
36
+ end
37
+
38
+ def setup_root_frontend_folder
39
+ empty_directory "frontend"
40
+
41
+ inside "frontend" do
42
+ directory "packs"
43
+ directory "init"
44
+ end
45
+ end
46
+
47
+ def create_application_layout
48
+ template 'tractor_beam_layout.html.erb.erb',
49
+ 'app/views/layouts/application.html.erb',
50
+ force: true
51
+ end
52
+
53
+ def setup_browserlist_rc
54
+ template "browserlistrc", ".browserlistrc"
55
+ end
56
+
57
+ def customize_webpacker_yml
58
+ say "Customizing webpacker.yml"
59
+
60
+ gsub_file "config/webpacker.yml", "source_path: app/javascript", "source_path: frontend"
61
+ end
62
+
63
+ def prepend_view_path_to_application_controller
64
+ insert_into_file "app/controllers/application_controller.rb",
65
+ " prepend_view_path Rails.root.join(\"frontend\")\n",
66
+ after: "protect_from_forgery with: :exception\n"
67
+ end
68
+
69
+ # Linting
70
+
71
+ def setup_js_linter
72
+ run "yarn add --dev babel-eslint eslint eslint-config-airbnb-base " \
73
+ "eslint-config-prettier eslint-import-resolver-webpack " \
74
+ "eslint-plugin-import eslint-plugin-prettier " \
75
+ "lint-staged pre-commit prettier"
76
+
77
+ template "eslintrc", ".eslintrc"
78
+ end
79
+
80
+ def setup_style_linter
81
+ run "yarn add --dev stylelint stylelint-config-standard"
82
+
83
+ template "stylelintrc", ".stylelintrc"
84
+ end
85
+
86
+ def add_scripts_to_package_json
87
+ scripts = <<-SCRIPTS
88
+ "scripts": {
89
+ "lint-staged": "$(yarn bin)/lint-staged"
90
+ },
91
+ "lint-staged": {
92
+ "config/webpack/**/*.js": [
93
+ "prettier --write",
94
+ "eslint",
95
+ "git add"
96
+ ],
97
+ "frontend/**/*.js": [
98
+ "prettier --write",
99
+ "eslint",
100
+ "git add"
101
+ ],
102
+ "frontend/**/*.css": [
103
+ "prettier --write",
104
+ "stylelint --fix",
105
+ "git add"
106
+ ]
107
+ },
108
+ "pre-commit": [
109
+ "lint-staged"
110
+ ],
111
+ SCRIPTS
112
+
113
+ insert_into_file "package.json",
114
+ scripts,
115
+ after: "},\n"
116
+ end
117
+
118
+ # Generators
119
+
120
+ def configure_generators
121
+ config = <<-RUBY
122
+ config.generators do |g|
123
+ g.helper false
124
+ g.javascripts false
125
+ g.request_specs false
126
+ g.routing_specs false
127
+ g.stylesheets false
128
+ g.test_framework :rspec
129
+ g.view_specs false
130
+ g.channel assets: false
131
+ end
132
+ RUBY
133
+
134
+ inject_into_class 'config/application.rb', 'Application', config
135
+ end
136
+
137
+ def component_generator
138
+ empty_directory "lib/generators"
139
+
140
+ template "component_generator", "lib/generators/component_generator.rb"
141
+ end
142
+ end
143
+ end
@@ -0,0 +1,115 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/rails/app/app_generator'
3
+
4
+ module TractorBeam
5
+ class AppGenerator < Rails::Generators::AppGenerator
6
+ hide!
7
+
8
+ class_option :database, type: :string, aliases: "-d", default: "postgresql",
9
+ desc: "Configure for selected database (options: #{DATABASES.join("/")})"
10
+
11
+ class_option :version, type: :boolean, aliases: "-v", group: :tractor_beam,
12
+ desc: "Show TractorBeam version number and quit"
13
+
14
+ class_option :help, type: :boolean, aliases: '-h', group: :tractor_beam,
15
+ desc: "Show this help message and quit"
16
+
17
+ class_option :path, type: :string, default: nil,
18
+ desc: "Path to the gem"
19
+
20
+ class_option :skip_test, type: :boolean, default: true,
21
+ desc: "Skip Test Unit"
22
+
23
+ class_option :skip_system_test, type: :boolean, default: true,
24
+ desc: "Skip system test files"
25
+
26
+ class_option :skip_turbolinks, type: :boolean, default: true,
27
+ desc: "Skip turbolinks gem"
28
+
29
+ class_option :skip_sprockets, type: :boolean, aliases: "-S",
30
+ default: true, desc: "Skip Sprockets files"
31
+
32
+ class_option :skip_coffee, type: :boolean, default: true,
33
+ desc: "Don't use CoffeeScript"
34
+
35
+ class_option :webpack, type: :string, default: "webpack",
36
+ desc: "Preconfigure for app-like JavaScript with Webpack (options: #{WEBPACKS.join('/')})"
37
+
38
+ def finish_template
39
+ invoke :beam_customizations
40
+
41
+ super
42
+ end
43
+
44
+ def beam_customizations
45
+ build :set_ruby_version
46
+
47
+ invoke :setup_development_environment
48
+ invoke :setup_production_environment
49
+ invoke :run_bundle
50
+ invoke :run_webpack
51
+ invoke :setup_component_based_frontend
52
+ invoke :setup_linters
53
+ invoke :generate_spring_binstubs
54
+ invoke :git_first_commit
55
+ invoke :outro
56
+ end
57
+
58
+ def setup_component_based_frontend
59
+ say "Setting modern frontend architecture"
60
+
61
+ build :remove_legacy_assets_folder
62
+ build :setup_root_frontend_folder
63
+ build :create_application_layout
64
+ build :setup_browserlist_rc
65
+ build :customize_webpacker_yml
66
+ build :prepend_view_path_to_application_controller
67
+ end
68
+
69
+ def setup_linters
70
+ say "Setting up linters"
71
+
72
+ build :setup_js_linter
73
+ build :setup_style_linter
74
+ build :add_scripts_to_package_json
75
+ end
76
+
77
+ def setup_development_environment
78
+ say "Setting up development environment"
79
+
80
+ build :configure_generators
81
+ build :component_generator
82
+ build :procfile_dev
83
+ build :provide_setup_script
84
+ end
85
+
86
+ def setup_production_environment
87
+ say "Setting up production environment"
88
+
89
+ build :procfile
90
+ end
91
+
92
+ def git_first_commit
93
+ say "Commiting skeleton app to git"
94
+
95
+ run("git add . && git commit -m 'first commit'")
96
+ end
97
+
98
+ def outro
99
+ outro_text = <<-OUTRO
100
+
101
+ ========================
102
+ = Abduction complete!! =
103
+ ========================
104
+ OUTRO
105
+
106
+ say outro_text, :blue
107
+ end
108
+
109
+ protected
110
+
111
+ def get_builder_class
112
+ TractorBeam::AppBuilder
113
+ end
114
+ end
115
+ end
@@ -0,0 +1,5 @@
1
+ module TractorBeam
2
+ RAILS_VERSION = "~> 5.1.4".freeze
3
+ RUBY_VERSION = "2.5.0".freeze
4
+ VERSION = "0.1.1"
5
+ end
@@ -0,0 +1,3 @@
1
+ require "tractor_beam/version"
2
+ require "tractor_beam/generators/app_generator"
3
+ require "tractor_beam/app_builder"
@@ -0,0 +1,14 @@
1
+ require "bundler/setup"
2
+ require "tractor_beam"
3
+
4
+ RSpec.configure do |config|
5
+ # Enable flags like --only-failures and --next-failure
6
+ config.example_status_persistence_file_path = ".rspec_status"
7
+
8
+ # Disable RSpec exposing methods globally on `Module` and `main`
9
+ config.disable_monkey_patching!
10
+
11
+ config.expect_with :rspec do |c|
12
+ c.syntax = :expect
13
+ end
14
+ end
@@ -0,0 +1,9 @@
1
+ RSpec.describe TractorBeam do
2
+ it "has a version number" do
3
+ expect(TractorBeam::VERSION).not_to be nil
4
+ end
5
+
6
+ it "does something useful" do
7
+ expect(false).to eq(true)
8
+ end
9
+ end
@@ -0,0 +1,35 @@
1
+ source 'https://rubygems.org'
2
+
3
+ git_source(:github) do |repo_name|
4
+ repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
5
+ "https://github.com/#{repo_name}.git"
6
+ end
7
+
8
+ ruby "<%= TractorBeam::RUBY_VERSION %>"
9
+
10
+ gem 'pg', "~> 0.21"
11
+ gem 'puma'
12
+ gem "rails", "<%= TractorBeam::RAILS_VERSION %>"
13
+ gem 'webpacker'
14
+
15
+ group :development, :test do
16
+ # gem "bundler-audit", ">= 0.5.0", require: false
17
+ # gem "dotenv-rails"
18
+ # gem "factory_bot_rails"
19
+ gem "pry-byebug"
20
+ gem "pry-rails"
21
+ # gem "rspec-rails", "~> 3.6"
22
+ end
23
+
24
+ group :development do
25
+ gem 'web-console', '>= 3.3.0'
26
+ gem 'listen', '>= 3.0.5', '< 3.2'
27
+ gem 'spring'
28
+ gem 'spring-watcher-listen', '~> 2.0.0'
29
+ gem "spring-commands-rspec"
30
+ end
31
+
32
+ group :test do
33
+ # gem "shoulda-matchers"
34
+ # gem "simplecov", require: false
35
+ end
@@ -0,0 +1 @@
1
+ web: bin/rails server
@@ -0,0 +1,2 @@
1
+ server: bin/rails server
2
+ assets: bin/webpack-dev-server
@@ -0,0 +1,26 @@
1
+ # <%= app_name.humanize %>
2
+
3
+ ## Getting Started
4
+
5
+ After you have cloned this repo, run this setup script to set up your machine
6
+ with the necessary dependencies to run and test this app:
7
+
8
+ % ./bin/setup
9
+
10
+ It assumes you have a machine equipped with Ruby, Postgres, etc.
11
+
12
+ ## Generating Components
13
+
14
+ ```shell
15
+ rails g component component-name
16
+ ```
17
+
18
+ Will generate:
19
+
20
+ ```shell
21
+ frontend/components
22
+ ├── component-name
23
+ │ ├── _component-name.html.erb
24
+ │ ├── component-name.css
25
+ │ └── component-name.js
26
+ ```
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+ require 'pathname'
3
+ require 'fileutils'
4
+ include FileUtils
5
+
6
+ # path to your application root.
7
+ APP_ROOT = Pathname.new File.expand_path('../../', __FILE__)
8
+
9
+ def system!(*args)
10
+ system(*args) || abort("\n== Command #{args} failed ==")
11
+ end
12
+
13
+ chdir APP_ROOT do
14
+ # This script is a starting point to setup your application.
15
+ # Add necessary setup steps to this file.
16
+
17
+ puts '== Installing dependencies =='
18
+ system! 'gem install bundler --conservative'
19
+ system('bundle check') || system!('bundle install')
20
+
21
+ puts "\n== Preparing database =="
22
+ system! 'bin/rails db:create'
23
+ system! 'bin/rails db:migrate'
24
+
25
+ puts "\n== Removing old logs and tempfiles =="
26
+ system! 'bin/rails log:clear tmp:clear'
27
+
28
+ puts "\n== Restarting application server =="
29
+ system! 'bin/rails restart'
30
+ end
@@ -0,0 +1 @@
1
+ > %1
@@ -0,0 +1,24 @@
1
+ class ComponentGenerator < Rails::Generators::Base
2
+ argument :component_name, required: true, desc: "Component name, e.g: button"
3
+
4
+ def create_view_file
5
+ create_file "#{component_path}/_#{component_name}.html.erb"
6
+ end
7
+
8
+ def create_css_file
9
+ create_file "#{component_path}/#{component_name}.css"
10
+ end
11
+
12
+ def create_js_file
13
+ create_file "#{component_path}/#{component_name}.js" do
14
+ # require component's CSS inside JS automatically
15
+ "import \"./#{component_name}.css\";\n"
16
+ end
17
+ end
18
+
19
+ protected
20
+
21
+ def component_path
22
+ "frontend/components/#{component_name}"
23
+ end
24
+ end
@@ -0,0 +1,27 @@
1
+ {
2
+ "extends": ["eslint-config-airbnb-base", "prettier"],
3
+
4
+ "plugins": ["prettier"],
5
+
6
+ "env": {
7
+ "browser": true
8
+ },
9
+
10
+ "rules": {
11
+ "prettier/prettier": "error"
12
+ },
13
+
14
+ "parser": "babel-eslint",
15
+
16
+ "settings": {
17
+ "import/resolver": {
18
+ "webpack": {
19
+ "config": {
20
+ "resolve": {
21
+ "modules": ["frontend", "node_modules"]
22
+ }
23
+ }
24
+ }
25
+ }
26
+ }
27
+ }
@@ -0,0 +1 @@
1
+ /* include any global css needed in initialization here */
@@ -0,0 +1 @@
1
+ // Insert any global javascript needed on initialization here
@@ -0,0 +1,2 @@
1
+ // Webpack entrypoint. Import any high level component here
2
+ import "init"
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "stylelint-config-standard"
3
+ }
@@ -0,0 +1,18 @@
1
+ !.keep
2
+ *.DS_Store
3
+ *.swo
4
+ *.swp
5
+ .byebug_history
6
+ /.bundle
7
+ /.env.local
8
+ /coverage/*
9
+ /db/*.sqlite3
10
+ /db/*.sqlite3-journal
11
+ /log/*
12
+ /node_modules
13
+ /public/assets
14
+ /public/packs
15
+ /public/system
16
+ /tags
17
+ /tmp/*
18
+ /yarn-error.log
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title><%= camelized %></title>
5
+ <%%= csrf_meta_tags %>
6
+
7
+ <%%= stylesheet_pack_tag "application" %>
8
+ </head>
9
+
10
+ <body>
11
+ <%%= yield %>
12
+ <%%= javascript_pack_tag "application" %>
13
+ </body>
14
+ </html>
@@ -0,0 +1,33 @@
1
+ $:.push File.expand_path('../lib', __FILE__)
2
+ require "tractor_beam/version"
3
+ require 'date'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.required_ruby_version = ">= #{TractorBeam::RUBY_VERSION}"
7
+ spec.required_rubygems_version = ">= 2.7.4"
8
+ spec.authors = ["Gabriel Gizotti"]
9
+ spec.email = ["gabriel@gizotti.com"]
10
+ spec.date = Date.today.strftime('%Y-%m-%d')
11
+ spec.name = "tractor_beam"
12
+ spec.version = TractorBeam::VERSION
13
+
14
+ spec.description = <<-HERE
15
+ Tractor Beam is a base Rails project with all the modern javascript goodness
16
+ described by https://evilmartians.com/chronicles/evil-front-part-1.
17
+ Use it to get your rails app up and running with webpacker and a component
18
+ based infrastructure for your frontend.
19
+ HERE
20
+
21
+ spec.summary = "Generate a Rails app using modern javascript tooling."
22
+ spec.homepage = "https://github.com/gizotti/tractor_beam"
23
+ spec.license = "MIT"
24
+ spec.files = `git ls-files`.split("\n")
25
+ spec.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
26
+
27
+ spec.executables = ["tractor_beam"]
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_dependency 'rails', TractorBeam::RAILS_VERSION
31
+
32
+ spec.add_development_dependency "rspec", "~> 3.2"
33
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tractor_beam
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Gabriel Gizotti
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-01-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rails
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 5.1.4
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 5.1.4
27
+ - !ruby/object:Gem::Dependency
28
+ name: rspec
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.2'
41
+ description: |
42
+ Tractor Beam is a base Rails project with all the modern javascript goodness
43
+ described by https://evilmartians.com/chronicles/evil-front-part-1.
44
+ Use it to get your rails app up and running with webpacker and a component
45
+ based infrastructure for your frontend.
46
+ email:
47
+ - gabriel@gizotti.com
48
+ executables:
49
+ - tractor_beam
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - ".gitignore"
54
+ - ".rspec"
55
+ - ".ruby-version"
56
+ - ".travis.yml"
57
+ - Gemfile
58
+ - LICENSE.txt
59
+ - README.md
60
+ - Rakefile
61
+ - bin/console
62
+ - bin/setup
63
+ - bin/tractor_beam
64
+ - lib/tractor_beam.rb
65
+ - lib/tractor_beam/app_builder.rb
66
+ - lib/tractor_beam/generators/app_generator.rb
67
+ - lib/tractor_beam/version.rb
68
+ - spec/spec_helper.rb
69
+ - spec/tractor_beam_spec.rb
70
+ - templates/Gemfile.erb
71
+ - templates/Procfile
72
+ - templates/Procfile.dev
73
+ - templates/Readme.md.erb
74
+ - templates/bin_setup
75
+ - templates/browserlistrc
76
+ - templates/component_generator
77
+ - templates/eslintrc
78
+ - templates/frontend/init/index.css
79
+ - templates/frontend/init/index.js
80
+ - templates/frontend/packs/application.js
81
+ - templates/stylelintrc
82
+ - templates/tractor_beam_gitignore
83
+ - templates/tractor_beam_layout.html.erb.erb
84
+ - tractor_beam.gemspec
85
+ homepage: https://github.com/gizotti/tractor_beam
86
+ licenses:
87
+ - MIT
88
+ metadata: {}
89
+ post_install_message:
90
+ rdoc_options: []
91
+ require_paths:
92
+ - lib
93
+ required_ruby_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ version: 2.5.0
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 2.7.4
103
+ requirements: []
104
+ rubyforge_project:
105
+ rubygems_version: 2.7.4
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: Generate a Rails app using modern javascript tooling.
109
+ test_files:
110
+ - spec/spec_helper.rb
111
+ - spec/tractor_beam_spec.rb