raygun 1.0.4 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +99 -0
- data/.ruby-version +1 -1
- data/CHANGES.md +20 -0
- data/Gemfile +1 -1
- data/README.md +56 -16
- data/Rakefile +9 -1
- data/bin/raygun +2 -2
- data/bin/setup +6 -0
- data/lib/colorize.rb +55 -55
- data/lib/raygun/raygun.rb +149 -94
- data/lib/raygun/template_repo.rb +14 -12
- data/lib/raygun/version.rb +1 -1
- data/raygun.gemspec +13 -8
- data/spec/raygun/raygun.rb +3 -0
- data/spec/raygun/runner_spec.rb +27 -0
- data/spec/spec_helper.rb +1 -0
- metadata +75 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c7ca3630bd95d0e0c12a7bf9d9f6b5cc0255ba5dfced51c83017a164f84ff147
|
4
|
+
data.tar.gz: 06ba32e033ec46d2ebe15f4e03c781b91ba94ac912075e9c1fff6872b68a5489
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 24416fbf00a23e6cb6b9afaf3c9ac3184bf1e99127c97a0f3db58d09364625e3f4ca5145e5801a039e4f878fa7b5e5952235866a792bfb462ec3b19c145a98ec
|
7
|
+
data.tar.gz: 496bcae1bc8c9bdaa1ed4975c9794c916a2187dfe76d1fb2df7fde190431f05c8a25cad2ed7b226898afc3d8a7249c02ee0ecdf6d2046e0633f806b74ba3e8b4
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
AllCops:
|
2
|
+
TargetRubyVersion: 2.4
|
3
|
+
DisplayCopNames: true
|
4
|
+
DisplayStyleGuide: true
|
5
|
+
|
6
|
+
#
|
7
|
+
# Ruby Cops
|
8
|
+
#
|
9
|
+
|
10
|
+
Layout/CaseIndentation:
|
11
|
+
Enabled: false
|
12
|
+
|
13
|
+
Layout/FirstArrayElementIndentation:
|
14
|
+
EnforcedStyle: consistent
|
15
|
+
|
16
|
+
Layout/HashAlignment:
|
17
|
+
Enabled: false
|
18
|
+
|
19
|
+
Layout/LineLength:
|
20
|
+
Max: 120
|
21
|
+
|
22
|
+
Layout/MultilineMethodCallIndentation:
|
23
|
+
EnforcedStyle: indented
|
24
|
+
|
25
|
+
Lint/AmbiguousBlockAssociation:
|
26
|
+
Enabled: false
|
27
|
+
|
28
|
+
Lint/ScriptPermission:
|
29
|
+
Exclude:
|
30
|
+
- "Rakefile"
|
31
|
+
|
32
|
+
Metrics/AbcSize:
|
33
|
+
Max: 35
|
34
|
+
Exclude:
|
35
|
+
- "spec/**/*"
|
36
|
+
|
37
|
+
Metrics/BlockLength:
|
38
|
+
CountComments: false
|
39
|
+
Max: 50
|
40
|
+
Exclude:
|
41
|
+
- "config/**/*"
|
42
|
+
- "spec/**/*"
|
43
|
+
|
44
|
+
Metrics/ClassLength:
|
45
|
+
Max: 250
|
46
|
+
Exclude:
|
47
|
+
- "spec/**/*"
|
48
|
+
|
49
|
+
Metrics/MethodLength:
|
50
|
+
Max: 25
|
51
|
+
Exclude:
|
52
|
+
- "db/migrate/*"
|
53
|
+
- "spec/**/*"
|
54
|
+
|
55
|
+
Naming/PredicateName:
|
56
|
+
Enabled: false
|
57
|
+
|
58
|
+
Security/YAMLLoad:
|
59
|
+
Enabled: false
|
60
|
+
|
61
|
+
Style/BarePercentLiterals:
|
62
|
+
EnforcedStyle: percent_q
|
63
|
+
|
64
|
+
Style/BlockDelimiters:
|
65
|
+
EnforcedStyle: braces_for_chaining
|
66
|
+
|
67
|
+
Style/Documentation:
|
68
|
+
Enabled: false
|
69
|
+
|
70
|
+
Style/EmptyMethod:
|
71
|
+
EnforcedStyle: expanded
|
72
|
+
|
73
|
+
Style/FrozenStringLiteralComment:
|
74
|
+
EnforcedStyle: never
|
75
|
+
|
76
|
+
Style/Lambda:
|
77
|
+
EnforcedStyle: literal
|
78
|
+
|
79
|
+
Style/ModuleFunction:
|
80
|
+
EnforcedStyle: extend_self
|
81
|
+
|
82
|
+
Style/MutableConstant:
|
83
|
+
Enabled: false
|
84
|
+
|
85
|
+
Style/PreferredHashMethods:
|
86
|
+
Enabled: false
|
87
|
+
|
88
|
+
Style/SpecialGlobalVars:
|
89
|
+
Enabled: false
|
90
|
+
|
91
|
+
Style/StringLiterals:
|
92
|
+
EnforcedStyle: double_quotes
|
93
|
+
|
94
|
+
Style/StringLiteralsInInterpolation:
|
95
|
+
EnforcedStyle: double_quotes
|
96
|
+
|
97
|
+
Style/StructInheritance:
|
98
|
+
Enabled: true
|
99
|
+
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.5
|
data/CHANGES.md
CHANGED
@@ -3,6 +3,26 @@
|
|
3
3
|
**Note:** Don't let the apparent lack of activity here scare you away. Almost all changes are captured in the
|
4
4
|
prototype repo (see [raygun-rails](https://github.com/carbonfive/raygun-rails)), and it's kept pretty well up to date.
|
5
5
|
|
6
|
+
## 1.1.0 [2020-07-02]
|
7
|
+
|
8
|
+
Breaking:
|
9
|
+
|
10
|
+
* Require Ruby 2.4+ (#151)
|
11
|
+
|
12
|
+
New features:
|
13
|
+
|
14
|
+
* Copy `.rubocop.yml` template instead of using a fragile link to the c5-conventions repo (#148)
|
15
|
+
* Initialize zapped projects with a default branch of "main" (#157)
|
16
|
+
|
17
|
+
Docs:
|
18
|
+
|
19
|
+
* Add Bootstrap instructions to the README (it has been removed from the app prototype) (#141)
|
20
|
+
|
21
|
+
Housekeeping:
|
22
|
+
|
23
|
+
* Add bundler and rake development dependencies (#143)
|
24
|
+
* Upgrade to Ruby 2.6.5 (#142)
|
25
|
+
|
6
26
|
## 1.0.4 [2017-11-28]
|
7
27
|
|
8
28
|
* Tweak instructions: use `heroku local` instead of `foreman s` (#138, thanks @mattbrictson)
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
[![Gem Version](https://badge.fury.io/rb/raygun.
|
2
|
-
<img src="https://raw.github.com/carbonfive/raygun/
|
1
|
+
[![Gem Version](https://badge.fury.io/rb/raygun.svg)](http://badge.fury.io/rb/raygun)
|
2
|
+
<img src="https://raw.github.com/carbonfive/raygun/main/marvin.jpg" align="right"/>
|
3
3
|
|
4
4
|
# Raygun
|
5
5
|
|
@@ -18,7 +18,6 @@ Major tools/libraries:
|
|
18
18
|
* PostgreSQL
|
19
19
|
* Slim
|
20
20
|
* Sass
|
21
|
-
* Bootstrap
|
22
21
|
* RSpec and Capybara
|
23
22
|
* Factory Bot
|
24
23
|
* SimpleCov
|
@@ -27,8 +26,7 @@ Major tools/libraries:
|
|
27
26
|
the details).
|
28
27
|
|
29
28
|
Raygun includes generator templates for controllers, views, and specs so that generated code follows best
|
30
|
-
practices. For example,
|
31
|
-
girl when appropriate.
|
29
|
+
practices. For example, rspec specs use factory bot when appropriate.
|
32
30
|
|
33
31
|
Inspired by Xavier Shay work at Square and ThoughtBot's Suspenders. Thanks!
|
34
32
|
|
@@ -59,20 +57,54 @@ another ruby, just change the `Gemfile` and `.ruby-version` as necessary.
|
|
59
57
|
|
60
58
|
## Usage
|
61
59
|
|
62
|
-
|
60
|
+
```bash
|
61
|
+
$ raygun your-project
|
62
|
+
```
|
63
63
|
|
64
64
|
Once your project is baked out, you can easily kick the wheels. Be sure that you have the prerequisites
|
65
65
|
covered (see above).
|
66
66
|
|
67
|
-
|
68
|
-
|
67
|
+
```bash
|
68
|
+
$ cd your-project
|
69
|
+
$ bin/setup
|
70
|
+
|
71
|
+
# Run the specs, they should all pass
|
72
|
+
$ bin/rake
|
73
|
+
|
74
|
+
# Fire up the app and open it in a browser
|
75
|
+
$ heroku local
|
76
|
+
$ open http://localhost:3000
|
77
|
+
```
|
78
|
+
|
79
|
+
## Next Steps
|
80
|
+
|
81
|
+
As you'll notice, the project comes with enough CSS (SCSS, actually) to establish some patterns. If you
|
82
|
+
need more of a framework, here are instructions on how to add Bootstrap to your new project.
|
83
|
+
|
84
|
+
```bash
|
85
|
+
$ yarn add bootstrap
|
86
|
+
$ rails generate simple_form:install --bootstrap
|
87
|
+
|
88
|
+
# Answer Yes to the question about overwriting your existing `config/initializers/simple_form.rb`
|
89
|
+
```
|
90
|
+
|
91
|
+
This generates an initializer and scaffold files for Rails view scaffolding.
|
92
|
+
|
93
|
+
Add Bootstrap imports to the top your `application.scss`
|
69
94
|
|
70
|
-
|
71
|
-
|
95
|
+
```css
|
96
|
+
// application.scss
|
97
|
+
@import "~bootstrap/scss/_functions";
|
98
|
+
@import "~bootstrap/scss/_variables";
|
99
|
+
|
100
|
+
...
|
101
|
+
```
|
102
|
+
|
103
|
+
Now you've got Bootstrap in the application.
|
104
|
+
|
105
|
+
We include `simple_form` in the project by default. For more information about using Bootstrap styling
|
106
|
+
on `simple_form` forms, check out the documentation here http://simple-form-bootstrap.plataformatec.com.br/documentation
|
72
107
|
|
73
|
-
# Fire up the app and open it in a browser
|
74
|
-
$ heroku local
|
75
|
-
$ open http://localhost:3000
|
76
108
|
|
77
109
|
## Using a Custom Project Template
|
78
110
|
|
@@ -116,10 +148,18 @@ prototype (which is a valid rails app) and tag them when they should be used for
|
|
116
148
|
|
117
149
|
### Development
|
118
150
|
|
119
|
-
|
151
|
+
To set up your local environment, run:
|
152
|
+
|
153
|
+
$ bin/setup
|
154
|
+
|
155
|
+
To run tests and rubocop checks:
|
156
|
+
|
157
|
+
$ bundle exec rake
|
158
|
+
|
159
|
+
To generate an example app using your local development version of Raygun:
|
120
160
|
|
121
|
-
$
|
161
|
+
$ bin/raygun tmp/example_app
|
122
162
|
|
123
163
|
## Changes
|
124
164
|
|
125
|
-
[View the Change Log](https://github.com/carbonfive/raygun/tree/
|
165
|
+
[View the Change Log](https://github.com/carbonfive/raygun/tree/main/CHANGES.md)
|
data/Rakefile
CHANGED
data/bin/raygun
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
File.expand_path(
|
3
|
+
File.expand_path("../lib", __dir__).tap do |lib|
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
5
|
end
|
6
6
|
|
7
|
-
require
|
7
|
+
require "raygun/raygun"
|
8
8
|
|
9
9
|
raygun = Raygun::Runner.parse(ARGV)
|
10
10
|
|
data/bin/setup
ADDED
data/lib/colorize.rb
CHANGED
@@ -5,41 +5,40 @@
|
|
5
5
|
# want to add a gem dependency.
|
6
6
|
|
7
7
|
class String
|
8
|
-
|
9
8
|
#
|
10
9
|
# Colors Hash
|
11
10
|
#
|
12
11
|
COLORS = {
|
13
|
-
:
|
14
|
-
:
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
20
|
-
:
|
21
|
-
:
|
22
|
-
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
12
|
+
black: 0,
|
13
|
+
red: 1,
|
14
|
+
green: 2,
|
15
|
+
yellow: 3,
|
16
|
+
blue: 4,
|
17
|
+
magenta: 5,
|
18
|
+
cyan: 6,
|
19
|
+
white: 7,
|
20
|
+
default: 9,
|
21
|
+
|
22
|
+
light_black: 10,
|
23
|
+
light_red: 11,
|
24
|
+
light_green: 12,
|
25
|
+
light_yellow: 13,
|
26
|
+
light_blue: 14,
|
27
|
+
light_magenta: 15,
|
28
|
+
light_cyan: 16,
|
29
|
+
light_white: 17
|
31
30
|
}
|
32
31
|
|
33
32
|
#
|
34
33
|
# Modes Hash
|
35
34
|
#
|
36
35
|
MODES = {
|
37
|
-
:
|
36
|
+
default: 0, # Turn off all attributes
|
38
37
|
#:bright => 1, # Set bright mode
|
39
|
-
:
|
40
|
-
:
|
41
|
-
:
|
42
|
-
:
|
38
|
+
underline: 4, # Set underline mode
|
39
|
+
blink: 5, # Set blink mode
|
40
|
+
swap: 7, # Exchange foreground and background colors
|
41
|
+
hide: 8 # Hide text (foreground color would be the same as background)
|
43
42
|
}
|
44
43
|
|
45
44
|
protected
|
@@ -47,16 +46,14 @@ class String
|
|
47
46
|
#
|
48
47
|
# Set color values in new string intance
|
49
48
|
#
|
50
|
-
def
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
nil
|
59
|
-
end
|
49
|
+
def color_parameters(params)
|
50
|
+
return unless params.instance_of?(Hash)
|
51
|
+
|
52
|
+
@color = params[:color]
|
53
|
+
@background = params[:background]
|
54
|
+
@mode = params[:mode]
|
55
|
+
@uncolorized = params[:uncolorized]
|
56
|
+
self
|
60
57
|
end
|
61
58
|
|
62
59
|
public
|
@@ -77,22 +74,23 @@ class String
|
|
77
74
|
# puts "This is blue text on red".blue.on_red.blink
|
78
75
|
# puts "This is uncolorized".blue.on_red.uncolorize
|
79
76
|
#
|
80
|
-
|
77
|
+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
78
|
+
def colorize(params)
|
81
79
|
return self unless STDOUT.isatty
|
82
80
|
|
83
81
|
begin
|
84
|
-
require
|
82
|
+
require "Win32/Console/ANSI" if RUBY_PLATFORM.match?(/win32/)
|
85
83
|
rescue LoadError
|
86
|
-
raise
|
84
|
+
raise "You must gem install win32console to use colorize on Windows"
|
87
85
|
end
|
88
86
|
|
89
87
|
color_parameters = {}
|
90
88
|
|
91
|
-
if
|
89
|
+
if params.instance_of?(Hash)
|
92
90
|
color_parameters[:color] = COLORS[params[:color]]
|
93
91
|
color_parameters[:background] = COLORS[params[:background]]
|
94
92
|
color_parameters[:mode] = MODES[params[:mode]]
|
95
|
-
elsif
|
93
|
+
elsif params.instance_of?(Symbol)
|
96
94
|
color_parameters[:color] = COLORS[params]
|
97
95
|
end
|
98
96
|
|
@@ -100,15 +98,18 @@ class String
|
|
100
98
|
color_parameters[:background] ||= @background ||= COLORS[:default]
|
101
99
|
color_parameters[:mode] ||= @mode ||= MODES[:default]
|
102
100
|
|
103
|
-
color_parameters[:uncolorized] ||= @uncolorized ||=
|
101
|
+
color_parameters[:uncolorized] ||= @uncolorized ||= dup
|
104
102
|
|
105
103
|
# calculate bright mode
|
106
104
|
color_parameters[:color] += 50 if color_parameters[:color] > 10
|
107
105
|
|
108
106
|
color_parameters[:background] += 50 if color_parameters[:background] > 10
|
109
107
|
|
110
|
-
"\033[#{color_parameters[:mode]};#{color_parameters[:color]+30}
|
108
|
+
"\033[#{color_parameters[:mode]};#{color_parameters[:color] + 30};"\
|
109
|
+
"#{color_parameters[:background] + 40}m#{color_parameters[:uncolorized]}\033[0m"\
|
110
|
+
.color_parameters(color_parameters)
|
111
111
|
end
|
112
|
+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/PerceivedComplexity
|
112
113
|
|
113
114
|
#
|
114
115
|
# Return uncolorized string
|
@@ -127,37 +128,36 @@ class String
|
|
127
128
|
#
|
128
129
|
# Make some color and on_color methods
|
129
130
|
#
|
130
|
-
COLORS.each_key do |
|
131
|
+
COLORS.each_key do |key|
|
131
132
|
next if key == :default
|
132
133
|
|
133
134
|
define_method key do
|
134
|
-
|
135
|
+
colorize(color: key)
|
135
136
|
end
|
136
137
|
|
137
138
|
define_method "on_#{key}" do
|
138
|
-
|
139
|
+
colorize(background: key)
|
139
140
|
end
|
140
141
|
end
|
141
142
|
|
142
143
|
#
|
143
144
|
# Methods for modes
|
144
145
|
#
|
145
|
-
MODES.each_key do |
|
146
|
+
MODES.each_key do |key|
|
146
147
|
next if key == :default
|
147
148
|
|
148
149
|
define_method key do
|
149
|
-
|
150
|
+
colorize(mode: key)
|
150
151
|
end
|
151
152
|
end
|
152
153
|
|
153
154
|
class << self
|
154
|
-
|
155
155
|
#
|
156
156
|
# Return array of available modes used by colorize method
|
157
157
|
#
|
158
158
|
def modes
|
159
159
|
keys = []
|
160
|
-
MODES.each_key do |
|
160
|
+
MODES.each_key do |key|
|
161
161
|
keys << key
|
162
162
|
end
|
163
163
|
keys
|
@@ -168,7 +168,7 @@ class String
|
|
168
168
|
#
|
169
169
|
def colors
|
170
170
|
keys = []
|
171
|
-
COLORS.each_key do |
|
171
|
+
COLORS.each_key do |key|
|
172
172
|
keys << key
|
173
173
|
end
|
174
174
|
keys
|
@@ -177,16 +177,16 @@ class String
|
|
177
177
|
#
|
178
178
|
# Display color matrix with color names.
|
179
179
|
#
|
180
|
-
def color_matrix(
|
180
|
+
def color_matrix(txt = "[X]")
|
181
181
|
size = String.colors.length
|
182
|
-
String.colors.each do |
|
183
|
-
String.colors.each do |
|
184
|
-
print txt.colorize(
|
182
|
+
String.colors.each do |color|
|
183
|
+
String.colors.each do |back|
|
184
|
+
print txt.colorize(color: color, background: back)
|
185
185
|
end
|
186
186
|
puts " < #{color}"
|
187
187
|
end
|
188
|
-
String.colors.reverse.each_with_index do |
|
189
|
-
puts "#{"|".rjust(txt.length)*(size-index)} < #{back}"
|
188
|
+
String.colors.reverse.each_with_index do |back, index|
|
189
|
+
puts "#{"|".rjust(txt.length) * (size - index)} < #{back}"
|
190
190
|
end
|
191
191
|
""
|
192
192
|
end
|
data/lib/raygun/raygun.rb
CHANGED
@@ -1,44 +1,47 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
|
9
|
-
|
10
|
-
require_relative
|
1
|
+
require "optparse"
|
2
|
+
require "ostruct"
|
3
|
+
require "fileutils"
|
4
|
+
require "securerandom"
|
5
|
+
require "net/http"
|
6
|
+
require "open-uri"
|
7
|
+
require "json"
|
8
|
+
require "colorize"
|
9
|
+
|
10
|
+
require_relative "version"
|
11
|
+
require_relative "template_repo"
|
11
12
|
|
12
13
|
module Raygun
|
13
14
|
class Runner
|
14
|
-
CARBONFIVE_REPO =
|
15
|
+
CARBONFIVE_REPO = "carbonfive/raygun-rails"
|
16
|
+
C5_CONVENTIONS_REPO = "carbonfive/c5-conventions"
|
15
17
|
|
16
|
-
attr_accessor :target_dir, :app_dir, :app_name, :dash_name, :snake_name,
|
18
|
+
attr_accessor :target_dir, :app_dir, :app_name, :dash_name, :snake_name,
|
19
|
+
:camel_name, :title_name, :prototype_repo,
|
17
20
|
:current_ruby_version, :current_ruby_patch_level
|
18
21
|
|
19
22
|
def initialize(target_dir, prototype_repo)
|
20
23
|
@target_dir = target_dir
|
21
24
|
@app_dir = File.expand_path(target_dir.strip.to_s)
|
22
|
-
@app_name = File.basename(app_dir).gsub(/\s+/,
|
23
|
-
@dash_name = app_name.
|
24
|
-
@snake_name = app_name.
|
25
|
+
@app_name = File.basename(app_dir).gsub(/\s+/, "-")
|
26
|
+
@dash_name = app_name.tr("_", "-")
|
27
|
+
@snake_name = app_name.tr("-", "_")
|
25
28
|
@camel_name = camelize(snake_name)
|
26
29
|
@title_name = titleize(snake_name)
|
27
30
|
@prototype_repo = prototype_repo
|
28
31
|
|
29
32
|
@current_ruby_version = RUBY_VERSION
|
30
|
-
@current_ruby_patch_level = if RUBY_VERSION <
|
31
|
-
|
33
|
+
@current_ruby_patch_level = if RUBY_VERSION < "2.1.0" # Ruby adopted semver starting with 2.1.0.
|
34
|
+
"#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}"
|
32
35
|
else
|
33
|
-
|
36
|
+
RUBY_VERSION.to_s
|
34
37
|
end
|
35
38
|
end
|
36
39
|
|
37
40
|
def check_target
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
41
|
+
return if Dir["#{@app_dir}/*"].empty?
|
42
|
+
|
43
|
+
puts "Misfire! The target directory isn't empty... aim elsewhere.".colorize(:light_red)
|
44
|
+
exit 1
|
42
45
|
end
|
43
46
|
|
44
47
|
def fetch_prototype
|
@@ -55,17 +58,17 @@ module Raygun
|
|
55
58
|
$stdout.flush
|
56
59
|
|
57
60
|
cached_prototypes_dir = File.join(Dir.home, ".raygun")
|
58
|
-
@prototype = "#{cached_prototypes_dir}/#{name.gsub(
|
61
|
+
@prototype = "#{cached_prototypes_dir}/#{name.gsub("/", "--")}-#{sha}.tar.gz"
|
59
62
|
|
60
63
|
# Do we already have the tarball cached under ~/.raygun?
|
61
|
-
if File.
|
64
|
+
if File.exist?(@prototype)
|
62
65
|
puts " Using cached version.".colorize(:yellow)
|
63
66
|
else
|
64
67
|
print " Downloading...".colorize(:yellow)
|
65
68
|
$stdout.flush
|
66
69
|
|
67
70
|
# Download the tarball and install in the cache.
|
68
|
-
Dir.mkdir(cached_prototypes_dir,
|
71
|
+
Dir.mkdir(cached_prototypes_dir, 0o755) unless Dir.exist?(cached_prototypes_dir)
|
69
72
|
shell "curl -s -L #{tarball_url} -o #{@prototype}"
|
70
73
|
puts " done!".colorize(:yellow)
|
71
74
|
end
|
@@ -73,24 +76,23 @@ module Raygun
|
|
73
76
|
|
74
77
|
def check_raygun_version
|
75
78
|
required_raygun_version =
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
end
|
79
|
+
`tar xfz #{@prototype} --include "*.raygun-version" -O 2> /dev/null`.chomp ||
|
80
|
+
::Raygun::VERSION
|
81
|
+
return unless Gem::Version.new(required_raygun_version) > Gem::Version.new(::Raygun::VERSION)
|
82
|
+
|
83
|
+
puts ""
|
84
|
+
print "Hold up!".colorize(:red)
|
85
|
+
print " This version of the raygun gem (".colorize(:light_red)
|
86
|
+
print "#{::Raygun::VERSION})".colorize(:white)
|
87
|
+
print " is too old to generate this application (needs ".colorize(:light_red)
|
88
|
+
print required_raygun_version.to_s.colorize(:white)
|
89
|
+
puts " or newer).".colorize(:light_red)
|
90
|
+
puts ""
|
91
|
+
print "Please update the gem by running ".colorize(:light_red)
|
92
|
+
print "gem update raygun".colorize(:white)
|
93
|
+
puts ", and try again. Thanks!".colorize(:light_red)
|
94
|
+
puts ""
|
95
|
+
exit 1
|
94
96
|
end
|
95
97
|
|
96
98
|
def copy_prototype
|
@@ -101,25 +103,28 @@ module Raygun
|
|
101
103
|
# Github includes an extra directory layer in the tag tarball.
|
102
104
|
extraneous_dir = Dir.glob("#{app_dir}/*").first
|
103
105
|
dirs_to_move = Dir.glob("#{extraneous_dir}/*", File::FNM_DOTMATCH)
|
104
|
-
|
106
|
+
.reject { |d| %w[. ..].include?(File.basename(d)) }
|
105
107
|
|
106
108
|
FileUtils.mv dirs_to_move, app_dir
|
107
109
|
FileUtils.remove_dir extraneous_dir
|
110
|
+
|
111
|
+
fetch_rubocop_file if @prototype_repo == CARBONFIVE_REPO
|
108
112
|
end
|
109
113
|
|
110
114
|
def rename_new_app
|
111
115
|
Dir.chdir(app_dir) do
|
112
116
|
{
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
+
"AppPrototype" => camel_name,
|
118
|
+
"app-prototype" => dash_name,
|
119
|
+
"app_prototype" => snake_name,
|
120
|
+
"App Prototype" => title_name
|
117
121
|
}.each do |proto_name, new_name|
|
118
122
|
shell "find . -type f -print | xargs #{sed_i} 's/#{proto_name}/#{new_name}/g'"
|
119
123
|
end
|
120
124
|
|
121
|
-
%w
|
122
|
-
shell "find . -depth -type #{find_type} -name '*app_prototype*'
|
125
|
+
%w[d f].each do |find_type|
|
126
|
+
shell "find . -depth -type #{find_type} -name '*app_prototype*' " \
|
127
|
+
"-exec bash -c 'mv $0 ${0/app_prototype/#{snake_name}}' {} \\;"
|
123
128
|
end
|
124
129
|
end
|
125
130
|
end
|
@@ -149,26 +154,33 @@ module Raygun
|
|
149
154
|
def initialize_git
|
150
155
|
Dir.chdir(app_dir) do
|
151
156
|
shell "git init"
|
157
|
+
shell "git checkout -q -b main"
|
152
158
|
shell "git add -A ."
|
153
159
|
shell "git commit -m 'Raygun-zapped skeleton.'"
|
154
160
|
end
|
155
161
|
end
|
156
162
|
|
163
|
+
# rubocop:disable Metrics/AbcSize
|
157
164
|
def print_plan
|
158
|
-
puts
|
165
|
+
puts " ____ ".colorize(:light_yellow)
|
159
166
|
puts ' / __ \____ ___ ______ ___ ______ '.colorize(:light_yellow)
|
160
167
|
puts ' / /_/ / __ `/ / / / __ `/ / / / __ \ '.colorize(:light_yellow)
|
161
|
-
puts
|
168
|
+
puts " / _, _/ /_/ / /_/ / /_/ / /_/ / / / / ".colorize(:light_yellow)
|
162
169
|
puts ' /_/ |_|\__,_/\__, /\__, /\__,_/_/ /_/ '.colorize(:light_yellow)
|
163
|
-
puts
|
170
|
+
puts " /____//____/ ".colorize(:light_yellow)
|
164
171
|
puts
|
165
|
-
puts "Raygun will create new app in directory:".colorize(:yellow) +
|
172
|
+
puts "Raygun will create new app in directory:".colorize(:yellow) +
|
173
|
+
" #{target_dir}".colorize(:yellow) + "...".colorize(:yellow)
|
166
174
|
puts
|
167
|
-
puts "-".colorize(:blue) + " Application Name:".colorize(:light_blue) +
|
168
|
-
|
169
|
-
puts "-".colorize(:blue) + "
|
175
|
+
puts "-".colorize(:blue) + " Application Name:".colorize(:light_blue) +
|
176
|
+
" #{title_name}".colorize(:light_reen)
|
177
|
+
puts "-".colorize(:blue) + " Project Template:".colorize(:light_blue) +
|
178
|
+
" #{prototype_repo}".colorize(:light_reen)
|
179
|
+
puts "-".colorize(:blue) + " Ruby Version: ".colorize(:light_blue) +
|
180
|
+
" #{@current_ruby_patch_level}".colorize(:light_reen)
|
170
181
|
puts
|
171
182
|
end
|
183
|
+
# rubocop:enable Metrics/AbcSize
|
172
184
|
|
173
185
|
def print_next_steps
|
174
186
|
if @prototype_repo == CARBONFIVE_REPO
|
@@ -178,6 +190,7 @@ module Raygun
|
|
178
190
|
end
|
179
191
|
end
|
180
192
|
|
193
|
+
# rubocop:disable Metrics/AbcSize
|
181
194
|
def print_next_steps_carbon_five
|
182
195
|
puts ""
|
183
196
|
puts "Zap! Your application is ready. Next steps...".colorize(:yellow)
|
@@ -193,8 +206,12 @@ module Raygun
|
|
193
206
|
puts "$".colorize(:blue) + " heroku local".colorize(:light_blue)
|
194
207
|
puts "$".colorize(:blue) + " open http://localhost:3000".colorize(:light_blue)
|
195
208
|
puts ""
|
209
|
+
puts "# For some suggested next steps, check out the raygun README".colorize(:light_green)
|
210
|
+
puts "$".colorize(:blue) + " open https://github.com/carbonfive/raygun/#next-steps".colorize(:light_blue)
|
211
|
+
puts ""
|
196
212
|
puts "Enjoy your Carbon Five flavored Rails application!".colorize(:yellow)
|
197
213
|
end
|
214
|
+
# rubocop:enable Metrics/AbcSize
|
198
215
|
|
199
216
|
def print_next_steps_for_custom_repo
|
200
217
|
puts ""
|
@@ -205,66 +222,104 @@ module Raygun
|
|
205
222
|
|
206
223
|
protected
|
207
224
|
|
225
|
+
def fetch_rubocop_file
|
226
|
+
sha = shell("git ls-remote https://github.com/#{C5_CONVENTIONS_REPO} master") || ""
|
227
|
+
sha = sha.slice(0..6)
|
228
|
+
|
229
|
+
rubocop_file = "https://raw.githubusercontent.com/#{C5_CONVENTIONS_REPO}/master/rubocop/rubocop.yml"
|
230
|
+
begin
|
231
|
+
rubocop_contents = URI.open(rubocop_file)
|
232
|
+
IO.write("#{@app_dir}/.rubocop.yml", <<~RUBOCOP_YML)
|
233
|
+
# Sourced from #{C5_CONVENTIONS_REPO} @ #{sha}
|
234
|
+
#
|
235
|
+
# If you make changes to this file, consider opening
|
236
|
+
# a PR to backport them to the c5-conventions repo:
|
237
|
+
# https://github.com/#{C5_CONVENTIONS_REPO}/blob/master/rubocop/rubocop.yml
|
238
|
+
|
239
|
+
#{rubocop_contents.string}
|
240
|
+
RUBOCOP_YML
|
241
|
+
rescue Errno::ENOENT, OpenURI::HTTPError => e
|
242
|
+
puts ""
|
243
|
+
puts "Failed to find the CarbonFive conventions rubocop file at #{rubocop_file}".colorize(:light_red)
|
244
|
+
puts "Error: #{e}".colorize(:light_red)
|
245
|
+
puts "You'll have to manage you're own `.rubocop.yml` setup".colorize(:light_red)
|
246
|
+
end
|
247
|
+
end
|
248
|
+
|
208
249
|
def camelize(string)
|
209
250
|
result = string.sub(/^[a-z\d]*/) { $&.capitalize }
|
210
|
-
result.gsub(
|
251
|
+
result.gsub(%r{(?:_|(/))([a-z\d]*)}) { "#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}" }
|
211
252
|
end
|
212
253
|
|
213
254
|
def titleize(underscored_string)
|
214
|
-
result = underscored_string.
|
215
|
-
result.gsub(/\b('?[a-z])/) {
|
255
|
+
result = underscored_string.tr("_", " ")
|
256
|
+
result.gsub(/\b('?[a-z])/) { Regexp.last_match(1).capitalize }
|
216
257
|
end
|
217
258
|
|
218
259
|
# Distinguish BSD vs GNU sed with the --version flag (only present in GNU sed).
|
219
260
|
def sed_i
|
220
|
-
@
|
221
|
-
|
222
|
-
|
223
|
-
|
261
|
+
@sed_i ||= begin
|
262
|
+
`sed --version &> /dev/null`
|
263
|
+
$?.success? ? "sed -i" : "sed -i ''"
|
264
|
+
end
|
224
265
|
end
|
225
266
|
|
226
267
|
# Run a shell command and raise an exception if it fails.
|
227
268
|
def shell(command)
|
228
|
-
|
269
|
+
output = `#{command}`
|
229
270
|
raise "#{command} failed with status #{$?.exitstatus}." unless $?.success?
|
230
|
-
end
|
231
|
-
|
232
|
-
def self.parse(args)
|
233
|
-
raygun = nil
|
234
|
-
|
235
|
-
options = OpenStruct.new
|
236
|
-
options.target_dir = nil
|
237
|
-
options.prototype_repo = CARBONFIVE_REPO
|
238
271
|
|
239
|
-
|
240
|
-
|
272
|
+
output
|
273
|
+
end
|
241
274
|
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
275
|
+
class << self
|
276
|
+
# rubocop:disable Metrics/MethodLength
|
277
|
+
def parse(_args)
|
278
|
+
raygun = nil
|
279
|
+
|
280
|
+
options = OpenStruct.new
|
281
|
+
options.target_dir = nil
|
282
|
+
options.prototype_repo = CARBONFIVE_REPO
|
283
|
+
|
284
|
+
parser = OptionParser.new do |opts|
|
285
|
+
opts.banner = "Usage: raygun [options] NEW_APP_DIRECTORY"
|
286
|
+
|
287
|
+
opts.on("-h", "--help", "Show raygun usage") do
|
288
|
+
usage_and_exit(opts)
|
289
|
+
end
|
290
|
+
opts.on(
|
291
|
+
"-p",
|
292
|
+
"--prototype [github_repo]",
|
293
|
+
"Prototype github repo (e.g. carbonfive/raygun-rails)."
|
294
|
+
) do |prototype|
|
295
|
+
options.prototype_repo = prototype
|
296
|
+
end
|
297
|
+
|
298
|
+
opts.on("-v", "--version", "Print the version number") do
|
299
|
+
puts Raygun::VERSION
|
300
|
+
exit 1
|
301
|
+
end
|
247
302
|
end
|
248
|
-
end
|
249
303
|
|
250
|
-
|
251
|
-
|
252
|
-
|
304
|
+
begin
|
305
|
+
parser.parse!
|
306
|
+
options.target_dir = ARGV.first
|
253
307
|
|
254
|
-
|
308
|
+
raise OptionParser::InvalidOption if options.target_dir.nil?
|
255
309
|
|
256
|
-
|
310
|
+
raygun = Raygun::Runner.new(options.target_dir, options.prototype_repo)
|
311
|
+
rescue OptionParser::InvalidOption
|
312
|
+
usage_and_exit(parser)
|
313
|
+
end
|
257
314
|
|
258
|
-
|
259
|
-
usage_and_exit(parser)
|
315
|
+
raygun
|
260
316
|
end
|
317
|
+
# rubocop:enable Metrics/MethodLength
|
261
318
|
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
puts parser
|
267
|
-
exit 1
|
319
|
+
def usage_and_exit(parser)
|
320
|
+
puts parser
|
321
|
+
exit 1
|
322
|
+
end
|
268
323
|
end
|
269
324
|
end
|
270
325
|
end
|
data/lib/raygun/template_repo.rb
CHANGED
@@ -3,7 +3,7 @@ module Raygun
|
|
3
3
|
attr_reader :name, :branch, :tarball, :sha
|
4
4
|
|
5
5
|
def initialize(repo)
|
6
|
-
@name, @branch = repo.split(
|
6
|
+
@name, @branch = repo.split("#").map(&:strip)
|
7
7
|
fetch
|
8
8
|
end
|
9
9
|
|
@@ -11,6 +11,7 @@ module Raygun
|
|
11
11
|
|
12
12
|
def fetch
|
13
13
|
return if @branch && @sha
|
14
|
+
|
14
15
|
@branch ? fetch_branches : fetch_tags
|
15
16
|
end
|
16
17
|
|
@@ -19,12 +20,12 @@ module Raygun
|
|
19
20
|
print "Whoops - need to try again!".colorize(:red)
|
20
21
|
puts ""
|
21
22
|
print "We could not find (".colorize(:light_red)
|
22
|
-
print
|
23
|
+
print name.to_s.colorize(:white)
|
23
24
|
print "##{branch}".colorize(:white) if @branch
|
24
25
|
print ") on github.".colorize(:light_red)
|
25
26
|
puts ""
|
26
27
|
print "The response from github was a (".colorize(:light_red)
|
27
|
-
print
|
28
|
+
print response.code.to_s.colorize(:white)
|
28
29
|
puts ") which I'm sure you can fix right up!".colorize(:light_red)
|
29
30
|
puts ""
|
30
31
|
exit 1
|
@@ -35,10 +36,11 @@ module Raygun
|
|
35
36
|
print "Whoops - need to try again!".colorize(:red)
|
36
37
|
puts ""
|
37
38
|
print "We could not find any tags in the repo (".colorize(:light_red)
|
38
|
-
print
|
39
|
+
print name.to_s.colorize(:white)
|
39
40
|
print ") on github.".colorize(:light_red)
|
40
41
|
puts ""
|
41
|
-
print "Raygun uses the 'largest' tag in a repository,
|
42
|
+
print "Raygun uses the 'largest' tag in a repository, " \
|
43
|
+
"where tags are sorted alphanumerically.".colorize(:light_red)
|
42
44
|
puts ""
|
43
45
|
print "E.g., tag 'v.0.10.0' > 'v.0.9.9' and 'x' > 'a'.".colorize(:light_red)
|
44
46
|
print ""
|
@@ -50,8 +52,8 @@ module Raygun
|
|
50
52
|
response = http_get("https://api.github.com/repos/#{name}/branches/#{branch}")
|
51
53
|
handle_github_error(response) unless response.code == "200"
|
52
54
|
result = JSON.parse(response.body)
|
53
|
-
@sha = result[
|
54
|
-
@tarball = result[
|
55
|
+
@sha = result["commit"]["sha"]
|
56
|
+
@tarball = result["_links"]["html"].gsub(%r{/tree/#{branch}}, "/archive/#{branch}.tar.gz")
|
55
57
|
end
|
56
58
|
|
57
59
|
def fetch_tags
|
@@ -60,17 +62,17 @@ module Raygun
|
|
60
62
|
|
61
63
|
result = JSON.parse(response.body).first
|
62
64
|
handle_missing_tag_error unless result
|
63
|
-
@sha = result[
|
64
|
-
@tarball = result[
|
65
|
+
@sha = result["commit"]["sha"]
|
66
|
+
@tarball = result["tarball_url"]
|
65
67
|
end
|
66
68
|
|
67
69
|
def http_get(url)
|
68
|
-
uri = URI
|
70
|
+
uri = URI(url)
|
69
71
|
http = Net::HTTP.new(uri.host, uri.port)
|
70
72
|
http.use_ssl = true
|
71
|
-
request = Net::HTTP::Get.new(
|
73
|
+
request = Net::HTTP::Get.new(uri)
|
72
74
|
|
73
|
-
|
75
|
+
http.request(request)
|
74
76
|
end
|
75
77
|
end
|
76
78
|
end
|
data/lib/raygun/version.rb
CHANGED
data/raygun.gemspec
CHANGED
@@ -1,23 +1,28 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
File.expand_path('../lib', __FILE__).tap do |lib|
|
1
|
+
File.expand_path("lib", __dir__).tap do |lib|
|
4
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
3
|
end
|
6
4
|
|
7
|
-
require
|
5
|
+
require "raygun/version"
|
8
6
|
|
9
7
|
Gem::Specification.new do |gem|
|
10
8
|
gem.name = "raygun"
|
11
9
|
gem.version = Raygun::VERSION
|
12
10
|
gem.authors = ["Christian Nelson", "Jonah Williams", "Jason Wadsworth"]
|
13
11
|
gem.email = ["christian@carbonfive.com"]
|
14
|
-
gem.description =
|
15
|
-
gem.summary =
|
12
|
+
gem.description = "Carbon Five Rails application generator"
|
13
|
+
gem.summary = "Generates and customizes Rails applications with Carbon Five best practices baked in."
|
16
14
|
gem.homepage = "https://github.com/carbonfive/raygun"
|
17
|
-
gem.license =
|
15
|
+
gem.license = "MIT"
|
18
16
|
|
19
|
-
gem.files = `git ls-files`.split(
|
17
|
+
gem.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
20
18
|
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
21
19
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
22
20
|
gem.require_paths = ["lib"]
|
21
|
+
|
22
|
+
gem.required_ruby_version = "~> 2.4"
|
23
|
+
|
24
|
+
gem.add_development_dependency "bundler", "~> 2.0"
|
25
|
+
gem.add_development_dependency "rake", "~> 13.0"
|
26
|
+
gem.add_development_dependency "rspec", "~> 3.9"
|
27
|
+
gem.add_development_dependency "rubocop", "0.79.0"
|
23
28
|
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
require_relative "../../lib/raygun/raygun"
|
3
|
+
|
4
|
+
describe Raygun::Runner do
|
5
|
+
describe "#fetch_rubocop_file" do
|
6
|
+
context "the repo is the standard carbonfive raygun-rails repo" do
|
7
|
+
before do
|
8
|
+
@runner = described_class.new("target/dir", "carbonfive/raygun-rails")
|
9
|
+
allow(URI).to receive(:open).and_return(StringIO.new("# rubocop contents"))
|
10
|
+
allow(IO).to receive(:write)
|
11
|
+
allow(@runner).to receive(:shell).and_return("GitSHAgoeshere")
|
12
|
+
end
|
13
|
+
it "inserts a copy of the rubocop file pulled from the carbonfive/c5-conventions repo" do
|
14
|
+
@runner.send(:fetch_rubocop_file)
|
15
|
+
expect(@runner).to have_received(:shell)
|
16
|
+
.with("git ls-remote https://github.com/carbonfive/c5-conventions master")
|
17
|
+
expect(URI).to have_received(:open)
|
18
|
+
.with("https://raw.githubusercontent.com/carbonfive/c5-conventions/master/rubocop/rubocop.yml")
|
19
|
+
expect(IO).to have_received(:write) do |path, contents|
|
20
|
+
expect(path).to eq(File.absolute_path("target/dir/.rubocop.yml"))
|
21
|
+
expect(contents).to include("@ GitSHA")
|
22
|
+
expect(contents).to include("# rubocop contents")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "rspec"
|
metadata
CHANGED
@@ -1,26 +1,84 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: raygun
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Nelson
|
8
8
|
- Jonah Williams
|
9
9
|
- Jason Wadsworth
|
10
|
-
autorequire:
|
10
|
+
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
14
|
-
dependencies:
|
13
|
+
date: 2020-07-02 00:00:00.000000000 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: bundler
|
17
|
+
requirement: !ruby/object:Gem::Requirement
|
18
|
+
requirements:
|
19
|
+
- - "~>"
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2.0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
requirements:
|
26
|
+
- - "~>"
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
version: '2.0'
|
29
|
+
- !ruby/object:Gem::Dependency
|
30
|
+
name: rake
|
31
|
+
requirement: !ruby/object:Gem::Requirement
|
32
|
+
requirements:
|
33
|
+
- - "~>"
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '13.0'
|
36
|
+
type: :development
|
37
|
+
prerelease: false
|
38
|
+
version_requirements: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: '13.0'
|
43
|
+
- !ruby/object:Gem::Dependency
|
44
|
+
name: rspec
|
45
|
+
requirement: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '3.9'
|
50
|
+
type: :development
|
51
|
+
prerelease: false
|
52
|
+
version_requirements: !ruby/object:Gem::Requirement
|
53
|
+
requirements:
|
54
|
+
- - "~>"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '3.9'
|
57
|
+
- !ruby/object:Gem::Dependency
|
58
|
+
name: rubocop
|
59
|
+
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirements:
|
61
|
+
- - '='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: 0.79.0
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - '='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 0.79.0
|
15
71
|
description: Carbon Five Rails application generator
|
16
72
|
email:
|
17
73
|
- christian@carbonfive.com
|
18
74
|
executables:
|
19
75
|
- raygun
|
76
|
+
- setup
|
20
77
|
extensions: []
|
21
78
|
extra_rdoc_files: []
|
22
79
|
files:
|
23
80
|
- ".gitignore"
|
81
|
+
- ".rubocop.yml"
|
24
82
|
- ".ruby-gemset"
|
25
83
|
- ".ruby-version"
|
26
84
|
- CHANGES.md
|
@@ -29,35 +87,41 @@ files:
|
|
29
87
|
- README.md
|
30
88
|
- Rakefile
|
31
89
|
- bin/raygun
|
90
|
+
- bin/setup
|
32
91
|
- lib/colorize.rb
|
33
92
|
- lib/raygun/raygun.rb
|
34
93
|
- lib/raygun/template_repo.rb
|
35
94
|
- lib/raygun/version.rb
|
36
95
|
- marvin.jpg
|
37
96
|
- raygun.gemspec
|
97
|
+
- spec/raygun/raygun.rb
|
98
|
+
- spec/raygun/runner_spec.rb
|
99
|
+
- spec/spec_helper.rb
|
38
100
|
homepage: https://github.com/carbonfive/raygun
|
39
101
|
licenses:
|
40
102
|
- MIT
|
41
103
|
metadata: {}
|
42
|
-
post_install_message:
|
104
|
+
post_install_message:
|
43
105
|
rdoc_options: []
|
44
106
|
require_paths:
|
45
107
|
- lib
|
46
108
|
required_ruby_version: !ruby/object:Gem::Requirement
|
47
109
|
requirements:
|
48
|
-
- - "
|
110
|
+
- - "~>"
|
49
111
|
- !ruby/object:Gem::Version
|
50
|
-
version: '
|
112
|
+
version: '2.4'
|
51
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
114
|
requirements:
|
53
115
|
- - ">="
|
54
116
|
- !ruby/object:Gem::Version
|
55
117
|
version: '0'
|
56
118
|
requirements: []
|
57
|
-
|
58
|
-
|
59
|
-
signing_key:
|
119
|
+
rubygems_version: 3.0.3
|
120
|
+
signing_key:
|
60
121
|
specification_version: 4
|
61
122
|
summary: Generates and customizes Rails applications with Carbon Five best practices
|
62
123
|
baked in.
|
63
|
-
test_files:
|
124
|
+
test_files:
|
125
|
+
- spec/raygun/raygun.rb
|
126
|
+
- spec/raygun/runner_spec.rb
|
127
|
+
- spec/spec_helper.rb
|