shoulda_matchmakers 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/lib/controller/action_controller/action_controller_controller_sm_model_helper.rb +0 -7
  3. data/lib/controller/action_controller/matchmakers/permit.rb +14 -14
  4. data/lib/controller/action_controller/matchmakers/route.rb +0 -383
  5. data/lib/model/active_record/matchmakers/have_db_index.rb +1 -1
  6. data/lib/model/active_record/matchmakers/validations.rb +0 -14
  7. data/lib/shoulda_matchmakers/version.rb +1 -1
  8. data/lib/support/controller_generator.rb +2 -54
  9. data/lib/templates/shoulda_matchmakers.rb +2 -2
  10. metadata +1 -25
  11. data/lib/support/indefinite_article.rb +0 -70
  12. data/lib/support/to_discard/belong_to.rb +0 -94
  13. data/lib/support/to_discard/have_and_belong_to_many.rb +0 -83
  14. data/lib/support/to_discard/have_many.rb +0 -96
  15. data/lib/support/to_discard/have_one.rb +0 -98
  16. data/lib/support/to_discard/permit_refactor.rb +0 -270
  17. data/lib/support/to_discard/render_template_new.rb +0 -204
  18. data/lib/support/to_discard/render_template_reconstruction.rb +0 -188
  19. data/lib/support/to_discard/use_around_action.rb +0 -20
  20. data/lib/support/to_discard/use_before_action.rb +0 -20
  21. data/lib/support/to_discard/validate_absence_of.rb +0 -16
  22. data/lib/support/to_discard/validate_acceptance_of.rb +0 -16
  23. data/lib/support/to_discard/validate_confirmation_of.rb +0 -16
  24. data/lib/support/to_discard/validate_exclusion_of.rb +0 -145
  25. data/lib/support/to_discard/validate_inclusion_of.rb +0 -94
  26. data/lib/support/to_discard/validate_length_of.rb +0 -16
  27. data/lib/support/to_discard/validate_numericality_of.rb +0 -16
  28. data/lib/support/to_discard/validate_presence_of.rb +0 -16
  29. data/lib/support/to_discard/validate_uniqueness_of.rb +0 -16
  30. data/lib/support/to_discard/validation_old.rb +0 -37
  31. data/lib/support/to_discard/validations.rb +0 -41
  32. data/lib/support/to_discard/validations_conditional.rb +0 -146
  33. data/lib/support/trace_debug_lines.txt +0 -319
  34. data/lib/support/util.rb +0 -15
@@ -1,98 +0,0 @@
1
- module ShouldaMatchmakers
2
- module Model
3
- module ActiveRecord
4
- module ActiveRecordMatcher
5
- module HaveOne
6
-
7
-
8
- def have_one_matcher_tests
9
- have_one_tests = []
10
- @active_record_model_sm_model.constantize.reflect_on_all_associations(:has_one).map{ |have_one| { :association_class_name=>have_one.name, :association_options=>have_one.options } }.map do |association|
11
- association_class_name = association[:association_class_name].to_s
12
- association_options = association[:association_options]
13
- have_one_test = generate_have_one_test_single_line(association_class_name, association_options)
14
- if have_one_test[0].length > 80 || association_options.count > 1
15
- have_one_test = generate_have_one_test_multiple_lines(association_class_name, association_options)
16
- end
17
- have_one_tests << have_one_test
18
- end
19
- have_one_tests.flatten.compact.uniq.join("\n\n")
20
- end
21
-
22
-
23
- private
24
-
25
- def generate_have_one_test_single_line(association_class_name, association_options)
26
- have_one_test = " it { is_expected.to have_one(:#{ association_class_name })"
27
- association_options.map do |option, option_value|
28
- have_one_test_option = get_have_one_test_option(option, option_value)
29
- have_one_test.concat("." + have_one_test_option) if have_one_test_option.present?
30
- end
31
- have_one_test.concat(" }")
32
- [have_one_test]
33
- end
34
-
35
-
36
- def generate_have_one_test_multiple_lines(association_class_name, association_options)
37
- have_one_test = " it do\n is_expected.to have_one(:#{ association_class_name })"
38
- have_one_test_options = get_have_one_test_options(association_options)
39
- have_one_test.concat(have_one_test_options) if have_one_test_options.present?
40
- have_one_test.concat("\n end")
41
- [have_one_test]
42
- end
43
-
44
-
45
- def get_have_one_test_options(association_options)
46
- have_one_test_options = ""
47
- association_options.map do |option, option_value|
48
- have_one_test_option = get_have_one_test_option(option, option_value)
49
- have_one_test_options.concat(".\n " + have_one_test_option) if have_one_test_option.present?
50
- end
51
- have_one_test_options
52
- end
53
-
54
-
55
- def get_have_one_test_option(option, option_value)
56
- # IMPLEMENTATION TODO: Determine if it is possible to implement 'conditions'
57
- case option
58
- when :autosave
59
- "autosave(#{ option_value })"
60
- when :class_name
61
- "class_name('#{ option_value }')"
62
- when :dependent
63
- if option_value.to_s == "true" or option_value.to_s == "false"
64
- "dependent(#{ option_value })"
65
- else
66
- "dependent(:#{ option_value })"
67
- end
68
- when :foreign_key
69
- "with_foreign_key('#{ option_value }')"
70
- # IMPLEMENTATION TODO: Determine if Shoulda Matchers recognizes the 'inverse_of' option for 'have_one'
71
- # when :inverse_of
72
- # "inverse_of(:#{ option_value })"
73
- # VERIFICATION TODO: Verify capture of 'order' value due to its unique syntax (e.g. '-> { order("priority desc")' })
74
- when :order
75
- if option_value.include? '"'
76
- "order('#{ option_value }')"
77
- else
78
- "order(\"#{ option_value }\")"
79
- end
80
- when :primary_key
81
- "with_primary_key('#{ option_value }')"
82
- when :source
83
- "source(:#{ option_value })"
84
- when :through
85
- "through(:#{ option_value })"
86
- when :validate
87
- "validate(#{ option_value })"
88
- else
89
- # IMPLEMENTATION TODO: Possibly handle this case option as an error or modify evaluation of option (see TODO above)
90
- ""
91
- end
92
- end
93
-
94
- end
95
- end
96
- end
97
- end
98
- end
@@ -1,270 +0,0 @@
1
- # LATEST REFACTOR =================================================================================
2
-
3
- def get_action_permitted_params_entities(controller)
4
- action_permitted_params_entities = []
5
- controller_file_path = Rails.root.join("app", "controllers").to_s + "/" +
6
- controller.to_s.gsub("::", "/").gsub(/.*[^\/]/) { |pc| pc.underscore }.concat(".rb").gsub("//", "/").to_s
7
- if File.exists?(controller_file_path)
8
- permitted_params_defs = gather_permitted_params_defs(controller_file_path, controller)
9
- if permitted_params_defs.present?
10
- action_permitted_params_entities = gather_action_permitted_params_entities(permitted_params_defs)
11
- end
12
- end
13
- action_permitted_params_entities
14
- end
15
-
16
- def gather_permitted_params_defs(controller_file_path, controller)
17
- controller_method = nil
18
- parsing_params = false
19
- permitted_params_def = nil
20
- permitted_params_defs = []
21
- File.open(controller_file_path, 'r') do |controller_file|
22
- controller_file.each_line do |line|
23
- if line =~ /\s+def\s[A-Za-z0-9_][A-Za-z0-9_!\?=]+/
24
- controller_method = update_current_controller_method(line)
25
- else
26
- if line =~ /params\.require\(:/ && controller_method.present?
27
- permitted_params_def = create_permitted_params_def(line, controller.to_s, controller_method)
28
- end
29
- if line =~ /permit\(/ && permitted_params_def.present? && permitted_params_def.params_class.present?
30
- parsing_params = true
31
- end
32
- if parsing_params
33
- permitted_params = get_permitted_params(line)
34
- permitted_params_def.permitted_params << permitted_params if permitted_params.present?
35
- if line =~ /end\s*\n/
36
- permitted_params_def.permitted_params = permitted_params_def.permitted_params.flatten
37
- permitted_params_defs << permitted_params_def
38
- permitted_params_def = nil
39
- controller_method = nil
40
- parsing_params = false
41
- end
42
- end
43
- end
44
- end
45
- end
46
- permitted_params_defs
47
- end
48
-
49
- def update_current_controller_method(line)
50
- line.scan(/\s+def\s([A-Za-z0-9_][A-Za-z0-9_!\?=]+)/).first.first
51
- end
52
-
53
- def create_permitted_params_def(line, controller, controller_method)
54
- params_class = line.scan(/params\.require\((:[a-z][a-z0-9_]*)\)/).first.first
55
- ::ShouldaMatchmakers::Controller::ActionController::PermittedParamsDefinition.new(controller.to_s, controller_method, params_class)
56
- end
57
-
58
- def get_permitted_params(line)
59
- permitted_params = line.scan(/(:[a-z][a-z0-9_]*)[,\s\)]/)
60
- if line =~ /params\.require\(:/
61
- permitted_params.shift
62
- end
63
- permitted_params.flatten.compact.uniq
64
- end
65
-
66
- def gather_action_permitted_params_entities(permitted_params_defs)
67
- action_permitted_params_entities = []
68
- controller_method = nil
69
- permitted_params_defs.each do |permitted_params_def|
70
- controller_file.each_line do |line|
71
- if line =~ /\s+def\s[A-Za-z0-9_][A-Za-z0-9_!\?=]+/
72
- controller_method = update_current_controller_method(line)
73
- else
74
- if line.include?("(" + permitted_params_def.defining_method + ")")
75
- action_permitted_params_entity = create_action_permitted_params_entity(line, permitted_params_def, controller_method)
76
- if action_permitted_params_entity.params_class_controller_action.present?
77
- action_permitted_params_entity.params_class_controller_action = action_permitted_params_entity.params_class_controller_action.first
78
- action_permitted_params_entities << action_permitted_params_entity
79
- end
80
- end
81
- end
82
- end
83
- end
84
- action_permitted_params_entities
85
- end
86
-
87
- def create_action_permitted_params_entity(line, permitted_params_def, controller_method)
88
- action_permitted_params_entity = permitted_params_def.dup
89
- action_permitted_params_entity.calling_method = controller_method
90
- action_permitted_params_entity.params_class_controller_action =
91
- line.scan(/\s[A-Za-z@][A-Za-z0-9_]*\.([a-z]+)\(#{permitted_params_def.defining_method}\)/).first
92
- action_permitted_params_entity
93
- end
94
-
95
- # =================================================================================================
96
-
97
-
98
-
99
- # FIRST REFACTOR ==================================================================================
100
-
101
- def get_action_permitted_params_entities(controller)
102
- controller_file_path = Rails.root.join("app", "controllers").to_s + "/" +
103
- controller.to_s.gsub("::", "/").gsub(/.*[^\/]/) { |pc| pc.underscore }.concat(".rb").gsub("//", "/").to_s
104
- action_permitted_params_entities = []
105
- if File.exists?(controller_file_path)
106
- permitted_params_defs = gather_permitted_params_defs(controller_file_path, controller)
107
- action_permitted_params_entities = part_two(controller_file_path, permitted_params_defs) if permitted_params_defs.present?
108
- end
109
- action_permitted_params_entities
110
- end
111
-
112
- def gather_permitted_params_defs(controller_file_path, controller)
113
- permitted_params_defs = []
114
- parsing_params = false
115
- controller_method = nil
116
- File.open(controller_file_path, 'r') do |controller_file|
117
- controller_file.each_line do |line|
118
- if line =~ /\s+def\s[A-Za-z0-9_][A-Za-z0-9_!\?=]+/
119
- controller_method = line.scan(/\s+def\s([A-Za-z0-9_][A-Za-z0-9_!\?=]+)/).first.first
120
- else
121
- permitted_params_defs << compose_permitted_params_def(line, controller, controller_method, parsing_params)
122
- if parsing_params && line =~ /end\s*\n/
123
- parsing_params = false
124
- controller_method = nil
125
- end
126
- end
127
- end
128
- end
129
- permitted_params_defs
130
- end
131
-
132
- def compose_permitted_params_def(line, controller, controller_method, parsing_params)
133
- permitted_params_def = nil
134
- if line =~ /params\.require\(:/ && controller_method.present?
135
- permitted_params_def = create_permitted_params_def(line, controller, controller_method)
136
- end
137
- if line =~ /permit\(/ && permitted_params_def.present? && permitted_params_def.params_class.present?
138
- parsing_params = true
139
- end
140
- if parsing_params
141
- permitted_params = gather_permitted_params(line)
142
- permitted_params_def.permitted_params << permitted_params if permitted_params.present?
143
- if line =~ /end\s*\n/
144
- permitted_params_def.permitted_params = permitted_params_def.permitted_params.flatten
145
- valid_permitted_params_def = permitted_params_def
146
- permitted_params_def = nil
147
- end
148
- end
149
- valid_permitted_params_def
150
- end
151
-
152
- def create_permitted_params_def(line, controller, controller_method)
153
- params_class = line.scan(/params\.require\((:[a-z][a-z0-9_]*)\)/).first.first
154
- ::ShouldaMatchmakers::Controller::ActionController::PermittedParamsDefinition.new(controller.to_s, controller_method, params_class)
155
- end
156
-
157
- def gather_permitted_params(line)
158
- permitted_params = line.scan(/(:[a-z][a-z0-9_]*)[,\s\)]/)
159
- if line =~ /params\.require\(:/
160
- permitted_params.shift
161
- end
162
- permitted_params.flatten.compact.uniq
163
- end
164
-
165
- def gather_get_action_permitted_params_entities(controller_file_path, permitted_params_defs)
166
- action_permitted_params_entities = []
167
- controller_method = ""
168
- File.open(controller_file_path, 'r') do |controller_file|
169
- permitted_params_defs.each do |permitted_params_def|
170
- controller_file.each_line do |line|
171
- if line =~ /\s+def\s[A-Za-z0-9_][A-Za-z0-9_!\?=]+/
172
- controller_method = line.scan(/\s+def\s([A-Za-z0-9_][A-Za-z0-9_!\?=]+)/).first.first
173
- else
174
- action_permitted_params_entity = create_action_permitted_params_entity(line, permitted_params_def, controller_method)
175
- action_permitted_params_entities << action_permitted_params_entity if action_permitted_params_entity.present?
176
- end
177
- end
178
- end
179
- end
180
- action_permitted_params_entities
181
- end
182
-
183
- def create_action_permitted_params_entity(line, permitted_params_def, controller_method)
184
- action_permitted_params_entity = nil
185
- if line.include?("(" + permitted_params_def.defining_method + ")")
186
- action_permitted_params_entity = permitted_params_def.dup
187
- action_permitted_params_entity.calling_method = controller_method
188
- action_permitted_params_entity.params_class_controller_action =
189
- line.scan(/\s[A-Za-z@][A-Za-z0-9_]*\.([a-z]+)\(#{permitted_params_def.defining_method}\)/).first
190
- if action_permitted_params_entity.params_class_controller_action.present?
191
- action_permitted_params_entity.params_class_controller_action = action_permitted_params_entity.params_class_controller_action.first
192
- else
193
- action_permitted_params_entity = nil
194
- end
195
- end
196
- action_permitted_params_entity
197
- end
198
-
199
- # =================================================================================================
200
-
201
-
202
-
203
- # ORIGINAL ========================================================================================
204
-
205
- def get_action_permitted_params_entities_original(controller)
206
- controller_file_path = Rails.root.join("app", "controllers").to_s + "/" +
207
- controller.to_s.gsub("::", "/").gsub(/.*[^\/]/) { |pc| pc.underscore }.concat(".rb").gsub("//", "/").to_s
208
-
209
- action_permitted_params_entities = []
210
- permitted_params_defs = []
211
- permitted_params_def = nil
212
- controller_method = nil
213
- parsing_params = false
214
-
215
- if File.exists?(controller_file_path)
216
- File.open(controller_file_path, 'r') do |controller_file|
217
- controller_file.each_line do |line|
218
- if line =~ /\s+def\s[A-Za-z0-9_][A-Za-z0-9_!\?=]+/
219
- controller_method = line.scan(/\s+def\s([A-Za-z0-9_][A-Za-z0-9_!\?=]+)/).first.first
220
- else
221
- if line =~ /params\.require\(:/ && controller_method.present?
222
- params_class = line.scan(/params\.require\((:[a-z][a-z0-9_]*)\)/).first.first
223
- permitted_params_def = ::ShouldaMatchmakers::Controller::ActionController::PermittedParamsDefinition.new(controller.to_s, controller_method, params_class)
224
- end
225
- if line =~ /permit\(/ && permitted_params_def.present? && permitted_params_def.params_class.present?
226
- parsing_params = true
227
- end
228
- if parsing_params
229
- permitted_params = line.scan(/(:[a-z][a-z0-9_]*)[,\s\)]/)
230
- if line =~ /params\.require\(:/
231
- permitted_params.shift
232
- end
233
- permitted_params = permitted_params.flatten.compact.uniq
234
- permitted_params_def.permitted_params << permitted_params if permitted_params.present?
235
- if line =~ /end\s*\n/
236
- permitted_params_def.permitted_params = permitted_params_def.permitted_params.flatten
237
- permitted_params_defs << permitted_params_def
238
- permitted_params_def = nil
239
- controller_method = nil
240
- parsing_params = false
241
- end
242
- end
243
- end
244
- end
245
- end
246
-
247
-
248
- File.open(controller_file_path, 'r') do |controller_file|
249
- permitted_params_defs.each do |pp_def|
250
- controller_file.each_line do |line|
251
- if line =~ /\s+def\s[A-Za-z0-9_][A-Za-z0-9_!\?=]+/
252
- controller_method = line.scan(/\s+def\s([A-Za-z0-9_][A-Za-z0-9_!\?=]+)/).first.first
253
- else
254
- if line.include?("(" + pp_def.defining_method + ")")
255
- action_permitted_params_entity = pp_def.dup
256
- action_permitted_params_entity.calling_method = controller_method
257
- action_permitted_params_entity.params_class_controller_action =
258
- line.scan(/\s[A-Za-z@][A-Za-z0-9_]*\.([a-z]+)\(#{pp_def.defining_method}\)/).first
259
- if action_permitted_params_entity.params_class_controller_action.present?
260
- action_permitted_params_entity.params_class_controller_action = action_permitted_params_entity.params_class_controller_action.first
261
- action_permitted_params_entities << action_permitted_params_entity
262
- end
263
- end
264
- end
265
- end
266
- end
267
- end
268
- end
269
- action_permitted_params_entities
270
- end
@@ -1,204 +0,0 @@
1
- module ShouldaMatchmakers
2
- module Controller
3
- module ActionController
4
- module Matchmaker
5
- module RenderTemplate
6
-
7
-
8
- def render_template_matcher_tests
9
- render_template_occurrences = get_render_template_occurrences(@action_controller_controller_sm_model)
10
- if render_template_occurrences.present?
11
- generate_render_template_matcher_tests(render_template_occurrences)
12
- else
13
- []
14
- end
15
- end
16
-
17
-
18
- private
19
-
20
- def generate_render_template_matcher_tests(render_template_occurrences)
21
- render_template_tests = []
22
- render_template_occurrences.sort_by!{ |rto| [rto[:view_action], rto[:view_action_http_method]] }
23
- render_template_occurrences.each do |render_template|
24
- render_template_test = generate_render_template_test_initial(render_template)
25
- render_template[:view_action_render_occurrences].sort_by!{ |ro| [ro[:render_view_type], ro[:render_view]] }
26
- render_template[:view_action_render_occurrences].each do |render_occurrence|
27
- render_template_test.concat(generate_render_occurrence_test(render_occurrence))
28
- end
29
- render_template_test.concat(" end")
30
- render_template_tests << render_template_test
31
- end
32
- render_template_tests = properly_line_space_tests(render_template_tests)
33
- render_template_tests.flatten.compact.uniq.join("\n")
34
- end
35
-
36
- def generate_render_template_test_initial(render_template)
37
- render_template_test = " describe '#{ render_template[:view_action_http_method] } ##{ render_template[:view_action] }' do\n"
38
- render_template_test.concat(" before { #{ render_template[:view_action_http_method].downcase } :#{ render_template[:view_action] } }\n\n")
39
- render_template_test.concat(" it { is_expected.to render_template('#{ render_template[:view_action] }') }\n")
40
- end
41
-
42
- def generate_render_occurrence_test(render_occurrence)
43
- if render_occurrence[:render_view_type] == "partial" && render_occurrence[:render_view].include?("/") ||
44
- render_occurrence[:render_view_type] == "file"
45
- render_occurrence_test = " it { is_expected.to render_template(#{ render_occurrence[:render_view_type] }: '"
46
- elsif render_occurrence[:render_view_type] == "partial"
47
- render_occurrence_test = " it { is_expected.to render_template(#{ render_occurrence[:render_view_type] }: '_"
48
- elsif render_occurrence[:render_view_type] == "unknown"
49
- render_occurrence_test = " # Unknown view type. Remove 'x' from 'xit' once view type identified (e.g. 'partial:', 'file:', etc.)\n"
50
- render_occurrence_test.concat(" xit { is_expected.to render_template('")
51
- else
52
- render_occurrence_test = " it { is_expected.to render_template('"
53
- end
54
- render_occurrence_test.concat("#{ render_occurrence[:render_view] }') }\n")
55
- end
56
-
57
- def get_render_template_occurrences(controller)
58
- render_template_occurrences = []
59
- app_views_path = Rails.root.join("app", "views").to_s + "/"
60
- controller_views_path = app_views_path + controller.underscore.sub(/_controller$/, "/")
61
- %w(erb haml slim).each do |view_file_format|
62
- render_template_occurrences = render_template_occurrences + get_render_template_occurrences_by_file_type(app_views_path, controller_views_path, view_file_format)
63
- end
64
- render_template_occurrences
65
- end
66
-
67
- def get_render_template_occurrences_by_file_type(app_views_path, controller_views_path, view_file_format)
68
- render_template_occurrences_by_file_type = []
69
- Dir.glob(controller_views_path + "**/*.html." + view_file_format) do |view_file_path|
70
- view_action_render_occurrences = get_view_action_render_occurrences(view_file_path, app_views_path)
71
- if view_action_render_occurrences.present?
72
- view_action = get_view_from_path(view_file_path).sub(".html." + view_file_format, "")
73
- if render_template_containing_method_is_action(controller, view_action)
74
- render_template_occurrence = compose_render_template_occurrence_hash(controller, view_action, view_action_render_occurrences)
75
- render_template_occurrences_by_file_type << render_template_occurrence
76
- end
77
- end
78
- end
79
- render_template_occurrences_by_file_type
80
- end
81
-
82
- def compose_render_template_occurrence_hash(controller, view_action, view_action_render_occurrences)
83
- route_controller = controller.underscore.sub(/_controller$/, "")
84
- view_action_route = Rails.application.routes.set.select { |route| route.defaults[:controller] == route_controller && route.defaults[:action] == view_action }
85
- view_action_http_method = view_action_route.first.constraints[:request_method].to_s.gsub("(?-mix:^","").gsub("$)","")
86
- { view_action: view_action, view_action_http_method: view_action_http_method, view_action_render_occurrences: view_action_render_occurrences }
87
- end
88
-
89
- def get_view_action_render_occurrences(view_file_path, app_views_path)
90
- view_action_render_occurrences = []
91
- File.open(view_file_path, 'r') do |view_file|
92
- view_file.each_line do |line|
93
- if line =~ /(?:\s+render|=render)(?:\s+action:\s+|\s+:action\s+=\>\s+|\s+file:\s+|\s+:file\s+=\>\s+|\s+partial:\s+|\s+:partial\s+=\>\s+|\s+template:\s+|\s+:template\s+=\>\s+|\s+)["':][A-Za-z0-9_\/\.]+"*'*\s*$/
94
- view_action_render_occurrence = compose_view_action_render_occurrence_hash(line, app_views_path, view_file_path)
95
- view_action_render_occurrences << view_action_render_occurrence
96
- end
97
- end
98
- end
99
- view_action_render_occurrences
100
- end
101
-
102
- def compose_view_action_render_occurrence_hash(line, app_views_path, view_file_path)
103
- render_view_type, render_view_path = line.match(/(?:\s+render|=render)(\s+action:\s+|\s+:action\s+=\>\s+|\s+file:\s+|\s+:file\s+=\>\s+|\s+partial:\s+|\s+:partial\s+=\>\s+|\s+template:\s+|\s+:template\s+=\>\s+|\s+)["':]([A-Za-z0-9_\/\.]+)/).captures
104
- if render_view_type.present?
105
- render_view_type = render_view_type.gsub(/\s+/,"").gsub(":", "").gsub("=>","")
106
- else
107
- render_view_type = get_render_view_type(app_views_path, view_file_path, render_view_path)
108
- end
109
- { render_view_type: render_view_type, render_view: render_view_path }
110
- end
111
-
112
- def get_render_view_type(app_views_path, view_file_path, render_view_path)
113
- render_view_and_directory = get_internal_render_view_and_directory(app_views_path, view_file_path, render_view_path)
114
- render_view_type = identify_internal_render_view_type(render_view_and_directory, app_views_path)
115
- if render_view_type == "unknown" && render_view_path.include?("/")
116
- render_view_and_directory = get_external_render_view_and_directory(render_view_path)
117
- render_view_type = identify_external_render_view_type(render_view_and_directory)
118
- end
119
- render_view_type
120
- end
121
-
122
- def get_internal_render_view_and_directory(app_views_path, view_file_path, render_view_path)
123
- if render_view_path.include?("/")
124
- render_view_directory = get_view_directory_prepended(render_view_path,app_views_path)
125
- render_view = get_view_from_path(render_view_path).sub(/^\s*_/,"")
126
- else
127
- render_view_directory = get_view_directory_from_path(view_file_path)
128
- render_view = render_view_path.sub(/^\s*_/,"")
129
- end
130
- { directory: render_view_directory, view: render_view }
131
- end
132
-
133
-
134
- def get_external_render_view_and_directory(render_view_path)
135
- render_view_directory = get_view_directory_from_path(render_view_path)
136
- render_view = get_view_from_path(render_view_path)
137
- { directory: render_view_directory, view: render_view }
138
- end
139
-
140
-
141
- def get_view_from_path(view_path)
142
- view_path.scan(/\/([a-zA-z0-9.]+)$/).last.first
143
- end
144
-
145
-
146
- def get_view_directory_from_path(view_path)
147
- view_path.sub(/\/[a-zA-z0-9.]+$/,"/")
148
- end
149
-
150
-
151
- def get_view_directory_prepended(view_path, prepend_path)
152
- view_path.sub(/\/[a-zA-z0-9.]+$/,"/").prepend(prepend_path)
153
- end
154
-
155
-
156
- def identify_internal_render_view_type(render_view_and_directory, app_views_path)
157
- render_view_type = "unknown"
158
- if view_partial_exist(render_view_and_directory)
159
- render_view_type = "partial"
160
- elsif view_exist(render_view_and_directory)
161
- render_view_controller_name = get_controller_name_from_view_directory_path(render_view_and_directory[:directory], app_views_path)
162
- if render_view_controller_name.present? && render_template_containing_method_is_action(render_view_controller_name, render_view_and_directory[:view])
163
- render_view_type = "action"
164
- else
165
- render_view_type = "template"
166
- end
167
- end
168
- render_view_type
169
- end
170
-
171
- def identify_external_render_view_type(render_view_and_directory)
172
- render_view_type = "unknown"
173
- if view_partial_exist(render_view_and_directory) || view_exist(render_view_and_directory)
174
- render_view_type = "file"
175
- end
176
- render_view_type
177
- end
178
-
179
- def view_exist(render_view_and_directory)
180
- File.exist?(render_view_and_directory[:directory] + render_view_and_directory[:view] + ".html.erb") ||
181
- File.exist?(render_view_and_directory[:directory] + render_view_and_directory[:view] + ".html.haml") ||
182
- File.exist?(render_view_and_directory[:directory] + render_view_and_directory[:view] + ".html.slim")
183
- end
184
-
185
- def view_partial_exist(render_view_and_directory)
186
- File.exist?(render_view_and_directory[:directory] + "_" + render_view_and_directory[:view] + ".html.erb") ||
187
- File.exist?(render_view_and_directory[:directory] + "_" + render_view_and_directory[:view] + ".html.haml") ||
188
- File.exist?(render_view_and_directory[:directory] + "_" + render_view_and_directory[:view] + ".html.slim")
189
- end
190
-
191
- def get_controller_name_from_view_directory_path(view_directory_path, app_views_path)
192
- view_directory_path.sub(app_views_path, "").sub(/\/$/,"").concat("_controller").camelize
193
- end
194
-
195
- def render_template_containing_method_is_action(controller, action_candidate)
196
- controller.constantize.instance_methods(false).include?(action_candidate.to_sym)
197
- end
198
-
199
-
200
- end
201
- end
202
- end
203
- end
204
- end