yarn 0.0.1 → 0.0.2

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