authorized_rails_scaffolds 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +13 -26
  3. data/lib/authorized_rails_scaffolds.rb +11 -2
  4. data/lib/authorized_rails_scaffolds/controller_macros.rb +22 -0
  5. data/lib/authorized_rails_scaffolds/factory_macros.rb +65 -0
  6. data/lib/authorized_rails_scaffolds/helper.rb +38 -115
  7. data/lib/authorized_rails_scaffolds/rails_erb_scaffold_helper.rb +40 -0
  8. data/lib/authorized_rails_scaffolds/rails_scaffold_controller_helper.rb +20 -0
  9. data/lib/authorized_rails_scaffolds/resource_macros.rb +81 -0
  10. data/lib/authorized_rails_scaffolds/route_example_macros.rb +43 -0
  11. data/lib/authorized_rails_scaffolds/rspec_scaffold_controller_helper.rb +17 -0
  12. data/lib/authorized_rails_scaffolds/rspec_scaffold_helper.rb +26 -0
  13. data/lib/authorized_rails_scaffolds/rspec_scaffold_routing_helper.rb +12 -0
  14. data/lib/authorized_rails_scaffolds/{rspec_scaffold_generator_view_helper.rb → rspec_scaffold_view_helper.rb} +3 -2
  15. data/lib/authorized_rails_scaffolds/test_var_macros.rb +40 -0
  16. data/lib/authorized_rails_scaffolds/version.rb +1 -1
  17. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/_form.html.erb +4 -6
  18. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/controller.rb +50 -34
  19. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/edit.html.erb +2 -4
  20. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/index.html.erb +17 -18
  21. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/new.html.erb +2 -4
  22. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/show.html.erb +15 -17
  23. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/controller_spec.rb +126 -101
  24. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/edit_spec.rb +44 -39
  25. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/index_spec.rb +73 -65
  26. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/model_spec.rb +9 -8
  27. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/new_spec.rb +38 -35
  28. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/routing_spec.rb +21 -10
  29. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/show_spec.rb +37 -20
  30. data/spec/lib/authorized_rails_scaffolds/rails_erb_scaffold_helper_spec.rb +59 -0
  31. data/spec/lib/authorized_rails_scaffolds/rails_scaffold_controller_helper_spec.rb +89 -0
  32. data/spec/lib/authorized_rails_scaffolds/rspec_scaffold_controller_helper_spec.rb +155 -0
  33. data/spec/lib/authorized_rails_scaffolds/{rspec_scaffold_generator_helper_spec.rb → rspec_scaffold_routing_helper_spec.rb} +57 -50
  34. data/spec/lib/authorized_rails_scaffolds/rspec_scaffold_view_helper_spec.rb +86 -0
  35. data/spec/spec_helper.rb +5 -2
  36. data/spec/support/rails_erb_scaffold_helper_macros.rb +15 -0
  37. data/spec/support/rails_scaffold_controller_helper_macros.rb +15 -0
  38. data/spec/support/{rspec_scaffold_generator_helper_macros.rb → rspec_scaffold_controller_helper_macros.rb} +2 -2
  39. data/spec/support/rspec_scaffold_routing_helper_macros.rb +15 -0
  40. data/spec/support/rspec_scaffold_view_helper_macros.rb +15 -0
  41. metadata +66 -28
  42. data/lib/authorized_rails_scaffolds/rspec_scaffold_generator_helper.rb +0 -82
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d09c935f8d34bf09cb594ada693383b9eca38a74
4
+ data.tar.gz: d7b570dcd10a6a4755aef6bb727a5744dfcc1d90
5
+ SHA512:
6
+ metadata.gz: 8fadb2e8a6f331e11e2efe73abfd4db41ae33ce182bd2d8f1bba7223b84fa31ac628a497a8b358a749414efc7483d8a867e9044a0762da290254be6fcf19add6
7
+ data.tar.gz: d82853f18b54c24777df0d27e4fa1715c635914f75ca8a69fb62d54ff38ab006f063dad1f3b4f5e3e6628b73c7593c8749fd739db334bc0f0276efa32947258b
data/README.md CHANGED
@@ -22,32 +22,31 @@ Add this line to your application's Gemfile:
22
22
 
23
23
  gem 'authorized_rails_scaffolds', :group => :development
24
24
 
25
- And then execute:
25
+ Create a initializer at `config/nitializers/authorized_rails_scaffolds.rb` containing:
26
26
 
27
- $ bundle
27
+ if Rails.env.development?
28
+
29
+ AuthorizedRailsScaffolds.configure do |config|
30
+ # i.e. ['Category', 'User'] for Awesome/FooBar => awesome_category_user_foo_bars_path
31
+ config.parent_models = []
32
+ end
33
+
34
+ end
28
35
 
29
- Or install it yourself as:
36
+ And then execute:
30
37
 
31
- $ gem install authorized_rails_scaffolds
38
+ $ bundle
39
+ $ rails g authorized_rails_scaffolds:install_templates
40
+ $ rails g authorized_rails_scaffolds:install_macros
32
41
 
33
42
  ## Usage
34
43
 
35
- `authorized_rails_scaffolds` is a development only gem that adds templates for quickly creating new controllers and views to be displayed primarily viewed with Twitter Bootstrap.
36
-
37
- Once you have run all the generators you want, you can remove the gem with no side effects.
38
-
39
- ### Install Scaffold Templates
40
-
41
44
  `authorized_rails_scaffolds` provides a series of rails generators that replace the default scaffold templates generated by Rails.
42
45
 
43
46
  The generated Controllers require CanCan to be installed on your system, however it is possible change this behavour by uncommenting out the first line of each generated action manually.
44
47
 
45
48
  The generated Controller only handles Authorization and assumes Authentication is managed in the Application Controller or is added manually.
46
49
 
47
- You can install the generators by running:
48
-
49
- $ rails generate authorized_rails_scaffolds:install_scaffold
50
-
51
50
  This gem doesn't override the default scaffold.css generated by `rails g scaffold`, however it works best with `rails g scaffold_controller`.
52
51
 
53
52
  For example:
@@ -55,18 +54,6 @@ For example:
55
54
  rails g model FooBar name:string age:integer date_of_birth:date lunch_time:time programmer:boolean joined_at:datetime
56
55
  rails g scaffold_controller Awesome/FooBar name:string age:integer date_of_birth:date lunch_time:time programmer:boolean joined_at:datetime
57
56
 
58
- ### Install Spec Templates
59
-
60
- `authorized_rails_scaffolds` provides a series of rspec generators that replace the default controller and view spec templates generated by RSpec.
61
-
62
- You can install the generators by running:
63
-
64
- $ rails generate authorized_rails_scaffolds:install_spec
65
-
66
- You will need to implement `login_unauthorized_user` and `login_user_with_ability` into your Controller specs.
67
-
68
- Installing Scaffold Controllers in Rails (`rails g scaffold_controller`) generates view and controller specs if RSpec is installed as a gem.
69
-
70
57
  ## Contributing
71
58
 
72
59
  1. Fork it
@@ -22,7 +22,16 @@ module AuthorizedRailsScaffolds
22
22
 
23
23
  end
24
24
 
25
+ require "authorized_rails_scaffolds/controller_macros"
26
+ require "authorized_rails_scaffolds/factory_macros"
27
+ require "authorized_rails_scaffolds/resource_macros"
28
+ require "authorized_rails_scaffolds/route_example_macros"
29
+ require "authorized_rails_scaffolds/test_var_macros"
25
30
  require "authorized_rails_scaffolds/helper"
26
- require "authorized_rails_scaffolds/rspec_scaffold_generator_helper"
27
- require "authorized_rails_scaffolds/rspec_scaffold_generator_view_helper"
31
+ require "authorized_rails_scaffolds/rails_erb_scaffold_helper"
32
+ require "authorized_rails_scaffolds/rails_scaffold_controller_helper"
33
+ require "authorized_rails_scaffolds/rspec_scaffold_helper"
34
+ require "authorized_rails_scaffolds/rspec_scaffold_controller_helper"
35
+ require "authorized_rails_scaffolds/rspec_scaffold_routing_helper"
36
+ require "authorized_rails_scaffolds/rspec_scaffold_view_helper"
28
37
 
@@ -0,0 +1,22 @@
1
+ #
2
+ # requires modular_class_name to be defined
3
+ #
4
+ # also makes use of @controller_class_name value
5
+ #
6
+ module ControllerMacros
7
+
8
+ # The namespaced class the Controller inherits from (i.e. Example::ApplicationController)
9
+ def application_controller_class
10
+ @application_controller_class = 'ApplicationController'
11
+ if parent_modules.any?
12
+ @application_controller_class = "#{parent_modules.join('::')}::#{@application_controller_class}"
13
+ end
14
+ @application_controller_class
15
+ end
16
+
17
+ def controller_class_name
18
+ controller_class_prefix = @controller_class_name || modular_class_name.pluralize
19
+ "#{controller_class_prefix}Controller"
20
+ end
21
+
22
+ end
@@ -0,0 +1,65 @@
1
+ module FactoryMacros
2
+
3
+ # Returns code that will generate attribute_value as an attribute_type
4
+ def factory_attribute_value(attribute_type, attribute_value)
5
+ case attribute_type
6
+ when :datetime
7
+ "DateTime.parse(#{attribute_value})"
8
+ when :time
9
+ value_as_time = attribute_value.to_time.strftime('%T')
10
+ "Time.parse(#{value_as_time.dump})"
11
+ when :date
12
+ value_as_date = attribute_value.to_time.strftime('%Y-%m-%d')
13
+ "Date.parse(#{value_as_date.dump})"
14
+ else
15
+ attribute_value
16
+ end
17
+ end
18
+
19
+ # Returns the expected output string of attribute_value if it is an attribute_type
20
+ def factory_attribute_string(attribute_type, attribute_value)
21
+ case attribute_type
22
+ when :datetime
23
+ attribute_value_as_date = DateTime.parse(attribute_value)
24
+ I18n.l(attribute_value_as_date, :format => :long).dump
25
+ when :time
26
+ attribute_value_as_time = Time.parse(attribute_value)
27
+ I18n.l(attribute_value_as_time, :format => :short).dump
28
+ when :date
29
+ attribute_value_as_date = Date.parse(attribute_value)
30
+ I18n.l(attribute_value_as_date).dump
31
+ else
32
+ attribute_value
33
+ end
34
+ end
35
+
36
+ def create_resource_from_factory
37
+ extra_factory_params = build_extra_factory_params
38
+ "FactoryGirl.create(#{resource_symbol}#{extra_factory_params})"
39
+ end
40
+
41
+ def create_parent_resource_from_factory(parent_table_name)
42
+ extra_factory_params = build_extra_factory_params(parent_table_name)
43
+ "FactoryGirl.create(:#{parent_table_name}#{extra_factory_params})"
44
+ end
45
+
46
+ protected
47
+
48
+ def build_extra_factory_params(parent_table_name = nil)
49
+ if parent_table_name.nil?
50
+ attribute = parent_model_tables.last
51
+ else
52
+ parent_index = parent_model_tables.index(parent_table_name.to_s)
53
+ unless parent_index.nil? || parent_index == 0
54
+ attribute = parent_model_tables[parent_index - 1]
55
+ end
56
+ end
57
+
58
+ if attribute.nil?
59
+ return ''
60
+ else
61
+ return ", :#{attribute} => #{references_test_property(attribute)}"
62
+ end
63
+ end
64
+
65
+ end
@@ -1,38 +1,18 @@
1
1
  module AuthorizedRailsScaffolds
2
-
3
2
  class Helper
3
+ include ResourceMacros
4
4
 
5
5
  def initialize(options = {})
6
- @local_class_name = options[:local_class_name] || options[:class_name].split('::')[-1]
6
+ # @local_class_name = options[:local_class_name]
7
7
  @var_name = options[:var_name] || options[:file_name] # Non-namespaced variable name
8
- @plural_var_name = options[:plural_var_name] || @var_name.pluralize # Pluralized non-namespaced variable name
9
- # Determine namespace prefix i.e awesome
10
- @namespace_prefix = options[:namespace_prefix] || options[:singular_table_name][0..-(@var_name.length + 2)]
11
- @controller_prefix = options[:controller_prefix] || options[:class_name].split('::')[0..-2].join('::')
12
-
13
- # Determine Parent Prefix i.e. user_company
14
- parent_prefix = AuthorizedRailsScaffolds.config.parent_models.collect{ |x| x.underscore }.join('_')
15
-
16
- # Route Prefix i.e. awesome_user_company
17
- route_prefix = [@namespace_prefix, parent_prefix].reject{ |x|x.blank? }.join('_')
18
- @route_prefix = route_prefix.blank? ? '' : "#{route_prefix}_"
19
-
20
- @parent_variables = AuthorizedRailsScaffolds.config.parent_models.collect{ |x| "@#{x.underscore}" }.join(', ')
21
8
 
22
- # Route Helpers
23
- @route_params_prefix = @parent_variables.blank? ? "" : "#{@parent_variables}, "
24
- @index_path_prefix = "#{@route_prefix}#{@plural_var_name}"
25
- @single_path_prefix = "#{@route_prefix}#{var_name}"
26
- end
9
+ # Pluralized non-namespaced variable name
10
+ @plural_var_name ||= options[:plural_var_name] || @var_name.pluralize
27
11
 
28
- # Prefix for Controllers (i.e. Admin::)
29
- def ns_controller_prefix
30
- "#{@controller_prefix}::" unless @controller_prefix.blank?
31
- end
12
+ # Determine namespace prefix i.e awesome
13
+ # options[:namespace_prefix]
32
14
 
33
- # Non-namespaced class name (i.e. FooBar)
34
- def local_class_name
35
- @local_class_name
15
+ @singular_table_name = options[:singular_table_name]
36
16
  end
37
17
 
38
18
  # Non-namespaced variable name (i.e. foo_bar)
@@ -40,113 +20,56 @@ module AuthorizedRailsScaffolds
40
20
  @var_name
41
21
  end
42
22
 
43
- # Pluralized non-namespaced variable name (i.e. foo_bars)
44
23
  def plural_var_name
45
24
  @plural_var_name
46
25
  end
47
26
 
48
- def extra_params
49
- extra_params = ''
50
- AuthorizedRailsScaffolds.config.parent_models.each_with_index do |model, model_index|
51
- extra_params += ", :#{model.underscore}_id => \"#{model_index + 2}\""
52
- end
53
- extra_params
27
+ # Route Prefix parts i.e. ['awesome', 'user', 'company']
28
+ def route_prefix_values
29
+ @route_prefix_values ||= [parent_module_groups + parent_model_tables]
54
30
  end
55
31
 
56
- def form_object_array(variable = nil)
57
- variable ||= "@#{var_name}"
58
- namespace_prefix = ":#{@namespace_prefix}" unless @namespace_prefix.blank?
59
- array = [namespace_prefix, @parent_variables, variable].reject{ |x| x.blank? || x == '_' }.join(', ')
60
- "[#{array}]"
32
+ def collection_route_prefix
33
+ @collection_route_prefix ||= [route_prefix_values + [resource_table_name.pluralize]].join('_')
61
34
  end
62
35
 
63
- def controller_show_route(variable = nil)
64
- variable ||= ""
65
- if variable.blank?
66
- "#{@single_path_prefix}_path(#{@parent_variables})"
67
- else
68
- "#{@single_path_prefix}_path(#{@route_params_prefix}#{variable})"
69
- end
36
+ def member_route_prefix
37
+ @member_route_prefix ||= [route_prefix_values + [resource_table_name]].join('_')
70
38
  end
71
39
 
72
- def controller_index_path
73
- if @parent_variables.blank?
74
- "#{@index_path_prefix}_path"
75
- else
76
- "#{@index_path_prefix}_path(#{@parent_variables})"
77
- end
40
+ def parent_variables
41
+ @parent_variables ||= parent_model_tables.collect{ |parent_table| parent_variable(parent_table) }
78
42
  end
79
43
 
80
- def controller_index_route
81
- if @parent_variables.blank?
82
- "#{@index_path_prefix}_url"
83
- else
84
- "#{@index_path_prefix}_url(#{@parent_variables})"
85
- end
86
- end
87
-
88
- # call arguments
89
- def index_action_params_prefix
90
- if AuthorizedRailsScaffolds.config.parent_models.any?
91
- AuthorizedRailsScaffolds.config.parent_models.collect{|x| ":#{x.underscore}_id => @#{x.underscore}.to_param"}.join(', ')
92
- else
93
- ''
94
- end
44
+ def controller_show_route(variable = nil)
45
+ variables = [] + parent_variables
46
+ variables += [variable] unless variable.nil?
47
+ controller_routes = "#{member_route_prefix}_path"
48
+ controller_routes += "(#{variables.join(', ')})" if variables.any?
49
+ controller_routes
95
50
  end
96
51
 
97
- def references_show_route(attribute_name, variable = nil)
98
- variable ||= "@#{@var_name}.#{attribute_name}"
99
- if AuthorizedRailsScaffolds.config.parent_models.any? && AuthorizedRailsScaffolds.config.parent_models.last.underscore == attribute_name
100
- references_path = "#{@route_prefix}path(#{variable})"
101
- else
102
- references_path = "#{attribute_name}_path(#{variable})"
103
- unless @namespace_prefix.blank?
104
- references_path = "#{@namespace_prefix}_#{references_path}"
105
- end
106
- end
107
- references_path
52
+ def controller_index_path
53
+ variables = parent_variables
54
+ controller_index_path = "#{collection_route_prefix}_path"
55
+ controller_index_path += "(#{variables.join(', ')})" if variables.any?
56
+ controller_index_path
108
57
  end
109
58
 
110
- def action_params_prefix
111
- index_action_params = index_action_params_prefix
112
- if index_action_params.blank?
113
- ''
114
- else
115
- "#{index_action_params}, "
116
- end
59
+ def controller_index_route
60
+ variables = parent_variables
61
+ controller_index_route = "#{collection_route_prefix}_url"
62
+ controller_index_route += "(#{variables.join(', ')})" if variables.any?
63
+ controller_index_route
117
64
  end
118
65
 
119
- # Returns code that will generate attribute_value as an attribute_type
120
- def factory_attribute_value(attribute_type, attribute_value)
121
- case attribute_type
122
- when :datetime
123
- "DateTime.parse(#{attribute_value})"
124
- when :time
125
- value_as_time = attribute_value.to_time.strftime('%T')
126
- "Time.parse(#{value_as_time.dump})"
127
- when :date
128
- value_as_date = attribute_value.to_time.strftime('%Y-%m-%d')
129
- "Date.parse(#{value_as_date.dump})"
130
- else
131
- attribute_value
132
- end
133
- end
66
+ def references_show_route(attribute_name, variable = nil)
67
+ variable ||= "#{resource_var}.#{attribute_name}"
68
+ path_variables = [parent_module_groups + [attribute_name]]
134
69
 
135
- # Returns the expected output string of attribute_value if it is an attribute_type
136
- def factory_attribute_string(attribute_type, attribute_value)
137
- case attribute_type
138
- when :datetime
139
- attribute_value_as_date = DateTime.parse(attribute_value)
140
- I18n.l(attribute_value_as_date, :format => :long).dump
141
- when :time
142
- attribute_value_as_time = Time.parse(attribute_value)
143
- I18n.l(attribute_value_as_time, :format => :short).dump
144
- when :date
145
- attribute_value_as_date = Date.parse(attribute_value)
146
- I18n.l(attribute_value_as_date).dump
147
- else
148
- attribute_value
149
- end
70
+ references_show_route = path_variables.join('_')
71
+ references_show_route += "_path(#{variable})"
72
+ references_show_route
150
73
  end
151
74
 
152
75
  end
@@ -0,0 +1,40 @@
1
+ class AuthorizedRailsScaffolds::RailsErbScaffoldHelper < AuthorizedRailsScaffolds::Helper
2
+
3
+ def initialize(options = {})
4
+ super options
5
+
6
+ @modular_class_name = options[:class_name] || options[:local_class_name]
7
+ end
8
+
9
+ # returns values that should be parsed by a form in order for post and put actions to work
10
+ def scoped_values_for_form(variable = nil)
11
+ variable ||= resource_var
12
+
13
+ form_argument_values = []
14
+
15
+ # Add the modules
16
+ parent_module_groups.each do |parent_module|
17
+ form_argument_values << ":#{parent_module}"
18
+ end
19
+
20
+ # Add the models
21
+ parent_model_tables.each do |parent_model|
22
+ form_argument_values << "@#{parent_model}"
23
+ end
24
+
25
+ form_argument_values << variable
26
+
27
+ if form_argument_values.count == 1
28
+ return variable
29
+ else
30
+ "[#{form_argument_values.join(', ')}]"
31
+ end
32
+ end
33
+
34
+ # Class name with parent modules included (i.e. Example::FooBar)
35
+ # Name of class assumed by default generators, used as a base for determining modules and class
36
+ def modular_class_name
37
+ @modular_class_name
38
+ end
39
+
40
+ end
@@ -0,0 +1,20 @@
1
+ class AuthorizedRailsScaffolds::RailsScaffoldControllerHelper < AuthorizedRailsScaffolds::Helper
2
+ include ControllerMacros
3
+ include RouteExampleMacros
4
+
5
+ def initialize(options = {})
6
+ super options
7
+
8
+ # Modularized class name generated by spec generator
9
+ @controller_class_name = options[:controller_class_name]
10
+
11
+ @modular_class_name = options[:class_name] || options[:local_class_name]
12
+ end
13
+
14
+ # Class name with parent modules included (i.e. Example::FooBar)
15
+ # Name of class assumed by default generators, used as a base for determining modules and class
16
+ def modular_class_name
17
+ @modular_class_name
18
+ end
19
+
20
+ end
@@ -0,0 +1,81 @@
1
+ #
2
+ # requires modular_class_name to be defined
3
+ #
4
+ module ResourceMacros
5
+
6
+ ### Base Resource ###
7
+
8
+ # Class name of the resource being tested (i.e. 'FooBar')
9
+ def resource_class
10
+ # @local_class_name
11
+ @resource_class ||= modular_class_name.split('::')[-1]
12
+ end
13
+
14
+ # Table name of the Resource being tested (i.e. foo_bar)
15
+ def resource_table_name
16
+ @resource_table_name ||= resource_class.underscore
17
+ end
18
+
19
+ # Symbol used to represent resource (i.e. :foo_bar)
20
+ def resource_symbol
21
+ ":#{resource_table_name}"
22
+ end
23
+
24
+ # Name for plural of a resource
25
+ def resource_plural_name
26
+ @resource_plural_name ||= plural_var_name || (var_name || resource_table_name).pluralize
27
+ end
28
+
29
+ def resource_plural_sym
30
+ ":#{resource_plural_name}"
31
+ end
32
+
33
+ # Variable resource is assigned to in a singular context (i.e. @foo_bar)
34
+ def resource_var
35
+ @resource_var_name ||= "@#{var_name || resource_table_name}"
36
+ end
37
+
38
+ # Variable resource is assigned to in a plural context (i.e. @foo_bars)
39
+ def resources_var
40
+ @resource_var_name ||= "@#{resource_plural_name}"
41
+ end
42
+
43
+ # Directory of the current resource: i.e. awesome/foo_bars
44
+ def resource_directory
45
+ @resource_directory = [parent_module_groups + [resource_table_name.pluralize]].join("/")
46
+ end
47
+
48
+ ### Parent Models ###
49
+
50
+ # An array of parent model classes (i.e. ['User', 'Category])
51
+ def parent_models
52
+ @parent_models ||= AuthorizedRailsScaffolds.config.parent_models
53
+ end
54
+
55
+ # Table names of parent models (i.e. ['user', 'category'])
56
+ def parent_model_tables
57
+ @parent_model_tables ||= parent_models.map { |model| model.underscore }
58
+ end
59
+
60
+ # Variable name used to save a parent_table_name
61
+ def parent_variable(parent_table_name)
62
+ "@#{parent_table_name}"
63
+ end
64
+
65
+ def parent_sym(parent_table_name)
66
+ ":#{parent_table_name}"
67
+ end
68
+
69
+ ### Parent Modules ###
70
+
71
+ # The parent modules of a controller (i.e. ['Api', 'V1'])
72
+ def parent_modules
73
+ @parent_modules ||= modular_class_name.split('::')[0..-2]
74
+ end
75
+
76
+ # Array of symbols used for links to parents (i.e. ['api', 'v1'])
77
+ def parent_module_groups
78
+ @parent_module_groups ||= parent_modules.map { |parent_module| parent_module.underscore }
79
+ end
80
+
81
+ end