speg 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/bin/speg ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'spec_generator'
3
+ require 'optparse'
4
+ SpecGenerator.new.create_files
@@ -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
@@ -0,0 +1,3 @@
1
+ module Speg
2
+ class Error < StandardError; end
3
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Speg
4
+ class Version
5
+ VERSION = '1.0.0'
6
+ end
7
+ end
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
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+ require_relative '../../../lib/speg/version'
5
+
6
+ RSpec.describe Speg::Version do
7
+ it 'has a version number' do
8
+ expect(Speg::Version::VERSION).to eq '1.0.0'
9
+ end
10
+ end
@@ -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: []