ruby-app-gen 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/app-gen +10 -0
- data/lib/app_gen/app.rb +126 -0
- data/lib/app_gen.rb +20 -0
- data/lib/templates/Gemfile.erb +15 -0
- data/lib/templates/Rakefile.erb +21 -0
- data/lib/templates/bin/console.erb +10 -0
- data/lib/templates/db/config/database.yml.erb +7 -0
- data/lib/templates/lib/app/app.rb.erb +51 -0
- data/lib/templates/lib/app.rb.erb +20 -0
- metadata +108 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 2df760d07f0f14ec5f85340e4599dad4da908121ed72cc1252666aa2ef799fb3
|
4
|
+
data.tar.gz: 0f7f37c37beee202797d50b55cdb600abd907a6c3021ad0c0232d8182e72abd4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 560e374acf0a85b4bdcb0427f1b038e12f1c92d51644e8a7f38afe522c71f2d0a4621d42825d46b28428dcaf7eaf83fd2811c683120e23cf0a16eed91098bf96
|
7
|
+
data.tar.gz: 997541049be92bca9978ce938540b379d4638cf25315cffe8bd86126362a98df3c225ac03577348375f0ece42b265d8ada6bcc5bce6174c548134b07762843c5
|
data/bin/app-gen
ADDED
data/lib/app_gen/app.rb
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
require 'active_support/core_ext/string'
|
6
|
+
require 'erubi'
|
7
|
+
require 'thor'
|
8
|
+
|
9
|
+
module AppGen
|
10
|
+
class App < Thor
|
11
|
+
desc 'generate APP_NAME PATH', 'generate a ruby application skeleton'
|
12
|
+
option :force, type: :boolean, desc: 'overrides all the application files is exist'
|
13
|
+
option :database, type: :boolean, default: true, desc: 'generates DB related files'
|
14
|
+
def generate(app_name, path)
|
15
|
+
@app_name = app_name
|
16
|
+
@app_root = File.join(path, app_name)
|
17
|
+
@root = File.expand_path('../..', __dir__)
|
18
|
+
|
19
|
+
create_directories
|
20
|
+
create_files
|
21
|
+
puts 'Complete!'
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :app_name, :app_root, :root
|
27
|
+
|
28
|
+
def terminate!(error_code: 1, error_message: nil)
|
29
|
+
puts error_message if error_message
|
30
|
+
exit error_code
|
31
|
+
end
|
32
|
+
|
33
|
+
def app_filename
|
34
|
+
@app_filename ||= app_name.underscore
|
35
|
+
end
|
36
|
+
|
37
|
+
def app_classname
|
38
|
+
@app_classname ||= app_filename.camelize
|
39
|
+
end
|
40
|
+
|
41
|
+
def templates_path
|
42
|
+
File.join(root, 'lib/templates')
|
43
|
+
end
|
44
|
+
|
45
|
+
def ask_yes_no(prompt)
|
46
|
+
%w[Y y yes Yes YES].include?(ask("#{prompt} [Y/n]:"))
|
47
|
+
end
|
48
|
+
|
49
|
+
def check_directories
|
50
|
+
return unless Dir.exists?(app_root)
|
51
|
+
return if options.force?
|
52
|
+
return if ask_yes_no("Directory #{app_root} already exists. Do you want to continue?")
|
53
|
+
|
54
|
+
terminate!(error_message: 'Skipped!')
|
55
|
+
end
|
56
|
+
|
57
|
+
def db_directories
|
58
|
+
return [] unless options.database?
|
59
|
+
|
60
|
+
[
|
61
|
+
File.join(app_root, 'db/config'),
|
62
|
+
File.join(app_root, 'db/migrate')
|
63
|
+
]
|
64
|
+
end
|
65
|
+
|
66
|
+
def app_directories
|
67
|
+
[
|
68
|
+
app_root,
|
69
|
+
File.join(app_root, 'bin'),
|
70
|
+
File.join(app_root, "lib/#{app_filename}")
|
71
|
+
]
|
72
|
+
end
|
73
|
+
|
74
|
+
def create_directories
|
75
|
+
check_directories
|
76
|
+
|
77
|
+
(app_directories + db_directories).each do |dir|
|
78
|
+
FileUtils.mkdir_p(dir)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def create_files
|
83
|
+
files = {
|
84
|
+
'Gemfile' => 'Gemfile',
|
85
|
+
'Rakefile' => 'Rakefile',
|
86
|
+
'bin/console' => 'bin/console',
|
87
|
+
'lib/app.rb' => "lib/#{app_filename}.rb",
|
88
|
+
'lib/app/app.rb' => "lib/#{app_filename}/app.rb"
|
89
|
+
}
|
90
|
+
files['db/config/database.yml'] = 'db/config/database.yml' if options.database?
|
91
|
+
|
92
|
+
files.each do |template, file|
|
93
|
+
create_app_file(template, file)
|
94
|
+
end
|
95
|
+
|
96
|
+
FileUtils.chmod 0755, app_file_path('bin/console')
|
97
|
+
end
|
98
|
+
|
99
|
+
def read_template(template_filename)
|
100
|
+
File.read(File.join(templates_path, template_filename))
|
101
|
+
rescue Errno::ENOENT => e
|
102
|
+
terminate!(error_message: "Can't read #{template_filename} template")
|
103
|
+
end
|
104
|
+
|
105
|
+
def template_data_to_src(template_data)
|
106
|
+
template_src = Erubi::Engine.new(template_data).src
|
107
|
+
eval(template_src)
|
108
|
+
end
|
109
|
+
|
110
|
+
def app_file_path(file)
|
111
|
+
File.join(app_root, file)
|
112
|
+
end
|
113
|
+
|
114
|
+
def create_app_file(template, file)
|
115
|
+
app_file_path = app_file_path(file)
|
116
|
+
if !File.exists?(app_file_path) ||
|
117
|
+
options.force? ||
|
118
|
+
ask_yes_no("#{file} already exists, do you want to override it?")
|
119
|
+
src = template_data_to_src(read_template("#{template}.erb"))
|
120
|
+
File.open(app_file_path, 'wb') { |file| file << src }
|
121
|
+
else
|
122
|
+
puts "Skipping #{file}"
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
data/lib/app_gen.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
ENV['APP_ENV'] ||= 'development'
|
4
|
+
ENV['RACK_ENV'] = ENV['APP_ENV']
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'bundler/setup'
|
8
|
+
|
9
|
+
require 'zeitwerk'
|
10
|
+
|
11
|
+
loader = Zeitwerk::Loader.new
|
12
|
+
loader.push_dir(__dir__)
|
13
|
+
loader.enable_reloading if ENV['APP_ENV'] == 'development'
|
14
|
+
loader.setup
|
15
|
+
|
16
|
+
loader.eager_load unless %w[test development].include?(ENV['APP_ENV'])
|
17
|
+
|
18
|
+
module AppGen
|
19
|
+
# no op
|
20
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
|
5
|
+
git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
|
6
|
+
|
7
|
+
<%- if options.database? -%>
|
8
|
+
gem 'activerecord', require: 'active_record'
|
9
|
+
<%- end -%>
|
10
|
+
gem 'irb'
|
11
|
+
gem 'rake'
|
12
|
+
<%- if options.database? -%>
|
13
|
+
gem 'sqlite3'
|
14
|
+
<%- end -%>
|
15
|
+
gem 'zeitwerk'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
libx = File.expand_path('./lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(libx) unless $LOAD_PATH.include?(libx)
|
5
|
+
|
6
|
+
require '<%= app_filename -%>'
|
7
|
+
<%- if options.database? -%>
|
8
|
+
|
9
|
+
task :environment do
|
10
|
+
# no op
|
11
|
+
end
|
12
|
+
|
13
|
+
namespace :db do
|
14
|
+
task :load_config do
|
15
|
+
# Make sure the application was initialized - i.e. database was configured
|
16
|
+
<%= app_classname %>::App.instance
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
load 'active_record/railties/databases.rake'
|
21
|
+
<%- end -%>
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module <%= app_classname %>
|
4
|
+
class App
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
attr_reader :env, :root
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@env = ENV['APP_ENV']
|
11
|
+
@root = File.expand_path('../..', __dir__)
|
12
|
+
<%- if options.database? -%>
|
13
|
+
config_database
|
14
|
+
<%- end -%>
|
15
|
+
end
|
16
|
+
|
17
|
+
def start
|
18
|
+
IRB.start
|
19
|
+
end
|
20
|
+
<%- if options.database? -%>
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def database_path
|
25
|
+
@database_path ||= File.join(root, 'db')
|
26
|
+
end
|
27
|
+
|
28
|
+
def migrations_paths
|
29
|
+
@migrations_paths ||= File.join(database_path, 'migrate')
|
30
|
+
end
|
31
|
+
|
32
|
+
def database_config
|
33
|
+
@database_config ||= begin
|
34
|
+
db_config_path = File.expand_path('config/database.yml', database_path)
|
35
|
+
YAML.load_file(db_config_path)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def config_database
|
40
|
+
ActiveRecord::Tasks::DatabaseTasks.env = env
|
41
|
+
ActiveRecord::Tasks::DatabaseTasks.migrations_paths = migrations_paths
|
42
|
+
ActiveRecord::Tasks::DatabaseTasks.db_dir = database_path
|
43
|
+
ActiveRecord::Tasks::DatabaseTasks.root = root
|
44
|
+
|
45
|
+
ActiveRecord::Base.schema_format = :sql
|
46
|
+
ActiveRecord::Base.configurations = database_config
|
47
|
+
ActiveRecord::Base.establish_connection
|
48
|
+
end
|
49
|
+
<%- end -%>
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
ENV['APP_ENV'] ||= 'development'
|
4
|
+
ENV['RACK_ENV'] = ENV['APP_ENV']
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require 'bundler/setup'
|
8
|
+
|
9
|
+
Bundler.require('default', ENV['APP_ENV'])
|
10
|
+
|
11
|
+
loader = Zeitwerk::Loader.new
|
12
|
+
loader.push_dir(__dir__)
|
13
|
+
loader.enable_reloading if ENV['APP_ENV'] == 'development'
|
14
|
+
loader.setup
|
15
|
+
|
16
|
+
loader.eager_load unless %w[test development].include?(ENV['APP_ENV'])
|
17
|
+
|
18
|
+
module <%= app_classname %>
|
19
|
+
# no op
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ruby-app-gen
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dima Lunich
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-11-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '6.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '6.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: erubi
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.10'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.10'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: thor
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.1'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.1'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: zeitwerk
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.5'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.5'
|
69
|
+
description: A simple gem to generate a ruby app
|
70
|
+
email: dima.lunich@gmail.com
|
71
|
+
executables:
|
72
|
+
- app-gen
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- bin/app-gen
|
77
|
+
- lib/app_gen.rb
|
78
|
+
- lib/app_gen/app.rb
|
79
|
+
- lib/templates/Gemfile.erb
|
80
|
+
- lib/templates/Rakefile.erb
|
81
|
+
- lib/templates/bin/console.erb
|
82
|
+
- lib/templates/db/config/database.yml.erb
|
83
|
+
- lib/templates/lib/app.rb.erb
|
84
|
+
- lib/templates/lib/app/app.rb.erb
|
85
|
+
homepage: https://github.com/lunich/ruby-app-gen
|
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: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
requirements: []
|
104
|
+
rubygems_version: 3.2.15
|
105
|
+
signing_key:
|
106
|
+
specification_version: 4
|
107
|
+
summary: AppGen ruby gem
|
108
|
+
test_files: []
|