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 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: []