yarn 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (74) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +0 -3
  3. data/README.md +25 -1
  4. data/bin/yarn +6 -4
  5. data/features/concurrency.feature +4 -4
  6. data/features/dynamic_request.feature +6 -1
  7. data/features/rack.feature +5 -8
  8. data/features/static_request.feature +2 -2
  9. data/features/step_definitions/rack_steps.rb +13 -0
  10. data/features/step_definitions/server_steps.rb +5 -5
  11. data/features/step_definitions/web_steps.rb +8 -0
  12. data/lib/rack/handler/yarn.rb +4 -3
  13. data/lib/yarn/error_page.rb +2 -1
  14. data/lib/yarn/logging.rb +1 -1
  15. data/lib/yarn/parslet_parser.rb +9 -24
  16. data/lib/yarn/rack_handler.rb +11 -9
  17. data/lib/yarn/request_handler.rb +21 -12
  18. data/lib/yarn/server.rb +39 -30
  19. data/lib/yarn/version.rb +1 -1
  20. data/spec/helpers.rb +16 -8
  21. data/spec/rack/handler/yarn_spec.rb +21 -0
  22. data/spec/spec_helper.rb +1 -4
  23. data/spec/yarn/directory_lister_spec.rb +0 -5
  24. data/spec/yarn/logging_spec.rb +3 -2
  25. data/spec/yarn/parslet_parser_spec.rb +26 -0
  26. data/spec/yarn/rack_handler_spec.rb +15 -4
  27. data/spec/yarn/request_handler_spec.rb +17 -7
  28. data/spec/yarn/server_spec.rb +49 -8
  29. data/test_objects/.gitignore +1 -0
  30. data/test_objects/app.rb +0 -2
  31. data/test_objects/config.ru +1 -49
  32. data/test_objects/rails_test/.gitignore +5 -0
  33. data/test_objects/rails_test/Gemfile +34 -0
  34. data/test_objects/rails_test/README +261 -0
  35. data/test_objects/rails_test/Rakefile +7 -0
  36. data/test_objects/rails_test/app/assets/images/rails.png +0 -0
  37. data/test_objects/rails_test/app/assets/javascripts/application.js +6 -0
  38. data/test_objects/rails_test/app/assets/stylesheets/application.css +7 -0
  39. data/test_objects/rails_test/app/assets/stylesheets/scaffolds.css.scss +56 -0
  40. data/test_objects/rails_test/app/mailers/.gitkeep +0 -0
  41. data/test_objects/rails_test/app/models/.gitkeep +0 -0
  42. data/test_objects/rails_test/app/views/layouts/application.html.erb +15 -0
  43. data/test_objects/rails_test/app/views/posts/_form.html.erb +25 -0
  44. data/test_objects/rails_test/app/views/posts/edit.html.erb +6 -0
  45. data/test_objects/rails_test/app/views/posts/index.html.erb +20 -0
  46. data/test_objects/rails_test/app/views/posts/new.html.erb +5 -0
  47. data/test_objects/rails_test/app/views/posts/show.html.erb +15 -0
  48. data/test_objects/rails_test/config.ru +4 -0
  49. data/test_objects/rails_test/config/database.yml +25 -0
  50. data/test_objects/rails_test/config/locales/en.yml +5 -0
  51. data/test_objects/rails_test/doc/README_FOR_APP +2 -0
  52. data/test_objects/rails_test/lib/assets/.gitkeep +0 -0
  53. data/test_objects/rails_test/lib/tasks/.gitkeep +0 -0
  54. data/test_objects/rails_test/log/.gitkeep +0 -0
  55. data/test_objects/rails_test/public/404.html +26 -0
  56. data/test_objects/rails_test/public/422.html +26 -0
  57. data/test_objects/rails_test/public/500.html +26 -0
  58. data/test_objects/rails_test/public/favicon.ico +0 -0
  59. data/test_objects/rails_test/public/robots.txt +5 -0
  60. data/test_objects/rails_test/script/rails +6 -0
  61. data/test_objects/rails_test/test/fixtures/.gitkeep +0 -0
  62. data/test_objects/rails_test/test/fixtures/posts.yml +9 -0
  63. data/test_objects/rails_test/test/functional/.gitkeep +0 -0
  64. data/test_objects/rails_test/test/integration/.gitkeep +0 -0
  65. data/test_objects/rails_test/test/unit/.gitkeep +0 -0
  66. data/test_objects/rails_test/vendor/assets/stylesheets/.gitkeep +0 -0
  67. data/test_objects/rails_test/vendor/plugins/.gitkeep +0 -0
  68. data/yarn.gemspec +4 -8
  69. metadata +59 -59
  70. data/lib/yarn/worker.rb +0 -19
  71. data/lib/yarn/worker_pool.rb +0 -36
  72. data/spec/yarn/worker_pool_spec.rb +0 -23
  73. data/spec/yarn/worker_spec.rb +0 -26
  74. data/test_objects/simple_rack.rb +0 -12
@@ -0,0 +1,25 @@
1
+ # SQLite version 3.x
2
+ # gem install sqlite3
3
+ #
4
+ # Ensure the SQLite 3 gem is defined in your Gemfile
5
+ # gem 'sqlite3'
6
+ development:
7
+ adapter: sqlite3
8
+ database: db/development.sqlite3
9
+ pool: 5
10
+ timeout: 5000
11
+
12
+ # Warning: The database defined as "test" will be erased and
13
+ # re-generated from your development database when you run "rake".
14
+ # Do not set this db to the same as development or production.
15
+ test:
16
+ adapter: sqlite3
17
+ database: db/test.sqlite3
18
+ pool: 5
19
+ timeout: 5000
20
+
21
+ production:
22
+ adapter: sqlite3
23
+ database: db/production.sqlite3
24
+ pool: 5
25
+ timeout: 5000
@@ -0,0 +1,5 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See https://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ hello: "Hello world"
@@ -0,0 +1,2 @@
1
+ Use this README file to introduce your application and point to useful places in the API for learning more.
2
+ Run "rake doc:app" to generate API documentation for your models, controllers, helpers, and libraries.
File without changes
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/404.html -->
21
+ <div class="dialog">
22
+ <h1>The page you were looking for doesn't exist.</h1>
23
+ <p>You may have mistyped the address or the page may have moved.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/422.html -->
21
+ <div class="dialog">
22
+ <h1>The change you wanted was rejected.</h1>
23
+ <p>Maybe you tried to change something you didn't have access to.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -0,0 +1,26 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style type="text/css">
6
+ body { background-color: #fff; color: #666; text-align: center; font-family: arial, sans-serif; }
7
+ div.dialog {
8
+ width: 25em;
9
+ padding: 0 4em;
10
+ margin: 4em auto 0 auto;
11
+ border: 1px solid #ccc;
12
+ border-right-color: #999;
13
+ border-bottom-color: #999;
14
+ }
15
+ h1 { font-size: 100%; color: #f00; line-height: 1.5em; }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <!-- This file lives in public/500.html -->
21
+ <div class="dialog">
22
+ <h1>We're sorry, but something went wrong.</h1>
23
+ <p>We've been notified about this issue and we'll take a look at it shortly.</p>
24
+ </div>
25
+ </body>
26
+ </html>
@@ -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,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,9 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/Fixtures.html
2
+
3
+ one:
4
+ title: MyString
5
+ body: MyText
6
+
7
+ two:
8
+ title: MyString
9
+ body: MyText
@@ -8,27 +8,23 @@ Gem::Specification.new do |s|
8
8
  s.authors = ["Jesper Kjeldgaard"]
9
9
  s.email = ["jkjeldgaard@gmail.com"]
10
10
  s.homepage = "https://github.com/thejspr/yarn"
11
- s.summary = %q{Multi-threaded webserver}
11
+ s.summary = %q{Multi-threaded webserver for static and dynamic (*.rb) files as well as rack applications.}
12
12
  s.description = %q{A multi-threaded web-server written in Ruby 1.9.}
13
13
 
14
14
  s.rubyforge_project = "yarn"
15
15
 
16
16
  s.files = `git ls-files`.split("\n")
17
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features,test_objects}/*`.split("\n")
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
21
  s.add_dependency('parslet', '>= 1.2')
22
- s.add_dependency('trollop', '>= 1.16.2')
23
- s.add_dependency('rack', '>= 1.3.2')
24
- # s.add_dependency('celluloid', '>= 0.2.1')
22
+ s.add_dependency('trollop', '>= 1.16')
23
+ s.add_dependency('rack', '>= 1.3')
25
24
 
26
25
  s.add_development_dependency 'cucumber'
27
26
  s.add_development_dependency 'faraday'
28
27
  s.add_development_dependency 'nokogiri'
29
- s.add_development_dependency 'capybara'
30
- s.add_development_dependency 'capybara-webkit'
31
28
  s.add_development_dependency 'rspec'
32
- s.add_development_dependency 'fakefs'
33
29
  s.add_development_dependency 'simplecov'
34
30
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yarn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-20 00:00:00.000000000 Z
12
+ date: 2011-10-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: parslet
16
- requirement: &14073120 !ruby/object:Gem::Requirement
16
+ requirement: &19662180 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,32 +21,32 @@ dependencies:
21
21
  version: '1.2'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *14073120
24
+ version_requirements: *19662180
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: trollop
27
- requirement: &14062140 !ruby/object:Gem::Requirement
27
+ requirement: &20080020 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
31
31
  - !ruby/object:Gem::Version
32
- version: 1.16.2
32
+ version: '1.16'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *14062140
35
+ version_requirements: *20080020
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rack
38
- requirement: &14061680 !ruby/object:Gem::Requirement
38
+ requirement: &20077620 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
42
42
  - !ruby/object:Gem::Version
43
- version: 1.3.2
43
+ version: '1.3'
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *14061680
46
+ version_requirements: *20077620
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: cucumber
49
- requirement: &14061300 !ruby/object:Gem::Requirement
49
+ requirement: &20075460 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *14061300
57
+ version_requirements: *20075460
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: faraday
60
- requirement: &14060840 !ruby/object:Gem::Requirement
60
+ requirement: &20069600 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *14060840
68
+ version_requirements: *20069600
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: nokogiri
71
- requirement: &14060420 !ruby/object:Gem::Requirement
71
+ requirement: &20066540 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,43 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *14060420
80
- - !ruby/object:Gem::Dependency
81
- name: capybara
82
- requirement: &14060000 !ruby/object:Gem::Requirement
83
- none: false
84
- requirements:
85
- - - ! '>='
86
- - !ruby/object:Gem::Version
87
- version: '0'
88
- type: :development
89
- prerelease: false
90
- version_requirements: *14060000
91
- - !ruby/object:Gem::Dependency
92
- name: capybara-webkit
93
- requirement: &14059520 !ruby/object:Gem::Requirement
94
- none: false
95
- requirements:
96
- - - ! '>='
97
- - !ruby/object:Gem::Version
98
- version: '0'
99
- type: :development
100
- prerelease: false
101
- version_requirements: *14059520
79
+ version_requirements: *20066540
102
80
  - !ruby/object:Gem::Dependency
103
81
  name: rspec
104
- requirement: &14059080 !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- type: :development
111
- prerelease: false
112
- version_requirements: *14059080
113
- - !ruby/object:Gem::Dependency
114
- name: fakefs
115
- requirement: &14058540 !ruby/object:Gem::Requirement
82
+ requirement: &20064440 !ruby/object:Gem::Requirement
116
83
  none: false
117
84
  requirements:
118
85
  - - ! '>='
@@ -120,10 +87,10 @@ dependencies:
120
87
  version: '0'
121
88
  type: :development
122
89
  prerelease: false
123
- version_requirements: *14058540
90
+ version_requirements: *20064440
124
91
  - !ruby/object:Gem::Dependency
125
92
  name: simplecov
126
- requirement: &14058000 !ruby/object:Gem::Requirement
93
+ requirement: &20057640 !ruby/object:Gem::Requirement
127
94
  none: false
128
95
  requirements:
129
96
  - - ! '>='
@@ -131,7 +98,7 @@ dependencies:
131
98
  version: '0'
132
99
  type: :development
133
100
  prerelease: false
134
- version_requirements: *14058000
101
+ version_requirements: *20057640
135
102
  description: A multi-threaded web-server written in Ruby 1.9.
136
103
  email:
137
104
  - jkjeldgaard@gmail.com
@@ -175,9 +142,8 @@ files:
175
142
  - lib/yarn/server.rb
176
143
  - lib/yarn/statuses.rb
177
144
  - lib/yarn/version.rb
178
- - lib/yarn/worker.rb
179
- - lib/yarn/worker_pool.rb
180
145
  - spec/helpers.rb
146
+ - spec/rack/handler/yarn_spec.rb
181
147
  - spec/spec_helper.rb
182
148
  - spec/yarn/directory_lister_spec.rb
183
149
  - spec/yarn/error_page_spec.rb
@@ -187,8 +153,6 @@ files:
187
153
  - spec/yarn/request_handler_spec.rb
188
154
  - spec/yarn/response_spec.rb
189
155
  - spec/yarn/server_spec.rb
190
- - spec/yarn/worker_pool_spec.rb
191
- - spec/yarn/worker_spec.rb
192
156
  - test_objects/.gitignore
193
157
  - test_objects/1.rb
194
158
  - test_objects/3.rb
@@ -198,7 +162,42 @@ files:
198
162
  - test_objects/config.ru
199
163
  - test_objects/index.html
200
164
  - test_objects/jquery.js
201
- - test_objects/simple_rack.rb
165
+ - test_objects/rails_test/.gitignore
166
+ - test_objects/rails_test/Gemfile
167
+ - test_objects/rails_test/README
168
+ - test_objects/rails_test/Rakefile
169
+ - test_objects/rails_test/app/assets/images/rails.png
170
+ - test_objects/rails_test/app/assets/javascripts/application.js
171
+ - test_objects/rails_test/app/assets/stylesheets/application.css
172
+ - test_objects/rails_test/app/assets/stylesheets/scaffolds.css.scss
173
+ - test_objects/rails_test/app/mailers/.gitkeep
174
+ - test_objects/rails_test/app/models/.gitkeep
175
+ - test_objects/rails_test/app/views/layouts/application.html.erb
176
+ - test_objects/rails_test/app/views/posts/_form.html.erb
177
+ - test_objects/rails_test/app/views/posts/edit.html.erb
178
+ - test_objects/rails_test/app/views/posts/index.html.erb
179
+ - test_objects/rails_test/app/views/posts/new.html.erb
180
+ - test_objects/rails_test/app/views/posts/show.html.erb
181
+ - test_objects/rails_test/config.ru
182
+ - test_objects/rails_test/config/database.yml
183
+ - test_objects/rails_test/config/locales/en.yml
184
+ - test_objects/rails_test/doc/README_FOR_APP
185
+ - test_objects/rails_test/lib/assets/.gitkeep
186
+ - test_objects/rails_test/lib/tasks/.gitkeep
187
+ - test_objects/rails_test/log/.gitkeep
188
+ - test_objects/rails_test/public/404.html
189
+ - test_objects/rails_test/public/422.html
190
+ - test_objects/rails_test/public/500.html
191
+ - test_objects/rails_test/public/favicon.ico
192
+ - test_objects/rails_test/public/robots.txt
193
+ - test_objects/rails_test/script/rails
194
+ - test_objects/rails_test/test/fixtures/.gitkeep
195
+ - test_objects/rails_test/test/fixtures/posts.yml
196
+ - test_objects/rails_test/test/functional/.gitkeep
197
+ - test_objects/rails_test/test/integration/.gitkeep
198
+ - test_objects/rails_test/test/unit/.gitkeep
199
+ - test_objects/rails_test/vendor/assets/stylesheets/.gitkeep
200
+ - test_objects/rails_test/vendor/plugins/.gitkeep
202
201
  - yarn.gemspec
203
202
  homepage: https://github.com/thejspr/yarn
204
203
  licenses: []
@@ -223,5 +222,6 @@ rubyforge_project: yarn
223
222
  rubygems_version: 1.8.10
224
223
  signing_key:
225
224
  specification_version: 3
226
- summary: Multi-threaded webserver
225
+ summary: Multi-threaded webserver for static and dynamic (*.rb) files as well as rack
226
+ applications.
227
227
  test_files: []
@@ -1,19 +0,0 @@
1
- # require 'celluloid'
2
-
3
- module Yarn
4
- class Worker
5
-
6
- # include Celluloid
7
-
8
- attr_reader :handler
9
-
10
- def initialize(handler)
11
- @handler = handler
12
- end
13
-
14
- def process(session)
15
- @handler.run session
16
- end
17
-
18
- end
19
- end
@@ -1,36 +0,0 @@
1
- require 'yarn/worker'
2
- require 'yarn/request_handler'
3
- require 'yarn/logging'
4
-
5
- require 'thread'
6
-
7
- module Yarn
8
- class WorkerPool
9
-
10
- include Logging
11
-
12
- attr_reader :size, :workers
13
-
14
- def initialize(size=1024)
15
- @size = size
16
- @workers = create_pool
17
- @jobs = Queue.new
18
- end
19
-
20
- def create_pool
21
- return Array.new(@size) do
22
- Thread.new do
23
- loop do
24
- job = @jobs.pop
25
- job.call
26
- end
27
- end
28
- end
29
- end
30
-
31
- def schedule(&block)
32
- @jobs << block
33
- end
34
-
35
- end
36
- end