kitestrings 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +6 -1
- data/lib/generators/kitestrings/install_generator.rb +33 -0
- data/lib/generators/templates/lib/nested_load_and_authorize.rb +68 -0
- data/lib/generators/templates/rails/scaffold_controller/controller.rb +6 -8
- data/lib/generators/templates/rspec/model/fixtures.yml +10 -4
- data/lib/generators/templates/rspec/scaffold/controller_spec.rb +158 -70
- data/lib/generators/templates/rubocop/.rubocop.yml +1 -0
- data/lib/generators/templates/spec/rails_helper.rb +2 -2
- data/lib/generators/templates/support/get_nesting.rb +4 -0
- data/lib/generators/templates/tasks/test_code.rake +43 -0
- data/lib/kitestrings/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf0df7d83a5a0c5091ed7e02be33fef6935451ab
|
4
|
+
data.tar.gz: 4d1053d2a099ff58146624a6096ac0fb49fda3fa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 82ed8582b3f2b57e4b5558a71ba6a1a04a7580e80fdd98492214939edb6910d2ca8f3d9141639724351143daeb214454feca0751bdc2a68b22e2adcdd0a5a753
|
7
|
+
data.tar.gz: 4689a336367cce7149d6c6d96373052ede184e3cd35503ee55fb3f2c4e7f2ab2a2bc977663bf11cef0345d74dd30eea2786f7610ff749123120efdaf0314e661
|
data/CHANGELOG.md
CHANGED
@@ -31,6 +31,10 @@ module Kitestrings
|
|
31
31
|
directory "rails", "lib/templates/rails"
|
32
32
|
end
|
33
33
|
|
34
|
+
def copy_lib_files
|
35
|
+
directory "lib", "lib"
|
36
|
+
end
|
37
|
+
|
34
38
|
def copy_rspec_files
|
35
39
|
directory "rspec", "lib/templates/rspec"
|
36
40
|
end
|
@@ -43,16 +47,43 @@ module Kitestrings
|
|
43
47
|
directory "support", "spec/support"
|
44
48
|
end
|
45
49
|
|
50
|
+
def copy_rake_task_files
|
51
|
+
directory "tasks", "lib/tasks"
|
52
|
+
end
|
53
|
+
|
46
54
|
def copy_app_view_files
|
47
55
|
copy_file "views/application/_navigation.html.haml", "app/views/application/_navigation.html.haml"
|
48
56
|
copy_file "views/layouts/application.html.haml", "app/views/layouts/application.html.haml"
|
49
57
|
copy_file "views/public/403.html", "app/views/public/403.html"
|
50
58
|
end
|
51
59
|
|
60
|
+
# def setup_abilities_with_default_role
|
61
|
+
# inject_into_file "app/models/ability.rb" do #, :after => /def initialize(user).*$/ do
|
62
|
+
# "\n"\
|
63
|
+
# " case user.role\n"\
|
64
|
+
# " when :default\n"\
|
65
|
+
# " can :manage, :all\n"\
|
66
|
+
# " end\n"\
|
67
|
+
#
|
68
|
+
# end
|
69
|
+
# end
|
70
|
+
|
71
|
+
def setup_abilities_with_default_role
|
72
|
+
insert_into_file "app/models/ability.rb", :after => "def initialize(user)" do
|
73
|
+
"\n"\
|
74
|
+
" case user.role\n"\
|
75
|
+
" when :default\n"\
|
76
|
+
" can :manage, :all\n"\
|
77
|
+
" end\n"\
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
52
82
|
def setup_application_controller
|
53
83
|
inject_into_file "app/controllers/application_controller.rb", :after => /protect_from_forgery.*$/ do
|
54
84
|
"
|
55
85
|
respond_to :html
|
86
|
+
include NestedLoadAndAuthorize
|
56
87
|
|
57
88
|
unless Rails.application.config.consider_all_requests_local
|
58
89
|
rescue_from CanCan::AccessDenied do |exception|
|
@@ -75,6 +106,8 @@ config.generators do |g|
|
|
75
106
|
config.app_generators do |g|
|
76
107
|
g.templates.unshift File.expand_path('../lib/templates', __FILE__)
|
77
108
|
end
|
109
|
+
|
110
|
+
config.autoload_paths += %W(\#{config.root}/lib)
|
78
111
|
END
|
79
112
|
|
80
113
|
environment generators_configuration
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module NestedLoadAndAuthorize
|
2
|
+
# load and authorise the resource with the same parameters as the Can Can controller additions
|
3
|
+
# class macro load_and_authorize_resource.
|
4
|
+
#
|
5
|
+
# This differs in that it is an instance method, so you must call it in a before_filter (or
|
6
|
+
# from another instance method).
|
7
|
+
#
|
8
|
+
# This method has no effect if the resource is already loaded.
|
9
|
+
#
|
10
|
+
# Any block passed to this method will be executed if the resource was successfully loaded by
|
11
|
+
# this call. Nested calls automatically supply the +:through+ parameter. To bypass this, set
|
12
|
+
# :through => nil.
|
13
|
+
# rubocop:disable
|
14
|
+
def load_and_authorize(name, options = {})
|
15
|
+
@_through_stack ||= []
|
16
|
+
|
17
|
+
# only touch can can if the instance variable is nil
|
18
|
+
resource = instance_variable_get("@#{name}")
|
19
|
+
if resource.nil?
|
20
|
+
# apply if, only and except behaviours just is if this was done by before_filter
|
21
|
+
proceed = true
|
22
|
+
proceed &&= [*options[:only]].include?(action_name.to_sym) if options[:only]
|
23
|
+
proceed &&= ![*options[:except]].include?(action_name.to_sym) if options[:except]
|
24
|
+
proceed &&= case options[:if]
|
25
|
+
when Symbol
|
26
|
+
send(options[:if])
|
27
|
+
when Proc
|
28
|
+
options[:if].call
|
29
|
+
when nil
|
30
|
+
true
|
31
|
+
end
|
32
|
+
|
33
|
+
if proceed
|
34
|
+
# automatically load this resource through a nested one unless manually specified
|
35
|
+
options[:through] = @_through_stack.last unless @_through_stack.empty? || options.include?(:through)
|
36
|
+
# create the can can resource class
|
37
|
+
cancan = self.class.cancan_resource_class.new(self, name, options.except(:if, :only, :except, :param))
|
38
|
+
resource = cancan.load_resource
|
39
|
+
cancan.authorize_resource unless options[:skip_authorize]
|
40
|
+
if resource && block_given?
|
41
|
+
# only call block if we got an instance variable set
|
42
|
+
begin
|
43
|
+
@_through_stack.push(name)
|
44
|
+
yield
|
45
|
+
ensure
|
46
|
+
@_through_stack.pop
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
resource
|
52
|
+
end
|
53
|
+
|
54
|
+
# syntactic sugar for adding the :skip_authorize option
|
55
|
+
def load_resource(name, options = {}, &block)
|
56
|
+
options[:skip_authorize] = true
|
57
|
+
load_and_authorize(name, options, &block)
|
58
|
+
end
|
59
|
+
|
60
|
+
# load the resource only if its request parameter is present. This allows for optional nesting to
|
61
|
+
# work like shallow routes with the before_filter way of doing things.
|
62
|
+
def load_and_authorize_if_present(name, options = {}, &block)
|
63
|
+
key = options[:id_param] || "#{name}_id"
|
64
|
+
if params[key]
|
65
|
+
load_and_authorize(name, options, &block)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -4,17 +4,20 @@ require_dependency "<%= namespaced_file_path %>/application_controller"
|
|
4
4
|
<% end -%>
|
5
5
|
<% module_namespacing do -%>
|
6
6
|
class <%= controller_class_name %>Controller < ApplicationController
|
7
|
-
before_action
|
7
|
+
before_action do
|
8
|
+
authenticate_user!
|
9
|
+
# load_and_authorize_if_present :company do
|
10
|
+
load_and_authorize :<%= singular_table_name %>
|
11
|
+
# end
|
12
|
+
end
|
8
13
|
|
9
14
|
def index
|
10
|
-
@<%= plural_table_name %> = <%= orm_class.all(class_name) %>
|
11
15
|
end
|
12
16
|
|
13
17
|
def show
|
14
18
|
end
|
15
19
|
|
16
20
|
def new
|
17
|
-
@<%= singular_table_name %> = <%= orm_class.build(class_name) %>
|
18
21
|
end
|
19
22
|
|
20
23
|
def edit
|
@@ -45,11 +48,6 @@ class <%= controller_class_name %>Controller < ApplicationController
|
|
45
48
|
|
46
49
|
private
|
47
50
|
|
48
|
-
# Use callbacks to share common setup or constraints between actions.
|
49
|
-
def set_<%= singular_table_name %>
|
50
|
-
@<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
|
51
|
-
end
|
52
|
-
|
53
51
|
# Only allow a trusted parameter "white list" through.
|
54
52
|
def <%= "#{singular_table_name}_params" %>
|
55
53
|
<%- if attributes_names.empty? -%>
|
@@ -1,18 +1,25 @@
|
|
1
1
|
# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
|
2
2
|
|
3
3
|
<% unless attributes.empty? -%>
|
4
|
+
<% if attributes.length > 1 %>
|
5
|
+
<% defaults = " <<: *DEFAULTS" -%>
|
4
6
|
DEFAULTS: &DEFAULTS
|
5
7
|
<% attributes[1..-1].each do |attribute| -%>
|
6
8
|
<%= attribute.name %>: <%= attribute.default %>
|
7
9
|
<% end -%>
|
10
|
+
<% else -%>
|
11
|
+
# DEFAULTS: &DEFAULTS
|
12
|
+
# field_1: meme
|
13
|
+
<% defaults = " # <<: *DEFAULTS" -%>
|
14
|
+
<% end -%>
|
8
15
|
|
9
16
|
<%= table_name.singularize %>:
|
10
17
|
<%= attributes.first.name %>: <%= table_name.singularize %>
|
11
|
-
|
18
|
+
<%= defaults %>
|
12
19
|
|
13
20
|
<%= table_name.singularize %>_other:
|
14
|
-
<%= attributes.first.name %>: <%= table_name.singularize %>
|
15
|
-
|
21
|
+
<%= attributes.first.name %>: <%= table_name.singularize %> other
|
22
|
+
<%= defaults %>
|
16
23
|
<% else -%>
|
17
24
|
# one:
|
18
25
|
# column: value
|
@@ -20,4 +27,3 @@ DEFAULTS: &DEFAULTS
|
|
20
27
|
# two:
|
21
28
|
# column: value
|
22
29
|
<% end -%>
|
23
|
-
|
@@ -2,6 +2,7 @@ require 'rails_helper'
|
|
2
2
|
|
3
3
|
<% module_namespacing do -%>
|
4
4
|
describe <%= controller_class_name %>Controller do
|
5
|
+
fixtures :<%=table_name %>
|
5
6
|
common_lets
|
6
7
|
|
7
8
|
before :all do
|
@@ -11,9 +12,6 @@ describe <%= controller_class_name %>Controller do
|
|
11
12
|
Fracture.define_selector :cancel_edit_<%= file_name %>_link
|
12
13
|
end
|
13
14
|
|
14
|
-
# stub strong params
|
15
|
-
before { allow(controller).to receive(:<%= file_name %>_params).and_return({}) }
|
16
|
-
|
17
15
|
context 'not logged in' do
|
18
16
|
before { sign_out :user }
|
19
17
|
|
@@ -26,104 +24,194 @@ describe <%= controller_class_name %>Controller do
|
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
29
|
-
context 'logged in
|
30
|
-
before
|
27
|
+
context 'logged in' do
|
28
|
+
before do |meta|
|
29
|
+
allow(controller).to receive(:<%= file_name %>_params).and_return({}) # strong params
|
30
|
+
allow(user).to receive(:role).and_return(meta.metadata[:role]) # setting user role
|
31
|
+
allow(request.env['warden']).to receive(:authenticate!) { user } # stubbing authen
|
32
|
+
allow(controller).to receive(:current_user) { user } # stubbing current_user
|
33
|
+
end
|
31
34
|
|
32
35
|
<% unless options[:singleton] -%>
|
33
36
|
describe 'GET index' do
|
34
|
-
before
|
35
|
-
<%= file_name %>; <%= file_name %>_other
|
36
|
-
get :index
|
37
|
-
end
|
37
|
+
before { |meta| get :index, get_nesting(meta) }
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
context 'un-nested' do
|
40
|
+
it 'default role', role: :default do
|
41
|
+
is_expected.to assign_to(:<%= table_name %>).with_items(<%= file_name %>, <%= file_name %>_other)
|
42
|
+
is_expected.to render_template :index
|
43
|
+
is_expected.to have_only_fractures(:new_<%= file_name %>_link)
|
44
|
+
end
|
45
|
+
# context 'nested under company', company_id: :company do
|
46
|
+
# it 'default role', role: :default do
|
47
|
+
# is_expected.to assign_to(:<%= table_name %>).with_items(<%= file_name %>)
|
48
|
+
# is_expected.to assign_to(:company).with_items(company)
|
49
|
+
# is_expected.to render_template :index
|
50
|
+
# is_expected.to have_only_fractures(:new_<%= file_name %>_link)
|
51
|
+
# end
|
52
|
+
# end
|
53
|
+
end
|
42
54
|
end
|
43
55
|
<% end -%>
|
44
56
|
|
45
57
|
describe 'GET show' do
|
46
|
-
before { get :show, id: <%= file_name %> }
|
58
|
+
before { |meta| get :show, get_nesting(meta, id: <%= file_name %>) }
|
47
59
|
|
48
|
-
|
49
|
-
|
50
|
-
|
60
|
+
context 'un-nested' do
|
61
|
+
it 'default role', role: :default do
|
62
|
+
is_expected.to assign_to(:<%= file_name %>).with(<%= file_name %>)
|
63
|
+
is_expected.to render_template :show
|
64
|
+
is_expected.to have_only_fractures(:edit_<%= file_name %>_link)
|
65
|
+
end
|
66
|
+
# context 'nested under company', company_id: :company do
|
67
|
+
# it 'default role', role: :default do
|
68
|
+
# is_expected.to assign_to(:<%= file_name %>).with(<%= file_name %>)
|
69
|
+
# is_expected.to assign_to(:company).with_items(company)
|
70
|
+
# is_expected.to render_template :show
|
71
|
+
# is_expected.to have_only_fractures(:edit_<%= file_name %>_link)
|
72
|
+
# end
|
73
|
+
# end
|
74
|
+
end
|
51
75
|
end
|
52
76
|
|
53
77
|
describe 'GET new' do
|
54
|
-
before { get :new }
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
78
|
+
before { |meta| get :new, get_nesting(meta) }
|
79
|
+
|
80
|
+
context 'un-nested' do
|
81
|
+
it 'default role', role: :default do
|
82
|
+
is_expected.to assign_to(:<%= file_name %>).with_kind_of(<%= class_name %>)
|
83
|
+
is_expected.to render_template :new
|
84
|
+
is_expected.to have_only_fractures :cancel_new_<%= file_name %>_link
|
85
|
+
is_expected.to have_a_form.that_is_new.with_path_of(<%= table_name %>_path)
|
86
|
+
end
|
87
|
+
# context 'nested under company', company_id: :company do
|
88
|
+
# it 'default role', role: :default do
|
89
|
+
# is_expected.to assign_to(:<%= file_name %>).with_kind_of(<%= class_name %>)
|
90
|
+
# is_expected.to assign_to(:company).with_items(company)
|
91
|
+
# is_expected.to assign_to('<%= file_name %>.parent').with(parent)
|
92
|
+
# is_expected.to render_template :new
|
93
|
+
# is_expected.to have_only_fractures :cancel_new_<%= file_name %>_link
|
94
|
+
# is_expected.to have_a_form.that_is_new.with_path_of(<%= table_name %>_path)
|
95
|
+
# end
|
96
|
+
# end
|
97
|
+
end
|
61
98
|
end
|
62
99
|
|
63
100
|
describe 'POST create' do
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
post :create
|
68
|
-
end
|
69
|
-
|
70
|
-
it { is_expected.to redirect_to <%= file_name %>_path(<%= class_name %>.last) }
|
71
|
-
it { is_expected.to assign_to(:<%= file_name %>).with(<%= class_name %>.last) }
|
72
|
-
# it { is_expected.to assign_to('<%= file_name %>.parent').with(parent) }
|
101
|
+
before do |meta|
|
102
|
+
allow_any_instance_of(<%= class_name %>).to receive(:valid?).and_return(meta.metadata[:valid])
|
103
|
+
post :create, get_nesting(meta)
|
73
104
|
end
|
74
105
|
|
75
|
-
context '
|
76
|
-
|
77
|
-
|
78
|
-
|
106
|
+
context 'un-nested' do
|
107
|
+
context 'default role', role: :default do
|
108
|
+
it 'valid', valid: true do
|
109
|
+
is_expected.to redirect_to <%= file_name %>_path(<%= class_name %>.last)
|
110
|
+
is_expected.to assign_to(:<%= file_name %>).with(<%= class_name %>.last)
|
111
|
+
end
|
112
|
+
it 'invalid', valid: false do
|
113
|
+
is_expected.to assign_to(:<%= file_name %>).with_kind_of(<%= class_name %>)
|
114
|
+
is_expected.to render_template :new
|
115
|
+
is_expected.to have_only_fractures :cancel_new_<%= file_name %>_link
|
116
|
+
is_expected.to have_a_form.that_is_new.with_path_of(<%= table_name %>_path)
|
117
|
+
end
|
79
118
|
end
|
80
|
-
|
81
|
-
|
82
|
-
#
|
83
|
-
|
84
|
-
|
85
|
-
|
119
|
+
# context 'nested under company', company_id: :company do
|
120
|
+
# context 'default role', role: :default do
|
121
|
+
# it 'valid', valid: true do
|
122
|
+
# is_expected.to redirect_to <%= file_name %>_path(<%= class_name %>.last)
|
123
|
+
# is_expected.to assign_to(:<%= file_name %>).with(<%= class_name %>.last)
|
124
|
+
# is_expected.to assign_to(:company).with_items(company)
|
125
|
+
# is_expected.to assign_to('<%= file_name %>.parent').with(parent)
|
126
|
+
# end
|
127
|
+
# it 'invalid', valid: false do
|
128
|
+
# is_expected.to assign_to(:<%= file_name %>).with_kind_of(<%= class_name %>)
|
129
|
+
# is_expected.to assign_to('<%= file_name %>.parent').with(parent)
|
130
|
+
# is_expected.to assign_to(:company).with_items(company)
|
131
|
+
# is_expected.to render_template :new
|
132
|
+
# is_expected.to have_only_fractures :cancel_new_<%= file_name %>_link
|
133
|
+
# is_expected.to have_a_form.that_is_new.with_path_of(<%= table_name %>_path)
|
134
|
+
# end
|
135
|
+
# end
|
136
|
+
# end
|
86
137
|
end
|
87
138
|
end
|
88
139
|
|
89
140
|
describe 'GET edit' do
|
90
|
-
before { get :edit, id: <%= file_name %> }
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
141
|
+
before { |meta| get :edit, get_nesting(meta, id: <%= file_name %>) }
|
142
|
+
|
143
|
+
context 'un-nested' do
|
144
|
+
it 'default role', role: :default do
|
145
|
+
is_expected.to assign_to(:<%= file_name %>).with(<%= file_name %>)
|
146
|
+
is_expected.to render_template :edit
|
147
|
+
is_expected.to have_only_fractures :cancel_edit_<%= file_name %>_link
|
148
|
+
is_expected.to have_a_form.that_is_edit.with_path_of(<%= file_name %>_path)
|
149
|
+
end
|
150
|
+
# context 'nested under company', company_id: :company do
|
151
|
+
# it 'default role', role: :default do
|
152
|
+
# is_expected.to assign_to(:<%= file_name %>).with(<%= file_name %>)
|
153
|
+
# is_expected.to assign_to(:company).with_items(company)
|
154
|
+
# is_expected.to render_template :edit
|
155
|
+
# is_expected.to have_only_fractures :cancel_edit_<%= file_name %>_link
|
156
|
+
# is_expected.to have_a_form.that_is_edit.with_path_of(<%= file_name %>_path)
|
157
|
+
# end
|
158
|
+
# end
|
159
|
+
end
|
96
160
|
end
|
97
161
|
|
98
162
|
describe 'PUT update' do
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
put :update, id: <%= file_name %>
|
103
|
-
end
|
104
|
-
|
105
|
-
it { is_expected.to assign_to(:<%= file_name %>).with(<%= file_name %>) }
|
106
|
-
it { is_expected.to redirect_to <%= file_name %>_path(<%= file_name %>) }
|
163
|
+
before do |meta|
|
164
|
+
allow_any_instance_of(<%= class_name %>).to receive(:valid?).and_return(meta.metadata[:valid])
|
165
|
+
put :update, get_nesting(meta, id: <%= file_name %>)
|
107
166
|
end
|
108
|
-
context 'invalid' do
|
109
|
-
before do
|
110
|
-
<%= file_name %>
|
111
|
-
allow_any_instance_of(<%= class_name %>).to receive(:valid?).and_return(false)
|
112
|
-
put :update, id: <%= file_name %>
|
113
|
-
end
|
114
167
|
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
168
|
+
context 'un-nested' do
|
169
|
+
context 'default role', role: :default do
|
170
|
+
it 'valid', valid: true do
|
171
|
+
is_expected.to assign_to(:<%= file_name %>).with(<%= file_name %>)
|
172
|
+
is_expected.to redirect_to <%= file_name %>_path(<%= file_name %>)
|
173
|
+
end
|
174
|
+
it 'invalid, valid: false' do
|
175
|
+
is_expected.to assign_to(:<%= file_name %>).with(<%= file_name %>)
|
176
|
+
is_expected.to render_template :edit
|
177
|
+
is_expected.to have_only_fractures :cancel_edit_<%= file_name %>_link
|
178
|
+
is_expected.to have_a_form.that_is_edit.with_path_of(<%= file_name %>_path)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
# context 'nested under company', company_id: :company do
|
182
|
+
# context 'default role', role: :default do
|
183
|
+
# it 'valid', valid: true do
|
184
|
+
# is_expected.to assign_to(:<%= file_name %>).with(<%= file_name %>)
|
185
|
+
# is_expected.to assign_to(:company).with_items(company)
|
186
|
+
# is_expected.to redirect_to <%= file_name %>_path(<%= file_name %>)
|
187
|
+
# end
|
188
|
+
# it 'invalid', valid: false do
|
189
|
+
# is_expected.to assign_to(:<%= file_name %>).with(<%= file_name %>)
|
190
|
+
# is_expected.to assign_to(:company).with_items(company)
|
191
|
+
# is_expected.to render_template :edit
|
192
|
+
# is_expected.to have_only_fractures :cancel_edit_<%= file_name %>_link
|
193
|
+
# is_expected.to have_a_form.that_is_edit.with_path_of(<%= file_name %>_path)
|
194
|
+
# end
|
195
|
+
# end
|
196
|
+
# end
|
119
197
|
end
|
120
198
|
end
|
121
199
|
|
122
200
|
describe 'DELETE destroy' do
|
123
|
-
before { delete :destroy, id: <%= file_name %> }
|
124
|
-
|
125
|
-
|
126
|
-
|
201
|
+
before { |meta| delete :destroy, get_nesting(meta, id: <%= file_name %>) }
|
202
|
+
context 'un-nested' do
|
203
|
+
it 'default role', role: :default do
|
204
|
+
expect(<%= class_name %>.find_by_id(<%= file_name %>.id)).to be_nil
|
205
|
+
is_expected.to redirect_to <%= index_helper %>_path
|
206
|
+
end
|
207
|
+
# context 'nested under company', company_id: :company do
|
208
|
+
# it 'default role', role: :default do
|
209
|
+
# expect(<%= class_name %>.find_by_id(<%= file_name %>.id)).to be_nil
|
210
|
+
# is_expected.to assign_to(:company).with_items(company)
|
211
|
+
# is_expected.to redirect_to <%= index_helper %>_path
|
212
|
+
# end
|
213
|
+
# end
|
214
|
+
end
|
127
215
|
end
|
128
216
|
end
|
129
217
|
end
|
@@ -19,7 +19,7 @@ RSpec.configure do |config|
|
|
19
19
|
File.truncate(log_file, 0) if File.exist?(log_file)
|
20
20
|
|
21
21
|
config.include Devise::TestHelpers, type: :controller
|
22
|
-
config.include FactoryGirl::Syntax::Methods
|
22
|
+
# config.include FactoryGirl::Syntax::Methods
|
23
23
|
config.include Capybara::DSL
|
24
24
|
# ## Mock Framework
|
25
25
|
#
|
@@ -36,7 +36,7 @@ RSpec.configure do |config|
|
|
36
36
|
# examples within a transaction, remove the following line or assign false
|
37
37
|
# instead of true.
|
38
38
|
config.use_transactional_fixtures = true
|
39
|
-
config.global_fixtures = :selections
|
39
|
+
config.global_fixtures = :selections, :users
|
40
40
|
|
41
41
|
# If true, the base class of anonymous controllers will be inferred
|
42
42
|
# automatically. This will be the default behavior in future versions of
|
@@ -0,0 +1,43 @@
|
|
1
|
+
namespace :test_code do
|
2
|
+
unless Rails.env == 'production'
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
require 'rubocop/rake_task'
|
5
|
+
# require 'reek/rake/task'
|
6
|
+
#
|
7
|
+
desc 'Execute Rspec'
|
8
|
+
RSpec::Core::RakeTask.new(:spec) do |tsk|
|
9
|
+
tsk.rspec_opts = '--format p'
|
10
|
+
end
|
11
|
+
|
12
|
+
desc 'Execute rubocop -DR'
|
13
|
+
RuboCop::RakeTask.new(:rubocop) do |tsk|
|
14
|
+
tsk.options = ['-DR'] # Rails, display cop name
|
15
|
+
tsk.fail_on_error = false
|
16
|
+
end
|
17
|
+
#
|
18
|
+
# desc 'Execute reek'
|
19
|
+
# Reek::Rake::Task.new do |tsk|
|
20
|
+
# tsk.source_files = ['app/**/*.rb', 'lib/**/*.rb', 'lib/tasks/*.rake', 'config/**/*.rb']
|
21
|
+
# tsk.fail_on_error = false
|
22
|
+
# # tsk.verbose = true
|
23
|
+
# end
|
24
|
+
#
|
25
|
+
# desc 'Execute haml-lint'
|
26
|
+
# task haml_lint: :environment do
|
27
|
+
# puts 'HAML-LINT'
|
28
|
+
# puts %x(haml-lint .)
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# desc 'Execute rails_best_practices'
|
32
|
+
# task rbp: :environment do
|
33
|
+
# require 'rails_best_practices'
|
34
|
+
# analyzer = RailsBestPractices::Analyzer.new('.')
|
35
|
+
# analyzer.analyze
|
36
|
+
# puts analyzer.output
|
37
|
+
# end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
task :testcode do
|
42
|
+
%w(rubocop haml_lint reek rbp spec).each { |task| Rake::Task["testcode:#{task}"].invoke }
|
43
|
+
end
|
data/lib/kitestrings/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kitestrings
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tom Ridge
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2015-02-
|
14
|
+
date: 2015-02-12 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: rails
|
@@ -143,6 +143,7 @@ files:
|
|
143
143
|
- lib/generators/templates/haml/scaffold/index.html.haml
|
144
144
|
- lib/generators/templates/haml/scaffold/new.html.haml
|
145
145
|
- lib/generators/templates/haml/scaffold/show.html.haml
|
146
|
+
- lib/generators/templates/lib/nested_load_and_authorize.rb
|
146
147
|
- lib/generators/templates/rails/scaffold_controller/controller.rb
|
147
148
|
- lib/generators/templates/rspec/helper/helper_spec.rb
|
148
149
|
- lib/generators/templates/rspec/integration/request_spec.rb
|
@@ -157,7 +158,9 @@ files:
|
|
157
158
|
- lib/generators/templates/support/common_lets.rb
|
158
159
|
- lib/generators/templates/support/database_cleaner.rb
|
159
160
|
- lib/generators/templates/support/fracture.rb
|
161
|
+
- lib/generators/templates/support/get_nesting.rb
|
160
162
|
- lib/generators/templates/support/render_views.rb
|
163
|
+
- lib/generators/templates/tasks/test_code.rake
|
161
164
|
- lib/generators/templates/views/application/_navigation.html.haml
|
162
165
|
- lib/generators/templates/views/layouts/application.html.haml
|
163
166
|
- lib/generators/templates/views/public/403.html
|