tuttle 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -2
- data/README.md +1 -1
- data/app/assets/images/tuttle/favicon.ico +0 -0
- data/app/controllers/tuttle/application_controller.rb +2 -5
- data/app/controllers/tuttle/cancancan_controller.rb +5 -2
- data/app/controllers/tuttle/gems_controller.rb +19 -0
- data/app/controllers/tuttle/rails_controller.rb +6 -0
- data/app/controllers/tuttle/ruby_controller.rb +23 -0
- data/app/helpers/tuttle/application_helper.rb +5 -0
- data/app/views/layouts/tuttle/application.html.erb +24 -7
- data/app/views/tuttle/cancancan/_rule_table.html.erb +1 -1
- data/app/views/tuttle/cancancan/index.html.erb +1 -1
- data/app/views/tuttle/cancancan/rule_tester.html.erb +2 -2
- data/app/views/tuttle/gems/http_clients.html.erb +35 -0
- data/app/views/tuttle/gems/json.html.erb +31 -0
- data/app/views/tuttle/gems/other.html.erb +16 -0
- data/app/views/tuttle/rails/cache.html.erb +27 -1
- data/app/views/tuttle/rails/database.html.erb +21 -0
- data/app/views/tuttle/rails/index.html.erb +16 -6
- data/app/views/tuttle/rails/instrumentation.html.erb +1 -1
- data/app/views/tuttle/rails/models.html.erb +1 -1
- data/app/views/tuttle/ruby/miscellaneous.html.erb +12 -0
- data/app/views/tuttle/ruby/tuning.html.erb +117 -0
- data/config/routes.rb +8 -1
- data/lib/tuttle.rb +1 -1
- data/lib/tuttle/engine.rb +48 -7
- data/lib/tuttle/version.rb +1 -1
- metadata +12 -108
- data/app/assets/stylesheets/scaffold.css +0 -56
- data/test/controllers/tuttle/cancancan_controller_test.rb +0 -60
- data/test/controllers/tuttle/devise_controller_test.rb +0 -12
- data/test/controllers/tuttle/home_controller_test.rb +0 -13
- data/test/controllers/tuttle/rails_controller_test.rb +0 -71
- data/test/controllers/tuttle/ruby_controller_test.rb +0 -12
- data/test/dummy/Gemfile.lock +0 -142
- data/test/dummy/README.rdoc +0 -261
- data/test/dummy/Rakefile +0 -7
- data/test/dummy/app/assets/javascripts/application.js +0 -15
- data/test/dummy/app/assets/stylesheets/application.css +0 -13
- data/test/dummy/app/controllers/application_controller.rb +0 -3
- data/test/dummy/app/helpers/application_helper.rb +0 -2
- data/test/dummy/app/models/ability.rb +0 -7
- data/test/dummy/app/models/user.rb +0 -6
- data/test/dummy/app/views/layouts/application.html.erb +0 -14
- data/test/dummy/config.ru +0 -4
- data/test/dummy/config/application.rb +0 -52
- data/test/dummy/config/boot.rb +0 -11
- data/test/dummy/config/database.yml +0 -25
- data/test/dummy/config/environment.rb +0 -5
- data/test/dummy/config/environments/development.rb +0 -30
- data/test/dummy/config/environments/test.rb +0 -38
- data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
- data/test/dummy/config/initializers/devise.rb +0 -257
- data/test/dummy/config/initializers/inflections.rb +0 -15
- data/test/dummy/config/initializers/mime_types.rb +0 -5
- data/test/dummy/config/initializers/secret_token.rb +0 -7
- data/test/dummy/config/initializers/session_store.rb +0 -8
- data/test/dummy/config/initializers/tuttle.rb +0 -3
- data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
- data/test/dummy/config/locales/en.yml +0 -5
- data/test/dummy/config/routes.rb +0 -5
- data/test/dummy/db/migrate/20141229204528_devise_create_users.rb +0 -42
- data/test/dummy/db/schema.rb +0 -34
- data/test/dummy/public/404.html +0 -26
- data/test/dummy/public/422.html +0 -26
- data/test/dummy/public/500.html +0 -25
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +0 -6
- data/test/dummy/test/fixtures/users.yml +0 -6
- data/test/dummy/test/models/user_test.rb +0 -7
- data/test/dummy/tmp/cache/assets/test/sprockets/00091e0cb6df543a8e704290f4dec8db +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/11599cd5b5d6a0a58a5e98c0902e1997 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/9b2e26c1e54d4ff5ae04270e8f03907f +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/a65793481a75afa9f660d1032ee66ef5 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d9450766086a9f3f994e8c4a2273bfaa +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/e117b0425a7b9daef8a213c1a2203f00 +0 -0
- data/test/integration/navigation_test.rb +0 -9
- data/test/test_helper.rb +0 -37
- data/test/tuttle_test.rb +0 -7
- data/test/unit/tuttle/note_test.rb +0 -9
|
@@ -17,7 +17,7 @@ No models were found in this application
|
|
|
17
17
|
<th>Scale</th>
|
|
18
18
|
</tr>
|
|
19
19
|
<% @models.each do |model| %>
|
|
20
|
-
<% next if model.abstract_class? %>
|
|
20
|
+
<% next if model.abstract_class? || ! model.table_exists? %>
|
|
21
21
|
<tr>
|
|
22
22
|
<th colspan="9"><%= model.name %> (<%= model.table_name %>)</th>
|
|
23
23
|
</tr>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<h2>Miscellaneous</h2>
|
|
2
|
+
|
|
3
|
+
<h3>Reslov-Replace</h3>
|
|
4
|
+
<p>
|
|
5
|
+
By default, Ruby network libraries use the system DNS lookup.
|
|
6
|
+
But the Ruby standard library also ships with a pure-Ruby implementation that causes the VM to not
|
|
7
|
+
lock while waiting for DNS lookups to happen. To enable this lookup just add <code>require 'resolv-replace'</code>
|
|
8
|
+
somewhere in your application, such as in an initializer.
|
|
9
|
+
</p>
|
|
10
|
+
<p>
|
|
11
|
+
Does <code>resolv-replace</code> appear to be patched in? <%= truth_label(IPSocket.method(:getaddress).source_location.present?) %>
|
|
12
|
+
</p>
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
<h2>Ruby Tuning</h2>
|
|
2
|
+
|
|
3
|
+
<p>
|
|
4
|
+
Ruby can be tuned for different types of applications through the use of environment variables.
|
|
5
|
+
</p>
|
|
6
|
+
<p>
|
|
7
|
+
Different versions of Ruby support different variables so it is important to make sure that you are using
|
|
8
|
+
settings and environment variable names appropriate for your version of Ruby.
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<h3>Global Method Cache</h3>
|
|
12
|
+
<p>
|
|
13
|
+
Since Ruby 2.2, the method cache size is configurable using the <code>RUBY_GLOBAL_METHOD_CACHE_SIZE</code> environment variable.
|
|
14
|
+
</p>
|
|
15
|
+
<p>
|
|
16
|
+
The default value for this setting is 2048 entries which may be low for even a moderate-sized Rails application.
|
|
17
|
+
</p>
|
|
18
|
+
<%- # TODO: warn if value is not a power of 2 %>
|
|
19
|
+
<pre>
|
|
20
|
+
ENV['RUBY_GLOBAL_METHOD_CACHE_SIZE'] = <%= ENV.fetch('RUBY_GLOBAL_METHOD_CACHE_SIZE') { 'not configured'} %>
|
|
21
|
+
</pre>
|
|
22
|
+
<p>
|
|
23
|
+
For more information and a great story about how <a href="https://github.com/csfrancis">Scott Francis</a>
|
|
24
|
+
added this variable to Ruby
|
|
25
|
+
see <a href="http://www.shopify.com/technology/16777156-tuning-rubys-global-method-cache">his writeup</a>
|
|
26
|
+
on performance tuning the Shopify app.
|
|
27
|
+
</p>
|
|
28
|
+
|
|
29
|
+
<% if RUBY_VERSION.to_f >= 2.1 %>
|
|
30
|
+
<h3>Garbage Collection Internals</h3>
|
|
31
|
+
<p>
|
|
32
|
+
Some of Ruby's Garbage Collection parameters are determined during by the runtime platform or compile-time configuration.
|
|
33
|
+
These values can't be changed by environment variables but are helpful for understanding how memory is being allocated and used.
|
|
34
|
+
</p>
|
|
35
|
+
<ul>
|
|
36
|
+
<% GC::INTERNAL_CONSTANTS.each do |key, value| %>
|
|
37
|
+
<li><%= key %> = <%= value %></li>
|
|
38
|
+
<% end %>
|
|
39
|
+
</ul>
|
|
40
|
+
<% end %>
|
|
41
|
+
|
|
42
|
+
<h3>Garbage Collection</h3>
|
|
43
|
+
<p>
|
|
44
|
+
Ruby's garbage collection is highly-tunable through environment variables.
|
|
45
|
+
Determining the right configuration requires understanding how the GC is working
|
|
46
|
+
and how much memory is being allocated by requests to the application.
|
|
47
|
+
</p>
|
|
48
|
+
<h4>Controls</h4>
|
|
49
|
+
<p>
|
|
50
|
+
Normally, the Garbage Collector runs as needed to free memory. You can also programmatically control the GC as well to stop it from running or to trigger a GC on demand.</code>
|
|
51
|
+
</p>
|
|
52
|
+
<p>
|
|
53
|
+
Is GC enabled? <%= truth_label(@gc_enabled) %>
|
|
54
|
+
<br/>
|
|
55
|
+
Is GC::Profiler enabled? <%= truth_label(GC::Profiler.enabled?) %>
|
|
56
|
+
</p>
|
|
57
|
+
|
|
58
|
+
<h4>Garbage Collection Statistics</h4>
|
|
59
|
+
<table class='table table-condensed' style='width:auto;'>
|
|
60
|
+
<%- gcstat = GC.stat %>
|
|
61
|
+
<%- [:count, :major_gc_count, :minor_gc_count,
|
|
62
|
+
:heap_available_slots, :heap_live_slots, :heap_free_slots, :heap_final_slots, :heap_marked_slots, :heap_swept_slots,
|
|
63
|
+
:heap_sorted_length,
|
|
64
|
+
:total_allocated_pages, :total_freed_pages, :heap_allocatable_pages, :heap_allocated_pages, :heap_eden_pages, :heap_tomb_pages,
|
|
65
|
+
:total_allocated_objects, :total_freed_objects,
|
|
66
|
+
:old_objects, :old_objects_limit,
|
|
67
|
+
:remembered_wb_unprotected_objects, :remembered_wb_unprotected_objects_limit,
|
|
68
|
+
:malloc_increase_bytes, :malloc_increase_bytes_limit,
|
|
69
|
+
:oldmalloc_increase_bytes, :oldmalloc_increase_bytes_limit].each do |key| %>
|
|
70
|
+
<tr>
|
|
71
|
+
<th class="text-right"><%= key %></th>
|
|
72
|
+
<td><%= gcstat[key] %></td>
|
|
73
|
+
</tr>
|
|
74
|
+
<%- end %>
|
|
75
|
+
</table>
|
|
76
|
+
|
|
77
|
+
<% if RUBY_VERSION.to_f >= 2.1 %>
|
|
78
|
+
<h4>Latest GC info</h4>
|
|
79
|
+
<%- dgtest = GC.latest_gc_info %>
|
|
80
|
+
<dl class="dl-horizontal">
|
|
81
|
+
<%- dgtest.each do |key,val| %>
|
|
82
|
+
<dt><%= key %></dt>
|
|
83
|
+
<dd><%= val %></dd>
|
|
84
|
+
<%- end %>
|
|
85
|
+
</dl>
|
|
86
|
+
<% end %>
|
|
87
|
+
|
|
88
|
+
<h4>Configuration settings</h4>
|
|
89
|
+
<p>
|
|
90
|
+
The following environment variables are available to be configured to tune the Garbage Collector in Ruby 2.2.
|
|
91
|
+
</p>
|
|
92
|
+
<p>
|
|
93
|
+
Some useful resources for understanding how these variables affect performance can be found here:
|
|
94
|
+
<ul>
|
|
95
|
+
<li><a href="https://github.com/tmm1">Aman Gupta's</a> post: <a href="http://tmm1.net/ruby21-rgengc/">Ruby 2.1: RGenGC</a></li>
|
|
96
|
+
<li><a href="https://github.com/mrnugget">Thorsten Ball's</a> post: <a href="http://thorstenball.com/blog/2014/03/12/watching-understanding-ruby-2.1-garbage-collector/">Watching and Understanding the Ruby 2.1 Garbage Collector at Work</a></li>
|
|
97
|
+
</ul>
|
|
98
|
+
</p>
|
|
99
|
+
<%
|
|
100
|
+
#
|
|
101
|
+
#
|
|
102
|
+
%>
|
|
103
|
+
<table class="table table-condensed">
|
|
104
|
+
<tr>
|
|
105
|
+
<th>ENV</th>
|
|
106
|
+
<th>Value</th>
|
|
107
|
+
<th>Description</th>
|
|
108
|
+
</tr>
|
|
109
|
+
<%- @gc_params.each do |key, desc| %>
|
|
110
|
+
<tr>
|
|
111
|
+
<td><%= key %></td>
|
|
112
|
+
<td style="white-space: nowrap;"><%= ENV.fetch(key.to_s) { 'not configured'} %></td>
|
|
113
|
+
<td><%= desc %></td>
|
|
114
|
+
</tr>
|
|
115
|
+
<%- end %>
|
|
116
|
+
</table>
|
|
117
|
+
|
data/config/routes.rb
CHANGED
|
@@ -7,7 +7,14 @@ Tuttle::Engine.routes.draw do
|
|
|
7
7
|
get :controllers, :models, :database, :helpers, :assets, :routes, :instrumentation, :inflectors, :cache
|
|
8
8
|
end
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
namespace :ruby do
|
|
11
|
+
get '', :action => :index
|
|
12
|
+
get :tuning, :miscellaneous
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
namespace :gems do
|
|
16
|
+
get :http_clients, :json, :other
|
|
17
|
+
end
|
|
11
18
|
|
|
12
19
|
if defined?(Devise)
|
|
13
20
|
get '/devise' => 'devise#index'
|
data/lib/tuttle.rb
CHANGED
data/lib/tuttle/engine.rb
CHANGED
|
@@ -1,28 +1,50 @@
|
|
|
1
1
|
module Tuttle
|
|
2
2
|
class Engine < ::Rails::Engine
|
|
3
3
|
isolate_namespace Tuttle
|
|
4
|
+
engine_name :tuttle
|
|
5
|
+
|
|
6
|
+
config.tuttle = ActiveSupport::OrderedOptions.new
|
|
4
7
|
|
|
5
8
|
attr_accessor :reload_needed
|
|
6
|
-
attr_accessor :events, :event_counts
|
|
9
|
+
attr_accessor :events, :event_counts, :cache_events
|
|
7
10
|
attr_accessor :session_start, :session_id
|
|
8
11
|
|
|
12
|
+
attr_reader :logger
|
|
13
|
+
|
|
14
|
+
initializer :tuttle_assets_precompile do |app|
|
|
15
|
+
app.config.assets.precompile += %w(tuttle/application.css tuttle/application.js tuttle/favicon.ico)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
initializer :tuttle_set_configuration do |app|
|
|
19
|
+
app.config.tuttle.each do |k,v|
|
|
20
|
+
Tuttle.send("#{k}=", v)
|
|
21
|
+
end
|
|
22
|
+
# Tuttle will be automatically enabled in development if not configured explicitly
|
|
23
|
+
Tuttle.enabled= Rails.env.development? if Tuttle.enabled==nil
|
|
24
|
+
Tuttle.automount_engine= true if Tuttle.automount_engine==nil
|
|
25
|
+
end
|
|
26
|
+
|
|
9
27
|
initializer :tuttle_startup do
|
|
28
|
+
next unless Tuttle.enabled
|
|
29
|
+
|
|
10
30
|
Tuttle::Engine.session_start = Time.now
|
|
11
31
|
Tuttle::Engine.session_id = SecureRandom.uuid
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
initializer :tuttle_assets_precompile do |app|
|
|
15
|
-
app.config.assets.precompile += %w(tuttle/application.css tuttle/application.js )
|
|
32
|
+
@logger = ::Logger.new("#{Rails.root}/log/tuttle.log")
|
|
33
|
+
@logger.info('Tuttle engine started')
|
|
16
34
|
end
|
|
17
35
|
|
|
18
36
|
initializer :tuttle_track_reloads, group: :all do
|
|
37
|
+
next unless Tuttle.enabled
|
|
38
|
+
|
|
19
39
|
ActionDispatch::Reloader.to_prepare do
|
|
20
|
-
|
|
40
|
+
Tuttle::Engine.logger.warn('ActionDispatch::Reloader called to_prepare') unless Tuttle::Engine.reload_needed.nil?
|
|
21
41
|
Tuttle::Engine.reload_needed = true
|
|
22
42
|
end
|
|
23
43
|
end
|
|
24
44
|
|
|
25
45
|
initializer :tuttle_global_instrumenter, group: :all do
|
|
46
|
+
next unless Tuttle.enabled
|
|
47
|
+
|
|
26
48
|
Tuttle::Engine.events = []
|
|
27
49
|
Tuttle::Engine.event_counts = Hash.new(0)
|
|
28
50
|
|
|
@@ -35,11 +57,30 @@ module Tuttle
|
|
|
35
57
|
end
|
|
36
58
|
end
|
|
37
59
|
|
|
60
|
+
Tuttle::Engine.cache_events = []
|
|
61
|
+
# Note: For Rails < 4.2 instrumentation is not enabled by default. Hitting the cache inspector page will enable it for that session.
|
|
62
|
+
Tuttle::Engine.logger.info('Initializing cache_read subscriber')
|
|
63
|
+
ActiveSupport::Notifications.subscribe('cache_read.active_support') do |*args|
|
|
64
|
+
cache_call_location = caller_locations.detect { |cl| cl.path.start_with?("#{Rails.root}/app".freeze) }
|
|
65
|
+
event = ActiveSupport::Notifications::Event.new(*args)
|
|
66
|
+
|
|
67
|
+
Tuttle::Engine.logger.info("Cache Read called: #{cache_call_location.path} on line #{cache_call_location.lineno} :: #{event.payload.inspect}")
|
|
68
|
+
|
|
69
|
+
event.payload.merge!({:call_location_path => cache_call_location.path, :call_location_lineno => cache_call_location.lineno })
|
|
70
|
+
Tuttle::Engine.cache_events << event
|
|
71
|
+
end
|
|
72
|
+
ActiveSupport::Notifications.subscribe('cache_generate.active_support') do |*args|
|
|
73
|
+
Tuttle::Engine.logger.info('Cache Generate called')
|
|
74
|
+
end
|
|
75
|
+
|
|
38
76
|
end
|
|
39
77
|
|
|
40
78
|
initializer :tuttle_automounter do
|
|
79
|
+
next unless Tuttle.enabled
|
|
80
|
+
|
|
41
81
|
if Tuttle.automount_engine
|
|
42
|
-
Rails.application.routes.
|
|
82
|
+
Rails.application.routes.prepend do
|
|
83
|
+
Tuttle::Engine.logger.info('Auto-mounting /tuttle routes')
|
|
43
84
|
mount Tuttle::Engine, at: "tuttle"
|
|
44
85
|
end
|
|
45
86
|
end
|
data/lib/tuttle/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: tuttle
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Dave Gynn
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2015-
|
|
11
|
+
date: 2015-03-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rails
|
|
@@ -69,12 +69,13 @@ files:
|
|
|
69
69
|
- MIT-LICENSE
|
|
70
70
|
- README.md
|
|
71
71
|
- Rakefile
|
|
72
|
+
- app/assets/images/tuttle/favicon.ico
|
|
72
73
|
- app/assets/javascripts/tuttle/application.js
|
|
73
|
-
- app/assets/stylesheets/scaffold.css
|
|
74
74
|
- app/assets/stylesheets/tuttle/application.css
|
|
75
75
|
- app/controllers/tuttle/application_controller.rb
|
|
76
76
|
- app/controllers/tuttle/cancancan_controller.rb
|
|
77
77
|
- app/controllers/tuttle/devise_controller.rb
|
|
78
|
+
- app/controllers/tuttle/gems_controller.rb
|
|
78
79
|
- app/controllers/tuttle/home_controller.rb
|
|
79
80
|
- app/controllers/tuttle/rails_controller.rb
|
|
80
81
|
- app/controllers/tuttle/ruby_controller.rb
|
|
@@ -84,6 +85,9 @@ files:
|
|
|
84
85
|
- app/views/tuttle/cancancan/index.html.erb
|
|
85
86
|
- app/views/tuttle/cancancan/rule_tester.html.erb
|
|
86
87
|
- app/views/tuttle/devise/index.html.erb
|
|
88
|
+
- app/views/tuttle/gems/http_clients.html.erb
|
|
89
|
+
- app/views/tuttle/gems/json.html.erb
|
|
90
|
+
- app/views/tuttle/gems/other.html.erb
|
|
87
91
|
- app/views/tuttle/home/index.html.erb
|
|
88
92
|
- app/views/tuttle/rails/assets.html.erb
|
|
89
93
|
- app/views/tuttle/rails/cache.html.erb
|
|
@@ -96,62 +100,13 @@ files:
|
|
|
96
100
|
- app/views/tuttle/rails/models.html.erb
|
|
97
101
|
- app/views/tuttle/rails/routes.html.erb
|
|
98
102
|
- app/views/tuttle/ruby/index.html.erb
|
|
103
|
+
- app/views/tuttle/ruby/miscellaneous.html.erb
|
|
104
|
+
- app/views/tuttle/ruby/tuning.html.erb
|
|
99
105
|
- config/routes.rb
|
|
100
106
|
- lib/tasks/tuttle_tasks.rake
|
|
101
107
|
- lib/tuttle.rb
|
|
102
108
|
- lib/tuttle/engine.rb
|
|
103
109
|
- lib/tuttle/version.rb
|
|
104
|
-
- test/controllers/tuttle/cancancan_controller_test.rb
|
|
105
|
-
- test/controllers/tuttle/devise_controller_test.rb
|
|
106
|
-
- test/controllers/tuttle/home_controller_test.rb
|
|
107
|
-
- test/controllers/tuttle/rails_controller_test.rb
|
|
108
|
-
- test/controllers/tuttle/ruby_controller_test.rb
|
|
109
|
-
- test/dummy/Gemfile.lock
|
|
110
|
-
- test/dummy/README.rdoc
|
|
111
|
-
- test/dummy/Rakefile
|
|
112
|
-
- test/dummy/app/assets/javascripts/application.js
|
|
113
|
-
- test/dummy/app/assets/stylesheets/application.css
|
|
114
|
-
- test/dummy/app/controllers/application_controller.rb
|
|
115
|
-
- test/dummy/app/helpers/application_helper.rb
|
|
116
|
-
- test/dummy/app/models/ability.rb
|
|
117
|
-
- test/dummy/app/models/user.rb
|
|
118
|
-
- test/dummy/app/views/layouts/application.html.erb
|
|
119
|
-
- test/dummy/config.ru
|
|
120
|
-
- test/dummy/config/application.rb
|
|
121
|
-
- test/dummy/config/boot.rb
|
|
122
|
-
- test/dummy/config/database.yml
|
|
123
|
-
- test/dummy/config/environment.rb
|
|
124
|
-
- test/dummy/config/environments/development.rb
|
|
125
|
-
- test/dummy/config/environments/test.rb
|
|
126
|
-
- test/dummy/config/initializers/backtrace_silencers.rb
|
|
127
|
-
- test/dummy/config/initializers/devise.rb
|
|
128
|
-
- test/dummy/config/initializers/inflections.rb
|
|
129
|
-
- test/dummy/config/initializers/mime_types.rb
|
|
130
|
-
- test/dummy/config/initializers/secret_token.rb
|
|
131
|
-
- test/dummy/config/initializers/session_store.rb
|
|
132
|
-
- test/dummy/config/initializers/tuttle.rb
|
|
133
|
-
- test/dummy/config/initializers/wrap_parameters.rb
|
|
134
|
-
- test/dummy/config/locales/en.yml
|
|
135
|
-
- test/dummy/config/routes.rb
|
|
136
|
-
- test/dummy/db/migrate/20141229204528_devise_create_users.rb
|
|
137
|
-
- test/dummy/db/schema.rb
|
|
138
|
-
- test/dummy/public/404.html
|
|
139
|
-
- test/dummy/public/422.html
|
|
140
|
-
- test/dummy/public/500.html
|
|
141
|
-
- test/dummy/public/favicon.ico
|
|
142
|
-
- test/dummy/script/rails
|
|
143
|
-
- test/dummy/test/fixtures/users.yml
|
|
144
|
-
- test/dummy/test/models/user_test.rb
|
|
145
|
-
- test/dummy/tmp/cache/assets/test/sprockets/00091e0cb6df543a8e704290f4dec8db
|
|
146
|
-
- test/dummy/tmp/cache/assets/test/sprockets/11599cd5b5d6a0a58a5e98c0902e1997
|
|
147
|
-
- test/dummy/tmp/cache/assets/test/sprockets/9b2e26c1e54d4ff5ae04270e8f03907f
|
|
148
|
-
- test/dummy/tmp/cache/assets/test/sprockets/a65793481a75afa9f660d1032ee66ef5
|
|
149
|
-
- test/dummy/tmp/cache/assets/test/sprockets/d9450766086a9f3f994e8c4a2273bfaa
|
|
150
|
-
- test/dummy/tmp/cache/assets/test/sprockets/e117b0425a7b9daef8a213c1a2203f00
|
|
151
|
-
- test/integration/navigation_test.rb
|
|
152
|
-
- test/test_helper.rb
|
|
153
|
-
- test/tuttle_test.rb
|
|
154
|
-
- test/unit/tuttle/note_test.rb
|
|
155
110
|
homepage: https://github.com/dgynn/tuttle
|
|
156
111
|
licenses:
|
|
157
112
|
- MIT
|
|
@@ -164,7 +119,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
164
119
|
requirements:
|
|
165
120
|
- - ">="
|
|
166
121
|
- !ruby/object:Gem::Version
|
|
167
|
-
version:
|
|
122
|
+
version: 2.0.0
|
|
168
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
169
124
|
requirements:
|
|
170
125
|
- - ">="
|
|
@@ -172,59 +127,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
172
127
|
version: '0'
|
|
173
128
|
requirements: []
|
|
174
129
|
rubyforge_project:
|
|
175
|
-
rubygems_version: 2.4.
|
|
130
|
+
rubygems_version: 2.4.6
|
|
176
131
|
signing_key:
|
|
177
132
|
specification_version: 4
|
|
178
133
|
summary: Tuttle for Rails
|
|
179
|
-
test_files:
|
|
180
|
-
- test/controllers/tuttle/cancancan_controller_test.rb
|
|
181
|
-
- test/controllers/tuttle/devise_controller_test.rb
|
|
182
|
-
- test/controllers/tuttle/home_controller_test.rb
|
|
183
|
-
- test/controllers/tuttle/rails_controller_test.rb
|
|
184
|
-
- test/controllers/tuttle/ruby_controller_test.rb
|
|
185
|
-
- test/dummy/app/assets/javascripts/application.js
|
|
186
|
-
- test/dummy/app/assets/stylesheets/application.css
|
|
187
|
-
- test/dummy/app/controllers/application_controller.rb
|
|
188
|
-
- test/dummy/app/helpers/application_helper.rb
|
|
189
|
-
- test/dummy/app/models/ability.rb
|
|
190
|
-
- test/dummy/app/models/user.rb
|
|
191
|
-
- test/dummy/app/views/layouts/application.html.erb
|
|
192
|
-
- test/dummy/config/application.rb
|
|
193
|
-
- test/dummy/config/boot.rb
|
|
194
|
-
- test/dummy/config/database.yml
|
|
195
|
-
- test/dummy/config/environment.rb
|
|
196
|
-
- test/dummy/config/environments/development.rb
|
|
197
|
-
- test/dummy/config/environments/test.rb
|
|
198
|
-
- test/dummy/config/initializers/backtrace_silencers.rb
|
|
199
|
-
- test/dummy/config/initializers/devise.rb
|
|
200
|
-
- test/dummy/config/initializers/inflections.rb
|
|
201
|
-
- test/dummy/config/initializers/mime_types.rb
|
|
202
|
-
- test/dummy/config/initializers/secret_token.rb
|
|
203
|
-
- test/dummy/config/initializers/session_store.rb
|
|
204
|
-
- test/dummy/config/initializers/tuttle.rb
|
|
205
|
-
- test/dummy/config/initializers/wrap_parameters.rb
|
|
206
|
-
- test/dummy/config/locales/en.yml
|
|
207
|
-
- test/dummy/config/routes.rb
|
|
208
|
-
- test/dummy/config.ru
|
|
209
|
-
- test/dummy/db/migrate/20141229204528_devise_create_users.rb
|
|
210
|
-
- test/dummy/db/schema.rb
|
|
211
|
-
- test/dummy/Gemfile.lock
|
|
212
|
-
- test/dummy/public/404.html
|
|
213
|
-
- test/dummy/public/422.html
|
|
214
|
-
- test/dummy/public/500.html
|
|
215
|
-
- test/dummy/public/favicon.ico
|
|
216
|
-
- test/dummy/Rakefile
|
|
217
|
-
- test/dummy/README.rdoc
|
|
218
|
-
- test/dummy/script/rails
|
|
219
|
-
- test/dummy/test/fixtures/users.yml
|
|
220
|
-
- test/dummy/test/models/user_test.rb
|
|
221
|
-
- test/dummy/tmp/cache/assets/test/sprockets/00091e0cb6df543a8e704290f4dec8db
|
|
222
|
-
- test/dummy/tmp/cache/assets/test/sprockets/11599cd5b5d6a0a58a5e98c0902e1997
|
|
223
|
-
- test/dummy/tmp/cache/assets/test/sprockets/9b2e26c1e54d4ff5ae04270e8f03907f
|
|
224
|
-
- test/dummy/tmp/cache/assets/test/sprockets/a65793481a75afa9f660d1032ee66ef5
|
|
225
|
-
- test/dummy/tmp/cache/assets/test/sprockets/d9450766086a9f3f994e8c4a2273bfaa
|
|
226
|
-
- test/dummy/tmp/cache/assets/test/sprockets/e117b0425a7b9daef8a213c1a2203f00
|
|
227
|
-
- test/integration/navigation_test.rb
|
|
228
|
-
- test/test_helper.rb
|
|
229
|
-
- test/tuttle_test.rb
|
|
230
|
-
- test/unit/tuttle/note_test.rb
|
|
134
|
+
test_files: []
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
body { background-color: #fff; color: #333; }
|
|
2
|
-
|
|
3
|
-
body, p, ol, ul, td {
|
|
4
|
-
font-family: verdana, arial, helvetica, sans-serif;
|
|
5
|
-
font-size: 13px;
|
|
6
|
-
line-height: 18px;
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
pre {
|
|
10
|
-
background-color: #eee;
|
|
11
|
-
padding: 10px;
|
|
12
|
-
font-size: 11px;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
a { color: #000; }
|
|
16
|
-
a:visited { color: #666; }
|
|
17
|
-
a:hover { color: #fff; background-color:#000; }
|
|
18
|
-
|
|
19
|
-
div.field, div.actions {
|
|
20
|
-
margin-bottom: 10px;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
#notice {
|
|
24
|
-
color: green;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.field_with_errors {
|
|
28
|
-
padding: 2px;
|
|
29
|
-
background-color: red;
|
|
30
|
-
display: table;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
#error_explanation {
|
|
34
|
-
width: 450px;
|
|
35
|
-
border: 2px solid red;
|
|
36
|
-
padding: 7px;
|
|
37
|
-
padding-bottom: 0;
|
|
38
|
-
margin-bottom: 20px;
|
|
39
|
-
background-color: #f0f0f0;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
#error_explanation h2 {
|
|
43
|
-
text-align: left;
|
|
44
|
-
font-weight: bold;
|
|
45
|
-
padding: 5px 5px 5px 15px;
|
|
46
|
-
font-size: 12px;
|
|
47
|
-
margin: -7px;
|
|
48
|
-
margin-bottom: 0px;
|
|
49
|
-
background-color: #c00;
|
|
50
|
-
color: #fff;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
#error_explanation ul li {
|
|
54
|
-
font-size: 12px;
|
|
55
|
-
list-style: square;
|
|
56
|
-
}
|