speg 1.0.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 +7 -0
- data/bin/setup +8 -0
- data/bin/speg +4 -0
- data/lib/spec_generator.rb +87 -0
- data/lib/speg/error.rb +3 -0
- data/lib/speg/version.rb +7 -0
- data/spec/lib/models/test.rb +0 -0
- data/spec/lib/spec_generator_spec.rb +17 -0
- data/spec/lib/speg/version_spec.rb +10 -0
- data/spec/spec_helper.rb +13 -0
- metadata +68 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 37b1e1d86bf35a5549ac200c2e6fcf65245fe7e0a8ddc72a522fc9a36d486740
|
4
|
+
data.tar.gz: e3a296971c54f430f5caebd9999949980244c53b4cb2a8726fef0511621d335e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 00c5e5bac3b8f469cfedc3afe598cd9df519ba00bac7f7261c028722b338bfadb323b7eba05be3dfffdd5d161c8b4399799685b8990587e1552c2542ea65a588
|
7
|
+
data.tar.gz: 2477bb7e09417d749e712e7bf835ac16a050a4a392f3a9eb36de25f09a57d43492909d3eba1c6b3df77de36fc0d8bd9f5a421418102eab9d2dfe29d7c8f00492
|
data/bin/setup
ADDED
data/bin/speg
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails/generators'
|
4
|
+
require 'optparse'
|
5
|
+
require 'debug'
|
6
|
+
|
7
|
+
class SpecGenerator < Rails::Generators::Base
|
8
|
+
PATHS = %w[app/models app/controllers app/helpers app/services app/adapters].freeze
|
9
|
+
|
10
|
+
def create_files
|
11
|
+
@option_parser = OptionParser.new
|
12
|
+
@option_parser.on('--rspec', 'Generate Rspec files') { generate_test_files('spec') }
|
13
|
+
|
14
|
+
@option_parser.on('--minitest', 'Generate Minitest files') { generate_test_files('test') }
|
15
|
+
|
16
|
+
if ARGV.empty?
|
17
|
+
puts @option_parser.help
|
18
|
+
exit
|
19
|
+
end
|
20
|
+
|
21
|
+
@option_parser.parse!
|
22
|
+
end
|
23
|
+
|
24
|
+
def generate_test_files(file_suffix)
|
25
|
+
PATHS.each do |path|
|
26
|
+
next unless Dir.exist?(path)
|
27
|
+
|
28
|
+
file_paths(path).each do |dir|
|
29
|
+
file_path = dir.split('/')
|
30
|
+
file_name = "#{file_path.last.split('.').first}_#{file_suffix}.rb"
|
31
|
+
klass_name = File.basename(file_path.last, '.rb').split('_').map(&:humanize).join('')
|
32
|
+
file_path.pop
|
33
|
+
file_path.shift
|
34
|
+
file_path << file_name
|
35
|
+
|
36
|
+
# skip if file name is application
|
37
|
+
next if file_name.split('_').first == 'application'
|
38
|
+
|
39
|
+
# skip if spec file exists
|
40
|
+
next if File.exist?("file_suffix/#{file_path.join('/')}")
|
41
|
+
|
42
|
+
if file_suffix == 'test'
|
43
|
+
minitest_template("#{file_suffix}/#{file_path.join('/')}", klass_name)
|
44
|
+
else
|
45
|
+
rspec_template("#{file_suffix}/#{file_path.join('/')}", klass_name)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# private
|
52
|
+
|
53
|
+
def rspec_template(file_path, klass_name)
|
54
|
+
create_file file_path, <<~RUBY
|
55
|
+
require 'rails_helper'
|
56
|
+
|
57
|
+
RSpec.describe #{klass_name} do
|
58
|
+
end
|
59
|
+
RUBY
|
60
|
+
end
|
61
|
+
|
62
|
+
def minitest_template(file_path, klass_name)
|
63
|
+
create_file file_path, <<~RUBY
|
64
|
+
require 'minitest/autorun'
|
65
|
+
|
66
|
+
class #{klass_name} < Minitest::Test
|
67
|
+
end
|
68
|
+
RUBY
|
69
|
+
end
|
70
|
+
|
71
|
+
def file_paths(directory)
|
72
|
+
entries = Dir.entries(directory).reject { |f| f.start_with?('.') }
|
73
|
+
|
74
|
+
files = []
|
75
|
+
|
76
|
+
entries.each do |entry|
|
77
|
+
full_path = File.join(directory, entry)
|
78
|
+
if File.directory?(full_path)
|
79
|
+
files.concat(file_paths(full_path))
|
80
|
+
else
|
81
|
+
files << full_path
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
files
|
86
|
+
end
|
87
|
+
end
|
data/lib/speg/error.rb
ADDED
data/lib/speg/version.rb
ADDED
File without changes
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require_relative '../../lib/spec_generator'
|
5
|
+
|
6
|
+
RSpec.describe SpecGenerator do
|
7
|
+
let(:path){ ['spec/lib/models'] }
|
8
|
+
|
9
|
+
it 'generates files' do
|
10
|
+
spec_generator = double()
|
11
|
+
# allow(spec_generator).to receive(:rspec_template).and_return('Rspec template')
|
12
|
+
stub_const('SpecGenerator::PATHS', path)
|
13
|
+
described_class.new.generate_test_files('spec')
|
14
|
+
|
15
|
+
expect(File.exist?('spec/lib/models/test_spec.rb')).to be_truthy
|
16
|
+
end
|
17
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
# Enable flags like --only-failures and --next-failure
|
5
|
+
config.example_status_persistence_file_path = ".rspec_status"
|
6
|
+
|
7
|
+
# Disable RSpec exposing methods globally on `Module` and `main`
|
8
|
+
config.disable_monkey_patching!
|
9
|
+
|
10
|
+
config.expect_with :rspec do |c|
|
11
|
+
c.syntax = :expect
|
12
|
+
end
|
13
|
+
end
|
metadata
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: speg
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Opara Ifeanyi Christian
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2024-02-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: railties
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '7.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '7.0'
|
27
|
+
description: This gem creates spec files that were not created automatically with
|
28
|
+
rspec, this is especially helpful if you have to generate multiple spec files
|
29
|
+
email:
|
30
|
+
- chrisgeek29@gmail.com
|
31
|
+
executables:
|
32
|
+
- speg
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- bin/setup
|
37
|
+
- bin/speg
|
38
|
+
- lib/spec_generator.rb
|
39
|
+
- lib/speg/error.rb
|
40
|
+
- lib/speg/version.rb
|
41
|
+
- spec/lib/models/test.rb
|
42
|
+
- spec/lib/spec_generator_spec.rb
|
43
|
+
- spec/lib/speg/version_spec.rb
|
44
|
+
- spec/spec_helper.rb
|
45
|
+
homepage: https://github.com/chrisgeek/speg
|
46
|
+
licenses:
|
47
|
+
- MIT
|
48
|
+
metadata: {}
|
49
|
+
post_install_message:
|
50
|
+
rdoc_options: []
|
51
|
+
require_paths:
|
52
|
+
- lib
|
53
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: 2.6.0
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
63
|
+
requirements: []
|
64
|
+
rubygems_version: 3.3.26
|
65
|
+
signing_key:
|
66
|
+
specification_version: 4
|
67
|
+
summary: Create spec files for Rspec
|
68
|
+
test_files: []
|