interlock 1.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 (93) hide show
  1. data/CHANGELOG +2 -0
  2. data/LICENSE +184 -0
  3. data/Manifest +89 -0
  4. data/README +168 -0
  5. data/TODO +3 -0
  6. data/examples/memcached.yml +10 -0
  7. data/init.rb +2 -0
  8. data/interlock.gemspec +52 -0
  9. data/lib/interlock/action_controller.rb +123 -0
  10. data/lib/interlock/action_view.rb +34 -0
  11. data/lib/interlock/active_record.rb +29 -0
  12. data/lib/interlock/config.rb +78 -0
  13. data/lib/interlock/core_extensions.rb +64 -0
  14. data/lib/interlock/interlock.rb +112 -0
  15. data/lib/interlock/memcached.rb +30 -0
  16. data/lib/interlock.rb +25 -0
  17. data/test/integration/app/README +203 -0
  18. data/test/integration/app/Rakefile +10 -0
  19. data/test/integration/app/app/controllers/application.rb +10 -0
  20. data/test/integration/app/app/controllers/eval_controller.rb +7 -0
  21. data/test/integration/app/app/controllers/items_controller.rb +32 -0
  22. data/test/integration/app/app/helpers/application_helper.rb +3 -0
  23. data/test/integration/app/app/helpers/eval_helper.rb +2 -0
  24. data/test/integration/app/app/helpers/items_helper.rb +2 -0
  25. data/test/integration/app/app/models/item.rb +2 -0
  26. data/test/integration/app/app/views/items/list.html.erb +10 -0
  27. data/test/integration/app/app/views/items/recent.html.erb +14 -0
  28. data/test/integration/app/app/views/items/show.html.erb +8 -0
  29. data/test/integration/app/app/views/shared/_related.html.erb +6 -0
  30. data/test/integration/app/config/boot.rb +108 -0
  31. data/test/integration/app/config/database.yml +24 -0
  32. data/test/integration/app/config/environment.rb +25 -0
  33. data/test/integration/app/config/environments/development.rb +8 -0
  34. data/test/integration/app/config/environments/production.rb +18 -0
  35. data/test/integration/app/config/environments/test.rb +22 -0
  36. data/test/integration/app/config/initializers/inflections.rb +10 -0
  37. data/test/integration/app/config/initializers/mime_types.rb +5 -0
  38. data/test/integration/app/config/memcached.yml +9 -0
  39. data/test/integration/app/config/routes.rb +35 -0
  40. data/test/integration/app/coverage/cache-43041 +0 -0
  41. data/test/integration/app/coverage/index.html +414 -0
  42. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-action_controller_rb.html +733 -0
  43. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-action_view_rb.html +644 -0
  44. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-active_record_rb.html +639 -0
  45. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-config_rb.html +688 -0
  46. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-core_extensions_rb.html +674 -0
  47. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-interlock_rb.html +722 -0
  48. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-memcached_rb.html +640 -0
  49. data/test/integration/app/coverage/vendor-plugins-interlock-lib-interlock_rb.html +635 -0
  50. data/test/integration/app/db/migrate/001_create_items.rb +13 -0
  51. data/test/integration/app/db/schema.rb +21 -0
  52. data/test/integration/app/doc/README_FOR_APP +2 -0
  53. data/test/integration/app/public/404.html +30 -0
  54. data/test/integration/app/public/422.html +30 -0
  55. data/test/integration/app/public/500.html +30 -0
  56. data/test/integration/app/public/dispatch.cgi +10 -0
  57. data/test/integration/app/public/dispatch.fcgi +24 -0
  58. data/test/integration/app/public/dispatch.rb +10 -0
  59. data/test/integration/app/public/favicon.ico +0 -0
  60. data/test/integration/app/public/images/rails.png +0 -0
  61. data/test/integration/app/public/index.html +277 -0
  62. data/test/integration/app/public/javascripts/application.js +2 -0
  63. data/test/integration/app/public/javascripts/controls.js +963 -0
  64. data/test/integration/app/public/javascripts/dragdrop.js +972 -0
  65. data/test/integration/app/public/javascripts/effects.js +1120 -0
  66. data/test/integration/app/public/javascripts/prototype.js +4200 -0
  67. data/test/integration/app/public/robots.txt +5 -0
  68. data/test/integration/app/script/about +3 -0
  69. data/test/integration/app/script/console +3 -0
  70. data/test/integration/app/script/destroy +3 -0
  71. data/test/integration/app/script/generate +3 -0
  72. data/test/integration/app/script/performance/benchmarker +3 -0
  73. data/test/integration/app/script/performance/profiler +3 -0
  74. data/test/integration/app/script/performance/request +3 -0
  75. data/test/integration/app/script/plugin +3 -0
  76. data/test/integration/app/script/process/inspector +3 -0
  77. data/test/integration/app/script/process/reaper +3 -0
  78. data/test/integration/app/script/process/spawner +3 -0
  79. data/test/integration/app/script/runner +3 -0
  80. data/test/integration/app/script/server +3 -0
  81. data/test/integration/app/test/fixtures/items.yml +13 -0
  82. data/test/integration/app/test/functional/eval_controller_test.rb +10 -0
  83. data/test/integration/app/test/functional/items_controller_test.rb +10 -0
  84. data/test/integration/app/test/test_helper.rb +9 -0
  85. data/test/integration/app/test/unit/item_test.rb +8 -0
  86. data/test/integration/server_test.rb +161 -0
  87. data/test/setup.rb +15 -0
  88. data/test/teardown.rb +4 -0
  89. data/test/test_helper.rb +13 -0
  90. data/test/unit/memcached_test.rb +45 -0
  91. data.tar.gz.sig +0 -0
  92. metadata +172 -0
  93. metadata.gz.sig +1 -0
@@ -0,0 +1,5 @@
1
+ # See http://www.robotstxt.org/wc/norobots.html for documentation on how to use the robots.txt file
2
+ #
3
+ # To ban all spiders from the entire site uncomment the next two lines:
4
+ # User-Agent: *
5
+ # Disallow: /
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/about'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/console'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/destroy'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/generate'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/benchmarker'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/profiler'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/performance/request'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/plugin'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/inspector'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/reaper'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../../config/boot'
3
+ require 'commands/process/spawner'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/runner'
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.dirname(__FILE__) + '/../config/boot'
3
+ require 'commands/server'
@@ -0,0 +1,13 @@
1
+ # Read about fixtures at http://ar.rubyonrails.org/classes/Fixtures.html
2
+ one:
3
+ id: 1
4
+ name: Artichoke
5
+ description: The Globe Artichoke (Cynara scolymus) is a perennial thistle originating in southern Europe around the Mediterranean.
6
+ created_at: 2007-12-04 13:47:27
7
+ updated_at: 2007-12-04 13:47:27
8
+ two:
9
+ id: 2
10
+ name: Fire Apparatus
11
+ description: A fire apparatus, fire engine, fire truck, or fire appliance is a vehicle designed to assist in fighting fires, by transporting firefighters to the scene, and providing them with access, water or other equipment.
12
+ created_at: 2007-12-04 13:47:27
13
+ updated_at: 2007-12-04 13:47:27
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class EvalControllerTest < ActionController::TestCase
4
+ tests EvalController
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ItemsControllerTest < ActionController::TestCase
4
+ tests ItemsController
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ ENV["RAILS_ENV"] = "test"
2
+ require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
3
+ require 'test_help'
4
+
5
+ class Test::Unit::TestCase
6
+ self.use_transactional_fixtures = true
7
+ self.use_instantiated_fixtures = false
8
+ fixtures :all
9
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class ItemTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ def test_truth
6
+ assert true
7
+ end
8
+ end
@@ -0,0 +1,161 @@
1
+
2
+ require "#{File.dirname(__FILE__)}/../test_helper"
3
+ require 'open-uri'
4
+ require 'cgi'
5
+ require 'fileutils'
6
+
7
+ class ServerTest < Test::Unit::TestCase
8
+
9
+ PORT = 43041
10
+ URL = "http://localhost:#{PORT}/"
11
+ LOG = "#{HERE}/integration/app/log/development.log"
12
+
13
+ Dir.chdir RAILS_ROOT do
14
+ COVERAGE = "coverage"
15
+ RCOV = "#{COVERAGE}/cache-#{PORT}" # The port number must appear in `ps awx`
16
+ FileUtils.rm_rf(COVERAGE) if File.exist? COVERAGE
17
+ Dir.mkdir COVERAGE
18
+ end
19
+
20
+
21
+ ### Tests
22
+
23
+ def test_render
24
+ assert_match(/Welcome/, browse)
25
+ assert_match(/Artichoke/, browse("items"))
26
+ end
27
+
28
+ def test_caching
29
+ browse("items")
30
+ assert_match(/cleared interlock local cache/, log)
31
+ assert_match(/all:untagged is running the controller block/, log)
32
+ assert_match(/all:untagged wrote/, log)
33
+
34
+ truncate
35
+ browse("items")
36
+ assert_match(/cleared interlock local cache/, log)
37
+ assert_no_match(/all:untagged is running the controller block/, log)
38
+ assert_no_match(/all:untagged wrote/, log)
39
+ assert_match(/all:untagged read from memcached/, log)
40
+ end
41
+
42
+ def test_broad_invalidation
43
+ browse("items")
44
+ assert_match(/all:untagged is running the controller block/, log)
45
+ assert_match(/all:untagged wrote/, log)
46
+
47
+ truncate
48
+ assert_equal "true", remote_eval("Item.find(:first).save!")
49
+ assert_match(/all:untagged invalidated by rule Item \-\> .all/, log)
50
+ browse("items")
51
+ assert_match(/all:untagged is running the controller block/, log)
52
+ assert_match(/all:untagged wrote/, log)
53
+ end
54
+
55
+ def test_narrow_invalidation
56
+ browse("items/show/1")
57
+ assert_match(/show:1:untagged is running the controller block/, log)
58
+
59
+ truncate
60
+ assert_equal "true", remote_eval("Item.find(2).save!")
61
+ assert_no_match(/show:1:untagged invalidated/, log)
62
+ browse("items/show/1")
63
+ assert_no_match(/show:1:untagged is running the controller block/, log)
64
+
65
+ truncate
66
+ assert_equal "true", remote_eval("Item.find(1).save!")
67
+ assert_match(/show:1:untagged invalidated/, log)
68
+ browse("items/show/1")
69
+ assert_match(/show:1:untagged is running the controller block/, log)
70
+ end
71
+
72
+ def test_caching_with_tag
73
+ sleep(3)
74
+ assert_no_match(/Artichoke/, browse("items/recent?seconds=3"))
75
+ assert_match(/recent:all:3 is running the controller block/, log)
76
+
77
+ truncate
78
+ assert_no_match(/Artichoke/, browse("items/recent?seconds=2"))
79
+ assert_match(/recent:all:2 is running the controller block/, log)
80
+ assert_no_match(/recent:all:3 is running the controller block/, log)
81
+
82
+ truncate
83
+ assert_no_match(/Artichoke/, browse("items/recent?seconds=3"))
84
+ assert_no_match(/recent:all:3 is running the controller block/, log)
85
+
86
+ truncate
87
+ remote_eval("Item.find(1).save!")
88
+ assert_match(/Artichoke/, browse("items/recent?seconds=3"))
89
+ assert_match(/recent:all:3 is running the controller block/, log)
90
+ end
91
+
92
+ def test_caching_with_ignore
93
+ assert_match(/Delicious cake/, browse('items'))
94
+ assert_match(/any:any:all:related is running the controller block/, log)
95
+
96
+ truncate
97
+ assert_match(/Delicious cake/, browse("items/show/2"))
98
+ assert_no_match(/any:any:all:related is running the controller block/, log)
99
+
100
+ truncate
101
+ remote_eval("Item.find(1).save!")
102
+ assert_match(/Delicious cake/, browse("items/show/2"))
103
+ assert_match(/any:any:all:related invalidated/, log)
104
+ assert_match(/any:any:all:related is running the controller block/, log)
105
+ end
106
+
107
+
108
+ ### Support methods
109
+
110
+ def setup
111
+ # We test against an actual running server in order to lock down the environment
112
+ # class reloading situation
113
+ Process.fork do
114
+ Dir.chdir RAILS_ROOT do
115
+ if $rcov
116
+ exec("rcov --aggregate #{RCOV} --exclude config\/.*,app\/.*,boot\/.*,script\/server --include-file vendor\/plugins\/interlock\/lib\/.*\.rb script/server -- -p #{PORT} &> #{LOG}")
117
+ else
118
+ exec("script/server -p #{PORT} &> #{LOG}")
119
+ end
120
+ end
121
+ end
122
+ sleep(0.2) while log !~ /available at 0.0.0.0.#{PORT}/
123
+ truncate
124
+ end
125
+
126
+ def teardown
127
+ # Process.kill(9, pid) doesn't work because Mongrel has double-forked itself away
128
+ while (pids = `ps awx | grep #{PORT} | grep -v grep | awk '{print $1}'`.split("\n")).any?
129
+ pids.each {|pid| system("kill #{pid}")}
130
+ sleep(0.2)
131
+ end
132
+ end
133
+
134
+ def truncate
135
+ system("> #{LOG}")
136
+ end
137
+
138
+ def log
139
+ File.open(LOG, 'r') do |f|
140
+ f.read
141
+ end
142
+ end
143
+
144
+ def browse(url = "")
145
+ flag = false
146
+ begin
147
+ open(URL + url).read
148
+ rescue Errno::ECONNREFUSED, OpenURI::HTTPError => e
149
+ raise "#{e.to_s}: #{URL + url}" if flag
150
+ flag = true
151
+ sleep 3
152
+ retry
153
+ end
154
+ end
155
+
156
+ def remote_eval(string)
157
+ # Server doesn't run in our process, so invalidations here don't affect it
158
+ browse("eval?string=#{CGI.escape(string)}")
159
+ end
160
+
161
+ end
data/test/setup.rb ADDED
@@ -0,0 +1,15 @@
1
+
2
+ # Setup integration system for the integration suite
3
+
4
+ Dir.chdir "#{File.dirname(__FILE__)}/integration/app/" do
5
+ system "memcached -p 43042 &"
6
+ system "memcached -p 43043 &"
7
+
8
+ Dir.chdir "vendor/plugins" do
9
+ system "rm interlock; ln -s ../../../../../ interlock"
10
+ end
11
+
12
+ system "rake db:create"
13
+ system "rake db:migrate"
14
+ system "rake db:fixtures:load"
15
+ end
data/test/teardown.rb ADDED
@@ -0,0 +1,4 @@
1
+
2
+ `ps awx`.split("\n").grep(/4304[1-3]/).map do |process|
3
+ system("kill -9 #{process.to_i}")
4
+ end
@@ -0,0 +1,13 @@
1
+
2
+ $VERBOSE = nil
3
+ require 'rubygems'
4
+ require 'test/unit'
5
+ require 'multi_rails_init'
6
+
7
+ $rcov = ENV['RCOV']
8
+ require 'ruby-debug' unless $rcov
9
+
10
+ HERE = File.expand_path(File.dirname(__FILE__))
11
+ $LOAD_PATH << HERE
12
+
13
+ require 'integration/app/config/environment'
@@ -0,0 +1,45 @@
1
+
2
+ require "#{File.dirname(__FILE__)}/../test_helper"
3
+
4
+ class MemcachedTest < Test::Unit::TestCase
5
+
6
+ KEY = "memcached_test"
7
+ LOCK = "lock:#{KEY}"
8
+
9
+ def setup
10
+ CACHE.delete KEY
11
+ CACHE.delete LOCK
12
+ end
13
+
14
+ def test_unlocked
15
+ assert_nil CACHE.get(KEY)
16
+ assert_nil CACHE.get(LOCK)
17
+
18
+ assert_nothing_raised do
19
+ CACHE.lock(KEY) { "A" }
20
+ end
21
+
22
+ assert_nil CACHE.get(LOCK)
23
+ assert_equal("A", CACHE.get(KEY))
24
+ end
25
+
26
+ def test_locked
27
+ CACHE.set LOCK, "Bogus"
28
+
29
+ assert_raises MemCache::MemCacheError do
30
+ CACHE.lock(KEY, 30, 2) { "A" }
31
+ end
32
+
33
+ assert_equal("Bogus", CACHE.get(LOCK))
34
+ assert_nil CACHE.get(KEY)
35
+ end
36
+
37
+ def test_ensure_lock_release
38
+ assert_raises RuntimeError do
39
+ CACHE.lock(KEY) { raise }
40
+ end
41
+
42
+ assert_nil CACHE.get(LOCK)
43
+ end
44
+
45
+ end
data.tar.gz.sig ADDED
Binary file
metadata ADDED
@@ -0,0 +1,172 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: interlock
3
+ version: !ruby/object:Gem::Version
4
+ version: "1.0"
5
+ platform: ruby
6
+ authors:
7
+ - ""
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDLjCCAhagAwIBAgIBADANBgkqhkiG9w0BAQUFADA9MQ0wCwYDVQQDDARldmFu
14
+ MRgwFgYKCZImiZPyLGQBGRYIY2xvdWRidXIxEjAQBgoJkiaJk/IsZAEZFgJzdDAe
15
+ Fw0wNzA5MTYxMDMzMDBaFw0wODA5MTUxMDMzMDBaMD0xDTALBgNVBAMMBGV2YW4x
16
+ GDAWBgoJkiaJk/IsZAEZFghjbG91ZGJ1cjESMBAGCgmSJomT8ixkARkWAnN0MIIB
17
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5C0Io89nyApnr+PvbNFge9Vs
18
+ yRWAlGBUEMahpXp28VrrfXZT0rAW7JBo4PlCE3jl4nE4dzE6gAdItSycjTosrw7A
19
+ Ir5+xoyl4Vb35adv56TIQQXvNz+BzlqnkAY5JN0CSBRTQb6mxS3hFyD/h4qgDosj
20
+ R2RFVzHqSxCS8xq4Ny8uzOwOi+Xyu4w67fI5JvnPvMxqrlR1eaIQHmxnf76RzC46
21
+ QO5QhufjAYGGXd960XzbQsQyTDUYJzrvT7AdOfiyZzKQykKt8dEpDn+QPjFTnGnT
22
+ QmgJBX5WJN0lHF2l1sbv3gh4Kn1tZu+kTUqeXY6ShAoDTyvZRiFqQdwh8w2lTQID
23
+ AQABozkwNzAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQU+WqJz3xQ
24
+ XSea1hRvvHWcIMgeeC4wDQYJKoZIhvcNAQEFBQADggEBAGLZ75jfOEW8Nsl26CTt
25
+ JFrWxQTcQT/UljeefVE3xYr7lc9oQjbqO3FOyued3qW7TaNEtZfSHoYeUSMYbpw1
26
+ XAwocIPuSRFDGM4B+hgQGVDx8PMGiJKom4qLXjO40UZsR7QyN/u869Vj45LURm6h
27
+ MBcPeqCASI+WNprj9+uZa2kmHiitrFqqfMBNlm5IFbn9XeYSta9AHVvs5QQqV2m5
28
+ hIPfLqCyxsn/YgOGvo6iwyQTWyTswamaAC3HRWZxIS1sfn/Ssqa7E7oQMkv5FAXr
29
+ x5rKePfXINf8XTJczkl9OBEYdE9aNdJsJpXD0asLgGVwBICS5Bjohp6mizJcDC1+
30
+ yZ0=
31
+ -----END CERTIFICATE-----
32
+
33
+ date: 2007-12-13 00:00:00 -05:00
34
+ default_executable:
35
+ dependencies:
36
+ - !ruby/object:Gem::Dependency
37
+ name: memcache_client
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 1.5.0
44
+ version:
45
+ description: An optimal-efficiency caching plugin for Rails.
46
+ email: ""
47
+ executables: []
48
+
49
+ extensions: []
50
+
51
+ extra_rdoc_files: []
52
+
53
+ files:
54
+ - CHANGELOG
55
+ - examples/memcached.yml
56
+ - init.rb
57
+ - lib/interlock/action_controller.rb
58
+ - lib/interlock/action_view.rb
59
+ - lib/interlock/active_record.rb
60
+ - lib/interlock/config.rb
61
+ - lib/interlock/core_extensions.rb
62
+ - lib/interlock/interlock.rb
63
+ - lib/interlock/memcached.rb
64
+ - lib/interlock.rb
65
+ - LICENSE
66
+ - Manifest
67
+ - README
68
+ - test/integration/app/app/controllers/application.rb
69
+ - test/integration/app/app/controllers/eval_controller.rb
70
+ - test/integration/app/app/controllers/items_controller.rb
71
+ - test/integration/app/app/helpers/application_helper.rb
72
+ - test/integration/app/app/helpers/eval_helper.rb
73
+ - test/integration/app/app/helpers/items_helper.rb
74
+ - test/integration/app/app/models/item.rb
75
+ - test/integration/app/app/views/items/list.html.erb
76
+ - test/integration/app/app/views/items/recent.html.erb
77
+ - test/integration/app/app/views/items/show.html.erb
78
+ - test/integration/app/app/views/shared/_related.html.erb
79
+ - test/integration/app/config/boot.rb
80
+ - test/integration/app/config/database.yml
81
+ - test/integration/app/config/environment.rb
82
+ - test/integration/app/config/environments/development.rb
83
+ - test/integration/app/config/environments/production.rb
84
+ - test/integration/app/config/environments/test.rb
85
+ - test/integration/app/config/initializers/inflections.rb
86
+ - test/integration/app/config/initializers/mime_types.rb
87
+ - test/integration/app/config/memcached.yml
88
+ - test/integration/app/config/routes.rb
89
+ - test/integration/app/coverage/cache-43041
90
+ - test/integration/app/coverage/index.html
91
+ - test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-action_controller_rb.html
92
+ - test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-action_view_rb.html
93
+ - test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-active_record_rb.html
94
+ - test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-config_rb.html
95
+ - test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-core_extensions_rb.html
96
+ - test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-interlock_rb.html
97
+ - test/integration/app/coverage/vendor-plugins-interlock-lib-interlock-memcached_rb.html
98
+ - test/integration/app/coverage/vendor-plugins-interlock-lib-interlock_rb.html
99
+ - test/integration/app/db/migrate/001_create_items.rb
100
+ - test/integration/app/db/schema.rb
101
+ - test/integration/app/doc/README_FOR_APP
102
+ - test/integration/app/public/404.html
103
+ - test/integration/app/public/422.html
104
+ - test/integration/app/public/500.html
105
+ - test/integration/app/public/dispatch.cgi
106
+ - test/integration/app/public/dispatch.fcgi
107
+ - test/integration/app/public/dispatch.rb
108
+ - test/integration/app/public/favicon.ico
109
+ - test/integration/app/public/images/rails.png
110
+ - test/integration/app/public/index.html
111
+ - test/integration/app/public/javascripts/application.js
112
+ - test/integration/app/public/javascripts/controls.js
113
+ - test/integration/app/public/javascripts/dragdrop.js
114
+ - test/integration/app/public/javascripts/effects.js
115
+ - test/integration/app/public/javascripts/prototype.js
116
+ - test/integration/app/public/robots.txt
117
+ - test/integration/app/Rakefile
118
+ - test/integration/app/README
119
+ - test/integration/app/script/about
120
+ - test/integration/app/script/console
121
+ - test/integration/app/script/destroy
122
+ - test/integration/app/script/generate
123
+ - test/integration/app/script/performance/benchmarker
124
+ - test/integration/app/script/performance/profiler
125
+ - test/integration/app/script/performance/request
126
+ - test/integration/app/script/plugin
127
+ - test/integration/app/script/process/inspector
128
+ - test/integration/app/script/process/reaper
129
+ - test/integration/app/script/process/spawner
130
+ - test/integration/app/script/runner
131
+ - test/integration/app/script/server
132
+ - test/integration/app/test/fixtures/items.yml
133
+ - test/integration/app/test/functional/eval_controller_test.rb
134
+ - test/integration/app/test/functional/items_controller_test.rb
135
+ - test/integration/app/test/test_helper.rb
136
+ - test/integration/app/test/unit/item_test.rb
137
+ - test/integration/server_test.rb
138
+ - test/setup.rb
139
+ - test/teardown.rb
140
+ - test/test_helper.rb
141
+ - test/unit/memcached_test.rb
142
+ - TODO
143
+ - interlock.gemspec
144
+ has_rdoc: true
145
+ homepage: http://blog.evanweaver.com/files/doc/fauna/interlock/
146
+ post_install_message:
147
+ rdoc_options: []
148
+
149
+ require_paths:
150
+ - lib
151
+ required_ruby_version: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: "0"
156
+ version:
157
+ required_rubygems_version: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: "0"
162
+ version:
163
+ requirements: []
164
+
165
+ rubyforge_project: fauna
166
+ rubygems_version: 0.9.5
167
+ signing_key:
168
+ specification_version: 2
169
+ summary: An optimal-efficiency caching plugin for Rails.
170
+ test_files:
171
+ - test/integration/server_test.rb
172
+ - test/unit/memcached_test.rb
metadata.gz.sig ADDED
@@ -0,0 +1 @@
1
+ �����](��85�Ŧyvt�EF�kh��D� *"���##�z3�E��>�N��Y�}��R����ijͅ�@�J5I��i�[ �9D2۴4�,�U�8Va�4�3V�%@�D9U�s��͵�g!������>�,��wgX� �$y߿"hm��qq�|��>�g��3i���� �Ԇ�7����Ū�P�w͞7Q�ƥ�Jq����b�xBM� f����Q8*8�A��(�[��R�>�ikC�;�}ۯ��V