ricogen 0.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.
- data/README.md +234 -0
- data/REVISION +1 -0
- data/Rakefile +24 -0
- data/SNIPPETS.md +32 -0
- data/VERSION +1 -0
- data/bin/ricogen +61 -0
- data/init.rb +123 -0
- data/ricogen.gemspec +27 -0
- data/templates/Gemfile +42 -0
- data/templates/_config.rb +49 -0
- data/templates/application.html.haml +28 -0
- data/templates/application.rb +8 -0
- data/templates/compass.config +15 -0
- data/templates/compass.rb +5 -0
- data/templates/database.yml +10 -0
- data/templates/environment.rb +13 -0
- data/templates/gitignore +6 -0
- data/templates/javascripts/application.js +7 -0
- data/templates/javascripts/rails.js +1 -0
- data/templates/magent.yml +13 -0
- data/templates/mongo.rb +18 -0
- data/templates/sass/_setup.sass +12 -0
- data/templates/sass/application.sass +15 -0
- data/templates/sass/lib/_extend.sass +87 -0
- data/templates/sass/lib/_mixins.sass +78 -0
- data/templates/sass/lib/_reset.sass +150 -0
- data/templates/sass/lib/_variables.sass +26 -0
- data/templates/sass/styles/_common.sass +1 -0
- data/templates/sass/styles/_extend.sass +1 -0
- data/templates/sass/styles/_mixins.sass +1 -0
- data/templates/sass/styles/_template.sass +1 -0
- data/templates/sass/styles/_variables.sass +1 -0
- data/test/hamgen_test.rb +33 -0
- metadata +154 -0
data/README.md
ADDED
@@ -0,0 +1,234 @@
|
|
1
|
+
# Hampton's Shawn's Rails 3 Generator
|
2
|
+
|
3
|
+
This is a fork of Shawn's Rails 3 Templates. Shawn is the greatest front-end coder I've ever known.
|
4
|
+
Flat out. And, this combines his default setup and some of my own personal preferences. This is basically
|
5
|
+
a simple Rails project generator that gives you a good simple place to start.
|
6
|
+
|
7
|
+
The philosophy is not to install everything ever. I'm trying to keep the original stack thin.
|
8
|
+
|
9
|
+
Also, the other philosophy is that I built this for me. Not for you. You are welcome to use it,
|
10
|
+
but no bitching about what you prefer. Feel free to fork this to your black little heart's content.
|
11
|
+
|
12
|
+
***
|
13
|
+
|
14
|
+
## Requirements
|
15
|
+
<table>
|
16
|
+
<tr>
|
17
|
+
<th>ruby</th>
|
18
|
+
<td>≥ 1.9.2</td>
|
19
|
+
</tr>
|
20
|
+
<tr>
|
21
|
+
<th>rails</th>
|
22
|
+
<td>≥ 3.0.0</td>
|
23
|
+
</tr>
|
24
|
+
<tr>
|
25
|
+
<th>haml</th>
|
26
|
+
<td>≥ 3.0.18</td>
|
27
|
+
</tr>
|
28
|
+
<tr>
|
29
|
+
<th>bundler</th>
|
30
|
+
<td>≥ 0.9.26</td>
|
31
|
+
</tr>
|
32
|
+
<tr>
|
33
|
+
<th>colored</th>
|
34
|
+
<td>≥ 1.2</td>
|
35
|
+
</tr>
|
36
|
+
</table>
|
37
|
+
|
38
|
+
## Getting Started
|
39
|
+
|
40
|
+
Install the gem with "gem install ricogen" then run "ricogen #{app_name}" which app_name is your app name... duh!
|
41
|
+
|
42
|
+
Then it builds something *I* like.
|
43
|
+
|
44
|
+
## Internet Explorer Support
|
45
|
+
|
46
|
+
The defaults in this project _do not_ support anything below **IE8**. Instead, using conditional
|
47
|
+
comments, all javascript is removed and IE 7 and below are served with the [Universal IE CSS](http://code.google.com/p/universal-ie6-css/)
|
48
|
+
stylesheet. The content is readable and accessible in these browsers, but presented with a simpler style.
|
49
|
+
|
50
|
+
There is also meta information setup in `application.html.haml` to set IE8 to `edge` compatibility and also to check for _Google Chrome Frame_,
|
51
|
+
if it exists.
|
52
|
+
|
53
|
+
## Sass
|
54
|
+
|
55
|
+
### Directory Structure
|
56
|
+
* **/sass**
|
57
|
+
* \_setup.sass **_(START HERE!)_**
|
58
|
+
* application.sass (Where all @imports are linked.)
|
59
|
+
* **/lib** (Default libraries. Basically, don't touch these!)
|
60
|
+
* \_extend.sass
|
61
|
+
* \_mixins.sass
|
62
|
+
* \_reset.sass
|
63
|
+
* \_variables.sass
|
64
|
+
* **/styles** (Place your project-specific Sass in these files.)
|
65
|
+
* \_common.sass
|
66
|
+
* \_extend.sass
|
67
|
+
* \_mixins.sass
|
68
|
+
* \_template.sass
|
69
|
+
* \_variables.sass
|
70
|
+
|
71
|
+
|
72
|
+
### Default Variables and Mixins in Sass
|
73
|
+
|
74
|
+
The following **variables `$`** and **mixins `+`** have been included in the project's Sass `lib` directory.
|
75
|
+
|
76
|
+
#### Cross-browser Mixins
|
77
|
+
|
78
|
+
<table>
|
79
|
+
<tr>
|
80
|
+
<th align="left">name</th>
|
81
|
+
<th align="left">function</th>
|
82
|
+
</tr>
|
83
|
+
|
84
|
+
<tr>
|
85
|
+
<td>+border-radius(<code>string</code>)</td>
|
86
|
+
<td>
|
87
|
+
Creates rounded corners that work in modern browsers.
|
88
|
+
If you wish to target less than four corners, append the position to the mixin like so:
|
89
|
+
<br>
|
90
|
+
<code>+border-radius-top-left(10px)</code>
|
91
|
+
</td>
|
92
|
+
</tr>
|
93
|
+
|
94
|
+
<tr>
|
95
|
+
<td>+box-shadow(<code>string</code>)</td>
|
96
|
+
<td>Creates a drop shadow that works in modern browsers.</td>
|
97
|
+
</tr>
|
98
|
+
|
99
|
+
<tr>
|
100
|
+
<td>+column-count(<code>string</code>)</td>
|
101
|
+
<td>Sets the number of CSS3-style columns.</td>
|
102
|
+
</tr>
|
103
|
+
|
104
|
+
<tr>
|
105
|
+
<td>+column-gap(<code>string</code>)</td>
|
106
|
+
<td>Sets the size of the gaps between CSS3-style columns.</td>
|
107
|
+
</tr>
|
108
|
+
|
109
|
+
<tr>
|
110
|
+
<td>+columns(<code>count string</code>, <code>gap string</code>)</td>
|
111
|
+
<td>Sets both column -count and -gap in one mixin.</td>
|
112
|
+
</tr>
|
113
|
+
|
114
|
+
<tr>
|
115
|
+
<td>+opacity(<code>integer</code>)</td>
|
116
|
+
<td>Sets the opacity of an entire element.</td>
|
117
|
+
</tr>
|
118
|
+
|
119
|
+
<tr>
|
120
|
+
<td>+tranform(<code>string</code>)</td>
|
121
|
+
<td>Create a CSS3 transformation.</td>
|
122
|
+
</tr>
|
123
|
+
|
124
|
+
<tr>
|
125
|
+
<td>+transition(<code>string</code>)</td>
|
126
|
+
<td>Create a CSS3 transition.</td>
|
127
|
+
</tr>
|
128
|
+
</table>
|
129
|
+
|
130
|
+
#### Font Stack Variables
|
131
|
+
<table>
|
132
|
+
<tr>
|
133
|
+
<th align="left">name</th>
|
134
|
+
<th align="left">value</th>
|
135
|
+
</tr>
|
136
|
+
<tr>
|
137
|
+
<td>$geneva</td>
|
138
|
+
<td>geneva, tahoma, "dejavu sans condensed", sans-serif</td>
|
139
|
+
</tr>
|
140
|
+
<tr>
|
141
|
+
<td>$helvetica</td>
|
142
|
+
<td>"helvetica neue", helvetica, arial, freesans, "liberation sans", "numbus sans l", sans-serif</td>
|
143
|
+
</tr>
|
144
|
+
<tr>
|
145
|
+
<td>$lucida</td>
|
146
|
+
<td>"lucida grande", "lucida sans unicode", lucida sans, lucida, sans-serif</td>
|
147
|
+
</tr>
|
148
|
+
<tr>
|
149
|
+
<td>$verdana </td>
|
150
|
+
<td>verdana, "bitstream vera sans", "dejavu sans", "liberation sans", geneva, sans-serif</td>
|
151
|
+
</tr>
|
152
|
+
<tr>
|
153
|
+
<td>$georgia </td>
|
154
|
+
<td>georgia, "bitstream charter", "century schoolbook l", "liberation serif", times, serif</td>
|
155
|
+
</tr>
|
156
|
+
<tr>
|
157
|
+
<td>$palatino </td>
|
158
|
+
<td>palatino, "palatino linotype", palladio, "urw palladio l", "book antiqua", "liberation serif", times, serif</td>
|
159
|
+
</tr>
|
160
|
+
<tr>
|
161
|
+
<td>$times </td>
|
162
|
+
<td>times, "times new roman", "nimbus roman no9 l", freeserif, "liberation serif", serif</td>
|
163
|
+
</tr>
|
164
|
+
<tr>
|
165
|
+
<td>$courier </td>
|
166
|
+
<td>"courier new", courier, freemono, "nimbus mono l", "liberation mono", monospace</td>
|
167
|
+
</tr>
|
168
|
+
<tr>
|
169
|
+
<td>$monaco </td>
|
170
|
+
<td>monaco, "lucida console", "dejavu sans mono", "bitstream vera sans mono", "liberation mono", monospace</td>
|
171
|
+
</tr>
|
172
|
+
</table>
|
173
|
+
|
174
|
+
#### Font Size Variables
|
175
|
+
<table>
|
176
|
+
<tr>
|
177
|
+
<th align="left">name</th>
|
178
|
+
<th align="left">value</th>
|
179
|
+
</tr>
|
180
|
+
<tr>
|
181
|
+
<td>$x-small</td>
|
182
|
+
<td>9px</td>
|
183
|
+
</tr>
|
184
|
+
<tr>
|
185
|
+
<td>$small</td>
|
186
|
+
<td>11px</td>
|
187
|
+
</tr>
|
188
|
+
<tr>
|
189
|
+
<td>$medium</td>
|
190
|
+
<td>13px</td>
|
191
|
+
</tr>
|
192
|
+
<tr>
|
193
|
+
<td>$x-medium</td>
|
194
|
+
<td>17px</td>
|
195
|
+
</tr>
|
196
|
+
<tr>
|
197
|
+
<td>$large</td>
|
198
|
+
<td>21px</td>
|
199
|
+
</tr>
|
200
|
+
<tr>
|
201
|
+
<td>$x-large</td>
|
202
|
+
<td>34px</td>
|
203
|
+
</tr>
|
204
|
+
<tr>
|
205
|
+
<td>$xx-large</td>
|
206
|
+
<td>55px</td>
|
207
|
+
</tr>
|
208
|
+
<tr>
|
209
|
+
<td>$huge</td>
|
210
|
+
<td>72px</td>
|
211
|
+
</tr>
|
212
|
+
<tr>
|
213
|
+
<td>$x-huge</td>
|
214
|
+
<td>89px</td>
|
215
|
+
</tr>
|
216
|
+
</table>
|
217
|
+
|
218
|
+
#### `@extend` Classes
|
219
|
+
There are a number of classes contained in `lib/_extend.sass` that can be used in conjunction with the Sass `@extend` function. Please
|
220
|
+
see that file for what's included.
|
221
|
+
|
222
|
+
|
223
|
+
<br>
|
224
|
+
|
225
|
+
#### Sass Syntax
|
226
|
+
|
227
|
+
I have been using and writing Sass since its original inception. Thus you'll notice I use the original Sass syntax and not the newer SCSS implementation.
|
228
|
+
|
229
|
+
I am not a fan of the SCSS style and will never be converting this project to it. If you'd prefer the SCSS style of writing your Sass, it should be easy enough to
|
230
|
+
fork this project and convert the formatting styles. Check the [SASS Documentation](http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html) for more.
|
231
|
+
|
232
|
+
<br><br>
|
233
|
+
If you have questions or concerns, feel free to give me a shout at:
|
234
|
+
[hcatlin@gmail.com](mailto:hcatlin@gmail.com)
|
data/REVISION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
(unknown)
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'rake/gempackagetask'
|
3
|
+
require 'rake/testtask'
|
4
|
+
|
5
|
+
desc 'Default: run unit tests.'
|
6
|
+
task :default => :test
|
7
|
+
|
8
|
+
desc 'Run tests'
|
9
|
+
Rake::TestTask.new(:test) do |t|
|
10
|
+
t.libs << 'test'
|
11
|
+
t.pattern = 'test/**/*_test.rb'
|
12
|
+
t.verbose = true
|
13
|
+
end
|
14
|
+
|
15
|
+
spec = eval(File.read('hamgen.gemspec'))
|
16
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
17
|
+
pkg.gem_spec = spec
|
18
|
+
end
|
19
|
+
|
20
|
+
desc "Build and install local gem"
|
21
|
+
task "local" => "repackage" do
|
22
|
+
puts "Installing locally... this might take a second"
|
23
|
+
puts `gem install pkg/hamgen-#{File.read('VERSION').strip}.gem --no-ri --no-rdoc`
|
24
|
+
end
|
data/SNIPPETS.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# MISC SNIPPETS
|
2
|
+
**Stuff that might be useful to your life?**
|
3
|
+
|
4
|
+
## Fibonnaci Sequence -- basis for font sizes
|
5
|
+
1 2 3 5 8 13 21 34 55 89 144
|
6
|
+
|
7
|
+
## MOBILE CODE SNIPPETS
|
8
|
+
|
9
|
+
### iPhone/iPod Touch/iPad Home screen Icon
|
10
|
+
#### 57x57 PNG Image
|
11
|
+
- %link{:rel => 'apple-touch-icon', :href => '/'}
|
12
|
+
|
13
|
+
#### Act like a web app (no back button)
|
14
|
+
- %meta{:name => 'apple-mobile-web-app-capable', :content => 'yes'}
|
15
|
+
|
16
|
+
### Useful Media Queries
|
17
|
+
|
18
|
+
#### General Mobile Devices / Small Screen Size
|
19
|
+
- @media handheld and (max-width: 480px), screen and (max-device-width: 480px), screen and (max-width: 600px)
|
20
|
+
|
21
|
+
#### iPhone + iPod Touch Only
|
22
|
+
- @media only screen and (max-device-width: 480px)
|
23
|
+
|
24
|
+
#### iPad Only
|
25
|
+
- @media only screen and (min-device-width: 768px) and (max-device-width: 1024px)
|
26
|
+
|
27
|
+
#### iOS 4 Devices Only
|
28
|
+
- @media only screen and (-webkit-min-device-pixel-radio: 2)
|
29
|
+
|
30
|
+
#### Orientations
|
31
|
+
- @media only screen and (orientation: portrait)
|
32
|
+
- @media only screen and (orientation: landscape)
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1
|
data/bin/ricogen
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# The command rails generator tool
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift File.dirname(__FILE__) + '/../'
|
5
|
+
|
6
|
+
require 'optparse'
|
7
|
+
require 'pp'
|
8
|
+
|
9
|
+
options = {}
|
10
|
+
|
11
|
+
optparse = OptionParser.new do|opts|
|
12
|
+
# TODO: Put command-line options here
|
13
|
+
options[:run_checks] = true
|
14
|
+
|
15
|
+
opts.banner = %"Usage: hamgen [options] name
|
16
|
+
|
17
|
+
Description:
|
18
|
+
Generate a Rails project just the way ole' Hamptino like them"
|
19
|
+
|
20
|
+
# This displays the help screen, all programs are
|
21
|
+
# assumed to have this option.
|
22
|
+
opts.on( '-h', '--help', 'Display this screen' ) do
|
23
|
+
puts opts
|
24
|
+
exit
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on( '-f', '--force', 'Run without version checks') do
|
28
|
+
options[:run_checks] = false
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on( '-e', '--erb', 'Generate ERB') do
|
32
|
+
puts "hahahahhaa... no. get your own generator!"
|
33
|
+
exit
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Parse the command-line. Remember there are two forms
|
38
|
+
# of the parse method. The 'parse' method simply parses
|
39
|
+
# ARGV, while the 'parse!' method parses ARGV and removes
|
40
|
+
# any options found there, as well as any parameters for
|
41
|
+
# the options. What's left is the list of files to resize.
|
42
|
+
optparse.parse!
|
43
|
+
|
44
|
+
if options[:run_checks]
|
45
|
+
unless `rails --version`.include?("Rails 3")
|
46
|
+
puts "Must have Rails 3 installed"
|
47
|
+
exit
|
48
|
+
end
|
49
|
+
|
50
|
+
unless `ruby --version`.include?("ruby 1.9")
|
51
|
+
puts "Must have Ruby 1.9.2"
|
52
|
+
exit
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
if ARGV[0].nil?
|
57
|
+
puts "You must give the project a name!"
|
58
|
+
exit
|
59
|
+
end
|
60
|
+
|
61
|
+
puts `rails new #{ARGV[0]} -m #{File.dirname(__FILE__) + '/../init.rb'}`
|
data/init.rb
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
# REQUIRED GEMS
|
4
|
+
require "colored"
|
5
|
+
require "rails"
|
6
|
+
require "haml"
|
7
|
+
require "bundler"
|
8
|
+
|
9
|
+
@path = "#{File.dirname(__FILE__)}/templates/"
|
10
|
+
|
11
|
+
# START THIS THING
|
12
|
+
puts "\n========================================================="
|
13
|
+
puts " HAMPTON'S SHAWN'S RAILS 3 TEMPLATE - [#{File.read(@path + '../VERSION').strip}] ".yellow.bold
|
14
|
+
puts "=========================================================\n\n"
|
15
|
+
|
16
|
+
# REMOVE FILES
|
17
|
+
puts "---------------------------------------------------------"
|
18
|
+
puts " Removing useless junk ... ".red
|
19
|
+
puts "---------------------------------------------------------"
|
20
|
+
run "rm README"
|
21
|
+
run "rm public/index.html"
|
22
|
+
run "rm public/favicon.ico"
|
23
|
+
run "rm public/robots.txt"
|
24
|
+
run "rm -r public/images"
|
25
|
+
run "rm -f public/javascripts/*"
|
26
|
+
run "rm app/views/layouts/application.html.erb"
|
27
|
+
run "rm config/initializers/session_store.rb"
|
28
|
+
run "rm config/initializers/secret_token.rb"
|
29
|
+
puts "---------------------------------------------------------"
|
30
|
+
|
31
|
+
# ADD FILES
|
32
|
+
puts " Adding useful junk ... ".green
|
33
|
+
puts "---------------------------------------------------------"
|
34
|
+
run "cp #{@path}application.html.haml app/views/layouts"
|
35
|
+
run "mkdir public/images"
|
36
|
+
run "mkdir public/images/backgrounds"
|
37
|
+
run "mkdir public/images/sprites"
|
38
|
+
puts "---------------------------------------------------------"
|
39
|
+
|
40
|
+
# GIT INIT
|
41
|
+
puts " Initializing new Git repo ...".cyan
|
42
|
+
puts "---------------------------------------------------------"
|
43
|
+
run "rm .gitignore"
|
44
|
+
run "touch .gitignore"
|
45
|
+
run "cat #{@path}gitignore >> .gitignore"
|
46
|
+
git :init
|
47
|
+
git :add => "."
|
48
|
+
puts "---------------------------------------------------------"
|
49
|
+
|
50
|
+
# JAVASCRIPT
|
51
|
+
puts " Adding Javascript files ...".green
|
52
|
+
puts "---------------------------------------------------------"
|
53
|
+
run "cp #{@path}javascripts/application.js public/javascripts"
|
54
|
+
run "cp #{@path}javascripts/rails.js public/javascripts"
|
55
|
+
puts "---------------------------------------------------------"
|
56
|
+
|
57
|
+
# SASS
|
58
|
+
puts " Installing Sass directory, files and environment preferences ...".green
|
59
|
+
puts "---------------------------------------------------------"
|
60
|
+
run "cp -r #{@path}sass app/stylesheets"
|
61
|
+
run "cp #{@path}compass.rb config/initializers/"
|
62
|
+
run "cp #{@path}compass.config config/"
|
63
|
+
run "cat #{@path}environment.rb >> config/environment.rb"
|
64
|
+
# Dir["app/sass/**/*.sass"].each do |file|
|
65
|
+
# run "sass-convert -T sass -F sass -i #{file}"
|
66
|
+
# end
|
67
|
+
puts "---------------------------------------------------------"
|
68
|
+
|
69
|
+
# SASS
|
70
|
+
puts " Installing Mongodb dependencies, files and environment preferences ...".green
|
71
|
+
puts "---------------------------------------------------------"
|
72
|
+
run "cp #{@path}_config.rb config/initializers/"
|
73
|
+
run "cp #{@path}mongo.rb config/initializers/"
|
74
|
+
run "cp #{@path}database.yml config/"
|
75
|
+
run "cp #{@path}magent.yml config/"
|
76
|
+
|
77
|
+
default_config = {"session_secret" => ActiveSupport::SecureRandom.hex(80),
|
78
|
+
"session_key" => "__app_session",
|
79
|
+
"domain" => "localhost"}
|
80
|
+
|
81
|
+
File.open("config/app.yml", "w") do |f|
|
82
|
+
f.puts({"development" => default_config}.to_yaml)
|
83
|
+
end
|
84
|
+
|
85
|
+
data = File.read("#{@path}application.rb")
|
86
|
+
orig_data = File.read("config/application.rb")
|
87
|
+
|
88
|
+
File.open("config/application.rb", "w") do |f|
|
89
|
+
orig_data.each_line do |line|
|
90
|
+
if line =~ /^require 'rails\/all'/
|
91
|
+
f.puts %@require "action_controller/railtie"
|
92
|
+
require "action_mailer/railtie"
|
93
|
+
require "active_resource/railtie"\n@
|
94
|
+
elsif line =~ /^\s+config\.filter_parameters/
|
95
|
+
f.write(line)
|
96
|
+
f.puts(data)
|
97
|
+
else
|
98
|
+
f.write(line)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
puts "---------------------------------------------------------"
|
104
|
+
|
105
|
+
# GEMFILE
|
106
|
+
puts " Appending Gemfile and running Bundler ...".magenta
|
107
|
+
puts "---------------------------------------------------------"
|
108
|
+
run "cat #{@path}Gemfile > Gemfile"
|
109
|
+
puts " Running Bundler install. This could take a moment ...".yellow
|
110
|
+
run "bundle install"
|
111
|
+
puts " Bundled gems installed successfully!".green.bold
|
112
|
+
puts "---------------------------------------------------------"
|
113
|
+
|
114
|
+
# GIT COMMIT
|
115
|
+
puts " Creating initial Git commit ...".cyan
|
116
|
+
puts "---------------------------------------------------------"
|
117
|
+
git :add => "."
|
118
|
+
git :commit => "-am 'Initial commit.'"
|
119
|
+
|
120
|
+
# DONE!
|
121
|
+
puts "\n========================================================="
|
122
|
+
puts " INSTALLATION COMPLETE!".yellow.bold
|
123
|
+
puts "=========================================================\n\n\n"
|