majestic-monolith 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/Gemfile +10 -0
- data/Gemfile.lock +36 -0
- data/README.md +27 -0
- data/Rakefile +8 -0
- data/exe/monolith +5 -0
- data/lib/majestic/monolith/cli.rb +16 -0
- data/lib/majestic/monolith/templates/alpha/template/Procfile.dev +3 -0
- data/lib/majestic/monolith/templates/alpha/template.rb +66 -0
- data/lib/majestic/monolith/templates/alpha.rb +39 -0
- data/lib/majestic/monolith/version.rb +7 -0
- data/lib/majestic/monolith.rb +19 -0
- data/majestic-monolith.gemspec +38 -0
- data/sig/majestic/monolith.rbs +6 -0
- metadata +77 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2c986edc3ac824e56dc936d7fb0dcb642b50d2799331f030e894b4552658237a
|
4
|
+
data.tar.gz: 7ed2d703fd3cc3d3c7b3394283823a0b41d30588dfff8cb53df46fdeedd63668
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 17c82bfe517c7aeefc1d50dd879f1cc41c35d200e594ea2e4246bfd46f620913c7486a5c890c78f95c2f5c4886b5f4f4b695b68831ea6126e60e7e4d6e8214f0
|
7
|
+
data.tar.gz: a52ce5bb214d2ef5c86ec28c754634777662cd4a9aa29bd24e31c3ed5e1752d72efef96a0a58e7db967d7be0e49c62e9b6b66365558c2fbd538cb74a4b96098e
|
data/.rspec
ADDED
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
majestic-monolith (0.1.0)
|
5
|
+
thor (~> 1.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
diff-lcs (1.5.0)
|
11
|
+
rake (13.0.6)
|
12
|
+
rspec (3.11.0)
|
13
|
+
rspec-core (~> 3.11.0)
|
14
|
+
rspec-expectations (~> 3.11.0)
|
15
|
+
rspec-mocks (~> 3.11.0)
|
16
|
+
rspec-core (3.11.0)
|
17
|
+
rspec-support (~> 3.11.0)
|
18
|
+
rspec-expectations (3.11.0)
|
19
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
20
|
+
rspec-support (~> 3.11.0)
|
21
|
+
rspec-mocks (3.11.1)
|
22
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
23
|
+
rspec-support (~> 3.11.0)
|
24
|
+
rspec-support (3.11.0)
|
25
|
+
thor (1.2.1)
|
26
|
+
|
27
|
+
PLATFORMS
|
28
|
+
x86_64-darwin-20
|
29
|
+
|
30
|
+
DEPENDENCIES
|
31
|
+
majestic-monolith!
|
32
|
+
rake (~> 13.0)
|
33
|
+
rspec (~> 3.0)
|
34
|
+
|
35
|
+
BUNDLED WITH
|
36
|
+
2.3.13
|
data/README.md
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# Majestic Monolith
|
2
|
+
|
3
|
+
A quick way to spin up a [Majestic Monlith](https://m.signalvnoise.com/the-majestic-monolith/) Rails application. Rocketship uses Monolith when building new SaaS applications.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Install the gem and add to the application's Gemfile by executing:
|
8
|
+
|
9
|
+
$ gem install majestic-monolith
|
10
|
+
|
11
|
+
## Usage
|
12
|
+
|
13
|
+
Run the CLI utility to create a monolith:
|
14
|
+
|
15
|
+
$ monolith new my-rad-project
|
16
|
+
|
17
|
+
Monolith creates a new Rails project with the dependencies needed to be productive.
|
18
|
+
|
19
|
+
## Development
|
20
|
+
|
21
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
22
|
+
|
23
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
24
|
+
|
25
|
+
## Contributing
|
26
|
+
|
27
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/rocketship/monolith.
|
data/Rakefile
ADDED
data/exe/monolith
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require "thor"
|
2
|
+
|
3
|
+
module Majestic
|
4
|
+
module Monolith
|
5
|
+
class CLI < Thor
|
6
|
+
include Thor::Actions
|
7
|
+
|
8
|
+
desc 'new [PROJECT_NAME]', 'create a new Rails monolith'
|
9
|
+
def new(project_name = Templates::Alpha::DEFAULT_PROJECT_NAME)
|
10
|
+
project = Templates::Alpha.new(name: project_name)
|
11
|
+
run project.rails_new_command
|
12
|
+
directory project.template_dir.expand_path, project.rails_path.expand_path
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
###### Authorization & Authentication ######
|
2
|
+
|
3
|
+
# Huh!? No omni-auth! Correct ... we just handle logins via email to start. Way
|
4
|
+
# less configuration and you need email addresses.
|
5
|
+
gem "nopassword", github: "rocketshipio/nopassword", branch: "main"
|
6
|
+
|
7
|
+
# Objects for authorizing user actions.
|
8
|
+
gem "pundit"
|
9
|
+
|
10
|
+
###### Views & UI ######
|
11
|
+
|
12
|
+
# Encapsulate views (instead of using partials)
|
13
|
+
gem "view_component"
|
14
|
+
|
15
|
+
# I use to not like Tailwind, but now I love using it with view_components.
|
16
|
+
gem "tailwindcss-rails"
|
17
|
+
|
18
|
+
# Displays UTC times from the database in the users local time, all computed client-side.
|
19
|
+
# Super duper useful for keeping times sane
|
20
|
+
gem "local_time"
|
21
|
+
|
22
|
+
# Instead of HAML or Erb. What's that? You don't like these shorthand template
|
23
|
+
# languages? I don't like chasing down empty Erb tags in a heavily compentized
|
24
|
+
# application, so slim wins the day.
|
25
|
+
gem "slim-rails", "~> 3.3"
|
26
|
+
|
27
|
+
###### Content Management ######
|
28
|
+
|
29
|
+
# Content is managed via Sitepress
|
30
|
+
gem "sitepress-rails", github: "sitepress/sitepress"
|
31
|
+
|
32
|
+
# Lots of markdown content for help, feature, and how-to articles.
|
33
|
+
gem "markdown-rails", "~> 1.0"
|
34
|
+
|
35
|
+
###### Analytics ######
|
36
|
+
|
37
|
+
# First-party analytics keeps privacy sane and Google out.
|
38
|
+
gem "ahoy_matey"
|
39
|
+
|
40
|
+
# Useful for running queries against Ahoy.
|
41
|
+
gem "groupdate"
|
42
|
+
|
43
|
+
# Send all web addresses to one URL.
|
44
|
+
gem "rack-canonical-host", "~> 1.1"
|
45
|
+
|
46
|
+
###### Testing ######
|
47
|
+
|
48
|
+
# Some people hate rspec. No idea why, but I dig it, so its part of monolith.
|
49
|
+
gem "rspec-rails", group: [:development, :test]
|
50
|
+
|
51
|
+
# More sane than fixtures
|
52
|
+
gem "factory_bot", group: [:development, :test]
|
53
|
+
|
54
|
+
##### Other gems ######
|
55
|
+
|
56
|
+
# Get paid yo.
|
57
|
+
gem "stripe"
|
58
|
+
|
59
|
+
# Parses dates
|
60
|
+
gem "chronic", "~> 0.10.2"
|
61
|
+
|
62
|
+
after_bundle do
|
63
|
+
rails_command "db:create"
|
64
|
+
rails_command "generate ahoy:install"
|
65
|
+
rails_command "db:migrate"
|
66
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Majestic
|
2
|
+
module Monolith
|
3
|
+
module Templates
|
4
|
+
class Alpha
|
5
|
+
# I've found its best to name Rails applications "server", which keeps the product
|
6
|
+
# name out of the code, and put the project inside of a path with the product name.
|
7
|
+
# For example, `~/Projects/acme/server`. This makes it easier to put client code in
|
8
|
+
# the same directly, like `~/Projects/acme/ios-app`.
|
9
|
+
DEFAULT_PROJECT_NAME = "server".freeze
|
10
|
+
|
11
|
+
attr_reader :name
|
12
|
+
|
13
|
+
def initialize(name:)
|
14
|
+
@name = name
|
15
|
+
end
|
16
|
+
|
17
|
+
def template_path
|
18
|
+
root.join("template.rb")
|
19
|
+
end
|
20
|
+
|
21
|
+
def template_dir
|
22
|
+
root.join("template")
|
23
|
+
end
|
24
|
+
|
25
|
+
def root
|
26
|
+
Monolith.root.join "monolith/templates", File.basename(__FILE__, ".rb")
|
27
|
+
end
|
28
|
+
|
29
|
+
def rails_new_command
|
30
|
+
"rails new #{rails_path} --template #{template_path} --database postgresql --css tailwind"
|
31
|
+
end
|
32
|
+
|
33
|
+
def rails_path
|
34
|
+
Pathname.new(name)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "monolith/version"
|
4
|
+
require "pathname"
|
5
|
+
|
6
|
+
module Majestic
|
7
|
+
module Monolith
|
8
|
+
class Error < StandardError; end
|
9
|
+
|
10
|
+
autoload :CLI, "majestic/monolith/cli"
|
11
|
+
module Templates
|
12
|
+
autoload :Alpha, "majestic/monolith/templates/alpha"
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.root
|
16
|
+
Pathname.new(__dir__)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/majestic/monolith/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "majestic-monolith"
|
7
|
+
spec.version = Majestic::Monolith::VERSION
|
8
|
+
spec.authors = ["Brad Gessler"]
|
9
|
+
spec.email = ["brad@rocketship.com"]
|
10
|
+
|
11
|
+
spec.summary = "CLI used to create Rails monoliths by Rocketship for quickly building SaaS applications."
|
12
|
+
spec.description = spec.summary
|
13
|
+
spec.homepage = "https://github.com/rocketshipio/monolith"
|
14
|
+
spec.required_ruby_version = ">= 2.6.0"
|
15
|
+
|
16
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
17
|
+
|
18
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
19
|
+
spec.metadata["source_code_uri"] = spec.homepage
|
20
|
+
spec.metadata["changelog_uri"] = spec.homepage
|
21
|
+
|
22
|
+
# Specify which files should be added to the gem when it is released.
|
23
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
24
|
+
spec.files = Dir.chdir(__dir__) do
|
25
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
26
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
27
|
+
end
|
28
|
+
end
|
29
|
+
spec.bindir = "exe"
|
30
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ["lib"]
|
32
|
+
|
33
|
+
# Uncomment to register a new dependency of your gem
|
34
|
+
spec.add_dependency "thor", "~> 1.0"
|
35
|
+
|
36
|
+
# For more information and examples about making a new gem, check out our
|
37
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
38
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: majestic-monolith
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Brad Gessler
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-05-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: thor
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
description: CLI used to create Rails monoliths by Rocketship for quickly building
|
28
|
+
SaaS applications.
|
29
|
+
email:
|
30
|
+
- brad@rocketship.com
|
31
|
+
executables:
|
32
|
+
- monolith
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- ".rspec"
|
37
|
+
- Gemfile
|
38
|
+
- Gemfile.lock
|
39
|
+
- README.md
|
40
|
+
- Rakefile
|
41
|
+
- exe/monolith
|
42
|
+
- lib/majestic/monolith.rb
|
43
|
+
- lib/majestic/monolith/cli.rb
|
44
|
+
- lib/majestic/monolith/templates/alpha.rb
|
45
|
+
- lib/majestic/monolith/templates/alpha/template.rb
|
46
|
+
- lib/majestic/monolith/templates/alpha/template/Procfile.dev
|
47
|
+
- lib/majestic/monolith/version.rb
|
48
|
+
- majestic-monolith.gemspec
|
49
|
+
- sig/majestic/monolith.rbs
|
50
|
+
homepage: https://github.com/rocketshipio/monolith
|
51
|
+
licenses: []
|
52
|
+
metadata:
|
53
|
+
allowed_push_host: https://rubygems.org
|
54
|
+
homepage_uri: https://github.com/rocketshipio/monolith
|
55
|
+
source_code_uri: https://github.com/rocketshipio/monolith
|
56
|
+
changelog_uri: https://github.com/rocketshipio/monolith
|
57
|
+
post_install_message:
|
58
|
+
rdoc_options: []
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 2.6.0
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
requirements: []
|
72
|
+
rubygems_version: 3.2.3
|
73
|
+
signing_key:
|
74
|
+
specification_version: 4
|
75
|
+
summary: CLI used to create Rails monoliths by Rocketship for quickly building SaaS
|
76
|
+
applications.
|
77
|
+
test_files: []
|