console-cf-plugin 0.2.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. data/Rakefile +38 -0
  2. data/lib/console-cf-plugin/console.rb +188 -0
  3. data/lib/console-cf-plugin/plugin.rb +33 -0
  4. data/lib/console-cf-plugin/version.rb +3 -0
  5. data/spec/assets/rails328_ruby187_app/Gemfile +39 -0
  6. data/spec/assets/rails328_ruby187_app/README.rdoc +261 -0
  7. data/spec/assets/rails328_ruby187_app/Rakefile +7 -0
  8. data/spec/assets/rails328_ruby187_app/app/assets/images/rails.png +0 -0
  9. data/spec/assets/rails328_ruby187_app/app/assets/javascripts/application.js +15 -0
  10. data/spec/assets/rails328_ruby187_app/app/assets/stylesheets/application.css +13 -0
  11. data/spec/assets/rails328_ruby187_app/app/controllers/application_controller.rb +3 -0
  12. data/spec/assets/rails328_ruby187_app/app/helpers/application_helper.rb +2 -0
  13. data/spec/assets/rails328_ruby187_app/app/views/layouts/application.html.erb +14 -0
  14. data/spec/assets/rails328_ruby187_app/config.ru +4 -0
  15. data/spec/assets/rails328_ruby187_app/config/application.rb +62 -0
  16. data/spec/assets/rails328_ruby187_app/config/boot.rb +6 -0
  17. data/spec/assets/rails328_ruby187_app/config/database.yml +25 -0
  18. data/spec/assets/rails328_ruby187_app/config/environment.rb +5 -0
  19. data/spec/assets/rails328_ruby187_app/config/environments/development.rb +37 -0
  20. data/spec/assets/rails328_ruby187_app/config/environments/production.rb +67 -0
  21. data/spec/assets/rails328_ruby187_app/config/environments/test.rb +37 -0
  22. data/spec/assets/rails328_ruby187_app/config/initializers/backtrace_silencers.rb +7 -0
  23. data/spec/assets/rails328_ruby187_app/config/initializers/inflections.rb +15 -0
  24. data/spec/assets/rails328_ruby187_app/config/initializers/mime_types.rb +5 -0
  25. data/spec/assets/rails328_ruby187_app/config/initializers/secret_token.rb +7 -0
  26. data/spec/assets/rails328_ruby187_app/config/initializers/session_store.rb +8 -0
  27. data/spec/assets/rails328_ruby187_app/config/initializers/wrap_parameters.rb +14 -0
  28. data/spec/assets/rails328_ruby187_app/config/locales/en.yml +5 -0
  29. data/spec/assets/rails328_ruby187_app/config/routes.rb +58 -0
  30. data/spec/assets/rails328_ruby187_app/db/seeds.rb +7 -0
  31. data/spec/assets/rails328_ruby187_app/doc/README_FOR_APP +2 -0
  32. data/spec/assets/rails328_ruby187_app/manifest.yml +9 -0
  33. data/spec/assets/rails328_ruby187_app/public/404.html +26 -0
  34. data/spec/assets/rails328_ruby187_app/public/422.html +26 -0
  35. data/spec/assets/rails328_ruby187_app/public/500.html +25 -0
  36. data/spec/assets/rails328_ruby187_app/public/assets/application-7270767b2a9e9fff880aa5de378ca791.css +0 -0
  37. data/spec/assets/rails328_ruby187_app/public/assets/application-7270767b2a9e9fff880aa5de378ca791.css.gz +0 -0
  38. data/spec/assets/rails328_ruby187_app/public/assets/application-ccab98dc1abdf097c0af693e20aed861.js +17 -0
  39. data/spec/assets/rails328_ruby187_app/public/assets/application-ccab98dc1abdf097c0af693e20aed861.js.gz +0 -0
  40. data/spec/assets/rails328_ruby187_app/public/assets/application.css +0 -0
  41. data/spec/assets/rails328_ruby187_app/public/assets/application.css.gz +0 -0
  42. data/spec/assets/rails328_ruby187_app/public/assets/application.js +17 -0
  43. data/spec/assets/rails328_ruby187_app/public/assets/application.js.gz +0 -0
  44. data/spec/assets/rails328_ruby187_app/public/assets/manifest.yml +4 -0
  45. data/spec/assets/rails328_ruby187_app/public/assets/rails-be8732dac73d845ac5b142c8fb5f9fb0.png +0 -0
  46. data/spec/assets/rails328_ruby187_app/public/assets/rails.png +0 -0
  47. data/spec/assets/rails328_ruby187_app/public/favicon.ico +0 -0
  48. data/spec/assets/rails328_ruby187_app/public/index.html +241 -0
  49. data/spec/assets/rails328_ruby187_app/public/robots.txt +5 -0
  50. data/spec/assets/rails328_ruby187_app/script/rails +6 -0
  51. data/spec/assets/rails328_ruby187_app/test/performance/browsing_test.rb +12 -0
  52. data/spec/assets/rails328_ruby187_app/test/test_helper.rb +13 -0
  53. data/spec/console_spec.rb +190 -0
  54. data/spec/spec_helper.rb +11 -0
  55. metadata +247 -0
@@ -0,0 +1,190 @@
1
+ require "spec_helper"
2
+ require "console-cf-plugin/plugin"
3
+
4
+ describe "CFConsole" do
5
+ before do
6
+ @app = mock("app")
7
+ @console = CFConsole.new(nil, @app)
8
+ end
9
+
10
+ it "should return connection info for apps that have a console ip and port" do
11
+ instance = mock("instance")
12
+ mock(@app).instances { [instance] }
13
+ mock(instance).console { {:ip => "192.168.1.1", :port => 3344} }
14
+
15
+ @console.get_connection_info(nil).should == {
16
+ "hostname" => "192.168.1.1",
17
+ "port" => 3344
18
+ }
19
+ end
20
+
21
+ it "should raise error when no app instances found" do
22
+ mock(@app).instances { [] }
23
+
24
+ expect {
25
+ @console.get_connection_info(nil)
26
+ }.to raise_error("App has no running instances; try starting it.")
27
+ end
28
+
29
+ it "should raise error when app does not have console access" do
30
+ instance = mock("instance")
31
+ mock(@app).instances { [instance] }
32
+ mock(instance).console { nil }
33
+
34
+ expect {
35
+ @console.get_connection_info(nil)
36
+ }.to raise_error("App does not have console access; try restarting it.")
37
+ end
38
+
39
+ describe "start_console" do
40
+ before do
41
+ @creds = {
42
+ :path => %w(app cf-rails-console .consoleaccess),
43
+ :yaml => "username: cfuser\npassword: testpw",
44
+ :telnet => {"Name" => "cfuser", "Password" => "testpw"}
45
+ }
46
+ end
47
+
48
+ context "when console credentials cannot be obtained" do
49
+ it "should raise error" do
50
+ mock(@app).file(*@creds[:path]) { "username: cfuser" }
51
+
52
+ expect {
53
+ @console.start_console
54
+ }.to raise_error("Unable to verify console credentials.")
55
+ end
56
+ end
57
+
58
+ context "when console credentials can be obtained" do
59
+ before do
60
+ mock(@app).file(*@creds[:path]) { @creds[:yaml] }
61
+ @telnet = Object.new
62
+ mock(@console).telnet_client { @telnet }
63
+ end
64
+
65
+ it "should raise error if authentication fails" do
66
+ mock(@telnet).login(@creds[:telnet]) { "Login failed" }
67
+ mock(@telnet).close
68
+
69
+ expect { @console.start_console }.to raise_error("Login failed")
70
+ end
71
+
72
+ it "should retry authentication on timeout" do
73
+ mock(@telnet).login(@creds[:telnet]){ raise TimeoutError }
74
+ mock(@telnet).login(@creds[:telnet]) { "Switch to inspect mode\nirb():001:0> " }
75
+ verify_console_exit("irb():001:0> ")
76
+
77
+ @console.start_console
78
+ end
79
+
80
+ it "should retry authentication on EOF" do
81
+ mock(@console).telnet_client { @telnet }
82
+ mock(@telnet).login(@creds[:telnet]) { raise EOFError }
83
+ mock(@telnet).close
84
+ mock(@telnet).login(@creds[:telnet]) { "irb():001:0> " }
85
+ verify_console_exit("irb():001:0> ")
86
+
87
+ @console.start_console
88
+ end
89
+
90
+ it "should operate console interactively" do
91
+ mock(@telnet).login(@creds[:telnet]) { "irb():001:0> " }
92
+ mock(Readline).readline("irb():001:0> ") { "puts 'hi'" }
93
+ mock(Readline::HISTORY).push("puts 'hi'")
94
+ mock(@telnet).cmd("puts 'hi'") { "nil" + "\n" + "irb():002:0> " }
95
+ mock(@console).puts("nil")
96
+ verify_console_exit("irb():002:0> ")
97
+
98
+ @console.start_console
99
+ end
100
+
101
+ it "should not crash if command times out" do
102
+ mock(@telnet).login(@creds[:telnet]) { "irb():001:0> " }
103
+ mock(Readline).readline("irb():001:0> ") { "puts 'hi'" }
104
+ mock(Readline::HISTORY).push("puts 'hi'")
105
+ mock(@telnet).cmd("puts 'hi'") { raise TimeoutError }
106
+ mock(@console).puts("Timed out sending command to server.")
107
+ verify_console_exit("irb():001:0> ")
108
+
109
+ @console.start_console
110
+ end
111
+
112
+ it "should raise error if an EOF is received" do
113
+ mock(@telnet).login(@creds[:telnet]) { "Switch to inspect mode\nirb():001:0> " }
114
+ mock(Readline).readline("irb():001:0> ") { "puts 'hi'" }
115
+ mock(Readline::HISTORY).push("puts 'hi'")
116
+ mock(@telnet).cmd("puts 'hi'") { raise EOFError }
117
+
118
+ expect {
119
+ @console.start_console
120
+ }.to raise_error("The console connection has been terminated. Perhaps the app was stopped or deleted?")
121
+ end
122
+
123
+ it "should not keep blank lines in history" do
124
+ mock(@telnet).login(@creds[:telnet]) { "irb():001:0> " }
125
+ mock(Readline).readline("irb():001:0> ") { "" }
126
+ dont_allow(Readline::HISTORY).push("")
127
+ mock(@telnet).cmd("") { "irb():002:0*> " }
128
+ verify_console_exit("irb():002:0*> ")
129
+
130
+ @console.start_console
131
+ end
132
+
133
+ it "should not keep identical commands in history" do
134
+ mock(@telnet).login(@creds[:telnet]) { "irb():001:0> " }
135
+ mock(Readline).readline("irb():001:0> ") { "puts 'hi'" }
136
+ mock(Readline::HISTORY).to_a { ["puts 'hi'"] }
137
+ dont_allow(Readline::HISTORY).push("puts 'hi'")
138
+ mock(@telnet).cmd("puts 'hi'") { "nil" + "\n" + "irb():002:0> " }
139
+ mock(@console).puts("nil")
140
+ verify_console_exit("irb():002:0> ")
141
+
142
+ @console.start_console
143
+ end
144
+
145
+ it "should return tab completion data" do
146
+ mock(@telnet).login(@creds[:telnet]) { "Switch to inspect mode\nirb():001:0> " }
147
+ mock(@telnet).cmd("String" => "app.\t", "Match" => /\S*\n$/, "Timeout" => 10) { "to_s,nil?\n" }
148
+ verify_console_exit("irb():001:0> ")
149
+
150
+ @console.start_console
151
+ Readline.completion_proc.call("app.").should == ["to_s","nil?"]
152
+ end
153
+
154
+ it "should return tab completion data receiving empty completion string" do
155
+ mock(@telnet).login(@creds[:telnet]) { "irb():001:0> " }
156
+ mock(@telnet).cmd("String" => "app.\t", "Match" => /\S*\n$/, "Timeout" => 10) { "\n" }
157
+ verify_console_exit("irb():001:0> ")
158
+
159
+ @console.start_console
160
+ Readline.completion_proc.call("app.").should == []
161
+ end
162
+
163
+ it "should not crash on timeout of remote tab completion data" do
164
+ mock(@telnet).login(@creds[:telnet]) { "Switch to inspect mode\nirb():001:0> " }
165
+ mock(@telnet).cmd("String" => "app.\t", "Match" => /\S*\n$/, "Timeout" => 10) { raise TimeoutError }
166
+ verify_console_exit("irb():001:0> ")
167
+
168
+ @console.start_console
169
+ Readline.completion_proc.call("app.").should == []
170
+ end
171
+
172
+ it "should properly initialize Readline for tab completion" do
173
+ mock(@telnet).login(@creds[:telnet]) { "irb():001:0> " }
174
+ mock(Readline).respond_to?("basic_word_break_characters=") { true }
175
+ mock(Readline).basic_word_break_characters=(" \t\n`><=;|&{(")
176
+ mock(Readline).completion_append_character=(nil)
177
+ mock(Readline).completion_proc=(anything)
178
+ verify_console_exit("irb():001:0> ")
179
+
180
+ @console.start_console
181
+ end
182
+ end
183
+ end
184
+
185
+ def verify_console_exit(prompt)
186
+ mock(Readline).readline(prompt) { "exit" }
187
+ mock(@telnet).cmd("String" => "exit", "Timeout" => 1) { raise TimeoutError }
188
+ mock(@telnet).close
189
+ end
190
+ end
@@ -0,0 +1,11 @@
1
+ SPEC_ROOT = File.dirname(__FILE__).freeze
2
+
3
+ require "rspec"
4
+ require "cf"
5
+ require "cfoundry"
6
+ require "cfoundry/test_support"
7
+
8
+ RSpec.configure do |c|
9
+ c.include Fake::FakeMethods
10
+ c.mock_with :rr
11
+ end
metadata ADDED
@@ -0,0 +1,247 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: console-cf-plugin
3
+ version: !ruby/object:Gem::Version
4
+ hash: 2807675789
5
+ prerelease: 6
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ - rc
11
+ - 1
12
+ version: 0.2.0.rc1
13
+ platform: ruby
14
+ authors:
15
+ - Alex Suraci
16
+ autorequire:
17
+ bindir: bin
18
+ cert_chain: []
19
+
20
+ date: 2013-03-18 00:00:00 Z
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: tunnel-cf-plugin
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ hash: 23
31
+ segments:
32
+ - 0
33
+ - 2
34
+ - 0
35
+ version: 0.2.0
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: rake
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ hash: 25
47
+ segments:
48
+ - 0
49
+ - 9
50
+ version: "0.9"
51
+ type: :development
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: rspec
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ hash: 21
62
+ segments:
63
+ - 2
64
+ - 11
65
+ version: "2.11"
66
+ type: :development
67
+ version_requirements: *id003
68
+ - !ruby/object:Gem::Dependency
69
+ name: webmock
70
+ prerelease: false
71
+ requirement: &id004 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ~>
75
+ - !ruby/object:Gem::Version
76
+ hash: 29
77
+ segments:
78
+ - 1
79
+ - 9
80
+ version: "1.9"
81
+ type: :development
82
+ version_requirements: *id004
83
+ - !ruby/object:Gem::Dependency
84
+ name: rr
85
+ prerelease: false
86
+ requirement: &id005 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ hash: 15
92
+ segments:
93
+ - 1
94
+ - 0
95
+ version: "1.0"
96
+ type: :development
97
+ version_requirements: *id005
98
+ description:
99
+ email:
100
+ - asuraci@vmware.com
101
+ executables: []
102
+
103
+ extensions: []
104
+
105
+ extra_rdoc_files: []
106
+
107
+ files:
108
+ - Rakefile
109
+ - lib/console-cf-plugin/console.rb
110
+ - lib/console-cf-plugin/plugin.rb
111
+ - lib/console-cf-plugin/version.rb
112
+ - spec/assets/rails328_ruby187_app/app/assets/images/rails.png
113
+ - spec/assets/rails328_ruby187_app/app/assets/javascripts/application.js
114
+ - spec/assets/rails328_ruby187_app/app/assets/stylesheets/application.css
115
+ - spec/assets/rails328_ruby187_app/app/controllers/application_controller.rb
116
+ - spec/assets/rails328_ruby187_app/app/helpers/application_helper.rb
117
+ - spec/assets/rails328_ruby187_app/app/views/layouts/application.html.erb
118
+ - spec/assets/rails328_ruby187_app/config/application.rb
119
+ - spec/assets/rails328_ruby187_app/config/boot.rb
120
+ - spec/assets/rails328_ruby187_app/config/database.yml
121
+ - spec/assets/rails328_ruby187_app/config/environment.rb
122
+ - spec/assets/rails328_ruby187_app/config/environments/development.rb
123
+ - spec/assets/rails328_ruby187_app/config/environments/production.rb
124
+ - spec/assets/rails328_ruby187_app/config/environments/test.rb
125
+ - spec/assets/rails328_ruby187_app/config/initializers/backtrace_silencers.rb
126
+ - spec/assets/rails328_ruby187_app/config/initializers/inflections.rb
127
+ - spec/assets/rails328_ruby187_app/config/initializers/mime_types.rb
128
+ - spec/assets/rails328_ruby187_app/config/initializers/secret_token.rb
129
+ - spec/assets/rails328_ruby187_app/config/initializers/session_store.rb
130
+ - spec/assets/rails328_ruby187_app/config/initializers/wrap_parameters.rb
131
+ - spec/assets/rails328_ruby187_app/config/locales/en.yml
132
+ - spec/assets/rails328_ruby187_app/config/routes.rb
133
+ - spec/assets/rails328_ruby187_app/config.ru
134
+ - spec/assets/rails328_ruby187_app/db/seeds.rb
135
+ - spec/assets/rails328_ruby187_app/doc/README_FOR_APP
136
+ - spec/assets/rails328_ruby187_app/Gemfile
137
+ - spec/assets/rails328_ruby187_app/manifest.yml
138
+ - spec/assets/rails328_ruby187_app/public/404.html
139
+ - spec/assets/rails328_ruby187_app/public/422.html
140
+ - spec/assets/rails328_ruby187_app/public/500.html
141
+ - spec/assets/rails328_ruby187_app/public/assets/application-7270767b2a9e9fff880aa5de378ca791.css
142
+ - spec/assets/rails328_ruby187_app/public/assets/application-7270767b2a9e9fff880aa5de378ca791.css.gz
143
+ - spec/assets/rails328_ruby187_app/public/assets/application-ccab98dc1abdf097c0af693e20aed861.js
144
+ - spec/assets/rails328_ruby187_app/public/assets/application-ccab98dc1abdf097c0af693e20aed861.js.gz
145
+ - spec/assets/rails328_ruby187_app/public/assets/application.css
146
+ - spec/assets/rails328_ruby187_app/public/assets/application.css.gz
147
+ - spec/assets/rails328_ruby187_app/public/assets/application.js
148
+ - spec/assets/rails328_ruby187_app/public/assets/application.js.gz
149
+ - spec/assets/rails328_ruby187_app/public/assets/manifest.yml
150
+ - spec/assets/rails328_ruby187_app/public/assets/rails-be8732dac73d845ac5b142c8fb5f9fb0.png
151
+ - spec/assets/rails328_ruby187_app/public/assets/rails.png
152
+ - spec/assets/rails328_ruby187_app/public/favicon.ico
153
+ - spec/assets/rails328_ruby187_app/public/index.html
154
+ - spec/assets/rails328_ruby187_app/public/robots.txt
155
+ - spec/assets/rails328_ruby187_app/Rakefile
156
+ - spec/assets/rails328_ruby187_app/README.rdoc
157
+ - spec/assets/rails328_ruby187_app/script/rails
158
+ - spec/assets/rails328_ruby187_app/test/performance/browsing_test.rb
159
+ - spec/assets/rails328_ruby187_app/test/test_helper.rb
160
+ - spec/console_spec.rb
161
+ - spec/spec_helper.rb
162
+ homepage: http://cloudfoundry.com/
163
+ licenses: []
164
+
165
+ post_install_message:
166
+ rdoc_options: []
167
+
168
+ require_paths:
169
+ - lib
170
+ required_ruby_version: !ruby/object:Gem::Requirement
171
+ none: false
172
+ requirements:
173
+ - - ">="
174
+ - !ruby/object:Gem::Version
175
+ hash: 3
176
+ segments:
177
+ - 0
178
+ version: "0"
179
+ required_rubygems_version: !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ">"
183
+ - !ruby/object:Gem::Version
184
+ hash: 25
185
+ segments:
186
+ - 1
187
+ - 3
188
+ - 1
189
+ version: 1.3.1
190
+ requirements: []
191
+
192
+ rubyforge_project: console-cf-plugin
193
+ rubygems_version: 1.8.24
194
+ signing_key:
195
+ specification_version: 3
196
+ summary: Port of rails-console to cf-ng.
197
+ test_files:
198
+ - spec/assets/rails328_ruby187_app/app/assets/images/rails.png
199
+ - spec/assets/rails328_ruby187_app/app/assets/javascripts/application.js
200
+ - spec/assets/rails328_ruby187_app/app/assets/stylesheets/application.css
201
+ - spec/assets/rails328_ruby187_app/app/controllers/application_controller.rb
202
+ - spec/assets/rails328_ruby187_app/app/helpers/application_helper.rb
203
+ - spec/assets/rails328_ruby187_app/app/views/layouts/application.html.erb
204
+ - spec/assets/rails328_ruby187_app/config/application.rb
205
+ - spec/assets/rails328_ruby187_app/config/boot.rb
206
+ - spec/assets/rails328_ruby187_app/config/database.yml
207
+ - spec/assets/rails328_ruby187_app/config/environment.rb
208
+ - spec/assets/rails328_ruby187_app/config/environments/development.rb
209
+ - spec/assets/rails328_ruby187_app/config/environments/production.rb
210
+ - spec/assets/rails328_ruby187_app/config/environments/test.rb
211
+ - spec/assets/rails328_ruby187_app/config/initializers/backtrace_silencers.rb
212
+ - spec/assets/rails328_ruby187_app/config/initializers/inflections.rb
213
+ - spec/assets/rails328_ruby187_app/config/initializers/mime_types.rb
214
+ - spec/assets/rails328_ruby187_app/config/initializers/secret_token.rb
215
+ - spec/assets/rails328_ruby187_app/config/initializers/session_store.rb
216
+ - spec/assets/rails328_ruby187_app/config/initializers/wrap_parameters.rb
217
+ - spec/assets/rails328_ruby187_app/config/locales/en.yml
218
+ - spec/assets/rails328_ruby187_app/config/routes.rb
219
+ - spec/assets/rails328_ruby187_app/config.ru
220
+ - spec/assets/rails328_ruby187_app/db/seeds.rb
221
+ - spec/assets/rails328_ruby187_app/doc/README_FOR_APP
222
+ - spec/assets/rails328_ruby187_app/Gemfile
223
+ - spec/assets/rails328_ruby187_app/manifest.yml
224
+ - spec/assets/rails328_ruby187_app/public/404.html
225
+ - spec/assets/rails328_ruby187_app/public/422.html
226
+ - spec/assets/rails328_ruby187_app/public/500.html
227
+ - spec/assets/rails328_ruby187_app/public/assets/application-7270767b2a9e9fff880aa5de378ca791.css
228
+ - spec/assets/rails328_ruby187_app/public/assets/application-7270767b2a9e9fff880aa5de378ca791.css.gz
229
+ - spec/assets/rails328_ruby187_app/public/assets/application-ccab98dc1abdf097c0af693e20aed861.js
230
+ - spec/assets/rails328_ruby187_app/public/assets/application-ccab98dc1abdf097c0af693e20aed861.js.gz
231
+ - spec/assets/rails328_ruby187_app/public/assets/application.css
232
+ - spec/assets/rails328_ruby187_app/public/assets/application.css.gz
233
+ - spec/assets/rails328_ruby187_app/public/assets/application.js
234
+ - spec/assets/rails328_ruby187_app/public/assets/application.js.gz
235
+ - spec/assets/rails328_ruby187_app/public/assets/manifest.yml
236
+ - spec/assets/rails328_ruby187_app/public/assets/rails-be8732dac73d845ac5b142c8fb5f9fb0.png
237
+ - spec/assets/rails328_ruby187_app/public/assets/rails.png
238
+ - spec/assets/rails328_ruby187_app/public/favicon.ico
239
+ - spec/assets/rails328_ruby187_app/public/index.html
240
+ - spec/assets/rails328_ruby187_app/public/robots.txt
241
+ - spec/assets/rails328_ruby187_app/Rakefile
242
+ - spec/assets/rails328_ruby187_app/README.rdoc
243
+ - spec/assets/rails328_ruby187_app/script/rails
244
+ - spec/assets/rails328_ruby187_app/test/performance/browsing_test.rb
245
+ - spec/assets/rails328_ruby187_app/test/test_helper.rb
246
+ - spec/console_spec.rb
247
+ - spec/spec_helper.rb