console-cf-plugin 0.2.0.rc1

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 (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