tdd_scaffold 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5c43dac66596dc98b82d32518ea9d9f55ceb0880
4
+ data.tar.gz: 7f1d31867754b822608f86ef919c6ecc9f7fba97
5
+ SHA512:
6
+ metadata.gz: acc16b8d19e82613ac0b4f5203421259c39861b953f860d74303de4a7f1fc9118c9c178c23bb907a8706930331cdb0472afd3afa9cc7b38b7ddc0cb1418134ef
7
+ data.tar.gz: a29354dfad8a9329b20a7d0a5f8595141db9dcde85b6ba1c1b017f8a31ba4cb0e671499f4740a61ef1ebd73f0f588dc6c87e14f8e65779bc003505ef28733423
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/bin/scaffold ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'tdd_scaffold'
@@ -0,0 +1,36 @@
1
+ class String
2
+ def snakecase
3
+ self.gsub(/::/, '/'). # Convert namespace to slash
4
+ gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
5
+ gsub(/([a-z\d])([A-Z])/,'\1_\2').
6
+ tr('-', '_').
7
+ gsub(/\s/, '_').
8
+ gsub(/__+/, '_').
9
+ downcase
10
+ end
11
+
12
+ def camelcase
13
+ return self if self !~ /_/ && self =~ /[A-Z]+.*/
14
+ self.split('_').map(&:capitalize).join
15
+ end
16
+
17
+ def lower_camelcase
18
+ self[0].chr.downcase + self.camelcase[1..-1]
19
+ end
20
+
21
+ def classify
22
+ self.split('/').collect do |c|
23
+ c.camelcase
24
+ end.join('::')
25
+ end
26
+
27
+ def tableify
28
+ self.snakecase + 's'
29
+ end
30
+ end
31
+
32
+ class Object
33
+ def in container
34
+ container.include? self
35
+ end
36
+ end
@@ -0,0 +1,145 @@
1
+ #!/usr/bin/ruby
2
+
3
+ require 'fileutils'
4
+ require_relative 'helper_utils'
5
+
6
+ PASCAL_REGEX_STRING = /\b[A-Z]+[a-zA-Z]*\b/
7
+
8
+ usage = <<-EOF
9
+ Please provide command and options
10
+
11
+ Usage:
12
+ scaffold Class <option>
13
+ scaffold Module <option>
14
+ scaffold MVC <option>
15
+ scaffold runner
16
+
17
+ options:
18
+ PascalCaseWord
19
+ EOF
20
+
21
+ # Parse ARGV
22
+ file_type = ARGV[0]
23
+ file_names = ARGV[1..-1].to_a
24
+
25
+ if (file_type.in ["Class", "Module", "MVC"]) && (file_names.any?)
26
+ # Confirm all arguments are in PascalCasing
27
+ if file_names.grep(PASCAL_REGEX_STRING) == file_names
28
+ # Create 'spec' directory, if not exists
29
+ FileUtils.mkdir_p 'spec'
30
+
31
+ file_names.each do |file_name|
32
+ # Convert file name to snake_casing
33
+ snake_case = file_name.snakecase
34
+
35
+ case file_type
36
+ when "Class"
37
+ # Create Class
38
+ file_snippet = <<-EOF
39
+ class #{file_name}
40
+ end
41
+ EOF
42
+ File.open("#{snake_case}.rb", "a+") do |file|
43
+ file.write(file_snippet)
44
+ end
45
+
46
+ # Create Class RSpec tests
47
+ class_rspec_snippet = <<-EOF
48
+ require_relative '../#{snake_case}'
49
+
50
+ describe '#{file_name}' do
51
+ end
52
+ EOF
53
+ File.open("spec/#{snake_case}_spec.rb", "a+") do |file|
54
+ file.write(class_rspec_snippet)
55
+ end
56
+ when "Module"
57
+ # Create Module
58
+ file_snippet = <<-EOF
59
+ module #{file_name}
60
+ end
61
+ EOF
62
+ File.open("#{snake_case}.rb", "a+") do |file|
63
+ file.write(file_snippet)
64
+ end
65
+
66
+ # Create Module RSpec tests
67
+ module_rspec_snippet = <<-EOF
68
+ require_relative '../#{snake_case}'
69
+
70
+ describe '#{file_name}' do
71
+ end
72
+ EOF
73
+ File.open("spec/#{snake_case}_spec.rb", "a+") do |file|
74
+ file.write(module_rspec_snippet)
75
+ end
76
+ when "MVC"
77
+ # Create Model
78
+ model_snippet = <<-EOF
79
+ class #{file_name}
80
+ end
81
+ EOF
82
+ File.open("#{snake_case}.rb", "a+") do |file|
83
+ file.write(model_snippet)
84
+ end
85
+ # Create Model RSpec tests
86
+ model_rspec_snippet = <<-EOF
87
+ require_relative '../#{snake_case}'
88
+
89
+ describe '#{file_name} Model' do
90
+ end
91
+ EOF
92
+ File.open("spec/#{snake_case}_spec.rb", "a+") do |file|
93
+ file.write(model_rspec_snippet)
94
+ end
95
+ # Create View
96
+ view_snippet = <<-EOF
97
+ module #{file_name}View
98
+ end
99
+ EOF
100
+ File.open("#{snake_case}_view.rb", "a+") do |file|
101
+ file.write(view_snippet)
102
+ end
103
+ # Create View RSpec tests
104
+ view_rspec_snippet = <<-EOF
105
+ require_relative '../#{snake_case}_view'
106
+
107
+ describe '#{file_name} View' do
108
+ end
109
+ EOF
110
+ File.open("spec/#{snake_case}_view_spec.rb", "a+") do |file|
111
+ file.write(view_rspec_snippet)
112
+ end
113
+ # Create Controller
114
+ controller_snippet = <<-EOF
115
+ class #{file_name}Controller
116
+ end
117
+ EOF
118
+ File.open("#{snake_case}_controller.rb", "a+") do |file|
119
+ file.write(controller_snippet)
120
+ # Create Controller RSpec tests
121
+ controller_rspec_snippet = <<-EOF
122
+ require_relative '../#{snake_case}_controller'
123
+
124
+ describe '#{file_name} Controller' do
125
+ end
126
+ EOF
127
+ File.open("spec/#{snake_case}_controller_spec.rb", "a+") do |file|
128
+ file.write(controller_rspec_snippet)
129
+ end
130
+ end
131
+ end # Confirm file type and presence of arguments
132
+ end
133
+ else
134
+ puts usage
135
+ end # Confirm regex
136
+ elsif (file_type.in ["runner"])
137
+ runner_snippet = <<-EOF
138
+ require_relative ''
139
+ EOF
140
+ File.open("runner.rb", "a+") do |file|
141
+ file.write(runner_snippet)
142
+ end
143
+ else
144
+ puts usage
145
+ end # Confirm arguments
@@ -0,0 +1,2 @@
1
+ require_relative '../helper_utils'
2
+ require_relative '../tdd_scaffold'
@@ -0,0 +1 @@
1
+ require_relative 'spec_helper'
metadata ADDED
@@ -0,0 +1,50 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tdd_scaffold
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Ibraheem Abdul-Malik
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-12-08 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: A tool for TDD scaffolding
14
+ email: ibraheem4@gmail.com
15
+ executables:
16
+ - scaffold
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - ".rspec"
21
+ - bin/scaffold
22
+ - lib/helper_utils.rb
23
+ - lib/tdd_scaffold.rb
24
+ - spec/spec_helper.rb
25
+ - spec/tdd_scaffold_spec.rb
26
+ homepage: http://rubygems.org/gems/tdd_scaffold
27
+ licenses:
28
+ - MIT
29
+ metadata: {}
30
+ post_install_message:
31
+ rdoc_options: []
32
+ require_paths:
33
+ - lib
34
+ required_ruby_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ requirements: []
45
+ rubyforge_project:
46
+ rubygems_version: 2.5.1
47
+ signing_key:
48
+ specification_version: 4
49
+ summary: Scaffolding!
50
+ test_files: []