authorized_rails_scaffolds 0.0.14 → 0.0.15

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -0
  3. data/lib/authorized_rails_scaffolds.rb +23 -6
  4. data/lib/authorized_rails_scaffolds/helper.rb +13 -54
  5. data/lib/authorized_rails_scaffolds/{controller_macros.rb → macros/controller_macros.rb} +1 -1
  6. data/lib/authorized_rails_scaffolds/{factory_macros.rb → macros/factory_macros.rb} +5 -5
  7. data/lib/authorized_rails_scaffolds/macros/parent_macros.rb +56 -0
  8. data/lib/authorized_rails_scaffolds/macros/path_macros.rb +70 -0
  9. data/lib/authorized_rails_scaffolds/macros/resource_macros.rb +53 -0
  10. data/lib/authorized_rails_scaffolds/macros/route_example_macros.rb +65 -0
  11. data/lib/authorized_rails_scaffolds/{test_var_macros.rb → macros/test_var_macros.rb} +9 -9
  12. data/lib/authorized_rails_scaffolds/rails_erb_scaffold_helper.rb +0 -25
  13. data/lib/authorized_rails_scaffolds/rails_helper_helper.rb +41 -0
  14. data/lib/authorized_rails_scaffolds/rails_scaffold_controller_helper.rb +27 -2
  15. data/lib/authorized_rails_scaffolds/rspec_integration_helper.rb +9 -0
  16. data/lib/authorized_rails_scaffolds/rspec_scaffold_controller_helper.rb +8 -4
  17. data/lib/authorized_rails_scaffolds/rspec_scaffold_helper.rb +5 -4
  18. data/lib/authorized_rails_scaffolds/rspec_scaffold_routing_helper.rb +2 -2
  19. data/lib/authorized_rails_scaffolds/rspec_scaffold_view_helper.rb +1 -1
  20. data/lib/authorized_rails_scaffolds/version.rb +1 -1
  21. data/lib/generators/authorized_rails_scaffolds/install_macros/install_macros_generator.rb +2 -1
  22. data/lib/generators/authorized_rails_scaffolds/install_macros/templates/devise_can_can/USAGE +1 -0
  23. data/lib/generators/authorized_rails_scaffolds/install_macros/templates/devise_can_can/request_macros.rb +8 -0
  24. data/lib/generators/authorized_rails_scaffolds/install_templates/install_templates_generator.rb +14 -0
  25. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/_form.html.erb +2 -1
  26. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/controller.rb +68 -35
  27. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/helper.rb +25 -0
  28. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/index.html.erb +15 -15
  29. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/scaffold/show.html.erb +1 -1
  30. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/controller_spec.rb +90 -84
  31. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/edit_spec.rb +37 -30
  32. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/index_spec.rb +56 -51
  33. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/new_spec.rb +33 -26
  34. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/request_spec.rb +125 -0
  35. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/routing_spec.rb +12 -9
  36. data/lib/generators/authorized_rails_scaffolds/install_templates/templates/spec/show_spec.rb +20 -17
  37. data/spec/lib/authorized_rails_scaffolds/rails_erb_scaffold_helper_spec.rb +24 -23
  38. data/spec/lib/authorized_rails_scaffolds/rails_helper_helper_spec.rb +66 -0
  39. data/spec/lib/authorized_rails_scaffolds/rails_scaffold_controller_helper_spec.rb +42 -0
  40. data/spec/lib/authorized_rails_scaffolds/rspec_scaffold_controller_helper_spec.rb +7 -7
  41. data/spec/lib/authorized_rails_scaffolds/rspec_scaffold_routing_helper_spec.rb +14 -14
  42. data/spec/lib/authorized_rails_scaffolds/rspec_scaffold_view_helper_spec.rb +4 -4
  43. metadata +16 -7
  44. data/lib/authorized_rails_scaffolds/resource_macros.rb +0 -81
  45. data/lib/authorized_rails_scaffolds/route_example_macros.rb +0 -43
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c307ff40cc7d76b304b65af1a46ac08010c04ebd
4
- data.tar.gz: 2aafb9e88c59ebc6c0d616b55df02aa2181b459a
3
+ metadata.gz: 48159be8830cab29219981b558c48f647cac5651
4
+ data.tar.gz: 31db50aea7a19dfa206edc4b9eb0dcff5e20d48a
5
5
  SHA512:
6
- metadata.gz: a7f7f59ee4d5fbe7211fd1ac6cd062741f0e450d5f4e4ebb63fd6fc56643d98463fdc6e4239d63da783ad4e25dba3ad86edbd6c1437d0cb041f19813c459c756
7
- data.tar.gz: d99f4cb9d11e25bdf85785d30ba56d6f575ee13c642feec2f40cff0cf8c3f7db9417f6fa2ac05b9978ed55ded60750ebe2f758a2998f23f2f6eae4d10f44242d
6
+ metadata.gz: 01f6d37305d7e270d045d18f833130b14ed50086bd8e03b83e1364496272437dc8a0d7e2d1e06ae536aca9c6e519626d8ad8271af7be6c353353feaf93e0a1fa
7
+ data.tar.gz: 90483813b42dbb7437d30f4e56782782988babdf1423c7825d3dabfefdcdc9a225c6cdf172fe97767ece17a211cbd371e4a92d4bb7214b872af6a817ef88f997
data/README.md CHANGED
@@ -29,6 +29,9 @@ Create a initializer at `config/initializers/authorized_rails_scaffolds.rb` cont
29
29
  AuthorizedRailsScaffolds.configure do |config|
30
30
  # i.e. ['Category', 'User'] for Awesome/FooBar => awesome_category_user_foo_bars_path
31
31
  config.parent_models = []
32
+
33
+ # toggles if shallow routes should be used
34
+ config.shallow_routes = false
32
35
  end
33
36
 
34
37
  end
@@ -1,14 +1,21 @@
1
1
  require "authorized_rails_scaffolds/version"
2
2
 
3
3
  module AuthorizedRailsScaffolds
4
+
5
+ # Configuration Value Property
4
6
  class Configuration
5
7
  attr_accessor :parent_models
8
+ attr_accessor :shallow_routes
6
9
 
7
10
  def initialize
8
11
  self.parent_models = []
12
+ self.shallow_routes = false
9
13
  end
10
14
  end
11
15
 
16
+ # Mounting point for macros
17
+ module Macros; end
18
+
12
19
  def self.config
13
20
  @config ||= Configuration.new
14
21
  end
@@ -22,16 +29,26 @@ module AuthorizedRailsScaffolds
22
29
 
23
30
  end
24
31
 
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"
32
+ require "authorized_rails_scaffolds/macros/controller_macros"
33
+ require "authorized_rails_scaffolds/macros/factory_macros"
34
+ require "authorized_rails_scaffolds/macros/path_macros"
35
+ require "authorized_rails_scaffolds/macros/parent_macros"
36
+ require "authorized_rails_scaffolds/macros/resource_macros"
37
+ require "authorized_rails_scaffolds/macros/route_example_macros"
38
+ require "authorized_rails_scaffolds/macros/test_var_macros"
30
39
  require "authorized_rails_scaffolds/helper"
31
- require "authorized_rails_scaffolds/rails_erb_scaffold_helper"
40
+
41
+ # Rails Helpers
32
42
  require "authorized_rails_scaffolds/rails_scaffold_controller_helper"
43
+ require "authorized_rails_scaffolds/rails_helper_helper"
44
+
45
+ # Erb Helpers
46
+ require "authorized_rails_scaffolds/rails_erb_scaffold_helper"
47
+
48
+ # RSpec Helpers
33
49
  require "authorized_rails_scaffolds/rspec_scaffold_helper"
34
50
  require "authorized_rails_scaffolds/rspec_scaffold_controller_helper"
35
51
  require "authorized_rails_scaffolds/rspec_scaffold_routing_helper"
36
52
  require "authorized_rails_scaffolds/rspec_scaffold_view_helper"
53
+ require "authorized_rails_scaffolds/rspec_integration_helper"
37
54
 
@@ -1,10 +1,17 @@
1
1
  module AuthorizedRailsScaffolds
2
2
  class Helper
3
- include ResourceMacros
3
+ include Macros::ParentMacros
4
+ include Macros::PathMacros
5
+ include Macros::ResourceMacros
4
6
 
5
7
  def initialize(options = {})
6
8
  # @local_class_name = options[:local_class_name]
7
- @var_name = options[:var_name] || options[:file_name] # Non-namespaced variable name
9
+
10
+ # Fix for potentially plural file_name value
11
+ file_name = options[:file_name]
12
+ file_name = file_name.singularize unless file_name.nil?
13
+
14
+ @var_name = options[:var_name] || file_name # Non-namespaced variable name
8
15
 
9
16
  # Pluralized non-namespaced variable name
10
17
  @plural_var_name ||= options[:plural_var_name]
@@ -13,6 +20,8 @@ module AuthorizedRailsScaffolds
13
20
  # options[:namespace_prefix]
14
21
 
15
22
  @singular_table_name = options[:singular_table_name]
23
+
24
+ @human_name = options[:human_name]
16
25
  end
17
26
 
18
27
  # Non-namespaced variable name (i.e. foo_bar)
@@ -24,59 +33,9 @@ module AuthorizedRailsScaffolds
24
33
  @plural_var_name
25
34
  end
26
35
 
27
- # Route Prefix parts i.e. ['awesome', 'user', 'company']
28
- def route_prefix_values
29
- unless @route_prefix_values
30
- @route_prefix_values = parent_module_groups || []
31
- @route_prefix_values += parent_model_tables
32
- @route_prefix_values = @route_prefix_values.reject{|x|x.blank?}
33
- end
34
- @route_prefix_values
35
- end
36
-
37
- def collection_route_prefix
38
- @collection_route_prefix ||= (route_prefix_values + [resource_table_name.pluralize]).join('_')
39
- end
40
-
41
- def member_route_prefix
42
- @member_route_prefix ||= (route_prefix_values + [resource_table_name]).join('_')
43
- end
44
-
45
- def parent_variables
46
- @parent_variables ||= parent_model_tables.collect{ |parent_table| parent_variable(parent_table) }
47
- end
48
-
49
- def controller_show_route(variable = nil)
50
- variables = [] + parent_variables
51
- variables += [variable] unless variable.nil?
52
- controller_routes = "#{member_route_prefix}_path"
53
- controller_routes += "(#{variables.join(', ')})" if variables.any?
54
- controller_routes
55
- end
56
-
57
- def controller_index_path
58
- variables = parent_variables
59
- controller_index_path = "#{collection_route_prefix}_path"
60
- controller_index_path += "(#{variables.join(', ')})" if variables.any?
61
- controller_index_path
62
- end
63
-
64
- def controller_index_route
65
- variables = parent_variables
66
- controller_index_route = "#{collection_route_prefix}_url"
67
- controller_index_route += "(#{variables.join(', ')})" if variables.any?
68
- controller_index_route
69
- end
70
-
71
- def references_show_route(attribute_name, variable = nil)
72
- variable ||= "#{resource_var}.#{attribute_name}"
73
- path_variables = [parent_module_groups + [attribute_name]]
74
-
75
- references_show_route = path_variables.join('_')
76
- references_show_route += "_path(#{variable})"
77
- references_show_route
36
+ def shallow_routes?
37
+ !!AuthorizedRailsScaffolds.config.shallow_routes
78
38
  end
79
39
 
80
40
  end
81
-
82
41
  end
@@ -3,7 +3,7 @@
3
3
  #
4
4
  # also makes use of @controller_class_name value
5
5
  #
6
- module ControllerMacros
6
+ module AuthorizedRailsScaffolds::Macros::ControllerMacros
7
7
 
8
8
  # The namespaced class the Controller inherits from (i.e. Example::ApplicationController)
9
9
  def application_controller_class
@@ -1,4 +1,4 @@
1
- module FactoryMacros
1
+ module AuthorizedRailsScaffolds::Macros::FactoryMacros
2
2
 
3
3
  # Returns code that will generate attribute_value as an attribute_type
4
4
  def factory_attribute_value(attribute_type, attribute_value)
@@ -47,18 +47,18 @@ module FactoryMacros
47
47
 
48
48
  def build_extra_factory_params(parent_table_name = nil)
49
49
  if parent_table_name.nil?
50
- attribute = parent_model_tables.last
50
+ attribute = parent_model_names.last
51
51
  else
52
- parent_index = parent_model_tables.index(parent_table_name.to_s)
52
+ parent_index = parent_model_names.index(parent_table_name.to_s)
53
53
  unless parent_index.nil? || parent_index == 0
54
- attribute = parent_model_tables[parent_index - 1]
54
+ attribute = parent_model_names[parent_index - 1]
55
55
  end
56
56
  end
57
57
 
58
58
  if attribute.nil?
59
59
  return ''
60
60
  else
61
- return ", :#{attribute} => #{references_test_property(attribute)}"
61
+ return ", :#{attribute} => #{references_test_name(attribute)}"
62
62
  end
63
63
  end
64
64
 
@@ -0,0 +1,56 @@
1
+ module AuthorizedRailsScaffolds::Macros::ParentMacros
2
+
3
+ ### Parent Models ###
4
+
5
+ # An array of parent model classes (i.e. ['User', 'Category])
6
+ def parent_models
7
+ @parent_models ||= AuthorizedRailsScaffolds.config.parent_models
8
+ end
9
+
10
+ # Table names of parent models (i.e. ['user', 'category'])
11
+ def parent_model_names
12
+ @parent_model_names ||= parent_models.map { |model| model.underscore }
13
+ end
14
+
15
+ # Variable name used to save a parent_table_name
16
+ def parent_variable(parent_table_name)
17
+ "@#{parent_table_name}"
18
+ end
19
+
20
+ def parent_sym(parent_table_name)
21
+ ":#{parent_table_name}"
22
+ end
23
+
24
+ def parent_variables(use_shallow_route=false)
25
+ @parent_variables ||= parent_model_names.collect{ |parent_table| parent_variable(parent_table) }
26
+ use_shallow_route ? @parent_variables[0..-2] : @parent_variables
27
+ end
28
+
29
+ ### Parent Modules ###
30
+
31
+ # The parent modules of a controller (i.e. ['Api', 'V1'])
32
+ def parent_modules
33
+ @parent_modules ||= modular_class_name.nil? ? [] : modular_class_name.split('::')[0..-2]
34
+ end
35
+
36
+ # Array of symbols used for links to parents (i.e. ['api', 'v1'])
37
+ def parent_module_groups
38
+ @parent_module_groups ||= parent_modules.map { |parent_module| parent_module.underscore }
39
+ end
40
+
41
+ # Returns the parent model required to create the model
42
+ def model_parent_name(model_name)
43
+ if model_name == resource_name
44
+ return parent_model_names.any? ? parent_model_names.last : nil
45
+ else
46
+ parent_index = parent_model_names.index(model_name.to_s)
47
+ if parent_index.nil? || parent_index == 0
48
+ return nil
49
+ else
50
+ return parent_model_names[parent_index - 1]
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ end
@@ -0,0 +1,70 @@
1
+ module AuthorizedRailsScaffolds::Macros::PathMacros
2
+
3
+ def controller_index_path
4
+ variables = parent_variables
5
+ controller_index_path = "#{collection_route_prefix}_path"
6
+ controller_index_path += "(#{variables.join(', ')})" if variables.any?
7
+ controller_index_path
8
+ end
9
+
10
+ def controller_index_route
11
+ variables = parent_variables
12
+ controller_index_route = "#{collection_route_prefix}_url"
13
+ controller_index_route += "(#{variables.join(', ')})" if variables.any?
14
+ controller_index_route
15
+ end
16
+
17
+ def controller_show_route(variable = nil)
18
+ variables = [] + parent_variables
19
+ variables += [variable] unless variable.nil?
20
+ controller_routes = "#{member_route_prefix}_path"
21
+ controller_routes += "(#{variables.join(', ')})" if variables.any?
22
+ controller_routes
23
+ end
24
+
25
+ def controller_show_route(variable)
26
+ variables = []
27
+ variables += parent_variables(shallow_routes?)
28
+ variables += [variable] unless variable.nil?
29
+ controller_routes = "#{member_route_prefix(shallow_routes?)}_path"
30
+ controller_routes += "(#{variables.join(', ')})" if variables.any?
31
+ controller_routes
32
+ end
33
+
34
+ def controller_edit_route(variable)
35
+ "edit_#{controller_show_route(variable)}"
36
+ end
37
+
38
+ def controller_new_route
39
+ controller_routes = "#{member_route_prefix}_path"
40
+ controller_routes += "(#{parent_variables.join(', ')})" if parent_variables.any?
41
+ "new_#{controller_routes}"
42
+ end
43
+
44
+ def references_show_route(attribute_name, variable = nil)
45
+ variable ||= "#{resource_var}.#{attribute_name}"
46
+ path_variables = [parent_module_groups + [attribute_name]]
47
+
48
+ references_show_route = path_variables.join('_')
49
+ references_show_route += "_path(#{variable})"
50
+ references_show_route
51
+ end
52
+
53
+ protected
54
+
55
+ # Route Prefix parts i.e. ['awesome', 'user', 'company']
56
+ def route_prefix_values(use_shallow_route=false)
57
+ route_prefix_values = parent_module_groups || []
58
+ route_prefix_values += use_shallow_route ? parent_model_names[0..-2] : parent_model_names
59
+ route_prefix_values = route_prefix_values.reject{|x|x.blank?}
60
+ end
61
+
62
+ def collection_route_prefix
63
+ @collection_route_prefix ||= (route_prefix_values + [resource_array_name]).join('_')
64
+ end
65
+
66
+ def member_route_prefix(use_shallow_route=false)
67
+ (route_prefix_values(use_shallow_route) + [resource_name]).join('_')
68
+ end
69
+
70
+ end
@@ -0,0 +1,53 @@
1
+ #
2
+ # requires modular_class_name to be defined
3
+ #
4
+ module AuthorizedRailsScaffolds::Macros::ResourceMacros
5
+
6
+ ### Base Resource ###
7
+
8
+ # Human name of the resource being tested (i.e. 'Foo bar')
9
+ def resource_human_name
10
+ @resource_human_name ||= @human_name || resource_name.titleize.humanize
11
+ end
12
+
13
+ # Class name of the resource being tested (i.e. 'FooBar')
14
+ def resource_class
15
+ # @local_class_name
16
+ @resource_class ||= (modular_class_name.nil? ? nil : modular_class_name.split('::')[-1]) || var_name.classify
17
+ end
18
+
19
+ # Table name of the Resource being tested (i.e. foo_bar)
20
+ def resource_name
21
+ @resource_name ||= (var_name || resource_class.underscore)
22
+ end
23
+
24
+ # Symbol used to represent resource (i.e. :foo_bar)
25
+ def resource_symbol
26
+ @resource_symbol ||= ":#{resource_name}"
27
+ end
28
+
29
+ # Variable resource is assigned to in a singular context (i.e. @foo_bar)
30
+ def resource_var
31
+ @resource_var ||= "@#{resource_name}"
32
+ end
33
+
34
+ # Name for plural of a resource
35
+ def resource_array_name
36
+ @resource_array_name ||= (plural_var_name || resource_name.pluralize)
37
+ end
38
+
39
+ # Variable resource is assigned to in a plural context (i.e. @foo_bars)
40
+ def resource_array_var
41
+ @resource_array_var ||= "@#{resource_array_name}"
42
+ end
43
+
44
+ def resource_array_sym
45
+ @resource_array_sym ||= ":#{resource_array_name}"
46
+ end
47
+
48
+ # Directory of the current resource: i.e. awesome/foo_bars
49
+ def resource_directory
50
+ @resource_directory = ((parent_module_groups || []) + [resource_array_name]).join("/")
51
+ end
52
+
53
+ end
@@ -0,0 +1,65 @@
1
+ module AuthorizedRailsScaffolds::Macros::RouteExampleMacros
2
+
3
+ # Example index route: i.e. /awesome/users/2/foo_bars
4
+ def example_index_path
5
+ unless @example_index_path
6
+ example_index_path_parts = []
7
+
8
+ parent_model_names.each do |parent_model|
9
+ # users, 2
10
+ parent_value = example_parent_values["#{parent_model}_id"]
11
+ example_index_path_parts << parent_model.pluralize
12
+ example_index_path_parts << parent_value
13
+ end
14
+
15
+ # Example index route: i.e. /awesome/users/2/foo_bars
16
+ @example_index_path = [parent_module_groups + example_index_path_parts + [resource_array_name]].join("/")
17
+ end
18
+ "/#{@example_index_path}"
19
+ end
20
+
21
+ def example_show_path
22
+ unless @example_show_path
23
+ example_show_path_parts = []
24
+
25
+ parent_names = shallow_routes? ? parent_model_names[0..-2] : parent_model_names
26
+ parent_names.each do |parent_model|
27
+ # users, 2
28
+ parent_value = example_parent_values["#{parent_model}_id"]
29
+ example_show_path_parts << parent_model.pluralize
30
+ example_show_path_parts << parent_value
31
+ end
32
+
33
+ # Example index route: i.e. /awesome/users/2/foo_bars
34
+ @example_show_path = [parent_module_groups + example_show_path_parts + [resource_array_name]].join("/")
35
+ end
36
+ "/#{@example_show_path}/1"
37
+ end
38
+
39
+ # Extra params for an example controller path: i.e. ', :user_id => 2'
40
+ def example_index_path_extra_params
41
+ @example_index_path_extra_params ||= example_parent_values.map{ |parent_model_id, parent_value| ", :#{parent_model_id} => \"#{parent_value}\"" }.join('')
42
+ end
43
+
44
+ def example_show_path_extra_params
45
+ @example_show_path_extra_params ||= example_parent_values(shallow_routes?).map{ |parent_model_id, parent_value| ", :#{parent_model_id} => \"#{parent_value}\"" }.join('')
46
+ end
47
+
48
+ def example_route_extra_params(use_shallow_route=false)
49
+ @example_route_extra_params ||= parent_model_names.collect{ |parent_table| ":#{parent_table}_id => #{references_test_name(parent_table)}.to_param" }
50
+ use_shallow_route ? @example_route_extra_params[0..-2] : @example_route_extra_params
51
+ end
52
+
53
+ protected
54
+
55
+ # Creates example values for parent id params (i.e. :user_id => 2)
56
+ def example_parent_values(use_shallow_route=false)
57
+ example_parent_values = {}
58
+ parent_models = use_shallow_route ? parent_model_names[0..-2] : parent_model_names
59
+ parent_models.each_with_index do |parent_model, index|
60
+ example_parent_values["#{parent_model}_id"] = index + 2
61
+ end
62
+ example_parent_values
63
+ end
64
+
65
+ end