rails_app 0.7.0 → 0.8.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 534816163e2b9fc2c353d1a2afb4568c8bd9b3355b46fcbe1b132b83cb89acad
4
- data.tar.gz: e2e50fd1ebe97b1981da6713e49cc7595c8f11c58bb600b67e7b99088a745252
3
+ metadata.gz: 58716cd225034bd8c2deecc05e99d82b58d05ffbbdeadc3b721a526d249a4b1e
4
+ data.tar.gz: 531c6ecd9e5a5910d0170a53a2cf50e31f294037ae2deeb21908eb2de626f45b
5
5
  SHA512:
6
- metadata.gz: d5242d9c1382772a58599ab08658745d6eac76a12c78ef2b83395af317a777abd022885028c5f664087882a4b6fed1331b831a0cc5dec9bd760746b5268ceb05
7
- data.tar.gz: b3dcfc4ecbe21b2c96435606cb44bd7867f1de8d8da66075d50b9852db7d294580639434fdbef7f2fe4e81f72dcad879a5c336eeb5cf5a7ba1ea3b513a8fde16
6
+ metadata.gz: 0be667225b33a863c11cd13a0a9f1fa5cf52b70983d6cd3c549c89f3e1012942a0bb44dd1de6f695db48dca5275e23512a5e053541439bfa73480ba73b6ccc68
7
+ data.tar.gz: 420dc812fc3fb540a55b072c4a4ec18635862efbdb2bdf751de64890dc279b33b76cbbb4840a81cc296bf06d1ba72d068439311e1a5e57d13d361b126e09461f
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.8.0](https://github.com/eclectic-coding/rails_app/tree/0.8.0) (2024-04-05)
4
+
5
+ [Full Changelog](https://github.com/eclectic-coding/rails_app/compare/0.7.0...0.8.0)
6
+
7
+ **Implemented enhancements:**
8
+
9
+ - setup `tty-config` to save a new config [\#24](https://github.com/eclectic-coding/rails_app/issues/24)
10
+ - Add more tests [\#4](https://github.com/eclectic-coding/rails_app/issues/4)
11
+ - Setup tty config to save a new config [\#25](https://github.com/eclectic-coding/rails_app/pull/25) ([eclectic-coding](https://github.com/eclectic-coding))
12
+ - 4 add more tests [\#23](https://github.com/eclectic-coding/rails_app/pull/23) ([eclectic-coding](https://github.com/eclectic-coding))
13
+
3
14
  ## [0.7.0](https://github.com/eclectic-coding/rails_app/tree/0.7.0) (2024-04-04)
4
15
 
5
16
  [Full Changelog](https://github.com/eclectic-coding/rails_app/compare/0.6.0...0.7.0)
data/README.md CHANGED
@@ -1,5 +1,6 @@
1
1
  ![GitHub License](https://img.shields.io/github/license/eclectic-coding/rails_app)
2
2
  [![Tests](https://github.com/eclectic-coding/rails_app/actions/workflows/ci.yml/badge.svg)](https://github.com/eclectic-coding/rails_app/actions/workflows/ci.yml)
3
+ [![Gem Version](https://badge.fury.io/rb/rails_app.svg)](https://badge.fury.io/rb/rails_app)
3
4
  # RailsApp
4
5
 
5
6
  RailsApp is a gem that provides a simple way to create a new Rails application with a pre-configured set of gems and settings, utilizing the Rails application templates feature.
@@ -23,11 +24,11 @@ To bootstrap a new Rails application: `rails_app`
23
24
 
24
25
  The user will be prompted to enter the name of the new Rails application, and the select the assets pipeline to use (propshaft or sprockets), and a styling option:
25
26
 
26
- ![](./screenshot_cli.png)
27
+ ![](assets/screenshot_cli.png)
27
28
 
28
29
  Also, you can select your database of choice:
29
30
 
30
- ![](./screenshot_cli_db.png)
31
+ ![](assets/screenshot_cli_db.png)
31
32
 
32
33
  The template will then create a new Rails application with the selected options.
33
34
 
@@ -35,6 +36,7 @@ The template will then create a new Rails application with the selected options.
35
36
 
36
37
  There is an additional syntax, available starting with release `v. 0.7.0`, which allows you to use `rails_app` very similarly to the `rails new` command:
37
38
 
39
+
38
40
  ```bash
39
41
  rails_app new my_app -a propshaft --css bootstrap -d postgresql
40
42
  ```
@@ -52,6 +54,15 @@ Right not this syntax only supports the following options:
52
54
 
53
55
  More options will be added in future releases.
54
56
 
57
+ ## Configuration
58
+ **NEW** Starting with release `v. 0.8.0`, you can save your preferred defaults to you users home directory (`rails_aap-config.yml`).
59
+ If a file has been previously saved, you will be prompted if you want to use:
60
+ ![](assets/screenshot_cli_readconfig.png)
61
+
62
+
63
+ Then your options will be pre-selected:
64
+ ![](assets/screenshot_cli_useconfig.png)
65
+
55
66
  ## Testing
56
67
  The template includes RSpec for testing, which includes pre configured:
57
68
  - FactoryBot
Binary file
data/lib/rails_app/cli.rb CHANGED
@@ -8,26 +8,42 @@ module RailsApp
8
8
  prompt = TTY::Prompt.new
9
9
 
10
10
  options_data = OptionsData.new(args)
11
+ config_file = ConfigFile.new
11
12
 
12
13
  app_name = options_data.app_name || prompt.ask("What is the name of your application?", required: true)
13
14
 
14
- assets = prompt.select("How would you like to manage assets?", %w[propshaft sprockets], default: options_data.default_assets)
15
- styling_choices = [
16
- {name: "Bootstrap", value: "bootstrap"},
17
- {name: "Tailwind CSS", value: "tailwind"},
18
- {name: "Bulma", value: "bulma"},
19
- {name: "PostCSS", value: "postcss"},
20
- {name: "SASS", value: "sass"}
21
- ]
22
- styling = prompt.select("How would you like to manage styling?", styling_choices, default: options_data.default_styling)
15
+ # Read the configuration and ask the user if they want to use it
16
+ config_options = config_file.read
17
+ if config_options && prompt.yes?("Do you want to use this configuration? #{config_options}")
18
+ options_data = OptionsData.from_config(config_options)
19
+ end
23
20
 
21
+ assets = prompt.select("How would you like to manage assets?", %w[propshaft sprockets], default: options_data.default_assets)
22
+ styling = prompt.select("How would you like to manage styling?", %w[bootstrap tailwind bulma postcss sass], default: options_data.default_styling)
24
23
  database = prompt.select("Which database would you like to use?",
25
24
  %w[postgresql sqlite3 mysql trilogy oracle sqlserver jdbcmysql jdbcsqlite3 jdbcpostgresql jdbc],
26
25
  default: options_data.default_database)
27
26
 
28
- # save configuration
29
-
30
- Command.new(app_name: app_name, assets: assets, styling: styling, database: database).run
27
+ # Collect all configuration options into a hash
28
+ config_options = {
29
+ app_name: app_name,
30
+ assets: assets,
31
+ styling: styling,
32
+ database: database
33
+ }
34
+
35
+ # Ask the user if they wish to save their configuration
36
+ if prompt.yes?("Do you wish to save your configuration?")
37
+ # Iterate over the hash and set the configuration
38
+ config_options.each do |key, value|
39
+ next if key == :app_name
40
+ config_file.set(key, value)
41
+ end
42
+ config_file.write(force: true)
43
+ puts "Configuration saved successfully @ #{config_file.full_path}"
44
+ end
45
+
46
+ Command.new(config_options).run
31
47
  end
32
48
  end
33
49
  end
@@ -1,14 +1,12 @@
1
- # frozen_string_literal: true
2
-
3
1
  module RailsApp
4
2
  class Command
5
3
  attr_reader :app_name, :assets, :styling, :database
6
4
 
7
- def initialize(app_name:, assets:, styling:, database:)
8
- @app_name = app_name
9
- @assets = assets
10
- @styling = styling
11
- @database = database
5
+ def initialize(args)
6
+ @app_name = args[:app_name]
7
+ @assets = args[:assets]
8
+ @styling = args[:styling]
9
+ @database = args[:database]
12
10
  end
13
11
 
14
12
  def template
@@ -17,6 +15,7 @@ module RailsApp
17
15
 
18
16
  def run
19
17
  command = "rails new #{@app_name} --no-rc #{skip_spring} #{database_adapter} #{asset_management} #{javascript_bundling} #{styling_framework} #{testing_framework} -m #{template}"
18
+ command.squeeze!(" ")
20
19
  puts command
21
20
  system(command)
22
21
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "tty-config"
4
+
5
+ module RailsApp
6
+ class ConfigFile
7
+ def initialize
8
+ @config = TTY::Config.new
9
+ @config.append_path(Dir.home)
10
+ @config.filename = "rails_app-config"
11
+ @config.extname = ".yml"
12
+ end
13
+
14
+ def exist?
15
+ @config.exist?
16
+ end
17
+
18
+ def set(key, value)
19
+ @config.set(key, value: value)
20
+ end
21
+
22
+ def write(force: false)
23
+ @config.write(force: force)
24
+ end
25
+
26
+ def full_path
27
+ File.join(@config.location_paths[0] + "/" + @config.filename + @config.extname)
28
+ end
29
+
30
+ def read
31
+ @config.read if exist?
32
+ @config.to_h
33
+ end
34
+ end
35
+ end
@@ -5,7 +5,12 @@ module RailsApp
5
5
  attr_reader :options
6
6
 
7
7
  def initialize(args)
8
- @options = args.flat_map { |arg| arg.split(" ") }
8
+ @options = args
9
+ end
10
+
11
+ def self.from_config(config_hash)
12
+ new_args = config_hash.map { |key, value| value.to_s }
13
+ new(new_args)
9
14
  end
10
15
 
11
16
  def app_name
@@ -17,15 +22,17 @@ module RailsApp
17
22
  end
18
23
 
19
24
  def default_styling
20
- if @options.include?("tailwind")
21
- "tailwind"
22
- elsif @options.include?("bulma")
23
- "bulma"
24
- elsif @options.include?("postcss")
25
- "postcss"
26
- elsif @options.include?("sass")
25
+ if @options.any? { |option| option.end_with?("tailwind") }
26
+ "tailwind".strip
27
+ elsif @options.any? { |option| option.end_with?("bulma") }
28
+ "bulma".strip
29
+ elsif @options.any? { |option| option.end_with?("postcss") }
30
+ "postcss".strip
31
+ elsif @options.any? { |option| option.end_with?("sass") }
27
32
  "sass"
28
- elsif @options.include?("bootstrap")
33
+ elsif @options.any? { |option| option.end_with?("bootstrap") }
34
+ "bootstrap"
35
+ else
29
36
  "bootstrap"
30
37
  end
31
38
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsApp
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0"
5
5
  end
data/lib/rails_app.rb CHANGED
@@ -7,5 +7,6 @@ module RailsApp
7
7
  autoload :CLI, "rails_app/cli"
8
8
  autoload :Command, "rails_app/command"
9
9
  autoload :OptionsData, "rails_app/options_data"
10
+ autoload :ConfigFile, "rails_app/config_file"
10
11
  autoload :Error, "rails_app/error"
11
12
  end
data/rails_app.gemspec CHANGED
@@ -33,4 +33,5 @@ Gem::Specification.new do |spec|
33
33
  spec.add_dependency "bootsnap", "~> 1.18", ">= 1.18.3" # used by rails new
34
34
  spec.add_dependency "thor", "~> 1.3", ">= 1.3.1"
35
35
  spec.add_dependency "tty-prompt", "~> 0.23.1"
36
+ spec.add_dependency "tty-config", "~> 0.6.0"
36
37
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_app
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chuck Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-04-04 00:00:00.000000000 Z
11
+ date: 2024-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bootsnap
@@ -64,6 +64,20 @@ dependencies:
64
64
  - - "~>"
65
65
  - !ruby/object:Gem::Version
66
66
  version: 0.23.1
67
+ - !ruby/object:Gem::Dependency
68
+ name: tty-config
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: 0.6.0
74
+ type: :runtime
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: 0.6.0
67
81
  description: Bootstrap a new customized Rails application with a better development
68
82
  experience.
69
83
  email:
@@ -80,10 +94,15 @@ files:
80
94
  - LICENSE.txt
81
95
  - README.md
82
96
  - Rakefile
97
+ - assets/screenshot_cli.png
98
+ - assets/screenshot_cli_db.png
99
+ - assets/screenshot_cli_readconfig.png
100
+ - assets/screenshot_cli_useconfig.png
83
101
  - bin/rails_app
84
102
  - lib/rails_app.rb
85
103
  - lib/rails_app/cli.rb
86
104
  - lib/rails_app/command.rb
105
+ - lib/rails_app/config_file.rb
87
106
  - lib/rails_app/error.rb
88
107
  - lib/rails_app/options_data.rb
89
108
  - lib/rails_app/rails_app.rb
@@ -227,8 +246,6 @@ files:
227
246
  - lib/rails_app/template/template.rb
228
247
  - lib/rails_app/version.rb
229
248
  - rails_app.gemspec
230
- - screenshot_cli.png
231
- - screenshot_cli_db.png
232
249
  homepage: https://github.com/eclectic-coding/rails_app
233
250
  licenses:
234
251
  - MIT
File without changes