nginxtra 1.2.6.7 → 1.2.6.8

Sign up to get free protection for your applications and to get access to all the features.
data/bin/nginxtra CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "rubygems"
3
- gem "nginxtra", "= 1.2.6.7"
3
+ gem "nginxtra", "= 1.2.6.8"
4
4
  gem "thor", "~> 0.16.0"
5
5
  require "nginxtra"
6
6
  Nginxtra::CLI.start
data/bin/nginxtra_rails CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "rubygems"
3
- gem "nginxtra", "= 1.2.6.7"
3
+ gem "nginxtra", "= 1.2.6.8"
4
4
  gem "thor", "~> 0.16.0"
5
5
  require "nginxtra"
6
6
  Nginxtra::Rails::CLI.start
data/lib/nginxtra.rb CHANGED
@@ -2,6 +2,7 @@ require "nginxtra/action"
2
2
  require "nginxtra/actions/compile"
3
3
  require "nginxtra/actions/convert"
4
4
  require "nginxtra/actions/install"
5
+ require "nginxtra/actions/print"
5
6
  require "nginxtra/actions/reload"
6
7
  require "nginxtra/actions/restart"
7
8
  require "nginxtra/actions/start"
@@ -6,23 +6,11 @@ module Nginxtra
6
6
  class Install
7
7
  include Nginxtra::Action
8
8
 
9
- # Run the installation of nginxtra, but only after first
10
- # prompting if the user wants the install. This will do nothing
11
- # if run with --non-interactive mode.
12
- def optional_install
13
- return installation_skipped if non_interactive?
14
- return up_to_date unless should_install?
15
- return unless requesting_install?
16
- install
17
- end
18
-
19
9
  # Run the installation of nginxtra.
20
10
  def install
21
11
  return up_to_date unless should_install?
22
12
  check_if_nginx_is_installed
23
13
  create_etc_script
24
- remember_config_location
25
- remember_working_directory
26
14
  update_last_install
27
15
  end
28
16
 
@@ -76,26 +64,6 @@ export GEM_PATH="#{ENV["GEM_PATH"]}"
76
64
  @thor.say "nginxtra installation is up to date"
77
65
  end
78
66
 
79
- # Notify to the user that installation is being skipped.
80
- def installation_skipped
81
- @thor.say "skipping nginxtra installation"
82
- end
83
-
84
- # Remember the last config location, and use it unless the
85
- # config is explicitly passed in.
86
- def remember_config_location
87
- # Absolute path somehow turns the path to a binary string when
88
- # output to Yaml... so make it a string so it stays ascii
89
- # readable.
90
- Nginxtra::Status[:remembered_config] = Nginxtra::Config.loaded_config_path.to_s
91
- end
92
-
93
- # Remember the last working directory, and use it unless the
94
- # working direcotry is explicitly passed in.
95
- def remember_working_directory
96
- Nginxtra::Status[:remembered_workingdir] = File.expand_path "."
97
- end
98
-
99
67
  # Mark the last installed version and last installed time (the
100
68
  # former being used to determine if nginxtra has been installed
101
69
  # yet).
@@ -104,12 +72,6 @@ export GEM_PATH="#{ENV["GEM_PATH"]}"
104
72
  Nginxtra::Status[:last_install_time] = Time.now
105
73
  end
106
74
 
107
- # Ask the user if they wish to install. Return whether the user
108
- # requests the install.
109
- def requesting_install?
110
- @thor.yes? "Would you like to install nginxtra?"
111
- end
112
-
113
75
  # Determine if the install should proceed. This will be true if
114
76
  # the force option was used, or if this version of nginxtra
115
77
  # differs from the last version installed.
@@ -0,0 +1,23 @@
1
+ module Nginxtra
2
+ module Actions
3
+ class Print
4
+ include Nginxtra::Action
5
+
6
+ def print
7
+ if @thor.options["list"]
8
+ @thor.say "Known config files:\n #{@config.files.sort.join "\n "}"
9
+ elsif @thor.options["compile-options"]
10
+ @thor.say "Compilation options:\n #{@config.compile_options}"
11
+ elsif @config.files.include?(file)
12
+ @thor.say @config.file_contents(file)
13
+ else
14
+ @thor.say "No config file by the name '#{file}' exists!"
15
+ end
16
+ end
17
+
18
+ def file
19
+ @thor.options["file"]
20
+ end
21
+ end
22
+ end
23
+ end
@@ -12,7 +12,6 @@ module Nginxtra
12
12
  def start
13
13
  without_force do
14
14
  compile
15
- install
16
15
  end
17
16
 
18
17
  return no_need_to_start unless should_start?
@@ -26,11 +25,6 @@ module Nginxtra
26
25
  Nginxtra::Actions::Compile.new(@thor, @config).compile
27
26
  end
28
27
 
29
- # Invoke nginxtra installation, but only if the user allows it.
30
- def install
31
- Nginxtra::Actions::Install.new(@thor, @config).optional_install
32
- end
33
-
34
28
  # Save nginx config files to the proper config file path.
35
29
  def save_config_files
36
30
  files = @config.files
data/lib/nginxtra/cli.rb CHANGED
@@ -26,7 +26,7 @@ module Nginxtra
26
26
  nginxtra.conf.rb). The result will be output to nginxtra.conf.rb in the current
27
27
  directory, unless an override value is specified with the --config option."
28
28
  method_option "nginx-bin", :type => :string, :banner => "Point to the compiled nginx to retrieve compile options", :aliases => "-n"
29
- method_option "nginx-conf", :type => :string, :banner => "Point to the nginx.conf file to retrieve the existing configuration", :aliases => "-", :default => "nginx.conf"
29
+ method_option "nginx-conf", :type => :string, :banner => "Point to the nginx.conf file to retrieve the existing configuration", :aliases => "-F", :default => "nginx.conf"
30
30
  method_option "ignore-nginx-bin", :type => :boolean, :banner => "Ignore the nginx binary, and assume default compile time options", :aliases => "-N"
31
31
  method_option "output", :type => :boolean, :banner => "Output to standard out instead of to a file", :aliases => "-o"
32
32
  method_option "input", :type => :boolean, :banner => "Read nginx.conf from standard in instead of a file", :aliases => "-i"
@@ -36,6 +36,22 @@ module Nginxtra
36
36
  end
37
37
  end
38
38
 
39
+ desc "print", "Output nginxtra.conf.rb as it is processed as nginx.conf"
40
+ long_desc "
41
+ Output the contents of nginx.conf, as it is defined in nginxtra.conf.rb. If the
42
+ --file is provided, something other than nginx.conf can be output. The --list
43
+ option can be provided to list known config files. The --compile-options option
44
+ can be provided to list compile time options being passed to nginx."
45
+ method_option "compile-options", :type => :boolean, :banner => "Show compile options being used", :aliases => "-C"
46
+ method_option "file", :type => :string, :banner => "The config file that is printed", :aliases => "-F", :default => "nginx.conf"
47
+ method_option "list", :type => :boolean, :banner => "List known files", :aliases => "-l"
48
+ def print
49
+ Nginxtra::Error.protect self do
50
+ set_working_dir!
51
+ Nginxtra::Actions::Print.new(self, prepare_config!).print
52
+ end
53
+ end
54
+
39
55
  desc "compile", "Compiles nginx based on nginxtra.conf.rb"
40
56
  long_desc "
41
57
  Compile nginx with the compilation options specified in nginxtra.conf.rb. If it
@@ -66,12 +82,11 @@ module Nginxtra
66
82
  long_desc "
67
83
  Start nginx based on nginxtra.conf.rb. If nginx has not yet been compiled for
68
84
  the given compilation options or the current nginx version, it will be compiled.
69
- If nginxtra has not been installed for the current version, the user will be
70
- asked if it is ok to install. The configuration for nginx will automatically be
71
- handled by nginxtra so it matches what is defined in nginxtra.conf.rb. If it is
72
- already running, this will do nothing, unless --force is passed. Note that
73
- compilation and installation will NOT be forced with --force option. The
74
- compile or install task should be invoked if those need to be forced."
85
+ The configuration for nginx will automatically be handled by nginxtra so it
86
+ matches what is defined in nginxtra.conf.rb. If it is already running, this
87
+ will do nothing, unless --force is passed. Note that compilation will NOT be
88
+ forced with the --force option and should be invoked separately if it needs to
89
+ be forced."
75
90
  def start
76
91
  Nginxtra::Error.protect self do
77
92
  set_working_dir!
@@ -136,8 +151,6 @@ module Nginxtra
136
151
  def set_working_dir!
137
152
  if options["workingdir"]
138
153
  Dir.chdir options["workingdir"]
139
- elsif Nginxtra::Status[:remembered_workingdir]
140
- Dir.chdir Nginxtra::Status[:remembered_workingdir]
141
154
  end
142
155
  end
143
156
 
@@ -168,6 +168,11 @@ module Nginxtra
168
168
  # returned.
169
169
  def path
170
170
  path = File.absolute_path "."
171
+ config = File.join path, FILENAME
172
+ return config if File.exists? config
173
+ config = File.join path, "config", FILENAME
174
+ return config if File.exists? config
175
+ path = File.dirname path
171
176
 
172
177
  begin
173
178
  config = File.join path, FILENAME
@@ -191,8 +196,6 @@ module Nginxtra
191
196
  def require!(config_path = nil)
192
197
  if config_path
193
198
  config_path = File.absolute_path config_path
194
- elsif Nginxtra::Status[:remembered_config]
195
- config_path = File.absolute_path Nginxtra::Status[:remembered_config]
196
199
  else
197
200
  config_path = path
198
201
  end
@@ -310,6 +313,56 @@ module Nginxtra
310
313
  end
311
314
  end
312
315
 
316
+ # Extension point for other gems or libraries that want to define
317
+ # inline partials. Please see the partial method for usage.
318
+ class Extension
319
+ class << self
320
+ # Determine if there has been a partial defined for the given
321
+ # nginx config file, with the given partial name.
322
+ def partial?(file, name)
323
+ file = file.to_sym
324
+ name = name.to_sym
325
+ @extensions && @extensions[file] && @extensions[file][name]
326
+ end
327
+
328
+ # Define or retrieve the partial for the given nginx config
329
+ # file and partial name. If a block is provided, it is set as
330
+ # the partial, otherwise the partial currently defined for it
331
+ # will be retrieved. The block is expected to take 2
332
+ # arguments... the arguments hash, and then the block passed
333
+ # in to this definition. Either may be ignored if so desired.
334
+ #
335
+ # Example usage:
336
+ # Nginxtra::Config::Extension.partial "nginx.conf", "my_app" do |args, block|
337
+ # my_app(args[:port] || 80)
338
+ # some_other_setting "on"
339
+ # block.call
340
+ # end
341
+ #
342
+ # The partial will only be valid for the given config file.
343
+ # It is completely nestable, and other partials may be invoked
344
+ # as well.
345
+ def partial(file, name, &block)
346
+ file = file.to_sym
347
+ name = name.to_sym
348
+ @extensions ||= {}
349
+ @extensions[file] ||= {}
350
+
351
+ if block
352
+ @extensions[file][name] = block
353
+ else
354
+ @extensions[file][name]
355
+ end
356
+ end
357
+
358
+ # Clear all partials so far defined. This is mainly for test,
359
+ # but could be called if resetting is so desired.
360
+ def clear_partials!
361
+ @extensions = {}
362
+ end
363
+ end
364
+ end
365
+
313
366
  # Represents a config file being defined by nginxtra.conf.rb.
314
367
  class ConfigFile
315
368
  def initialize(filename, config, &block)
@@ -385,15 +438,51 @@ module Nginxtra
385
438
  @end_of_block = true
386
439
  end
387
440
 
441
+ # Convenience method to use the "break" keyword, as seen in if
442
+ # blocks of nginx configurations.
443
+ def _break(*args, &block)
444
+ process_config_block_or_line "break", args, block
445
+ end
446
+
447
+ # Convenience method to invoke an if block in the nginx
448
+ # configuration. Parenthesis are added around the arguments of
449
+ # this method.
450
+ #
451
+ # Example usage:
452
+ # nginxtra.config do
453
+ # _if "some", "~", "thing" do
454
+ # _return 404
455
+ # end
456
+ # end
457
+ #
458
+ # Which will produce the following config:
459
+ # if (some ~ thing) {
460
+ # return 404;
461
+ # }
462
+ def _if(*args, &block)
463
+ config_block "if (#{args.join " "})", &block
464
+ end
465
+
466
+ # Convenience method to use the "return" keyword, as seen in if
467
+ # blocks of nginx configurations.
468
+ def _return(*args, &block)
469
+ process_config_block_or_line "return", args, block
470
+ end
471
+
388
472
  # Process the given template. Optionally, include options (as
389
473
  # yielded values) available to the template. The yielder passed
390
474
  # in will be invoked (if given) if the template invokes yield.
391
475
  def process_template!(template, options = {}, yielder = nil)
392
- process_template_with_yields! template do |x|
393
- if x
394
- options[x.to_sym]
395
- else
396
- instance_eval &yielder if yielder
476
+ if template.respond_to? :call
477
+ block = Proc.new { instance_eval &yielder if yielder }
478
+ instance_exec options, block, &template
479
+ else
480
+ process_template_with_yields! template do |x|
481
+ if x
482
+ options[x.to_sym]
483
+ else
484
+ instance_eval &yielder if yielder
485
+ end
397
486
  end
398
487
  end
399
488
  end
@@ -444,16 +533,22 @@ module Nginxtra
444
533
 
445
534
  private
446
535
  def partial?(partial_name)
536
+ return true if Nginxtra::Config::Extension.partial? @filename, partial_name
537
+
447
538
  @config.partial_paths.any? do |path|
448
539
  File.exists? File.join(path, "#{@filename}/#{partial_name}.rb")
449
540
  end
450
541
  end
451
542
 
452
543
  def invoke_partial(partial_name, args, block)
453
- partial_path = @config.partial_paths.map do |path|
454
- File.join path, "#{@filename}/#{partial_name}.rb"
455
- end.find do |path|
456
- File.exists? path
544
+ if Nginxtra::Config::Extension.partial? @filename, partial_name
545
+ partial_path = Nginxtra::Config::Extension.partial @filename, partial_name
546
+ else
547
+ partial_path = @config.partial_paths.map do |path|
548
+ File.join path, "#{@filename}/#{partial_name}.rb"
549
+ end.find do |path|
550
+ File.exists? path
551
+ end
457
552
  end
458
553
 
459
554
  if args.empty?
@@ -114,6 +114,7 @@ module Nginxtra
114
114
  end
115
115
 
116
116
  class Token
117
+ KEYWORDS = ["break", "if", "return"].freeze
117
118
  TERMINAL_CHARACTERS = ["{", "}", ";"].freeze
118
119
  attr_reader :value
119
120
 
@@ -123,6 +124,18 @@ module Nginxtra
123
124
  @ready = false
124
125
  end
125
126
 
127
+ def is_if?
128
+ @value == "if"
129
+ end
130
+
131
+ def if_start!
132
+ @value.gsub! /^\(/, ""
133
+ end
134
+
135
+ def if_end!
136
+ @value.gsub! /\)$/, ""
137
+ end
138
+
126
139
  def terminal_character?
127
140
  TERMINAL_CHARACTERS.include? @value
128
141
  end
@@ -156,11 +169,19 @@ module Nginxtra
156
169
  @instance || @ready || terminal_character?
157
170
  end
158
171
 
172
+ def to_line_start
173
+ if KEYWORDS.include? @value
174
+ "_#{@value}"
175
+ else
176
+ @value
177
+ end
178
+ end
179
+
159
180
  def to_s
160
181
  if @value =~ /^\d+$/
161
182
  @value
162
183
  else
163
- %{"#{@value}"}
184
+ %{"#{@value.gsub("\\") { "\\\\" }}"}
164
185
  end
165
186
  end
166
187
 
@@ -224,6 +245,10 @@ module Nginxtra
224
245
  end
225
246
 
226
247
  private
248
+ def is_if?
249
+ @tokens.first.is_if?
250
+ end
251
+
227
252
  def passenger?
228
253
  ["passenger_root", "passenger_ruby", "passenger_enabled"].include? @tokens.first.value
229
254
  end
@@ -272,13 +297,19 @@ module Nginxtra
272
297
  end
273
298
 
274
299
  def print_first
275
- @output.print @tokens.first.value
300
+ @output.print @tokens.first.to_line_start
276
301
  end
277
302
 
278
303
  def print_args
279
304
  args = @tokens[1..-2]
280
305
  return if args.empty?
281
306
  @output.print " "
307
+
308
+ if is_if?
309
+ args.first.if_start!
310
+ args.last.if_end!
311
+ end
312
+
282
313
  @output.print args.map(&:to_s).join(", ")
283
314
  end
284
315
 
@@ -6,7 +6,7 @@ module Nginxtra
6
6
  end
7
7
 
8
8
  def to_s
9
- "1.2.6.7"
9
+ "1.2.6.8"
10
10
  end
11
11
  end
12
12
  end
metadata CHANGED
@@ -1,38 +1,41 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: nginxtra
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.6.8
4
5
  prerelease:
5
- version: 1.2.6.7
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Mike Virata-Stone
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2012-12-11 00:00:00 Z
14
- dependencies:
15
- - !ruby/object:Gem::Dependency
12
+ date: 2013-02-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
16
15
  name: thor
17
- prerelease: false
18
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
19
17
  none: false
20
- requirements:
18
+ requirements:
21
19
  - - ~>
22
- - !ruby/object:Gem::Version
20
+ - !ruby/object:Gem::Version
23
21
  version: 0.16.0
24
22
  type: :runtime
25
- version_requirements: *id001
26
- description: This gem is intended to provide an easy to use configuration file that will automatically be used to compile nginx and configure the configuration.
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: 0.16.0
30
+ description: This gem is intended to provide an easy to use configuration file that
31
+ will automatically be used to compile nginx and configure the configuration.
27
32
  email: reasonnumber@gmail.com
28
- executables:
33
+ executables:
29
34
  - nginxtra
30
35
  - nginxtra_rails
31
36
  extensions: []
32
-
33
37
  extra_rdoc_files: []
34
-
35
- files:
38
+ files:
36
39
  - bin/nginxtra
37
40
  - bin/nginxtra_rails
38
41
  - lib/nginxtra.rb
@@ -40,6 +43,7 @@ files:
40
43
  - lib/nginxtra/actions/compile.rb
41
44
  - lib/nginxtra/actions/convert.rb
42
45
  - lib/nginxtra/actions/install.rb
46
+ - lib/nginxtra/actions/print.rb
43
47
  - lib/nginxtra/actions/rails/server.rb
44
48
  - lib/nginxtra/actions/reload.rb
45
49
  - lib/nginxtra/actions/restart.rb
@@ -411,30 +415,26 @@ files:
411
415
  - vendor/nginx/src/os/unix/rfork_thread.S
412
416
  homepage: http://reasonnumber.com/nginxtra
413
417
  licenses: []
414
-
415
418
  post_install_message:
416
419
  rdoc_options: []
417
-
418
- require_paths:
420
+ require_paths:
419
421
  - lib
420
- required_ruby_version: !ruby/object:Gem::Requirement
422
+ required_ruby_version: !ruby/object:Gem::Requirement
421
423
  none: false
422
- requirements:
423
- - - ">="
424
- - !ruby/object:Gem::Version
425
- version: "0"
426
- required_rubygems_version: !ruby/object:Gem::Requirement
424
+ requirements:
425
+ - - ! '>='
426
+ - !ruby/object:Gem::Version
427
+ version: '0'
428
+ required_rubygems_version: !ruby/object:Gem::Requirement
427
429
  none: false
428
- requirements:
429
- - - ">="
430
- - !ruby/object:Gem::Version
431
- version: "0"
430
+ requirements:
431
+ - - ! '>='
432
+ - !ruby/object:Gem::Version
433
+ version: '0'
432
434
  requirements: []
433
-
434
435
  rubyforge_project:
435
436
  rubygems_version: 1.8.24
436
437
  signing_key:
437
438
  specification_version: 3
438
439
  summary: Wrapper of nginx for easy install and use.
439
440
  test_files: []
440
-