kitestrings 1.0.0

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 (48) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.rspec +2 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +38 -0
  7. data/Rakefile +10 -0
  8. data/kitestrings.gemspec +28 -0
  9. data/lib/array_validator.rb +22 -0
  10. data/lib/async.rb +26 -0
  11. data/lib/form_object.rb +96 -0
  12. data/lib/generators/kitestrings/install_generator.rb +41 -0
  13. data/lib/generators/kitestrings/messages_generator.rb +11 -0
  14. data/lib/generators/kitestrings/templates/message.rb.erb +56 -0
  15. data/lib/generators/templates/deploy.rb +136 -0
  16. data/lib/generators/templates/deploy/integ.rb +21 -0
  17. data/lib/generators/templates/deploy/production.rb +26 -0
  18. data/lib/generators/templates/deploy/uat.rb +23 -0
  19. data/lib/generators/templates/haml/scaffold/_form.html.haml +17 -0
  20. data/lib/generators/templates/haml/scaffold/edit.html.haml +6 -0
  21. data/lib/generators/templates/haml/scaffold/index.html.haml +27 -0
  22. data/lib/generators/templates/haml/scaffold/new.html.haml +6 -0
  23. data/lib/generators/templates/haml/scaffold/show.html.haml +10 -0
  24. data/lib/generators/templates/rails/scaffold_controller/controller.rb +62 -0
  25. data/lib/generators/templates/rspec/helper/helper_spec.rb +17 -0
  26. data/lib/generators/templates/rspec/integration/request.rb +4 -0
  27. data/lib/generators/templates/rspec/model/model_spec.rb +14 -0
  28. data/lib/generators/templates/rspec/scaffold/controller_spec.rb +131 -0
  29. data/lib/generators/templates/rspec/scaffold/routing_spec.rb +18 -0
  30. data/lib/generators/templates/spec_ext/my_ip_spec.rb +7 -0
  31. data/lib/generators/templates/spec_ext/spec_helper_ext.rb +37 -0
  32. data/lib/generators/templates/views/application/_navigation.html.haml +0 -0
  33. data/lib/generators/templates/views/layouts/application.html.haml +23 -0
  34. data/lib/kitestrings.rb +6 -0
  35. data/lib/kitestrings/railtie.rb +15 -0
  36. data/lib/kitestrings/version.rb +3 -0
  37. data/lib/page_and_sort_helper.rb +99 -0
  38. data/lib/size_validator.rb +22 -0
  39. data/lib/tasks/test_prepare_after_migrate.rake +11 -0
  40. data/lib/uniqueness_without_deleted_validator.rb +7 -0
  41. data/spec/lib/array_validator_spec.rb +40 -0
  42. data/spec/lib/async_spec.rb +49 -0
  43. data/spec/lib/generators/kitestrings/install_generator_spec.rb +53 -0
  44. data/spec/lib/generators/kitestrings/messages_generator_spec.rb +19 -0
  45. data/spec/lib/page_and_sort_helper_spec.rb +96 -0
  46. data/spec/lib/size_validator_spec.rb +40 -0
  47. data/spec/spec_helper.rb +17 -0
  48. metadata +181 -0
@@ -0,0 +1,21 @@
1
+ set :rails_env, 'integ'
2
+
3
+ set :rvm_ruby_string, "2.1.1"
4
+
5
+ $:.unshift(File.expand_path('./lib', ENV['rvm_path']))
6
+
7
+ set :rvm_install_ruby_params, '--verify-downloads 1'
8
+ set :rvm_type, :user
9
+ set :branch, 'develop'
10
+
11
+
12
+ #default_run_option[:pty] = true
13
+ ssh_options[:forward_agent] = true
14
+
15
+
16
+ # set :scm, :git # You can set :scm explicitly or Capistrano will make an intelligent guess based on known version control directory names
17
+ # Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`
18
+
19
+
20
+ before 'deploy:setup', 'rvm:install_rvm' # update RVM
21
+ before 'deploy:setup', 'rvm:install_ruby'
@@ -0,0 +1,26 @@
1
+ set :rails_env, 'production'
2
+
3
+ #set :rvm_ruby_string, "1.9.3-p125@pwi_#{rails_env}"
4
+ $:.unshift(File.expand_path('./lib', ENV['rvm_path']))
5
+
6
+ set :rvm_install_ruby_params, '--verify-downloads 1'
7
+ set :rvm_type, :user
8
+ set :branch, 'master'
9
+
10
+ #default_run_option[:pty] = true
11
+ ssh_options[:forward_agent] = true
12
+
13
+
14
+ # set :scm, :git # You can set :scm explicitly or Capistrano will make an intelligent guess based on known version control directory names
15
+ # Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`
16
+
17
+
18
+ #server 'standby.unitedsynergies.com.au', :web, :app, :db, primary: true
19
+
20
+
21
+ before 'deploy:setup', 'rvm:install_rvm' # update RVM
22
+ before 'deploy:setup', 'rvm:install_ruby'
23
+
24
+ after 'deploy:update_code' do
25
+ run "cd #{release_path}; RAILS_ENV=#{rails_env} bundle exec rake assets:precompile"
26
+ end
@@ -0,0 +1,23 @@
1
+ set :rails_env, 'uat'
2
+
3
+ #set :rvm_ruby_string, "1.9.3-p125@pwi_#{rails_env}"
4
+ $:.unshift(File.expand_path('./lib', ENV['rvm_path']))
5
+
6
+ set :rvm_install_ruby_params, '--verify-downloads 1'
7
+ set :rvm_type, :user
8
+ set :branch, 'develop'
9
+
10
+
11
+ #default_run_option[:pty] = true
12
+ ssh_options[:forward_agent] = true
13
+
14
+
15
+ # set :scm, :git # You can set :scm explicitly or Capistrano will make an intelligent guess based on known version control directory names
16
+ # Or: `accurev`, `bzr`, `cvs`, `darcs`, `git`, `mercurial`, `perforce`, `subversion` or `none`
17
+
18
+
19
+ #server 'standby.unitedsynergies.com.au', :web, :app, :db, primary: true
20
+
21
+
22
+ before 'deploy:setup', 'rvm:install_rvm' # update RVM
23
+ before 'deploy:setup', 'rvm:install_ruby'
@@ -0,0 +1,17 @@
1
+ = form_for @<%= singular_table_name %>, html: { "role" =>"form", class: "form-horizontal"} do |f|
2
+ - if @<%= singular_table_name %>.errors.any?
3
+ #error_explanation
4
+ %h2= "#{pluralize(@<%= singular_table_name %>.errors.count, 'error')} prohibited this <%= singular_table_name %> from being saved:"
5
+ %ul
6
+ - @<%= singular_table_name %>.errors.full_messages.each do |msg|
7
+ %li= msg
8
+
9
+ <% for attribute in attributes -%>
10
+ .form-group
11
+ = f.label :<%= attribute.name %>, class: 'col-md-2 control-label'
12
+ .col-md-6
13
+ = f.<%= attribute.field_type %> :<%= attribute.name %>, class: 'form-control input-sm'
14
+ <% end -%>
15
+ .form-group
16
+ .col-md-6.col-md-offset-2
17
+ = f.submit 'Save', class: 'btn btn-success btn-sm'
@@ -0,0 +1,6 @@
1
+ .page-header
2
+ %h1 Editing <%= singular_table_name %>
3
+ .row
4
+ .col-md-12
5
+ = render 'form'
6
+ = link_to 'Cancel', <%= singular_table_name %>_path(@<%= singular_table_name %>), id: :cancel_edit_<%= singular_table_name %>_link, class: 'btn btn-sm btn-warning'
@@ -0,0 +1,27 @@
1
+ .page-header
2
+ %h1 Listing <%= plural_table_name %>
3
+
4
+ .row
5
+ .col-md-12
6
+ %table.table.table-striped
7
+ %tr
8
+ <% for attribute in attributes -%>
9
+ %th <%= attribute.human_name %>
10
+ <% end -%>
11
+
12
+
13
+ - @<%= plural_table_name %>.each do |<%= singular_table_name %>|
14
+ %tr
15
+ <% @first = true -%>
16
+ <% for attribute in attributes -%>
17
+ <% if @first -%>
18
+ <% @first = false -%>
19
+ %td= link_to <%= singular_table_name %>.<%= attribute.name %>, <%= singular_table_name %>_path(<%= singular_table_name %>)
20
+ <% else -%>
21
+ %td= <%= singular_table_name %>.<%= attribute.name %>
22
+ <% end -%>
23
+ <% end -%>
24
+
25
+ %br
26
+
27
+ = link_to 'New <%= human_name %>', new_<%= singular_table_name %>_path, id: :new_<%= singular_table_name %>_link, class: 'btn btn-primary btn-sm'
@@ -0,0 +1,6 @@
1
+ .page-header
2
+ %h1 New <%= singular_table_name %>
3
+ .row
4
+ .col-md-12
5
+ = render 'form'
6
+ = link_to 'Cancel', <%= index_helper %>_path, id: :cancel_new_<%= singular_table_name %>_link, class: 'btn btn-sm btn-warning'
@@ -0,0 +1,10 @@
1
+ .row
2
+ .col-md-12
3
+
4
+ <% for attribute in attributes -%>
5
+ %p
6
+ %b <%= attribute.human_name %>:
7
+ = @<%= singular_table_name %>.<%= attribute.name %>
8
+ <% end -%>
9
+
10
+ = link_to 'Edit', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>), id: :edit_<%= singular_table_name %>_link, class: 'btn btn-sm btn-primary'
@@ -0,0 +1,62 @@
1
+ <% if namespaced? -%>
2
+ require_dependency "<%= namespaced_file_path %>/application_controller"
3
+
4
+ <% end -%>
5
+ <% module_namespacing do -%>
6
+ class <%= controller_class_name %>Controller < ApplicationController
7
+ before_action :set_<%= singular_table_name %>, only: [:show, :edit, :update, :destroy]
8
+
9
+ def index
10
+ @<%= plural_table_name %> = <%= orm_class.all(class_name) %>
11
+ end
12
+
13
+ def show
14
+ end
15
+
16
+ def new
17
+ @<%= singular_table_name %> = <%= orm_class.build(class_name) %>
18
+ end
19
+
20
+ def edit
21
+ end
22
+
23
+ # POST <%= route_url %>
24
+ def create
25
+ @<%= singular_table_name %> = <%= orm_class.build(class_name, "#{singular_table_name}_params") %>
26
+
27
+ if @<%= orm_instance.save %>
28
+ redirect_to @<%= singular_table_name %>, notice: <%= "'#{human_name} was successfully created.'" %>
29
+ else
30
+ render :new
31
+ end
32
+ end
33
+
34
+ def update
35
+ if @<%= orm_instance.update("#{singular_table_name}_params") %>
36
+ redirect_to @<%= singular_table_name %>, notice: <%= "'#{human_name} was successfully updated.'" %>
37
+ else
38
+ render :edit
39
+ end
40
+ end
41
+
42
+ def destroy
43
+ @<%= orm_instance.destroy %>
44
+ redirect_to <%= index_helper %>_url, notice: <%= "'#{human_name} was successfully destroyed.'" %>
45
+ end
46
+
47
+ private
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
+ # Only allow a trusted parameter "white list" through.
54
+ def <%= "#{singular_table_name}_params" %>
55
+ <%- if attributes_names.empty? -%>
56
+ params[:<%= singular_table_name %>]
57
+ <%- else -%>
58
+ params.require(:<%= singular_table_name %>).permit(<%= attributes_names.map { |name| ":#{name}" }.join(', ') %>)
59
+ <%- end -%>
60
+ end
61
+ end
62
+ <% end -%>
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ # Specs in this file have access to a helper object that includes
4
+ # the <%= class_name %>Helper. For example:
5
+ #
6
+ # describe <%= class_name %>Helper do
7
+ # describe "string concat" do
8
+ # it "concats two strings with spaces" do
9
+ # helper.concat_strings("this","that").should == "this that"
10
+ # end
11
+ # end
12
+ # end
13
+ <% module_namespacing do -%>
14
+ describe <%= class_name %>Helper do
15
+
16
+ end
17
+ <% end -%>
@@ -0,0 +1,4 @@
1
+ require 'spec_helper'
2
+
3
+ describe "<%= class_name.pluralize %>" do
4
+ end
@@ -0,0 +1,14 @@
1
+ require 'spec_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ describe <%= class_name %> do
5
+
6
+ common_lets
7
+
8
+ # define the <%= file_name %>, <%= file_name %>_other,... instances in
9
+ # spec/support/common_lets.rb
10
+ it { expect(<%= file_name %>).to be_valid }
11
+ # it { expect(<%= file_name %>_other).to be_valid }
12
+
13
+ end
14
+ <% end -%>
@@ -0,0 +1,131 @@
1
+ require 'spec_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ describe <%= controller_class_name %>Controller do
5
+ render_views
6
+ common_lets
7
+
8
+ before :all do
9
+ Fracture.define_selector :new_<%= file_name %>_link
10
+ Fracture.define_selector :cancel_new_<%= file_name %>_link
11
+ Fracture.define_selector :edit_<%= file_name %>_link
12
+ Fracture.define_selector :cancel_edit_<%= file_name %>_link
13
+ end
14
+
15
+ # stub strong params
16
+ before { controller.stub(<%= file_name %>_params: {}) }
17
+
18
+ context 'not logged in' do
19
+ before do
20
+ sign_out :user
21
+ end
22
+
23
+ {index: :get, show: :get, new: :get, create: :post, edit: :get, update: :put, destroy: :delete}.each do |v, m|
24
+ it "#{m} #{v} should logout" do
25
+ self.send(m, v, id: <%= file_name %>)
26
+ should redirect_to new_user_session_path
27
+ }
28
+ end
29
+ end
30
+
31
+ context 'logged in as user' do
32
+ before { sign_in user }
33
+
34
+ <% unless options[:singleton] -%>
35
+ describe 'GET index' do
36
+ before do
37
+ <%= file_name %>; <%= file_name %>_other
38
+ get :index
39
+ end
40
+
41
+ it { should assign_to(:<%= table_name %>).with_items([<%= file_name %>]) }
42
+ it { should render_template :index }
43
+ it { should have_only_fractures(:new_<%= file_name %>_link) }
44
+ end
45
+
46
+ <% end -%>
47
+ describe 'GET show' do
48
+ before { get :show, id: <%= file_name %> }
49
+
50
+ it { should assign_to(:<%= file_name %>).with(<%= file_name %>) }
51
+ it { should render_template :show }
52
+ it { should have_only_fractures(:edit_<%= file_name %>_link) }
53
+ end
54
+
55
+ describe 'GET new' do
56
+ before { get :new }
57
+
58
+ it { should assign_to(:<%= file_name %>).with_kind_of(<%= class_name %>) }
59
+ #it { should assign_to('<%= file_name %>.parent').with(parent) }
60
+ it { should render_template :new }
61
+ it { should have_only_fractures :cancel_new_<%= file_name %>_link }
62
+ it { should have_a_form.that_is_new.with_path_of(<%= table_name %>_path)}
63
+ end
64
+
65
+ describe 'POST create' do
66
+ context 'valid' do
67
+ before do
68
+ <%= class_name %>.any_instance.stub(:valid?).and_return(true)
69
+ post :create
70
+ end
71
+
72
+ it { should redirect_to <%= file_name %>_path(<%= class_name %>.last) }
73
+ it { should assign_to(:<%= file_name %>).with(<%= class_name %>.last) }
74
+ #it { should assign_to('<%= file_name %>.parent').with(parent) }
75
+ end
76
+
77
+ context 'invalid' do
78
+ before do
79
+ <%= class_name %>.any_instance.stub(:valid?).and_return(false)
80
+ post :create
81
+ end
82
+ it { should assign_to(:<%= file_name %>).with_kind_of(<%= class_name %>) }
83
+ #it { should assign_to('<%= file_name %>.parent').with(parent) }
84
+ it { should render_template :new }
85
+ it { should have_only_fractures :cancel_new_<%= file_name %>_link }
86
+ it { should have_a_form.that_is_new.with_path_of(<%= table_name %>_path)}
87
+ end
88
+ end
89
+
90
+ describe 'GET edit' do
91
+ before { get :edit, id: <%= file_name %> }
92
+
93
+ it { should assign_to(:<%= file_name %>).with(<%= file_name %>) }
94
+ it { should render_template :edit }
95
+ it { should have_only_fractures :cancel_edit_<%= file_name %>_link }
96
+ it { should have_a_form.that_is_edit.with_path_of(<%= file_name %>_path) }
97
+ end
98
+
99
+ describe 'PUT update' do
100
+ context 'valid' do
101
+ before do
102
+ <%= class_name %>.any_instance.stub(:valid?).and_return(true)
103
+ put :update, id: <%= file_name %>
104
+ end
105
+
106
+ it { should assign_to(:<%= file_name %>).with(<%= file_name %>) }
107
+ it { should redirect_to <%= file_name %>_path(<%= file_name %>) }
108
+ end
109
+ context 'invalid' do
110
+ before do
111
+ <%= file_name %>
112
+ <%= class_name %>.any_instance.stub(:valid?).and_return(false)
113
+ put :update, id: <%= file_name %>
114
+ end
115
+
116
+ it { should assign_to(:<%= file_name %>).with(<%= file_name %>) }
117
+ it { should render_template :edit }
118
+ it { should have_only_fractures :cancel_edit_<%= file_name %>_link }
119
+ it { should have_a_form.that_is_edit.with_path_of(<%= file_name %>_path) }
120
+ end
121
+ end
122
+
123
+ describe 'DELETE destroy' do
124
+ before { delete :destroy, id: <%= file_name %> }
125
+
126
+ it { expect(<%= class_name %>.find_by_id(<%= file_name %>.id)).to be_nil }
127
+ it { should redirect_to <%= index_helper %>_path }
128
+ end
129
+ end
130
+ end
131
+ <% end -%>
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ <% module_namespacing do -%>
4
+ describe <%= controller_class_name %>Controller do
5
+ describe 'routing' do
6
+
7
+ <% unless options[:singleton] -%>
8
+ it('routes to #index') { get('/<%= ns_table_name %>').should route_to('<%= ns_table_name %>#index') }
9
+ <% end -%>
10
+ it('routes to #new') { get('/<%= ns_table_name %>/new').should route_to('<%= ns_table_name %>#new') }
11
+ it('routes to #show') { get('/<%= ns_table_name %>/1').should route_to('<%= ns_table_name %>#show', id: '1') }
12
+ it('routes to #edit') { get('/<%= ns_table_name %>/1/edit').should route_to('<%= ns_table_name %>#edit', id: '1') }
13
+ it('routes to #create') { post('/<%= ns_table_name %>').should route_to('<%= ns_table_name %>#create') }
14
+ it('routes to #update') { put('/<%= ns_table_name %>/1').should route_to('<%= ns_table_name %>#update', id: '1') }
15
+ it('routes to #destroy') { delete('/<%= ns_table_name %>/1').should route_to('<%= ns_table_name %>#destroy', id: '1') }
16
+ end
17
+ end
18
+ <% end -%>
@@ -0,0 +1,7 @@
1
+ require_relative 'spec_helper_ext'
2
+
3
+ describe "My IP" do
4
+ it "has an I Paddress" do
5
+ expect(Net::HTTP.get("bot.whatismyipaddress.com", '/')).to match(/\d*\.\d*\.\d*\.\d*/)
6
+ end
7
+ end
@@ -0,0 +1,37 @@
1
+ require 'rspec'
2
+
3
+ ENV["RAILS_ENV"] ||= 'test'
4
+ require File.expand_path("../../config/environment", __FILE__)
5
+ require 'rspec/rails'
6
+
7
+ # ensure that we have a network connection to the internet before running any of these tests.
8
+ begin
9
+ require 'net/http'
10
+ Net::HTTP.get("google.com", '/')
11
+ rescue Interrupt
12
+ exit 0
13
+ rescue StandardError
14
+ puts "Network offline!"
15
+ exit 1
16
+ end
17
+
18
+ # load support files:
19
+ Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
20
+
21
+ RSpec.configure do |config|
22
+ # Run specs in random order to surface order dependencies. If you find an
23
+ # order dependency and want to debug it, you can fix the order by providing
24
+ # the seed, which is printed after each run.
25
+ # --seed 1234
26
+ config.order = "random"
27
+
28
+ config.use_transactional_fixtures = false
29
+
30
+ # include any other modules
31
+
32
+ # add global before/after blocks:
33
+
34
+ end
35
+
36
+ # turn of deprecation warning.
37
+ I18n.enforce_available_locales = false