domain_engine 1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c5754785172c640582cb6a3f167192920be3d02a4a21079137126cdc2bcbe79a
4
+ data.tar.gz: d13ffd999cd838669b9f563b01a7192ceed44892d08fa0a3185fcfdee52724ac
5
+ SHA512:
6
+ metadata.gz: 71dc0bc572601fb9f2da82cca6bfdae3ce659528fdd6a5d26c3bcdc484a4cf8c569fbaaad90a0472ad39d8f1067f388fa45cab71b2e08db34ea14c90e9b10bd6
7
+ data.tar.gz: 507e0274e5fcc7bade0f6d259fe7808b8c0763267290acab007e0f8bc935df538ddcb546b545dce4b4af9af9068dbeaac0c87f5801336bb2455a7d913eefdd65
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
data/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # Domain Engine
2
+
3
+ This gem provides a rails generator for scaffolding new domain engines in a Rails project.
4
+
5
+ ## Installation
6
+
7
+ Add it to your Gemfile under the development dependencies:
8
+
9
+ ```ruby
10
+ group :development do
11
+ gem "domain_engine"
12
+ end
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ You can invoke it like any other generator. It requires an argument for the name of your domain.
18
+ The name can be provided as a class name (`MyDomain`) or a file name (`my_domain`)
19
+
20
+ `rails g domain_engine:new MyDomain`
21
+
22
+ The following folders are created under a `domains` folder in the root of the Rails app (`domains` is also created if it does not exist):
23
+
24
+ ``` shell
25
+ domains/my_domain/
26
+ ├── app
27
+ │ ├── blueprints
28
+ │ │ └── my_domain
29
+ │ ├── commands
30
+ │ │ └── my_domain
31
+ │ ├── controllers
32
+ │ │ └── my_domain
33
+ │ │ ├── application_controller.rb
34
+ │ │ └── hellos_controller.rb
35
+ │ ├── domain
36
+ │ │ └── my_domain
37
+ │ ├── infrastructure
38
+ │ │ └── my_domain
39
+ │ ├── jobs
40
+ │ │ └── my_domain
41
+ │ ├── models
42
+ │ │ └── my_domain
43
+ │ └── queries
44
+ │ └── my_domain
45
+ ├── config
46
+ │ └── routes.rb
47
+ ├── doc
48
+ ├── lib
49
+ │ ├── engine.rb
50
+ │ └── tasks
51
+ ├── package.yml
52
+ └── spec
53
+ ├── commands
54
+ │ └── my_domain
55
+ ├── controllers
56
+ │ └── my_domain
57
+ │ └── hellos_controller_spec.rb
58
+ ├── domain
59
+ │ └── my_domain
60
+ ├── factories
61
+ ├── fixtures
62
+ ├── infrastructure
63
+ │ └── my_domain
64
+ ├── jobs
65
+ │ └── my_domain
66
+ ├── models
67
+ │ └── my_domain
68
+ ├── package_helper.rb
69
+ ├── queries
70
+ │ └── my_domain
71
+ ├── requests
72
+ │ └── my_domain
73
+ └── support
74
+ └── controller_extension.rb
75
+ ```
76
+
77
+ ## Verify
78
+
79
+ Once completed you can verify that your domain works by running `rspec domains/my_domain` and see the example spec pass.
@@ -0,0 +1,18 @@
1
+ require File.expand_path('lib/domain_engine/version', __dir__)
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = 'domain_engine'
5
+ spec.version = DomainEngine::VERSION
6
+ spec.authors = ['Josh Cass']
7
+ spec.email = ['josh@bonus.ly']
8
+ spec.summary = 'Provides a rails generator for Bonusly domain engines'
9
+ spec.homepage = 'https://gitlab.com/bonusly/engineering/gems/domain-engine'
10
+ spec.license = 'MIT'
11
+ spec.required_ruby_version = '>= 3.2.2'
12
+ spec.require_paths = ['lib']
13
+ spec.files = Dir['README.md', 'lib/**/*.rb', 'lib/**/*.rb.tt', 'lib/**/*.yml.tt', 'domain_engine.gemspec', 'Gemfile', 'Rakefile']
14
+
15
+ spec.add_dependency 'railties', '>= 7.0'
16
+
17
+ spec.add_development_dependency 'solargraph', '>= 0.50'
18
+ end
@@ -0,0 +1,3 @@
1
+ module DomainEngine
2
+ VERSION = '1.1.0'
3
+ end
@@ -0,0 +1,4 @@
1
+ require 'rails'
2
+
3
+ module DomainEngine
4
+ end
@@ -0,0 +1,70 @@
1
+ require 'rails/generators'
2
+
3
+ module DomainEngine
4
+ module Generators
5
+ class NewGenerator < Rails::Generators::NamedBase
6
+ desc 'Generates scaffolding for a package engine under /domains/NAME'
7
+
8
+ source_root File.expand_path('../templates', __dir__)
9
+
10
+ def create_top_level_directories
11
+ empty_directory 'domains'
12
+ empty_directory "domains/#{file_name}"
13
+ empty_directory "domains/#{file_name}/app"
14
+ empty_directory "domains/#{file_name}/config"
15
+ empty_directory "domains/#{file_name}/lib"
16
+ empty_directory "domains/#{file_name}/spec"
17
+ empty_directory_with_keep_file "domains/#{file_name}/doc"
18
+ end
19
+
20
+ def create_sub_directories
21
+ empty_directory "domains/#{file_name}/app/controllers/#{file_name}"
22
+ empty_directory "domains/#{file_name}/spec/controllers/#{file_name}"
23
+ empty_directory "domains/#{file_name}/spec/support"
24
+
25
+ empty_directory_with_keep_file "domains/#{file_name}/app/blueprints/#{file_name}"
26
+ empty_directory_with_keep_file "domains/#{file_name}/app/commands/#{file_name}"
27
+ empty_directory_with_keep_file "domains/#{file_name}/app/domain/#{file_name}"
28
+ empty_directory_with_keep_file "domains/#{file_name}/app/infrastructure/#{file_name}"
29
+ empty_directory_with_keep_file "domains/#{file_name}/app/jobs/#{file_name}"
30
+ empty_directory_with_keep_file "domains/#{file_name}/app/models/#{file_name}"
31
+ empty_directory_with_keep_file "domains/#{file_name}/app/queries/#{file_name}"
32
+
33
+ empty_directory_with_keep_file "domains/#{file_name}/lib/tasks"
34
+
35
+ empty_directory_with_keep_file "domains/#{file_name}/spec/factories"
36
+ empty_directory_with_keep_file "domains/#{file_name}/spec/fixtures"
37
+ empty_directory_with_keep_file "domains/#{file_name}/spec/commands/#{file_name}"
38
+ empty_directory_with_keep_file "domains/#{file_name}/spec/domain/#{file_name}"
39
+ empty_directory_with_keep_file "domains/#{file_name}/spec/infrastructure/#{file_name}"
40
+ empty_directory_with_keep_file "domains/#{file_name}/spec/jobs/#{file_name}"
41
+ empty_directory_with_keep_file "domains/#{file_name}/spec/models/#{file_name}"
42
+ empty_directory_with_keep_file "domains/#{file_name}/spec/queries/#{file_name}"
43
+ empty_directory_with_keep_file "domains/#{file_name}/spec/requests/#{file_name}"
44
+ end
45
+
46
+ def create_files
47
+ template 'package.yml', "domains/#{file_name}/package.yml"
48
+ template 'engine.rb', "domains/#{file_name}/lib/engine.rb"
49
+ template 'routes.rb', "domains/#{file_name}/config/routes.rb"
50
+ template 'application_controller.rb', "domains/#{file_name}/app/controllers/#{file_name}/application_controller.rb"
51
+ template 'hellos_controller.rb', "domains/#{file_name}/app/controllers/#{file_name}/hellos_controller.rb"
52
+ template 'package_helper.rb', "domains/#{file_name}/spec/package_helper.rb"
53
+ template 'controller_extension.rb', "domains/#{file_name}/spec/support/controller_extension.rb"
54
+ template 'hellos_controller_spec.rb',
55
+ "domains/#{file_name}/spec/controllers/#{file_name}/hellos_controller_spec.rb"
56
+ end
57
+
58
+ private
59
+
60
+ def empty_directory_with_keep_file(destination)
61
+ empty_directory destination
62
+ keep_file destination
63
+ end
64
+
65
+ def keep_file(destination)
66
+ create_file("#{destination}/.keep")
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,4 @@
1
+ module <%= class_name %>
2
+ class ApplicationController < ActionController::API
3
+ end
4
+ end
@@ -0,0 +1,20 @@
1
+ module <%= class_name %>
2
+ module ControllerExtension
3
+ def self.included(base)
4
+ base.routes { <%=class_name %>::Engine.routes }
5
+ end
6
+
7
+ # You may add more controller extension code here
8
+ # for example you might want to provide a method to
9
+ # easily authenticate a user in your specs:
10
+ #
11
+ # def authenticate_user(user_id: BSON::ObjectId.new, company_id: BSON::ObjectId.new)
12
+ # allow(controller).to receive(:authenticator).and_return(
13
+ # double("Mock::Api::Authenticator",
14
+ # authenticate: true,
15
+ # authenticated_user_id: user_id,
16
+ # authenticated_company_id: company_id)
17
+ # )
18
+ # end
19
+ end
20
+ end
@@ -0,0 +1,5 @@
1
+ module <%= class_name %>
2
+ class Engine < Rails::Engine
3
+ isolate_namespace <%= class_name %>
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module <%= class_name %>
2
+ class HellosController < ApplicationController
3
+ def index
4
+ render json: { message: "hello world!" }
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,11 @@
1
+ require_relative '../../package_helper'
2
+
3
+ RSpec.describe <%= class_name %>::HellosController do
4
+ include <%= class_name %>::ControllerExtension
5
+
6
+ it "says hello" do
7
+ get :index
8
+
9
+ expect(JSON.parse(response.body)["message"]).to eq "hello world!"
10
+ end
11
+ end
@@ -0,0 +1,2 @@
1
+ enforce_dependencies: true
2
+ enforce_privacy: true
@@ -0,0 +1,8 @@
1
+ # Load spec helper from the main app
2
+ require File.expand_path("../../../spec/spec_helper.rb", __dir__)
3
+
4
+ # Load package engine factories
5
+ Dir.glob(File.expand_path("factories/**/*.rb", __dir__)).sort.each { |f| require f }
6
+
7
+ # Load package engine spec support
8
+ Dir.glob(File.expand_path("support/**/*.rb", __dir__)).sort.each { |f| require f }
@@ -0,0 +1,3 @@
1
+ <%= class_name %>::Engine.routes.draw do
2
+ resources :hellos, only: :index
3
+ end
metadata ADDED
@@ -0,0 +1,85 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: domain_engine
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Josh Cass
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 1980-01-01 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '7.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '7.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: solargraph
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0.50'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0.50'
41
+ description:
42
+ email:
43
+ - josh@bonus.ly
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - Gemfile
49
+ - README.md
50
+ - domain_engine.gemspec
51
+ - lib/domain_engine.rb
52
+ - lib/domain_engine/version.rb
53
+ - lib/generators/domain_engine/new_generator.rb
54
+ - lib/generators/templates/application_controller.rb.tt
55
+ - lib/generators/templates/controller_extension.rb.tt
56
+ - lib/generators/templates/engine.rb.tt
57
+ - lib/generators/templates/hellos_controller.rb.tt
58
+ - lib/generators/templates/hellos_controller_spec.rb.tt
59
+ - lib/generators/templates/package.yml.tt
60
+ - lib/generators/templates/package_helper.rb.tt
61
+ - lib/generators/templates/routes.rb.tt
62
+ homepage: https://gitlab.com/bonusly/engineering/gems/domain-engine
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: 3.2.2
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubygems_version: 3.4.22
82
+ signing_key:
83
+ specification_version: 4
84
+ summary: Provides a rails generator for Bonusly domain engines
85
+ test_files: []