tuttle 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (85) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +22 -0
  4. data/Rakefile +37 -0
  5. data/app/assets/javascripts/tuttle/application.js +12 -0
  6. data/app/assets/stylesheets/scaffold.css +56 -0
  7. data/app/assets/stylesheets/tuttle/application.css +71 -0
  8. data/app/controllers/tuttle/application_controller.rb +20 -0
  9. data/app/controllers/tuttle/cancancan_controller.rb +29 -0
  10. data/app/controllers/tuttle/devise_controller.rb +12 -0
  11. data/app/controllers/tuttle/home_controller.rb +14 -0
  12. data/app/controllers/tuttle/rails_controller.rb +52 -0
  13. data/app/controllers/tuttle/ruby_controller.rb +10 -0
  14. data/app/helpers/tuttle/application_helper.rb +4 -0
  15. data/app/views/layouts/tuttle/application.html.erb +68 -0
  16. data/app/views/tuttle/cancancan/_rule_table.html.erb +31 -0
  17. data/app/views/tuttle/cancancan/index.html.erb +45 -0
  18. data/app/views/tuttle/cancancan/rule_tester.html.erb +68 -0
  19. data/app/views/tuttle/devise/index.html.erb +84 -0
  20. data/app/views/tuttle/home/index.html.erb +74 -0
  21. data/app/views/tuttle/rails/assets.html.erb +44 -0
  22. data/app/views/tuttle/rails/controllers.html.erb +10 -0
  23. data/app/views/tuttle/rails/database.html.erb +46 -0
  24. data/app/views/tuttle/rails/helpers.html.erb +35 -0
  25. data/app/views/tuttle/rails/index.html.erb +235 -0
  26. data/app/views/tuttle/rails/instrumentation.html.erb +22 -0
  27. data/app/views/tuttle/rails/models.html.erb +61 -0
  28. data/app/views/tuttle/rails/routes.html.erb +37 -0
  29. data/app/views/tuttle/ruby/index.html.erb +83 -0
  30. data/config/routes.rb +21 -0
  31. data/lib/tasks/tuttle_tasks.rake +4 -0
  32. data/lib/tuttle.rb +4 -0
  33. data/lib/tuttle/engine.rb +39 -0
  34. data/lib/tuttle/version.rb +3 -0
  35. data/test/controllers/tuttle/cancancan_controller_test.rb +60 -0
  36. data/test/controllers/tuttle/devise_controller_test.rb +12 -0
  37. data/test/controllers/tuttle/home_controller_test.rb +13 -0
  38. data/test/controllers/tuttle/rails_controller_test.rb +56 -0
  39. data/test/controllers/tuttle/ruby_controller_test.rb +12 -0
  40. data/test/dummy/Gemfile.lock +142 -0
  41. data/test/dummy/README.rdoc +261 -0
  42. data/test/dummy/Rakefile +7 -0
  43. data/test/dummy/app/assets/javascripts/application.js +15 -0
  44. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  45. data/test/dummy/app/controllers/application_controller.rb +3 -0
  46. data/test/dummy/app/helpers/application_helper.rb +2 -0
  47. data/test/dummy/app/models/ability.rb +7 -0
  48. data/test/dummy/app/models/user.rb +6 -0
  49. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  50. data/test/dummy/config.ru +4 -0
  51. data/test/dummy/config/application.rb +52 -0
  52. data/test/dummy/config/boot.rb +11 -0
  53. data/test/dummy/config/database.yml +25 -0
  54. data/test/dummy/config/environment.rb +5 -0
  55. data/test/dummy/config/environments/development.rb +30 -0
  56. data/test/dummy/config/environments/test.rb +38 -0
  57. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  58. data/test/dummy/config/initializers/devise.rb +257 -0
  59. data/test/dummy/config/initializers/inflections.rb +15 -0
  60. data/test/dummy/config/initializers/mime_types.rb +5 -0
  61. data/test/dummy/config/initializers/secret_token.rb +7 -0
  62. data/test/dummy/config/initializers/session_store.rb +8 -0
  63. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  64. data/test/dummy/config/locales/en.yml +5 -0
  65. data/test/dummy/config/routes.rb +6 -0
  66. data/test/dummy/db/migrate/20141229204528_devise_create_users.rb +42 -0
  67. data/test/dummy/db/schema.rb +34 -0
  68. data/test/dummy/public/404.html +26 -0
  69. data/test/dummy/public/422.html +26 -0
  70. data/test/dummy/public/500.html +25 -0
  71. data/test/dummy/public/favicon.ico +0 -0
  72. data/test/dummy/script/rails +6 -0
  73. data/test/dummy/test/fixtures/users.yml +6 -0
  74. data/test/dummy/test/models/user_test.rb +7 -0
  75. data/test/dummy/tmp/cache/assets/test/sprockets/00091e0cb6df543a8e704290f4dec8db +0 -0
  76. data/test/dummy/tmp/cache/assets/test/sprockets/11599cd5b5d6a0a58a5e98c0902e1997 +0 -0
  77. data/test/dummy/tmp/cache/assets/test/sprockets/9b2e26c1e54d4ff5ae04270e8f03907f +0 -0
  78. data/test/dummy/tmp/cache/assets/test/sprockets/a65793481a75afa9f660d1032ee66ef5 +0 -0
  79. data/test/dummy/tmp/cache/assets/test/sprockets/d9450766086a9f3f994e8c4a2273bfaa +0 -0
  80. data/test/dummy/tmp/cache/assets/test/sprockets/e117b0425a7b9daef8a213c1a2203f00 +0 -0
  81. data/test/integration/navigation_test.rb +9 -0
  82. data/test/test_helper.rb +37 -0
  83. data/test/tuttle_test.rb +7 -0
  84. data/test/unit/tuttle/note_test.rb +9 -0
  85. metadata +219 -0
@@ -0,0 +1,31 @@
1
+
2
+ <table class="table table-striped">
3
+ <tr>
4
+ <th>Relevant?</th>
5
+ <th>Pass?</th>
6
+ <th>Can?</th>
7
+ <th>Actions</th>
8
+ <th>Subject</th>
9
+ <th>Conditions</th>
10
+ <th>Block?</th>
11
+ </tr>
12
+ <%- relevant_rules = @ability.send(:relevant_rules_for_match, @action.to_sym, @subject) -%>
13
+ <% rules.each do |rule| %>
14
+ <tr>
15
+ <% relevant = @action && @subject && relevant_rules.include?(rule) -%>
16
+ <td><%= 'true' if relevant %></td>
17
+
18
+ <td><%= 'true' if relevant && rule.matches_conditions?(@action.to_sym, @subject, nil) %></td>
19
+ <td><%= rule.base_behavior ? 'Can':'Cannot' %></td>
20
+ <td><%= rule.actions.inspect %></td>
21
+ <%- subjects = rule.instance_variable_get('@subjects') %>
22
+ <td>
23
+ <% subjects.each do |s| %>
24
+ <%= s.class <= Symbol ? s.to_s : s.name %>
25
+ <% end %>
26
+ </td>
27
+ <td><%= rule.conditions unless rule.conditions.empty? %></td>
28
+ <td><%= 'X' if rule.instance_variable_get('@block').present? %></td>
29
+ </tr>
30
+ <% end %>
31
+ </table>
@@ -0,0 +1,45 @@
1
+ <h1>CanCanCan Configuration</h1>
2
+
3
+ <ul class="nav nav-tabs" role="tablist">
4
+ <li class="active"><a href="#overview" role="tab" data-toggle="tab">Overview</a></li>
5
+ <li><a href="#rules" role="tab" data-toggle="tab">Rules</a></li>
6
+ <li><a href="<%= cancancan_rule_tester_path %>" role="tab">Rule Tester</a></li>
7
+ </ul>
8
+
9
+ <div class="tab-content">
10
+ <div class="tab-pane active" id="overview">
11
+ <dl class="dl-horizontal">
12
+ <dt>CanCanCan Version</dt><dd><%= CanCan::VERSION %></dd>
13
+ <dt>Current User</dt><dd><%= truncate(@cancan_user.inspect, length: 100) %></dd>
14
+ <dt>Current Ability</dt><dd><%= truncate(@ability.inspect, length: 100) %></dd>
15
+ <dt>Aliased Actions</dt><dd><%= @ability.aliased_actions %></dd>
16
+ </dl>
17
+ </div>
18
+
19
+ <div class="tab-pane" id="rules">
20
+ <table class="table table-striped">
21
+ <tr>
22
+ <th>Can?</th>
23
+ <th>Actions</th>
24
+ <th>Subject</th>
25
+ <th>Conditions</th>
26
+ <th>Block?</th>
27
+ </tr>
28
+ <% @ability.instance_variable_get('@rules').each do |rule| %>
29
+ <tr>
30
+ <td><%= rule.base_behavior ? 'Can':'Cannot' %></td>
31
+ <td><%= rule.actions.inspect %></td>
32
+ <%- subjects = rule.instance_variable_get('@subjects') %>
33
+ <td>
34
+ <% subjects.each do |s| %>
35
+ <%= s.class <= Symbol ? s.to_s : s.name %>
36
+ <% end %>
37
+ </td>
38
+ <td><%= rule.conditions %></td>
39
+ <td><%= rule.instance_variable_get('@block').present? %></td>
40
+ </tr>
41
+ <% end %>
42
+ </table>
43
+ </div>
44
+
45
+ </div>
@@ -0,0 +1,68 @@
1
+ <h1>CanCanCan</h1>
2
+
3
+ <ul class="nav nav-tabs" role="tablist">
4
+ <li><a href="<%= cancancan_path %>" role="tab">Overview</a></li>
5
+ <li><a href="<%= cancancan_path %>#rules" role="tab">Rules</a></li>
6
+ <li class="active"><a href="#" role="tab">Rule Tester</a></li>
7
+ </ul>
8
+ <br/>
9
+
10
+ <form class="form-horizontal" role="form" metho="get">
11
+ <div class="form-group">
12
+ <label for="action_name" class="col-sm-2 control-label">Action</label>
13
+ <div class="col-sm-10">
14
+ <input type="text" class="form-control typeahead" name="action_name" id="action_name" value="<%= params[:action_name] || 'read' %>">
15
+ </div>
16
+ </div>
17
+ <div class="form-group">
18
+ <label for="subject_class" class="col-sm-2 control-label">Subject Class</label>
19
+ <div class="col-sm-10">
20
+ <input type="text" class="form-control" name="subject_class" value="<%= @subject.try(:class) || params[:subject_class] %>">
21
+ </div>
22
+ </div>
23
+ <div class="form-group">
24
+ <label for="subject_id" class="col-sm-2 control-label">Subject ID</label>
25
+ <div class="col-sm-10">
26
+ <input type="text" class="form-control" name="subject_id" value="<%= @subject.try(:id) || params[:subject_id] %>">
27
+ </div>
28
+ </div>
29
+ <div class="form-group">
30
+ <div class="col-sm-offset-2 col-sm-10">
31
+ <button type="submit" class="btn btn-default">Test</button>
32
+ </div>
33
+ </div>
34
+ </form>
35
+
36
+ <% if @action && @subject %>
37
+ <p>
38
+ <%= "User.can?(:#{@action}, #{@subject.class.name}.find(#{@subject.id}) ) = #{@ability.can?(@action, @subject)}" if @subject.id %>
39
+ <%= "User.can?(:#{@action}, #{@subject.class.name}.new() ) = #{@ability.can?(@action, @subject)}" unless @subject.id %>
40
+ </p>
41
+ <% end %>
42
+
43
+ <%- relevant_rules = @ability.send(:relevant_rules_for_match, @action.to_sym, @subject) -%>
44
+
45
+ <h3>Relevant Rules</h3>
46
+ <%= render :partial => 'rule_table', :locals => {:rules => relevant_rules } =%>
47
+
48
+ <h3>All Rules</h3>
49
+ <%= render :partial => 'rule_table', :locals => {:rules => @ability.instance_variable_get('@rules') } =%>
50
+
51
+ <%- action_list = @ability.instance_variable_get('@rules').collect(&:actions).flatten.uniq -%>
52
+
53
+ <%- content_for(:javascripts) do -%>
54
+ <script>
55
+ var action_name_list = <%= action_list.as_json.to_s.html_safe =%>;
56
+ var action_names = new Bloodhound({
57
+ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
58
+ queryTokenizer: Bloodhound.tokenizers.whitespace,
59
+ local: $.map(action_name_list, function(name) { return { value: name }; })
60
+ });
61
+
62
+ action_names.initialize();
63
+
64
+ $('#action_name.typeahead').typeahead({ hint: true, highlight: true, minLength: 1},
65
+ { name: 'action_names', displayKey: 'value', source: action_names.ttAdapter()
66
+ });
67
+ </script>
68
+ <%- end -%>
@@ -0,0 +1,84 @@
1
+ <h1>Devise Configuration</h1>
2
+
3
+ <ul class="nav nav-tabs" role="tablist">
4
+ <li class="active"><a href="#overview" role="tab" data-toggle="tab">Overview</a></li>
5
+ <li><a href="#config" role="tab" data-toggle="tab">Config</a></li>
6
+ </ul>
7
+
8
+ <div class="tab-content">
9
+ <div class="tab-pane active" id="overview">
10
+ <dl class="dl-horizontal">
11
+ <dt>Devise Version</dt><dd><%= Devise::VERSION %></dd>
12
+ </dl>
13
+ <pre>
14
+ Devise::ALL = <%= Devise::ALL %>
15
+
16
+ Devise::CONTROLLERS = <%= Devise::CONTROLLERS %>
17
+
18
+ Devise::ROUTES = <%= Devise::ROUTES %>
19
+
20
+ Devise::STRATEGIES = <%= Devise::STRATEGIES %>
21
+
22
+ Devise::URL_HELPERS = <%= Devise::URL_HELPERS %>
23
+
24
+ </pre>
25
+ </div>
26
+
27
+ <div class="tab-pane" id="config">
28
+ <pre>
29
+
30
+ rememberable_options = <%= Devise.rememberable_options %>
31
+ stretches = <%= Devise.stretches %>
32
+ http_authentication_key = <%= Devise.http_authentication_key %>
33
+ authentication_keys = <%= Devise.authentication_keys %>
34
+ request_keys = <%= Devise.request_keys %>
35
+ case_insensitive_keys = <%= Devise.case_insensitive_keys %>
36
+ strip_whitespace_keys = <%= Devise.strip_whitespace_keys %>
37
+ http_authenticatable = <%= Devise.http_authenticatable %>
38
+ http_authenticatable_on_xhr = <%= Devise.http_authenticatable_on_xhr %>
39
+ params_authenticatable = <%= Devise.params_authenticatable %>
40
+ http_authentication_realm = <%= Devise.http_authentication_realm %>
41
+ email_regexp = <%= Devise.email_regexp %>
42
+ password_length = <%= Devise.password_length %>
43
+ remember_for = <%= Devise.remember_for %>
44
+ extend_remember_period = <%= Devise.extend_remember_period %>
45
+ allow_unconfirmed_access_for = <%= Devise.allow_unconfirmed_access_for %>
46
+ confirm_within = <%= Devise.confirm_within %>
47
+ confirmation_keys = <%= Devise.confirmation_keys %>
48
+ reconfirmable = <%= Devise.reconfirmable %>
49
+ timeout_in = <%= Devise.timeout_in %>
50
+ expire_auth_token_on_timeout = <%= Devise.expire_auth_token_on_timeout %>
51
+ pepper = <%= Devise.pepper %>
52
+ scoped_views = <%= Devise.scoped_views %>
53
+ lock_strategy = <%= Devise.lock_strategy %>
54
+ unlock_keys = <%= Devise.unlock_keys %>
55
+ unlock_strategy = <%= Devise.unlock_strategy %>
56
+ maximum_attempts = <%= Devise.maximum_attempts %>
57
+ unlock_in = <%= Devise.unlock_in %>
58
+ reset_password_keys = <%= Devise.reset_password_keys %>
59
+ reset_password_within = <%= Devise.reset_password_within %>
60
+ default_scope = <%= Devise.default_scope %>
61
+ mailer_sender = <%= Devise.mailer_sender %>
62
+ skip_session_storage = <%= Devise.skip_session_storage %>
63
+ navigational_formats = <%= Devise.navigational_formats %>
64
+ sign_out_all_scopes = <%= Devise.sign_out_all_scopes %>
65
+ sign_out_via = <%= Devise.sign_out_via %>
66
+ parent_controller = <%= Devise.parent_controller %>
67
+ parent_mailer = <%= Devise.parent_mailer %>
68
+ router_name = <%= Devise.router_name %>
69
+ omniauth_path_prefix = <%= Devise.omniauth_path_prefix %>
70
+ clean_up_csrf_token_on_authentication = <%= Devise.clean_up_csrf_token_on_authentication %>
71
+ mappings = <%= Devise.mappings %>
72
+ omniauth_configs = <%= Devise.omniauth_configs %>
73
+ helpers = <%= Devise.helpers %>
74
+ warden_config = <%= Devise.warden_config %>
75
+ paranoid = <%= Devise.paranoid %>
76
+ last_attempt_warning = <%= Devise.last_attempt_warning %>
77
+ token_generator = <%= Devise.token_generator %>
78
+
79
+ omniauth_providers = <%= Devise.omniauth_providers %>
80
+ available_router_name = <%= Devise.available_router_name %>
81
+ </pre>
82
+ </div>
83
+
84
+ </div>
@@ -0,0 +1,74 @@
1
+ <h1>Tuttle Dashboard</h1>
2
+
3
+ <div class="row">
4
+ <div class="col-md-8">
5
+
6
+ <div class="panel panel-default">
7
+ <div class="panel-heading">
8
+ <h3 class="panel-title">Rails</h3>
9
+ </div>
10
+ <div class="panel-body">
11
+ <p>Version: <%= Rails::VERSION::STRING %></p>
12
+ <p>Environment: <%= Rails.env %></p>
13
+ <p>Root: <%= Rails.root %></p>
14
+ <p>Controllers: <%= ActionController::Base.descendants.size %></p>
15
+ <p>Models: <%= ActiveRecord::Base.descendants.size %></p>
16
+ </div>
17
+ <div class="panel-footer">
18
+ <%= link_to 'More...', root_path %>
19
+ </div>
20
+ </div>
21
+
22
+ <div class="panel panel-default">
23
+ <div class="panel-heading">
24
+ <h3 class="panel-title">Gems Detected</h3>
25
+ </div>
26
+ <ul class="list-group">
27
+ <li class="list-group-item list-group-item-<%= ("constant" == defined?(CanCan)) ? 'success' : 'danger' %>">CanCan</li>
28
+ <li class="list-group-item list-group-item-<%= ("constant" == defined?(Devise)) ? 'success' : 'danger' %>">Devise</li>
29
+ </ul>
30
+ </div>
31
+
32
+ <div class="panel panel-default">
33
+ <div class="panel-heading">
34
+ <h3 class="panel-title">Ruby</h3>
35
+ </div>
36
+ <div class="panel-body">
37
+ <p>Version: <%= RUBY_DESCRIPTION %></p>
38
+ <p>Gems: <%= Bundler.rubygems.all_specs.size %></p>
39
+ </div>
40
+ <div class="panel-footer">
41
+ <%= link_to 'More...', ruby_path %>
42
+ </div>
43
+ </div>
44
+
45
+ </div>
46
+ <div class="col-md-4">
47
+ <div class="panel panel-default">
48
+ <div class="panel-heading">
49
+ <h3 class="panel-title">Tuttle</h3>
50
+ </div>
51
+ <div class="panel-body">
52
+ <p>Tuttle Version: <%= Tuttle::VERSION %></p>
53
+ <p>Mode: <%= Rails.env %></p>
54
+ <p>Session ID: <%= Tuttle::Engine.session_id %></p>
55
+ <p>Uptime: <%= time_ago_in_words(Tuttle::Engine.session_start) %> (<%= Tuttle::Engine.session_start.to_s(:db) %>)</p>
56
+ </div>
57
+ </div>
58
+
59
+ <div class="panel panel-default">
60
+ <div class="panel-heading">
61
+ <h3 class="panel-title">Events (<%= Tuttle::Engine.events.size %>)</h3>
62
+ </div>
63
+ <ul class="list-group">
64
+ <% @event_counts.sort.each do |name,val| -%>
65
+ <li class="list-group-item"><span class="badge"><%= val %></span><%= name %></li>
66
+ <% end -%>
67
+ </ul>
68
+ <div class="panel-body">
69
+ <%= link_to 'Details...', rails_instrumentation_path %>
70
+ </div>
71
+ </div>
72
+ </div>
73
+
74
+ </div>
@@ -0,0 +1,44 @@
1
+ <h2>Assets/Sprockets</h2>
2
+
3
+ Sprockets version: <%= Sprockets::VERSION %><br/>
4
+ Sprockets::Rails version: <%= Sprockets::Rails::VERSION %><br/>
5
+ SASS version: <%= defined?(Sass::VERSION) ? Sass::VERSION : '-' %><br/>
6
+ CoffeeScript version: <%= defined?(CoffeeScript) ? CoffeeScript::version : '-' %><br/>
7
+ ECO version: <%= defined?(Eco) ? Eco::version : '-' %><br/>
8
+ EJS version: <%= defined?(EJS) ? '1.1.1' : '-' %><br/>
9
+
10
+ <h3>Configuration</h3>
11
+ digest: <%= Rails.application.config.assets.digest %><br/>
12
+ ** digest value: <%= @sprockets.digest %><br/>
13
+ assets version: <%= Rails.application.config.assets.version %><br/>
14
+ ** sprockets assets version: <%= @sprockets.version %><br/>
15
+ assets prefix: <%= Rails.application.config.assets.prefix %><br/>
16
+ manifest: <%= Rails.application.config.assets.manifest || 'false' %><br/>
17
+ debug: <%= Rails.application.config.assets.debug %><br/>
18
+ compile: <%= Rails.application.config.assets.compile %><br/>
19
+ <%- # NOTE: only in Sprockets 2.x %>
20
+ raise_runtime_errors: <%= Rails.application.config.assets.raise_runtime_errors %><br/>
21
+ js_compressor: <%= Rails.application.config.assets.js_compressor %><br/>
22
+ css_compressor: <%= Rails.application.config.assets.css_compressor %><br/>
23
+
24
+ asset_host (for CDNs): <%= Rails.application.config.action_controller.asset_host %><br/>
25
+ static_cache_control (for CDNs): <%= Rails.application.config.static_cache_control %><br/>
26
+
27
+
28
+ <h3>Asset paths</h3>
29
+ <pre>
30
+ <% @sprockets.paths.each do |asset_path| %>
31
+ <%= asset_path.to_s %>
32
+ <% end %>
33
+
34
+ </pre>
35
+
36
+ <h3>Engines</h3>
37
+ <ul>
38
+ <% @engines.each do |ext,engine_name| %>
39
+ <li><%= ext %> - <%= engine_name %></li>
40
+ <% end %>
41
+
42
+ </ul>
43
+
44
+
@@ -0,0 +1,10 @@
1
+ <h2>Controllers and public instance methods (<%= @controllers.size %>)</h2>
2
+ <pre>
3
+ <% @controllers.each do |controller| %>
4
+ <%= controller.inspect %>
5
+ <%- controller.action_methods.sort.each do |method| %>
6
+ <%= method.to_s %>
7
+ <% end %>
8
+
9
+ <% end %>
10
+ </pre>
@@ -0,0 +1,46 @@
1
+ <h2>Database</h2>
2
+
3
+ <h3>Connection Configuration</h3>
4
+ <dl class="dl-horizontal">
5
+ <%- ActiveRecord::Base.connection_config.each do |key,val| -%>
6
+ <dt><%= key %></dt><dd><%= 'password'==key.to_s ? '--FILTERED--' : val %></dd>
7
+ <%- end -%>
8
+ </dl>
9
+
10
+ <h3>Current Connection</h3>
11
+ <p>ActiveRecord::Migrator.current_version = <%= ActiveRecord::Migrator.current_version %></p>
12
+ <p>Adapter Name = <%= @conn.adapter_name %></p>
13
+ <p>Adapter Class = <%= @conn.class %></p>
14
+ <p>Connected? = <%= ActiveRecord::Base.connected? %></p>
15
+ <p>Pool size = <%= ActiveRecord::Base.connection_pool.size %></p>
16
+ <p>Schema Cache size = <%= @conn.schema_cache.size %></p>
17
+
18
+ <%- if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) && @conn.class <= ActiveRecord::ConnectionAdapters::PostgreSQLAdapter -%>
19
+ <h3>PostgreSQL-only Info</h3>
20
+ <p>Database = <%= @conn.current_database %></p>
21
+ <p>Schema = <%= @conn.current_schema %></p>
22
+ <p>Encoding = <%= @conn.encoding %></p>
23
+ <p>Collation = <%= @conn.collation %></p>
24
+ <p>Ctype = <%= @conn.ctype %></p>
25
+
26
+ <h3>Extensions</h3>
27
+ <ul class="dl-horizontal">
28
+ <%- if @conn.extensions.size==0 -%>
29
+ <li>None</li>
30
+ <%- end -%>
31
+ <%- @conn.extensions.each do |extension| -%>
32
+ <li><%= extension %></li>
33
+ <%- end -%>
34
+ </ul>
35
+ <%- end -%>
36
+
37
+ <h3>Tables (<%= @conn.tables.size %>)</h3>
38
+ <p><%= @conn.tables %></p>
39
+
40
+ <h3>Native DB Types Supported</h3>
41
+ <dl class="dl-horizontal">
42
+ <%- @conn.native_database_types.each do |key,val| -%>
43
+ <dt><%= key %></dt><dd><%= val %></dd>
44
+ <%- end -%>
45
+ </dl>
46
+
@@ -0,0 +1,35 @@
1
+ <h2>Helpers (<%= @helpers.size %>)</h2>
2
+
3
+ helpers_path: <%= ::ApplicationController.helpers_path %><br/>
4
+ include_all_helpers: <%= ::ApplicationController.include_all_helpers %><br/>
5
+
6
+ <pre>
7
+ <% @helpers.each do |helper| %>
8
+ <%= helper.inspect %>
9
+ <%- helper.instance_methods(false).sort.each do |method| %>
10
+ <%= method.to_s %>
11
+ <% end %>
12
+ <% end %>
13
+
14
+ </pre>
15
+
16
+ <h2>Rails Helpers</h2>
17
+ <pre>
18
+ <%- ActionView::Helpers.instance_methods(true).sort.each do |method| %>
19
+ <%= method.to_s %>
20
+ <% end %>
21
+
22
+ </pre>
23
+
24
+ <h2>Rails Helpers by Module</h2>
25
+ <pre>
26
+ <%- ActionView::Helpers.included_modules.each do |module_obj| %>
27
+ <%= module_obj.inspect %>
28
+ <%- module_obj.public_instance_methods(false).sort.each do |method| %>
29
+ <%= method.to_s %>
30
+ <%- # TODO: print method signatures -%>
31
+ <%- # ActionView::Helpers.instance_method(method).parameters %>
32
+ <% end %>
33
+ <% end %>
34
+
35
+ </pre>