nginxtra 1.2.6.7 → 1.2.6.8

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