speg 1.0.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
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