speg 1.0.1 → 1.1.2

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: 58aa7da2067da8501e532cd80f7c71beded042ef3cde0524ef128d5e0a5d6e2c
4
- data.tar.gz: 3325a601c87fc788c912db1ad11e70f16da7e704beb84deeae80f04a2ed13d45
3
+ metadata.gz: 72a1418b1b185cae923d4b2670dc35fb6882a0a8a8c02c340c45e961f818c3aa
4
+ data.tar.gz: b094e78a226085b0f513ee0b0311f194bae354228093f2667d8a33baa6c10c2e
5
5
  SHA512:
6
- metadata.gz: b0e65d139b08d499c842bd6a568506bb78b33f31053c4fc48a6531ea487217b440315392e66e35bcc569cf24dc847797be939a6e6c158aab6bb5341b4377d40c
7
- data.tar.gz: 3ec06ec78712847ee05712470dd50c7cbb05e34a163d80f6fa2c4e4989dd58639bade9dc538a39f0697735b5c352149cdf68043ddaffc755b586021f36e49681
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.1'
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.0'
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.1
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-19 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,16 +37,25 @@ 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
45
  - spec/lib/spec_generator_spec.rb
46
+ - spec/lib/speg/file_generator_spec.rb
44
47
  - spec/lib/speg/version_spec.rb
45
48
  - spec/spec_helper.rb
46
49
  homepage: https://github.com/chrisgeek/speg
47
50
  licenses:
48
51
  - MIT
49
- metadata: {}
52
+ metadata:
53
+ homepage_uri: https://github.com/chrisgeek/speg
54
+ documentation_uri: https://rubydoc.info/github/chrisgeek/speg
55
+ changelog_uri: https://github.com/chrisgeek/speg/blob/main/CHANGELOG.md
56
+ source_code_uri: https://github.com/chrisgeek/speg
57
+ bug_tracker_uri: https://github.com/chrisgeek/speg/issues
58
+ wiki_uri: https://github.com/chrisgeek/speg/wiki
50
59
  post_install_message:
51
60
  rdoc_options: []
52
61
  require_paths:
data/lib/speg/error.rb DELETED
@@ -1,3 +0,0 @@
1
- module Speg
2
- class Error < StandardError; end
3
- end