speg 1.0.1 → 1.1.2
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/bin/setup +6 -6
- data/bin/speg +1 -1
- data/lib/spec_generator.rb +5 -82
- data/lib/speg/file_generator.rb +55 -0
- data/lib/speg/file_paths.rb +23 -0
- data/lib/speg/templates.rb +19 -0
- data/lib/speg/version.rb +1 -1
- data/spec/lib/spec_generator_spec.rb +4 -14
- data/spec/lib/speg/file_generator_spec.rb +34 -0
- data/spec/lib/speg/version_spec.rb +1 -1
- data/spec/spec_helper.rb +9 -0
- metadata +13 -4
- data/lib/speg/error.rb +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72a1418b1b185cae923d4b2670dc35fb6882a0a8a8c02c340c45e961f818c3aa
|
4
|
+
data.tar.gz: b094e78a226085b0f513ee0b0311f194bae354228093f2667d8a33baa6c10c2e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b1dc9eac30e5d64cc15f4167b4bf87338096f924592376d5e10ab7fc1879daef1bf8d848fcd9e25cdbebd24fac347a809e47d0df5ecf3b0c61d819a9987d0e19
|
7
|
+
data.tar.gz: 4cc816c10626971feb55ae67880703166265e22b49b7aa1f23465b91471bba6c467825c2cb893d1155f8917352a46c6ea76407cb0a562f64eb51932bb92a06c2
|
data/bin/setup
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
|
2
|
-
set -euo pipefail
|
3
|
-
IFS=$'\n\t'
|
4
|
-
set -vx
|
1
|
+
##!/usr/bin/env bash
|
2
|
+
#set -euo pipefail
|
3
|
+
#IFS=$'\n\t'
|
4
|
+
#set -vx
|
5
5
|
|
6
|
-
bundle install
|
6
|
+
#bundle install
|
7
7
|
|
8
|
-
|
8
|
+
## Do any other automated setup that you need to do here
|
data/bin/speg
CHANGED
data/lib/spec_generator.rb
CHANGED
@@ -1,86 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'optparse'
|
3
|
+
require 'speg/file_generator'
|
5
4
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
def create_files
|
10
|
-
@option_parser = OptionParser.new
|
11
|
-
@option_parser.on('--rspec', 'Generate Rspec files') { generate_test_files('spec') }
|
12
|
-
|
13
|
-
@option_parser.on('--minitest', 'Generate Minitest files') { generate_test_files('test') }
|
14
|
-
|
15
|
-
if ARGV.empty?
|
16
|
-
puts @option_parser.help
|
17
|
-
exit
|
18
|
-
end
|
19
|
-
|
20
|
-
@option_parser.parse!
|
21
|
-
end
|
22
|
-
|
23
|
-
def generate_test_files(file_suffix)
|
24
|
-
PATHS.each do |path|
|
25
|
-
next unless Dir.exist?(path)
|
26
|
-
|
27
|
-
file_paths(path).each do |dir|
|
28
|
-
file_path = dir.split('/')
|
29
|
-
file_name = "#{file_path.last.split('.').first}_#{file_suffix}.rb"
|
30
|
-
klass_name = File.basename(file_path.last, '.rb').split('_').map(&:humanize).join('')
|
31
|
-
file_path.pop
|
32
|
-
file_path.shift
|
33
|
-
file_path << file_name
|
34
|
-
|
35
|
-
# skip if file name is application
|
36
|
-
next if file_name.split('_').first == 'application'
|
37
|
-
|
38
|
-
# skip if spec file exists
|
39
|
-
next if File.exist?("file_suffix/#{file_path.join('/')}")
|
40
|
-
|
41
|
-
if file_suffix == 'test'
|
42
|
-
minitest_template("#{file_suffix}/#{file_path.join('/')}", klass_name)
|
43
|
-
else
|
44
|
-
rspec_template("#{file_suffix}/#{file_path.join('/')}", klass_name)
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
# private
|
51
|
-
|
52
|
-
def rspec_template(file_path, klass_name)
|
53
|
-
create_file file_path, <<~RUBY
|
54
|
-
require 'rails_helper'
|
55
|
-
|
56
|
-
RSpec.describe #{klass_name} do
|
57
|
-
end
|
58
|
-
RUBY
|
59
|
-
end
|
60
|
-
|
61
|
-
def minitest_template(file_path, klass_name)
|
62
|
-
create_file file_path, <<~RUBY
|
63
|
-
require 'minitest/autorun'
|
64
|
-
|
65
|
-
class #{klass_name} < Minitest::Test
|
66
|
-
end
|
67
|
-
RUBY
|
68
|
-
end
|
69
|
-
|
70
|
-
def file_paths(directory)
|
71
|
-
entries = Dir.entries(directory).reject { |f| f.start_with?('.') }
|
72
|
-
|
73
|
-
files = []
|
74
|
-
|
75
|
-
entries.each do |entry|
|
76
|
-
full_path = File.join(directory, entry)
|
77
|
-
if File.directory?(full_path)
|
78
|
-
files.concat(file_paths(full_path))
|
79
|
-
else
|
80
|
-
files << full_path
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
files
|
85
|
-
end
|
5
|
+
class SpecGenerator
|
6
|
+
def self.generate_files
|
7
|
+
Speg::FileGenerator.new.create_files
|
86
8
|
end
|
9
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require 'optparse'
|
3
|
+
require_relative 'templates'
|
4
|
+
require_relative 'file_paths'
|
5
|
+
|
6
|
+
module Speg
|
7
|
+
class FileGenerator < Rails::Generators::Base
|
8
|
+
include Templates
|
9
|
+
include FilePaths
|
10
|
+
|
11
|
+
PATHS = %w[app/models app/controllers app/helpers app/services app/adapters].freeze
|
12
|
+
|
13
|
+
def create_files
|
14
|
+
@option_parser = OptionParser.new
|
15
|
+
@option_parser.on('--rspec', 'Generate Rspec files') { generate_test_files('spec') }
|
16
|
+
|
17
|
+
@option_parser.on('--minitest', 'Generate Minitest files') { generate_test_files('test') }
|
18
|
+
|
19
|
+
if ARGV.empty?
|
20
|
+
puts @option_parser.help
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
|
24
|
+
@option_parser.parse!
|
25
|
+
end
|
26
|
+
|
27
|
+
def generate_test_files(file_suffix)
|
28
|
+
PATHS.each do |path|
|
29
|
+
next unless Dir.exist?(path)
|
30
|
+
|
31
|
+
file_paths(path).each do |dir|
|
32
|
+
file_path = dir.split('/')
|
33
|
+
file_name = "#{file_path.last.split('.').first}_#{file_suffix}.rb"
|
34
|
+
klass_name = File.basename(file_path.last, '.rb').split('_').map(&:humanize).join('')
|
35
|
+
file_path.pop
|
36
|
+
file_path.shift
|
37
|
+
file_path << file_name
|
38
|
+
file = "#{file_suffix}/#{file_path.join('/')}"
|
39
|
+
|
40
|
+
# skip if file name is application
|
41
|
+
next if file_name.split('_').first == 'application'
|
42
|
+
|
43
|
+
# skip if spec file exists
|
44
|
+
next if File.exist?(file)
|
45
|
+
|
46
|
+
if file_suffix == 'test'
|
47
|
+
minitest_template(file, klass_name)
|
48
|
+
else
|
49
|
+
rspec_template(file, klass_name)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Return the list of file paths in a directory
|
4
|
+
module Speg
|
5
|
+
module FilePaths
|
6
|
+
def file_paths(directory)
|
7
|
+
entries = Dir.entries(directory).reject { |f| f.start_with?('.') }
|
8
|
+
|
9
|
+
files = []
|
10
|
+
|
11
|
+
entries.each do |entry|
|
12
|
+
full_path = File.join(directory, entry)
|
13
|
+
if File.directory?(full_path)
|
14
|
+
files.concat(file_paths(full_path))
|
15
|
+
else
|
16
|
+
files << full_path
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
files
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module Speg
|
4
|
+
module Templates
|
5
|
+
def rspec_template(file_path, klass_name)
|
6
|
+
create_file file_path, <<~RUBY
|
7
|
+
RSpec.describe #{klass_name} do
|
8
|
+
end
|
9
|
+
RUBY
|
10
|
+
end
|
11
|
+
|
12
|
+
def minitest_template(file_path, klass_name)
|
13
|
+
create_file file_path, <<~RUBY
|
14
|
+
class #{klass_name} < Minitest::Test
|
15
|
+
end
|
16
|
+
RUBY
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/speg/version.rb
CHANGED
@@ -1,17 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'spec_helper'
|
4
|
-
require_relative '../../lib/spec_generator'
|
3
|
+
# require 'spec_helper'
|
4
|
+
# require_relative '../../lib/spec_generator'
|
5
5
|
|
6
|
-
RSpec.describe SpecGenerator do
|
7
|
-
|
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
|
6
|
+
# RSpec.describe SpecGenerator do
|
7
|
+
# end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative '../../../lib/speg/file_generator'
|
3
|
+
|
4
|
+
RSpec.describe Speg::FileGenerator do
|
5
|
+
let(:path){ ['spec/lib/models'] }
|
6
|
+
let(:file_path) { 'spec/lib/models/dummy_model_spec.rb' }
|
7
|
+
|
8
|
+
context 'generate file' do
|
9
|
+
before(:each) do
|
10
|
+
stub_const('Speg::FileGenerator::PATHS', path)
|
11
|
+
described_class.new.generate_test_files('spec')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'generates a spec file' do
|
15
|
+
expect(File.exist?('spec/lib/models/test_spec.rb')).to be_truthy
|
16
|
+
end
|
17
|
+
|
18
|
+
xit 'skips existing files' do
|
19
|
+
expect(described_class.new.generate_test_files('spec')).not_to eq file_path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context '#rspec_template' do
|
24
|
+
before { described_class.new.rspec_template(file_path, 'DummyModel') }
|
25
|
+
|
26
|
+
it 'generates the spec file' do
|
27
|
+
expect(File.exist?(file_path)).to be_truthy
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'contains boilerplate code' do
|
31
|
+
expect(File.read(file_path)).to include('RSpec.describe DummyModel')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -10,4 +10,13 @@ RSpec.configure do |config|
|
|
10
10
|
config.expect_with :rspec do |c|
|
11
11
|
c.syntax = :expect
|
12
12
|
end
|
13
|
+
|
14
|
+
config.after(:suite) do
|
15
|
+
# delete dummy test_spec.rb file after test completes
|
16
|
+
spec_file = File.expand_path('spec/lib/models/dummy_model_spec.rb')
|
17
|
+
file = File.expand_path('spec/lib/models/test_spec.rb')
|
18
|
+
|
19
|
+
File.delete(file)
|
20
|
+
File.delete(spec_file)
|
21
|
+
end
|
13
22
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: speg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Opara Ifeanyi Christian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-02-
|
11
|
+
date: 2024-02-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -37,16 +37,25 @@ files:
|
|
37
37
|
- bin/setup
|
38
38
|
- bin/speg
|
39
39
|
- lib/spec_generator.rb
|
40
|
-
- lib/speg/
|
40
|
+
- lib/speg/file_generator.rb
|
41
|
+
- lib/speg/file_paths.rb
|
42
|
+
- lib/speg/templates.rb
|
41
43
|
- lib/speg/version.rb
|
42
44
|
- spec/lib/models/test.rb
|
43
45
|
- spec/lib/spec_generator_spec.rb
|
46
|
+
- spec/lib/speg/file_generator_spec.rb
|
44
47
|
- spec/lib/speg/version_spec.rb
|
45
48
|
- spec/spec_helper.rb
|
46
49
|
homepage: https://github.com/chrisgeek/speg
|
47
50
|
licenses:
|
48
51
|
- MIT
|
49
|
-
metadata:
|
52
|
+
metadata:
|
53
|
+
homepage_uri: https://github.com/chrisgeek/speg
|
54
|
+
documentation_uri: https://rubydoc.info/github/chrisgeek/speg
|
55
|
+
changelog_uri: https://github.com/chrisgeek/speg/blob/main/CHANGELOG.md
|
56
|
+
source_code_uri: https://github.com/chrisgeek/speg
|
57
|
+
bug_tracker_uri: https://github.com/chrisgeek/speg/issues
|
58
|
+
wiki_uri: https://github.com/chrisgeek/speg/wiki
|
50
59
|
post_install_message:
|
51
60
|
rdoc_options: []
|
52
61
|
require_paths:
|
data/lib/speg/error.rb
DELETED