speg 1.0.2 → 1.1.2

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: 72a1418b1b185cae923d4b2670dc35fb6882a0a8a8c02c340c45e961f818c3aa
4
+ data.tar.gz: b094e78a226085b0f513ee0b0311f194bae354228093f2667d8a33baa6c10c2e
5
5
  SHA512:
6
- metadata.gz: 16eb260afad4ca256e71b882d254eab0fcdb52b0f5b3e853c4fe4f40382110bb3754e708530765d181599676872bb986242d15a03dca44a294532ac806905143
7
- data.tar.gz: ee5678ad38a395e6639e3684c15cb30faf547f14d22680f43779c628908a39bf645d313d621bbe12e2330b87366a310c848e82cc2e396b1376c87d3a2e3703cb
6
+ metadata.gz: b1dc9eac30e5d64cc15f4167b4bf87338096f924592376d5e10ab7fc1879daef1bf8d848fcd9e25cdbebd24fac347a809e47d0df5ecf3b0c61d819a9987d0e19
7
+ data.tar.gz: 4cc816c10626971feb55ae67880703166265e22b49b7aa1f23465b91471bba6c467825c2cb893d1155f8917352a46c6ea76407cb0a562f64eb51932bb92a06c2
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,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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Speg
4
4
  class Version
5
- VERSION = '1.0.2'
5
+ VERSION = '1.1.2'
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,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
@@ -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.1.2'
9
9
  end
10
10
  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.0.2
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-20 00:00:00.000000000 Z
11
+ date: 2024-02-26 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