spec_producer 0.2.0 → 0.3.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
  SHA1:
3
- metadata.gz: cf696c6307efcf5f3ce213edf15867734b3707e8
4
- data.tar.gz: 873a87328ee235812c9594fbc8f1d15430ce5c9f
3
+ metadata.gz: e4d531faa30c2413786add89ceb1e7fd20093fcd
4
+ data.tar.gz: b6b86d48100f3d9066015ed01cdd69140c4b86c3
5
5
  SHA512:
6
- metadata.gz: 2b2c146627c596a7545bf5f495c18d192e8bfab70ae543805b7a9add6d0c9ca319d0d36c930f00db9cba989dceffb15145c8bfb60ed0e416a620efbd03a7e2d2
7
- data.tar.gz: 537584496ffff1f1d3f60636eb35a6adb18382251ad01acba648356c5b1a397ae9bc07fb9ba6ab19754403b3493a8705c8dd8439141e5cbc9f402cce94b25f30
6
+ metadata.gz: f55fead5c9f34409532db1c996b979a4f81e0f877df886c6db160d788007248f9c0b45c11c3f9d635019a695bdd925811e5072c339f88eaca1b341840f2ad9e7
7
+ data.tar.gz: 2680b09089dc157b18fb8c7b0fe88c97eab5076cfa8b767525ceaa44696336f95b67776c68df23f37ad92cb1b5f39d80ddcba5a53b2a4ce2fe6325a3c85fb484
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 0.3.0 (2016-06-12)
2
+
3
+ Features:
4
+ * Added some activemodel specs through shoulda matchers
5
+ * Added produce_specs_for_views to produce spec files with pending indications for all Views.
6
+ * Added produce_specs_for_helpers to produce spec files with pending indications for all Helpers.
7
+ * Added produce_specs_for_controllers to produce spec files with pending indications for all Controllers.
8
+
1
9
  ## 0.2.0 (2016-06-04)
2
10
 
3
11
  Features:
data/README.md CHANGED
@@ -42,6 +42,58 @@ To produce all tests for routes, run:
42
42
  SpecProducer.produce_specs_for_routes
43
43
  ```
44
44
 
45
+ To produce all spec files for views, run:
46
+
47
+ ```ruby
48
+ SpecProducer.produce_specs_for_views
49
+ ```
50
+ ```
51
+
52
+ To produce all spec files for helpers, run:
53
+
54
+ ```ruby
55
+ SpecProducer.produce_specs_for_helpers
56
+ ```
57
+
58
+ To produce all spec files for controllers, run:
59
+
60
+ ```ruby
61
+ SpecProducer.produce_specs_for_controllers
62
+ ```
63
+
64
+ Additionally this gem (from version 0.2.0) allows users to print all their missing spec files by reading all
65
+ directories for Views, Models, Controllers and Helpers.
66
+
67
+ To print all types of missing tests, run:
68
+
69
+ ```ruby
70
+ SpecProducer.print_all_missing_spec_files
71
+ ```
72
+
73
+ To print all missing model tests, run:
74
+
75
+ ```ruby
76
+ SpecProducer.print_missing_model_specs
77
+ ```
78
+
79
+ To print all missing controller tests, run:
80
+
81
+ ```ruby
82
+ SpecProducer.print_missing_controller_specs
83
+ ```
84
+
85
+ To print all missing helper tests, run:
86
+
87
+ ```ruby
88
+ SpecProducer.print_missing_helper_specs
89
+ ```
90
+
91
+ To print all missing view tests, run:
92
+
93
+ ```ruby
94
+ SpecProducer.print_missing_view_specs
95
+ ```
96
+
45
97
  ## Development
46
98
 
47
99
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
data/lib/spec_producer.rb CHANGED
@@ -4,6 +4,9 @@ module SpecProducer
4
4
  def self.produce_specs_for_all_types
5
5
  produce_specs_for_models
6
6
  produce_specs_for_routes
7
+ produce_specs_for_views
8
+ produce_specs_for_controllers
9
+ produce_specs_for_helpers
7
10
  end
8
11
 
9
12
  def self.produce_specs_for_models
@@ -12,13 +15,41 @@ module SpecProducer
12
15
  end
13
16
 
14
17
  ActiveRecord::Base.descendants.each do |descendant|
15
- final_text = "require 'rails_helper'\n"
18
+ final_text = "require 'rails_helper'\n\n"
16
19
  final_text << "describe #{descendant.name} do\n"
17
20
 
18
21
  descendant.attribute_names.each do |attribute|
19
22
  final_text << "\tit { should respond_to :#{attribute}, :#{attribute}= }\n"
20
23
  end
21
24
 
25
+ descendant.validators.each do |validator|
26
+ if validator.kind == :presence
27
+ validator.attributes.each do |attribute|
28
+ final_text << "\tit { should validate_presence_of :#{attribute} }\n"
29
+ end
30
+ elsif validator.kind == :uniqueness
31
+ validator.attributes.each do |attribute|
32
+ final_text << "\tit { should validate_uniqueness_of :#{attribute} }\n"
33
+ end
34
+ elsif validator.kind == :numericality
35
+ validator.attributes.each do |attribute|
36
+ final_text << "\tit { should validate_numericality_of :#{attribute} }\n"
37
+ end
38
+ elsif validator.kind == :acceptance
39
+ validator.attributes.each do |attribute|
40
+ final_text << "\tit { should validate_acceptance_of :#{attribute} }\n"
41
+ end
42
+ elsif validator.kind == :confirmation
43
+ validator.attributes.each do |attribute|
44
+ final_text << "\tit { should validate_confirmation_of :#{attribute} }\n"
45
+ end
46
+ end
47
+ end
48
+
49
+ descendant.column_names.each do |column_name|
50
+ final_text << "\tit { should have_db_column :#{column_name} }\n"
51
+ end
52
+
22
53
  final_text << "end"
23
54
 
24
55
  if File.exists?(Rails.root.join("spec/models/#{descendant.name.downcase}_spec.rb"))
@@ -67,11 +98,11 @@ module SpecProducer
67
98
  final_text << "\t\t\tshould route_to(:controller => '#{route[:controller]}',\n"
68
99
 
69
100
  /:[a-zA-Z_]+/.match(route[:path]).to_a.each do |parameter|
70
- final_text << "\t\t\t\t\t#{parameter} => '#{parameter.gsub(':','').upcase}',\n"
101
+ final_text << "\t\t\t\t\t\t\t#{parameter} => '#{parameter.gsub(':','').upcase}',\n"
71
102
  end
72
103
 
73
104
  final_text << "\t\t\t\t\t:action => '#{route[:action]}')\n"
74
- final_text << "\t\tend\n\n"
105
+ final_text << "\tend\n\n"
75
106
  end
76
107
 
77
108
  final_text << 'end'
@@ -99,6 +130,117 @@ module SpecProducer
99
130
  nil
100
131
  end
101
132
 
133
+ def self.produce_specs_for_views
134
+ files_list = Dir["app/views/**/*.erb"]
135
+
136
+ files_list.each do |file|
137
+ full_path = 'spec'
138
+ File.dirname(file.gsub('app/', 'spec/')).split('/').reject { |path| path == 'spec' }.each do |path|
139
+ unless /.*\.erb/.match path
140
+ full_path << "/#{path}"
141
+
142
+ unless Dir.exists? full_path
143
+ Dir.mkdir(Rails.root.join(full_path))
144
+ end
145
+ end
146
+ end
147
+
148
+ file_name = "#{file.gsub('app/', 'spec/')}_spec.rb"
149
+ final_text = "require 'rails_helper'\n\n"
150
+ final_text << "describe '#{file.gsub('app/views/', '')}' do\n"
151
+ final_text << "\tbefore do\n"
152
+ final_text << "\t\trender\n"
153
+ final_text << "\tend\n\n"
154
+ final_text << "\tpending 'view content test'\n"
155
+ final_text << "end\n"
156
+
157
+ unless FileTest.exists?(file_name)
158
+ f = File.open(file_name, 'wb+')
159
+ f.write(final_text)
160
+ f.close
161
+ end
162
+ end
163
+
164
+ nil
165
+ end
166
+
167
+ def self.produce_specs_for_helpers
168
+ files_list = Dir["app/helpers/**/*.rb"]
169
+
170
+ files_list.each do |file|
171
+ full_path = 'spec'
172
+ File.dirname(file.gsub('app/', 'spec/')).split('/').reject { |path| path == 'spec' }.each do |path|
173
+ unless /.*\.rb/.match path
174
+ full_path << "/#{path}"
175
+
176
+ unless Dir.exists? full_path
177
+ Dir.mkdir(Rails.root.join(full_path))
178
+ end
179
+ end
180
+ end
181
+
182
+ file_name = "#{file.gsub('app/', 'spec/').gsub('.rb', '')}_spec.rb"
183
+ final_text = "require 'rails_helper'\n\n"
184
+ final_text << "describe #{File.basename(file, ".rb").camelcase} do\n"
185
+ final_text << "\tpending 'view helper tests'\n"
186
+ final_text << "end"
187
+
188
+ unless FileTest.exists?(file_name)
189
+ f = File.open(file_name, 'wb+')
190
+ f.write(final_text)
191
+ f.close
192
+ end
193
+ end
194
+
195
+ nil
196
+ end
197
+
198
+ def self.produce_specs_for_controllers
199
+ Dir.glob(Rails.root.join('app/controllers/*.rb')).each do |x|
200
+ require x
201
+ end
202
+
203
+ controllers = ApplicationController.descendants
204
+ controllers << ApplicationController
205
+
206
+ controllers.each do |descendant|
207
+ path_name = 'app/controllers/' + descendant.name.split('::').map { |name| name.underscore }.join('/')
208
+
209
+ full_path = 'spec'
210
+ File.dirname(path_name.gsub('app/', 'spec/')).split('/').reject { |path| path == 'spec' }.each do |path|
211
+ unless /.*\.rb/.match path
212
+ full_path << "/#{path}"
213
+
214
+ unless Dir.exists? full_path
215
+ Dir.mkdir(Rails.root.join(full_path))
216
+ end
217
+ end
218
+ end
219
+
220
+ file_name = "#{path_name.gsub('app/', 'spec/')}_spec.rb"
221
+ final_text = "require 'rails_helper'\n\n"
222
+ final_text << "describe #{descendant.name} do\n"
223
+
224
+ descendant.action_methods.each do |method|
225
+ final_text << "\tpending '##{method}'\n"
226
+ end
227
+
228
+ unless descendant.action_methods.size > 0
229
+ final_text << "\tpending 'tests'\n"
230
+ end
231
+
232
+ final_text << "end\n"
233
+
234
+ unless FileTest.exists?(file_name)
235
+ f = File.open(file_name, 'wb+')
236
+ f.write(final_text)
237
+ f.close
238
+ end
239
+ end
240
+
241
+ nil
242
+ end
243
+
102
244
  def self.print_all_missing_spec_files
103
245
  print_missing_model_specs
104
246
  print_missing_controller_specs
@@ -1,3 +1,3 @@
1
1
  module SpecProducer
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spec_producer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vasilis Kalligas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-06-04 00:00:00.000000000 Z
11
+ date: 2016-06-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler