raygun 1.1.1 → 1.2.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 +4 -4
- data/CHANGES.md +7 -1
- data/lib/raygun/c5_conventions.rb +65 -0
- data/lib/raygun/raygun.rb +2 -27
- data/lib/raygun/version.rb +1 -1
- data/spec/raygun/c5_conventions_spec.rb +41 -0
- metadata +6 -5
- data/spec/raygun/runner_spec.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6464c730d406fd0cd161d886375e52ef103781865bfb7c81f382987351c08597
|
4
|
+
data.tar.gz: f01fc5f9e573314b6852e002e79e18ca49a1163fbcc9052008ab94ac24ab4d1e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9ac1c6b995395e8dffeb309443f204b7bd7799083b45e2ac3cf51dcc0d73a15621dcb9648da7fadb8aae133aa94bf06619d7285bc03c2c9b5b627e55bc9e2361
|
7
|
+
data.tar.gz: 1a6b817213c3ed7138a231e2f8b728b6d509c17a3e72f1a0e23248e6582261673156453c36f37fda3796774b2f0bd2946c66c32165ce9dc54281334a2a938828
|
data/CHANGES.md
CHANGED
@@ -3,11 +3,17 @@
|
|
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.2.0 [2021-05-20]
|
7
|
+
|
8
|
+
New features:
|
9
|
+
|
10
|
+
* Copy the new rubocop conventions from the `main` branch of the c5-conventions repo (#163).
|
11
|
+
|
6
12
|
## 1.1.1 [2020-07-02]
|
7
13
|
|
8
14
|
Housekeeping:
|
9
15
|
|
10
|
-
* Fix compatibility so that any supported
|
16
|
+
* Fix compatibility so that any supported Ruby (currently 2.5+) is allowed (#165).
|
11
17
|
|
12
18
|
## 1.1.0 [2020-07-02]
|
13
19
|
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require "colorize"
|
2
|
+
require "open-uri"
|
3
|
+
|
4
|
+
module Raygun
|
5
|
+
class C5Conventions
|
6
|
+
REPO = "carbonfive/c5-conventions".freeze
|
7
|
+
|
8
|
+
SOURCES = [
|
9
|
+
"https://raw.githubusercontent.com/#{REPO}/main/rubocop/.rubocop.yml",
|
10
|
+
"https://raw.githubusercontent.com/#{REPO}/main/rubocop/.rubocop-common.yml",
|
11
|
+
"https://raw.githubusercontent.com/#{REPO}/main/rubocop/.rubocop-performance.yml",
|
12
|
+
"https://raw.githubusercontent.com/#{REPO}/main/rubocop/.rubocop-rails.yml",
|
13
|
+
"https://raw.githubusercontent.com/#{REPO}/main/rubocop/.rubocop-rspec.yml"
|
14
|
+
].freeze
|
15
|
+
|
16
|
+
ATTRIBUTION_HEADER = <<~TEXT
|
17
|
+
# Sourced from #{REPO} @ %<sha>s
|
18
|
+
#
|
19
|
+
# If you make changes to this file, consider opening a PR to backport them to the c5-conventions repo:
|
20
|
+
# https://github.com/#{REPO}
|
21
|
+
TEXT
|
22
|
+
|
23
|
+
# Install the latest copy of c5-conventions rubocop config in the given directory.
|
24
|
+
# If the latest files can't be downloaded from GitHub, print a warning, don't raise an exception.
|
25
|
+
# Any existing .rubocop.yml will be overwritten.
|
26
|
+
def self.install(target:, sources: SOURCES)
|
27
|
+
new(target: target, sources: sources).install
|
28
|
+
rescue Errno::ENOENT, OpenURI::HTTPError => e
|
29
|
+
puts ""
|
30
|
+
puts "Failed to install the CarbonFive conventions from the #{REPO} GitHub repo".colorize(:light_red)
|
31
|
+
puts "Error: #{e}".colorize(:light_red)
|
32
|
+
puts "You'll have to manage your own `.rubocop.yml` setup".colorize(:light_red)
|
33
|
+
end
|
34
|
+
|
35
|
+
def initialize(sources:, target:)
|
36
|
+
@sources = sources
|
37
|
+
@target = target
|
38
|
+
end
|
39
|
+
|
40
|
+
def install
|
41
|
+
sources.each do |url_str|
|
42
|
+
uri = URI(url_str)
|
43
|
+
contents = [attribution_header, uri.open.read].join("\n")
|
44
|
+
filename = File.basename(uri.path)
|
45
|
+
|
46
|
+
IO.write(File.join(target, filename), contents)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
attr_reader :sources, :target
|
53
|
+
|
54
|
+
def attribution_header
|
55
|
+
format(ATTRIBUTION_HEADER, sha: latest_commit_sha)
|
56
|
+
end
|
57
|
+
|
58
|
+
def latest_commit_sha
|
59
|
+
@latest_commit_sha ||= begin
|
60
|
+
stdout = `git ls-remote https://github.com/#{REPO} main`
|
61
|
+
stdout[/^(\h{7})/, 1] || "main"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/raygun/raygun.rb
CHANGED
@@ -3,17 +3,16 @@ require "ostruct"
|
|
3
3
|
require "fileutils"
|
4
4
|
require "securerandom"
|
5
5
|
require "net/http"
|
6
|
-
require "open-uri"
|
7
6
|
require "json"
|
8
7
|
require "colorize"
|
9
8
|
|
10
9
|
require_relative "version"
|
10
|
+
require_relative "c5_conventions"
|
11
11
|
require_relative "template_repo"
|
12
12
|
|
13
13
|
module Raygun
|
14
14
|
class Runner
|
15
15
|
CARBONFIVE_REPO = "carbonfive/raygun-rails"
|
16
|
-
C5_CONVENTIONS_REPO = "carbonfive/c5-conventions"
|
17
16
|
|
18
17
|
attr_accessor :target_dir, :app_dir, :app_name, :dash_name, :snake_name,
|
19
18
|
:camel_name, :title_name, :prototype_repo,
|
@@ -108,7 +107,7 @@ module Raygun
|
|
108
107
|
FileUtils.mv dirs_to_move, app_dir
|
109
108
|
FileUtils.remove_dir extraneous_dir
|
110
109
|
|
111
|
-
|
110
|
+
C5Conventions.install(target: app_dir) if @prototype_repo == CARBONFIVE_REPO
|
112
111
|
end
|
113
112
|
|
114
113
|
def rename_new_app
|
@@ -222,30 +221,6 @@ module Raygun
|
|
222
221
|
|
223
222
|
protected
|
224
223
|
|
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
|
-
|
249
224
|
def camelize(string)
|
250
225
|
result = string.sub(/^[a-z\d]*/) { $&.capitalize }
|
251
226
|
result.gsub(%r{(?:_|(/))([a-z\d]*)}) { "#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}" }
|
data/lib/raygun/version.rb
CHANGED
@@ -0,0 +1,41 @@
|
|
1
|
+
require_relative "../spec_helper"
|
2
|
+
require_relative "../../lib/raygun/c5_conventions"
|
3
|
+
|
4
|
+
require "tmpdir"
|
5
|
+
|
6
|
+
describe Raygun::C5Conventions do
|
7
|
+
subject(:install) { described_class.install(target: target, sources: sources) }
|
8
|
+
|
9
|
+
let(:target) { Dir.mktmpdir }
|
10
|
+
let(:sources) { described_class::SOURCES }
|
11
|
+
|
12
|
+
describe ".install" do
|
13
|
+
it "puts rubocop files into the target directory" do
|
14
|
+
install
|
15
|
+
|
16
|
+
paths = %w[
|
17
|
+
.rubocop.yml
|
18
|
+
.rubocop-common.yml
|
19
|
+
.rubocop-performance.yml
|
20
|
+
.rubocop-rails.yml
|
21
|
+
.rubocop-rspec.yml
|
22
|
+
].map { |path| Pathname.new(File.join(target, path)) }
|
23
|
+
|
24
|
+
expect(paths).to all(be_file)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "inserts an attribution header" do
|
28
|
+
install
|
29
|
+
rubocop_config = IO.read(File.join(target, ".rubocop.yml"))
|
30
|
+
expect(rubocop_config).to match(%r{^# Sourced from carbonfive/c5-conventions @ \h{7}$})
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "when a source doesn't exist" do
|
35
|
+
let(:sources) { ["https://raw.githubusercontent.com/carbonfive/c5-conventions/main/rubocop/.rubocop-whatever.yml"] }
|
36
|
+
|
37
|
+
it "prints a warning to stdout" do
|
38
|
+
expect { install }.to output(/Failed to install/).to_stdout
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: raygun
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Nelson
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2021-
|
13
|
+
date: 2021-05-21 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: bundler
|
@@ -90,12 +90,13 @@ files:
|
|
90
90
|
- bin/raygun
|
91
91
|
- bin/setup
|
92
92
|
- lib/colorize.rb
|
93
|
+
- lib/raygun/c5_conventions.rb
|
93
94
|
- lib/raygun/raygun.rb
|
94
95
|
- lib/raygun/template_repo.rb
|
95
96
|
- lib/raygun/version.rb
|
96
97
|
- marvin.jpg
|
97
98
|
- raygun.gemspec
|
98
|
-
- spec/raygun/
|
99
|
+
- spec/raygun/c5_conventions_spec.rb
|
99
100
|
- spec/spec_helper.rb
|
100
101
|
homepage: https://github.com/carbonfive/raygun
|
101
102
|
licenses:
|
@@ -116,11 +117,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
117
|
- !ruby/object:Gem::Version
|
117
118
|
version: '0'
|
118
119
|
requirements: []
|
119
|
-
rubygems_version: 3.
|
120
|
+
rubygems_version: 3.2.2
|
120
121
|
signing_key:
|
121
122
|
specification_version: 4
|
122
123
|
summary: Generates and customizes Rails applications with Carbon Five best practices
|
123
124
|
baked in.
|
124
125
|
test_files:
|
125
|
-
- spec/raygun/
|
126
|
+
- spec/raygun/c5_conventions_spec.rb
|
126
127
|
- spec/spec_helper.rb
|
data/spec/raygun/runner_spec.rb
DELETED
@@ -1,27 +0,0 @@
|
|
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
|