speg 1.0.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 87bf159c24296022f10bc09c51edd3787041e20ddf2eabfc544c29bc60cd065f
4
- data.tar.gz: 2d1c13a12cde3b4b16f3bec234660525477746116a273fe2b50d5385c891ed6d
3
+ metadata.gz: 0a4c449ed21d40ab9729e6b8a3b26394b1c418cc6b8a25d4871795ca79fd8d79
4
+ data.tar.gz: 1573a3aec16025edcbd0c606ca786b906f3aa597491b0d68798332c6a7dd7b02
5
5
  SHA512:
6
- metadata.gz: 16eb260afad4ca256e71b882d254eab0fcdb52b0f5b3e853c4fe4f40382110bb3754e708530765d181599676872bb986242d15a03dca44a294532ac806905143
7
- data.tar.gz: ee5678ad38a395e6639e3684c15cb30faf547f14d22680f43779c628908a39bf645d313d621bbe12e2330b87366a310c848e82cc2e396b1376c87d3a2e3703cb
6
+ metadata.gz: cc6efd077222998078ffe8960cc33b29adebf54bcdecfb55ce5b1c445d71341fd6483e3c69d7a363fb9b36832d4746661ff0a55186c7a92147d966297f1ac287
7
+ data.tar.gz: 88b556b1f5f1fc53f0c04aa9807bf28b24c3e7a2aee1e4e1d6ac0cad3c0c86f00a8a646821be5127ba85b83d25588256c696fe67664cad11a29e87634b9307f9
data/bin/setup CHANGED
@@ -1,8 +1,8 @@
1
- #!/usr/bin/env bash
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
- # Do any other automated setup that you need to do here
8
+ ## Do any other automated setup that you need to do here
data/bin/speg CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
  require 'spec_generator'
3
3
  require 'optparse'
4
- SpecGenerator.new.create_files
4
+ SpecGenerator.generate_files
@@ -1,86 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rails/generators'
4
- require 'optparse'
3
+ require 'speg/file_generator'
5
4
 
6
- class SpecGenerator < Rails::Generators::Base
7
- PATHS = %w[app/models app/controllers app/helpers app/services app/adapters].freeze
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,79 @@
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
+ @option_parser.on('-sg', '--spec_generate ARGUEMENT', 'generate single spec file') do |file_path|
20
+ generate_single_test_file('spec', file_path)
21
+ end
22
+
23
+ @option_parser.on('-tg', '--test_generate ARGUEMENT', 'generate single test file') do |file_path|
24
+ generate_single_test_file('test', file_path)
25
+ end
26
+
27
+ if ARGV.empty?
28
+ puts @option_parser.help
29
+ exit
30
+ end
31
+
32
+ @option_parser.parse!
33
+ end
34
+
35
+ def generate_single_test_file(test_framework, file_path)
36
+ path = file_path.split('/')
37
+ file_name = "#{path.last.split('.').first}_#{test_framework}.rb"
38
+ klass_name = File.basename(path.last, '.rb').split('_').map(&:humanize).join('')
39
+ path.pop
40
+ path.shift
41
+ path << file_name
42
+ file = "#{test_framework}/#{path.join('/')}"
43
+
44
+ if test_framework == 'test'
45
+ minitest_template(file, klass_name)
46
+ else
47
+ rspec_template(file, klass_name)
48
+ end
49
+ end
50
+
51
+ def generate_test_files(file_suffix)
52
+ PATHS.each do |path|
53
+ next unless Dir.exist?(path)
54
+
55
+ file_paths(path).each do |dir|
56
+ file_path = dir.split('/')
57
+ file_name = "#{file_path.last.split('.').first}_#{file_suffix}.rb"
58
+ klass_name = File.basename(file_path.last, '.rb').split('_').map(&:humanize).join('')
59
+ file_path.pop
60
+ file_path.shift
61
+ file_path << file_name
62
+ file = "#{file_suffix}/#{file_path.join('/')}"
63
+
64
+ # skip if file name is application
65
+ next if file_name.split('_').first == 'application'
66
+
67
+ # skip if spec file exists
68
+ next if File.exist?(file)
69
+
70
+ if file_suffix == 'test'
71
+ minitest_template(file, klass_name)
72
+ else
73
+ rspec_template(file, klass_name)
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+ 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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Speg
4
4
  class Version
5
- VERSION = '1.0.2'
5
+ VERSION = '1.2.0'
6
6
  end
7
7
  end
@@ -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
- 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
6
+ # RSpec.describe SpecGenerator do
7
+ # end
@@ -0,0 +1,41 @@
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
+ describe 'generate file' do
9
+ before 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
+ end
18
+
19
+ context '#rspec_template' do
20
+ before { described_class.new.rspec_template(file_path, 'DummyModel') }
21
+
22
+ it 'generates the spec file' do
23
+ expect(File.exist?(file_path)).to be_truthy
24
+ end
25
+
26
+ it 'contains boilerplate code' do
27
+ expect(File.read(file_path)).to include('RSpec.describe DummyModel')
28
+ end
29
+ end
30
+
31
+ describe '#generate_single_test_file' do
32
+ before do
33
+ path = 'spec/lib/models/dummy.rb'
34
+ described_class.new.generate_single_test_file('test', path)
35
+ end
36
+
37
+ it 'generates single test file' do
38
+ expect(File.exist?('test/lib/models/dummy_test.rb')).to be_truthy
39
+ end
40
+ end
41
+ end
@@ -5,6 +5,6 @@ require_relative '../../../lib/speg/version'
5
5
 
6
6
  RSpec.describe Speg::Version do
7
7
  it 'has a version number' do
8
- expect(Speg::Version::VERSION).to eq '1.0.2'
8
+ expect(Speg::Version::VERSION).to eq '1.2.0'
9
9
  end
10
10
  end
data/spec/spec_helper.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
-
2
+ require 'fileutils'
3
3
  RSpec.configure do |config|
4
4
  # Enable flags like --only-failures and --next-failure
5
5
  config.example_status_persistence_file_path = ".rspec_status"
@@ -10,4 +10,14 @@ 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) if File.exist?(file)
20
+ File.delete(spec_file) if File.exist?(spec_file)
21
+ FileUtils.rm_rf('test')
22
+ end
13
23
  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.0.2
4
+ version: 1.2.0
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-20 00:00:00.000000000 Z
11
+ date: 2024-02-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -37,11 +37,13 @@ files:
37
37
  - bin/setup
38
38
  - bin/speg
39
39
  - lib/spec_generator.rb
40
- - lib/speg/error.rb
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
- - spec/lib/models/test_spec.rb
44
45
  - spec/lib/spec_generator_spec.rb
46
+ - spec/lib/speg/file_generator_spec.rb
45
47
  - spec/lib/speg/version_spec.rb
46
48
  - spec/spec_helper.rb
47
49
  homepage: https://github.com/chrisgeek/speg
data/lib/speg/error.rb DELETED
@@ -1,3 +0,0 @@
1
- module Speg
2
- class Error < StandardError; end
3
- end
@@ -1,4 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe Test do
4
- end