authorized_rails_scaffolds 0.0.14 → 0.0.15

Sign up to get free protection for your applications and to get access to all the features.
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