nginx_config_parser 1.0.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.
data/tasks/spec.rake ADDED
@@ -0,0 +1,40 @@
1
+ # $Id$
2
+
3
+ if HAVE_SPEC_RAKE_SPECTASK
4
+
5
+ namespace :spec do
6
+
7
+ desc 'Run all specs with basic output'
8
+ Spec::Rake::SpecTask.new(:run) do |t|
9
+ t.spec_opts = PROJ.spec_opts
10
+ t.spec_files = PROJ.specs
11
+ end
12
+
13
+ desc 'Run all specs with text output'
14
+ Spec::Rake::SpecTask.new(:specdoc) do |t|
15
+ t.spec_opts = PROJ.spec_opts + ['--format', 'specdoc']
16
+ t.spec_files = PROJ.specs
17
+ end
18
+
19
+ if HAVE_RCOV
20
+ desc 'Run all specs with RCov'
21
+ Spec::Rake::SpecTask.new(:rcov) do |t|
22
+ t.spec_opts = PROJ.spec_opts
23
+ t.spec_files = PROJ.specs
24
+ t.rcov = true
25
+ t.rcov_opts = PROJ.rcov_opts + ['--exclude', 'spec']
26
+ end
27
+ end
28
+
29
+ end # namespace :spec
30
+
31
+ desc 'Alias to spec:run'
32
+ task :spec => 'spec:run'
33
+
34
+ task :clobber => 'spec:clobber_rcov' if HAVE_RCOV
35
+
36
+ remove_desc_for_task %w(spec:clobber_rcov)
37
+
38
+ end # if HAVE_SPEC_RAKE_SPECTASK
39
+
40
+ # EOF
data/tasks/test.rake ADDED
@@ -0,0 +1,40 @@
1
+ # $Id$
2
+
3
+ require 'rake/testtask'
4
+
5
+ namespace :test do
6
+
7
+ Rake::TestTask.new(:run) do |t|
8
+ t.libs = PROJ.libs
9
+ t.test_files = if test ?f, PROJ.test_file then [PROJ.test_file]
10
+ else PROJ.tests end
11
+ t.ruby_opts += PROJ.ruby_opts
12
+ t.ruby_opts += PROJ.test_opts
13
+ end
14
+
15
+ if HAVE_RCOV
16
+ desc 'Run rcov on the unit tests'
17
+ task :rcov => :clobber_rcov do
18
+ opts = PROJ.rcov_opts.join(' ')
19
+ files = if test ?f, PROJ.test_file then [PROJ.test_file]
20
+ else PROJ.tests end
21
+ files = files.join(' ')
22
+ sh "#{RCOV} #{files} #{opts}"
23
+ end
24
+
25
+ desc 'Remove rcov products'
26
+ task :clobber_rcov do
27
+ rm_r 'coverage' rescue nil
28
+ end
29
+ end
30
+
31
+ end # namespace :test
32
+
33
+ desc 'Alias to test:run'
34
+ task :test => 'test:run'
35
+
36
+ task :clobber => 'test:clobber_rcov' if HAVE_RCOV
37
+
38
+ remove_desc_for_task %w(test:clobber_rcov)
39
+
40
+ # EOF
@@ -0,0 +1,209 @@
1
+ # user and group to run as
2
+ user ez ez;
3
+
4
+ # number of nginx workers
5
+ worker_processes 6;
6
+
7
+ # pid of nginx master process
8
+ pid /var/run/nginx.pid;
9
+
10
+ # Number of worker connections. 1024 is a good default
11
+ events {
12
+ worker_connections 1024;
13
+ }
14
+
15
+ # start the http module where we config http access.
16
+ http {
17
+ # pull in mime-types. You can break out your config
18
+ # into as many include's as you want to make it cleaner
19
+ include /etc/nginx/mime.types;
20
+
21
+ # set a default type for the rare situation that
22
+ # nothing matches from the mimie-type include
23
+ default_type application/octet-stream;
24
+
25
+ # configure log format
26
+ log_format main '$remote_addr - $remote_user [$time_local] '
27
+ '"$request" $status $body_bytes_sent "$http_referer" '
28
+ '"$http_user_agent" "$http_x_forwarded_for"';
29
+
30
+ # main access log
31
+ access_log /var/log/nginx_access.log main;
32
+
33
+ # main error log
34
+ error_log /var/log/nginx_error.log debug;
35
+
36
+ # no sendfile on OSX
37
+ sendfile on;
38
+
39
+ # These are good default values.
40
+ tcp_nopush on;
41
+ tcp_nodelay off;
42
+ # output compression saves bandwidth
43
+ gzip on;
44
+ gzip_http_version 1.0;
45
+ gzip_comp_level 2;
46
+ gzip_proxied any;
47
+ gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml
48
+ application/xml+rss text/javascript;
49
+
50
+
51
+ # this is where you define your mongrel clusters.
52
+ # you need one of these blocks for each cluster
53
+ # and each one needs its own name to refer to it later.
54
+ upstream mongrel {
55
+ server 127.0.0.1:5000;
56
+ server 127.0.0.1:5001;
57
+ server 127.0.0.1:5002;
58
+ }
59
+
60
+
61
+ # the server directive is nginx's virtual host directive.
62
+ server {
63
+ # port to listen on. Can also be set to an IP:PORT
64
+ listen 80;
65
+
66
+ # Set the max size for file uploads to 50Mb
67
+ client_max_body_size 50M;
68
+
69
+ # sets the domain[s] that this vhost server requests for
70
+ # server_name www.[engineyard].com [engineyard].com;
71
+
72
+ # doc root
73
+ root /data/ez/current/public;
74
+
75
+ # vhost specific access log
76
+ access_log /var/log/nginx.vhost.access.log main;
77
+
78
+ # this rewrites all the requests to the maintenance.html
79
+ # page if it exists in the doc root. This is for capistrano's
80
+ # disable web task
81
+ if (-f $document_root/system/maintenance.html) {
82
+ rewrite ^(.*)$ /system/maintenance.html last;
83
+ break;
84
+ }
85
+
86
+ location / {
87
+ # needed to forward user's IP address to rails
88
+ proxy_set_header X-Real-IP $remote_addr;
89
+
90
+ # needed for HTTPS
91
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
92
+ proxy_set_header Host $http_host;
93
+ proxy_redirect false;
94
+ proxy_max_temp_file_size 0;
95
+
96
+ # If the file exists as a static file serve it directly without
97
+ # running all the other rewite tests on it
98
+ if (-f $request_filename) {
99
+ break;
100
+ }
101
+
102
+ # check for index.html for directory index
103
+ # if its there on the filesystem then rewite
104
+ # the url to add /index.html to the end of it
105
+ # and then break to send it to the next config rules.
106
+ if (-f $request_filename/index.html) {
107
+ rewrite (.*) $1/index.html break;
108
+ }
109
+
110
+ # this is the meat of the rails page caching config
111
+ # it adds .html to the end of the url and then checks
112
+ # the filesystem for that file. If it exists, then we
113
+ # rewite the url to have explicit .html on the end
114
+ # and then send it on its way to the next config rule.
115
+ # if there is no file on the fs then it sets all the
116
+ # necessary headers and proxies to our upstream mongrels
117
+ if (-f $request_filename.html) {
118
+ rewrite (.*) $1.html break;
119
+ }
120
+
121
+ if (!-f $request_filename) {
122
+ proxy_pass http://mongrel;
123
+ break;
124
+ }
125
+ }
126
+
127
+ error_page 500 502 503 504 /500.html;
128
+ location = /500.html {
129
+ root /data/ez/current/public;
130
+ }
131
+ }
132
+
133
+ # This server is setup for ssl. Uncomment if
134
+ # you are using ssl as well as port 80.
135
+ server {
136
+ # port to listen on. Can also be set to an IP:PORT
137
+ listen 443;
138
+
139
+ # Set the max size for file uploads to 50Mb
140
+ client_max_body_size 50M;
141
+
142
+ # sets the domain[s] that this vhost server requests for
143
+ # server_name www.[engineyard].com [engineyard].com;
144
+
145
+ # doc root
146
+ root /data/ez/current/public;
147
+
148
+ # vhost specific access log
149
+ access_log /var/log/nginx.vhost.access.log main;
150
+
151
+ # this rewrites all the requests to the maintenance.html
152
+ # page if it exists in the doc root. This is for capistrano's
153
+ # disable web task
154
+ if (-f $document_root/system/maintenance.html) {
155
+ rewrite ^(.*)$ /system/maintenance.html last;
156
+ break;
157
+ }
158
+
159
+ location / {
160
+ # needed to forward user's IP address to rails
161
+ proxy_set_header X-Real-IP $remote_addr;
162
+
163
+ # needed for HTTPS
164
+ proxy_set_header X_FORWARDED_PROTO https;
165
+
166
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
167
+ proxy_set_header Host $http_host;
168
+ proxy_redirect false;
169
+ proxy_max_temp_file_size 0;
170
+
171
+ # If the file exists as a static file serve it directly without
172
+ # running all the other rewite tests on it
173
+ if (-f $request_filename) {
174
+ break;
175
+ }
176
+
177
+ # check for index.html for directory index
178
+ # if its there on the filesystem then rewite
179
+ # the url to add /index.html to the end of it
180
+ # and then break to send it to the next config rules.
181
+ if (-f $request_filename/index.html) {
182
+ rewrite (.*) $1/index.html break;
183
+ }
184
+
185
+ # this is the meat of the rails page caching config
186
+ # it adds .html to the end of the url and then checks
187
+ # the filesystem for that file. If it exists, then we
188
+ # rewite the url to have explicit .html on the end
189
+ # and then send it on its way to the next config rule.
190
+ # if there is no file on the fs then it sets all the
191
+ # necessary headers and proxies to our upstream mongrels
192
+ if (-f $request_filename.html) {
193
+ rewrite (.*) $1.html break;
194
+ }
195
+
196
+ if (!-f $request_filename) {
197
+ proxy_pass http://mongrel;
198
+ break;
199
+ }
200
+ }
201
+
202
+ error_page 500 502 503 504 /500.html;
203
+ location = /500.html {
204
+ root /data/ez/current/public;
205
+ }
206
+ }
207
+
208
+
209
+ }
@@ -0,0 +1,21 @@
1
+ user nobody www;
2
+ worker_processes 1;
3
+
4
+ events {
5
+ worker_connections 1024;
6
+ }
7
+
8
+ http {
9
+ default_type application/octet-stream;
10
+ sendfile on;
11
+ keepalive_timeout 65;
12
+ server {
13
+ listen 80;
14
+ server_name simple.com *.simple.com;
15
+ access_log logs/simple.access.log;
16
+ location / {
17
+ root html;
18
+ index index.html index.htm;
19
+ }
20
+ }
21
+ }
@@ -0,0 +1,69 @@
1
+ $: << File.dirname(__FILE__) + "/../lib"
2
+
3
+ require 'nginx_config_parser'
4
+
5
+ require 'rubygems'
6
+ begin
7
+ require 'test/spec'
8
+ rescue LoadError
9
+ STDERR.puts "Testing requires test-spec; gem install test-spec"
10
+ exit 1
11
+ end
12
+
13
+ context "Nginx Configuration Parser" do
14
+
15
+ specify "can parse simple configuration" do
16
+ parsing :simple do |config|
17
+ assert_equal 2, config.sections.size
18
+ assert_equal %w(events http), config.sections.map { |s| s.name }
19
+ end
20
+ end
21
+
22
+ specify "can parser more complex configuration" do
23
+ assert_nothing_raised do
24
+ parsing :ezra do |config|
25
+ # TODO: More tests
26
+ end
27
+ end
28
+ end
29
+
30
+ specify "skips if statements" do
31
+ result = parse(<<-EOCONFIG)
32
+ start 1;
33
+ if ( an if statement here ) {
34
+ this should all be ignored
35
+ }
36
+ if( this has ( some parenths ) ) {
37
+ but_is_still_ignored ok;
38
+ }
39
+ should_reach_here 1;
40
+ and_this = / {
41
+ should_exist 1;
42
+ }
43
+ EOCONFIG
44
+ assert_equal 2, result.settings.size
45
+ assert_equal 1, result.sections.size
46
+ assert_equal({'should_exist' => 1}, result.sections.first.settings)
47
+ assert_equal(%w(= /), result.sections.first.value)
48
+ assert_nothing_raised do
49
+ result.each do |section|
50
+ assert section.is_a?(NginxConfigParser::Section)
51
+ end
52
+ end
53
+
54
+ end
55
+
56
+ #######
57
+ private
58
+ #######
59
+
60
+ def parse(text)
61
+ NginxConfigParser.parse(text)
62
+ end
63
+
64
+ def parsing(scenario)
65
+ fixture = File.dirname(__FILE__) << "/fixtures/#{scenario}/conf/nginx.conf"
66
+ yield parse(File.read(fixture))
67
+ end
68
+
69
+ end
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nginx_config_parser
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Bruce Williams
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-01-21 00:00:00 -06:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: "== FEATURES/PROBLEMS: * Currently ignores `if' statements (focused on only parsing static config)"
17
+ email: bruce@codefluency.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - History.txt
24
+ - README.txt
25
+ files:
26
+ - History.txt
27
+ - Manifest.txt
28
+ - README.txt
29
+ - Rakefile
30
+ - lib/nginx_config_parser.rb
31
+ - lib/nginx_config_parser/configuration.rb
32
+ - lib/nginx_config_parser/scanner.rb
33
+ - src/scanner.rl
34
+ - tasks/annotations.rake
35
+ - tasks/doc.rake
36
+ - tasks/gem.rake
37
+ - tasks/manifest.rake
38
+ - tasks/ragel.rake
39
+ - tasks/rubyforge.rake
40
+ - tasks/setup.rb
41
+ - tasks/spec.rake
42
+ - tasks/test.rake
43
+ - test/fixtures/ezra/conf/nginx.conf
44
+ - test/fixtures/simple/conf/nginx.conf
45
+ - test/parser_test.rb
46
+ has_rdoc: true
47
+ homepage: http://codefluency.rubyforge.org/nginx_config_parser
48
+ post_install_message:
49
+ rdoc_options:
50
+ - --main
51
+ - README.txt
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ requirements: []
67
+
68
+ rubyforge_project: codefluency
69
+ rubygems_version: 1.0.0
70
+ signing_key:
71
+ specification_version: 2
72
+ summary: A simple nginx.conf parser and emitter
73
+ test_files:
74
+ - test/parser_test.rb