shoulda_matchmakers 0.1.0 → 0.1.1

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.
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