nugrant 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ language: ruby
2
+ rvm:
3
+ - "1.8.7"
4
+ - "1.9.2"
5
+ - "1.9.3"
@@ -1,3 +1,14 @@
1
+ # 0.0.12
2
+
3
+ * Added travis configuration file
4
+ * Added travis build status icon to readme
5
+ * Fixed a bug when `.vagrantuser` file is empty or not a hash type
6
+ * Improved parameters command
7
+ * The parameters command is now a proper subcommand
8
+ * An option has been added to see system parameters
9
+ * An option has been added to see user parameters
10
+ * An option has been added to see project parameters
11
+
1
12
  # 0.0.11
2
13
 
3
14
  * Updated README file for installation via rubygems.org
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Nugrant
1
+ # Nugrant [![Build Status](https://travis-ci.org/maoueh/nugrant.png)](https://travis-ci.org/maoueh/nugrant)
2
2
 
3
3
  Vagrant plugin that brings user specific configuration
4
4
  options. It will enable a `.vagrantuser` at different
@@ -3,6 +3,11 @@ require 'nugrant/config'
3
3
  require 'nugrant/parameter_bag'
4
4
  require 'nugrant/parameters'
5
5
 
6
+ unless defined?(KeyError)
7
+ class KeyError < IndexError
8
+ end
9
+ end
10
+
6
11
  module Nugrant
7
12
  def self.create_parameters(options)
8
13
  config = Nugrant::Config.new(options)
@@ -0,0 +1,19 @@
1
+ module Nugrant
2
+ module Helper
3
+ class Yaml
4
+ def self.format(string, options = {})
5
+ lines = string.send(string.respond_to?(:lines) ? :lines : :to_s).to_a
6
+ lines = lines.drop(1)
7
+
8
+ if options[:indent]
9
+ indent_text = " " * options[:indent]
10
+ lines = lines.map do |line|
11
+ indent_text + line
12
+ end
13
+ end
14
+
15
+ return lines.join("")
16
+ end
17
+ end
18
+ end
19
+ end
@@ -55,24 +55,29 @@ module Nugrant
55
55
  end
56
56
 
57
57
  def load_parameters_file(file_path)
58
- if not File.exists?(file_path)
59
- return nil
58
+ data = parse(file_path)
59
+ if data == nil || !data.kind_of?(Hash)
60
+ return
60
61
  end
61
62
 
63
+ restricted_key = has_restricted_keys?(data)
64
+ if restricted_key
65
+ raise ArgumentError, "The key '#{restricted_key}' has restricted usage and cannot be defined"
66
+ end
67
+
68
+ return data
69
+ end
70
+
71
+ def parse(file_path)
72
+ return if not File.exists?(file_path)
73
+
62
74
  begin
63
75
  File.open(file_path, "rb") do |file|
64
76
  parsing_method = "parse_#{@config.params_filetype}"
65
- result = send(parsing_method, file.read)
66
-
67
- restricted_key = has_restricted_keys?(result)
68
- if restricted_key
69
- raise ArgumentError, "The key '#{restricted_key}' has restricted usage and cannot be defined"
70
- end
71
-
72
- return result
77
+ return send(parsing_method, file.read)
73
78
  end
74
79
  rescue => error
75
- raise RuntimeError, "Could not parse the user #{@config.params_filetype} parameters file '#{file_path}': #{error}"
80
+ # TODO: log this message "Could not parse the user #{@config.params_filetype} parameters file '#{file_path}': #{error}"
76
81
  end
77
82
  end
78
83
 
@@ -0,0 +1,125 @@
1
+ require 'nugrant'
2
+ require 'nugrant/helper/yaml'
3
+
4
+ module Nugrant
5
+ module Vagrant
6
+ module Command
7
+ class Parameters < ::Vagrant::Command::Base
8
+ def initialize(arguments, environment)
9
+ super(arguments, environment)
10
+
11
+ @show_help = false
12
+ @show_system = false
13
+ @show_user = false
14
+ @show_project = false
15
+ end
16
+
17
+ def create_parser()
18
+ return OptionParser.new do |parser|
19
+ parser.banner = "Usage: vagrant user parameters [<options>]"
20
+ parser.separator ""
21
+
22
+ parser.separator "Available options:"
23
+ parser.separator ""
24
+
25
+ parser.on("-h", "--help", "Print this help") do
26
+ @show_help = true
27
+ end
28
+
29
+ parser.on("-s", "--system", "Show only system parameters") do
30
+ @show_system = true
31
+ end
32
+
33
+ parser.on("-u", "--user", "Show only user parameters") do
34
+ @show_user = true
35
+ end
36
+
37
+ parser.on("-p", "--project", "Show only project parameters") do
38
+ @show_project = true
39
+ end
40
+
41
+ parser.separator ""
42
+ parser.separator "When no options is provided, the command prints the names and values \n" +
43
+ "of all parameters that would be available for usage in the Vagrantfile.\n" +
44
+ "The hierarchy of the parameters is respected, so the final values are\n" +
45
+ "displayed."
46
+
47
+ parser.separator ""
48
+ parser.separator "Notice: For now, defaults directly defined in the Vagrantfile are not \n" +
49
+ "considered by this command. This is something we would like to fix in \n" +
50
+ "the near future."
51
+ end
52
+ end
53
+
54
+ def execute
55
+ parser = create_parser()
56
+ arguments = parse_options(parser)
57
+
58
+ return help(parser) if @show_help
59
+
60
+ system() if @show_system
61
+ user() if @show_user
62
+ project() if @show_project
63
+
64
+ all() if !@show_system && !@show_user && !@show_project
65
+
66
+ return 0
67
+ end
68
+
69
+ def help(parser)
70
+ @env.ui.info(parser.help, :prefix => false)
71
+ end
72
+
73
+ def system()
74
+ parameters = Nugrant::Parameters.new()
75
+
76
+ print_header("System")
77
+ print_parameters(parameters.get_system_params())
78
+ end
79
+
80
+ def user()
81
+ parameters = Nugrant::Parameters.new()
82
+
83
+ print_header("User")
84
+ print_parameters(parameters.get_user_params())
85
+ end
86
+
87
+ def project()
88
+ parameters = Nugrant::Parameters.new()
89
+
90
+ print_header("Project")
91
+ print_parameters(parameters.get_project_params())
92
+ end
93
+
94
+ def all()
95
+ parameters = Nugrant::Parameters.new()
96
+
97
+ print_parameters(parameters.get_params())
98
+ end
99
+
100
+ def print_header(kind)
101
+ @env.ui.info("#{kind.capitalize} parameters", :prefix => false)
102
+ @env.ui.info("-----------------------------------------------", :prefix => false)
103
+ end
104
+
105
+ def print_parameters(parameters)
106
+ if !parameters || parameters.empty?()
107
+ @env.ui.info(" Empty", :prefix => false)
108
+ @env.ui.info("", :prefix => false)
109
+ return
110
+ end
111
+
112
+ data = {
113
+ 'config' => {
114
+ 'user' => parameters
115
+ }
116
+ }
117
+
118
+ string = Nugrant::Helper::Yaml.format(data.to_yaml)
119
+ @env.ui.info(string, :prefix => false)
120
+ @env.ui.info("", :prefix => false)
121
+ end
122
+ end
123
+ end
124
+ end
125
+ end
@@ -0,0 +1,78 @@
1
+ require 'nugrant'
2
+
3
+ module Nugrant
4
+ module Vagrant
5
+ module Command
6
+ class Root < ::Vagrant::Command::Base
7
+ def initialize(arguments, environment)
8
+ super(arguments, environment)
9
+
10
+ @arguments, @subcommand, @subarguments = split_main_and_subcommand(arguments)
11
+
12
+ # Change super class available arguments to main ones only
13
+ @argv = @arguments
14
+
15
+ @subcommands = ::Vagrant::Registry.new()
16
+ @subcommands.register(:parameters) do
17
+ require File.expand_path("../parameters", __FILE__)
18
+ Parameters
19
+ end
20
+
21
+ @show_help = false
22
+ @show_version = false
23
+ end
24
+
25
+ def create_parser()
26
+ return OptionParser.new do |parser|
27
+ parser.banner = "Usage: vagrant user [-h] [-v] <command> [<args>]"
28
+
29
+ parser.separator ""
30
+ parser.on("-h", "--help", "Print this help") do
31
+ @show_help = true
32
+ end
33
+
34
+ parser.on("-v", "--version", "Print plugin version and exit.") do
35
+ @show_version = true
36
+ end
37
+
38
+ parser.separator ""
39
+ parser.separator "Available subcommands:"
40
+
41
+ keys = []
42
+ @subcommands.each { |key, value| keys << key.to_s }
43
+
44
+ keys.sort.each do |key|
45
+ parser.separator " #{key}"
46
+ end
47
+
48
+ parser.separator ""
49
+ parser.separator "For help on any individual command run `vagrant user COMMAND -h`"
50
+ end
51
+ end
52
+
53
+ def execute
54
+ parser = create_parser()
55
+ arguments = parse_options(parser)
56
+
57
+ return version() if @show_version
58
+ return help(parser) if @show_help
59
+
60
+ command_class = @subcommands.get(@subcommand.to_sym) if @subcommand
61
+ return help(parser) if !command_class || !@subcommand
62
+
63
+ @logger.debug("Invoking nugrant command class: #{command_class} #{@subarguments.inspect}")
64
+
65
+ command_class.new(@subarguments, @env).execute
66
+ end
67
+
68
+ def help(parser)
69
+ @env.ui.info(parser.help, :prefix => false)
70
+ end
71
+
72
+ def version()
73
+ @env.ui.info("Nugrant version #{Nugrant::VERSION}", :prefix => false)
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,29 @@
1
+ require 'nugrant'
2
+
3
+ module Nugrant
4
+ module Vagrant
5
+ module Config
6
+ class User < ::Vagrant::Config::Base
7
+ def initialize()
8
+ @parameters = Nugrant::Parameters.new()
9
+ end
10
+
11
+ def [](param_name)
12
+ return @parameters[param_name]
13
+ end
14
+
15
+ def method_missing(method, *args, &block)
16
+ return @parameters.method_missing(method, *args, &block)
17
+ end
18
+
19
+ def defaults(parameters)
20
+ @parameters.defaults(parameters)
21
+ end
22
+
23
+ def defaults=(parameters)
24
+ @parameters.defaults=(parameters)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module Nugrant
2
- VERSION = "0.0.11"
2
+ VERSION = "0.0.12"
3
3
  end
@@ -1,7 +1,7 @@
1
1
  # This module will initialize the vagrant plugin
2
- require 'nugrant/vagrant/user_command'
3
- require 'nugrant/vagrant/user_parameters'
2
+ require 'nugrant/vagrant/command/root'
3
+ require 'nugrant/vagrant/config/user'
4
4
 
5
5
  # Plugin bootstrap
6
- Vagrant.commands.register(:user) { Nugrant::Vagrant::UserCommand }
7
- Vagrant.config_keys.register(:user) { Nugrant::Vagrant::UserParameters }
6
+ Vagrant.commands.register(:user) { Nugrant::Vagrant::Command::Root }
7
+ Vagrant.config_keys.register(:user) { Nugrant::Vagrant::Config::User }
@@ -166,14 +166,14 @@ class Nugrant::TestParameters < Test::Unit::TestCase
166
166
 
167
167
  def test_restricted_defaults_usage()
168
168
  filetypes.each do |params_filetype|
169
- assert_raise(RuntimeError) do
169
+ assert_raise(ArgumentError) do
170
170
  results = create_parameters(params_filetype, "params_defaults_at_root", invalid_path, invalid_path)
171
171
  puts("Results: #{results.inspect} (Should have thrown!)")
172
172
  end
173
173
  end
174
174
 
175
175
  filetypes.each do |params_filetype|
176
- assert_raise(RuntimeError) do
176
+ assert_raise(ArgumentError) do
177
177
  results = create_parameters(params_filetype, "params_defaults_not_at_root", invalid_path, invalid_path)
178
178
  puts("Results: #{results.inspect} (Should have thrown!)")
179
179
  end
@@ -195,6 +195,26 @@ class Nugrant::TestParameters < Test::Unit::TestCase
195
195
  end
196
196
  end
197
197
 
198
+ def test_empty_file()
199
+ filetypes.each do |params_filetype|
200
+ parameters = create_parameters(params_filetype, "params_empty", invalid_path, invalid_path)
201
+ parameters.defaults({"test" => "value"})
202
+
203
+ assert_equal("value", parameters.test)
204
+ end
205
+ end
206
+
207
+ def test_file_not_hash()
208
+ ["boolean", "list"].each do |wrong_type|
209
+ filetypes.each do |params_filetype|
210
+ parameters = create_parameters(params_filetype, "params_#{wrong_type}", invalid_path, invalid_path)
211
+ parameters.defaults({"test" => "value"})
212
+
213
+ assert_equal("value", parameters.test)
214
+ end
215
+ end
216
+ end
217
+
198
218
  def filetypes()
199
219
  @@PARAMS_FILETYPES
200
220
  end
@@ -2,4 +2,7 @@ Vagrant::Config.run do |config|
2
2
  config.user.defaults = {
3
3
  "test" => "value"
4
4
  }
5
+
6
+ puts config.user.repository.personal
7
+ puts config.user.test
5
8
  end
File without changes
@@ -0,0 +1 @@
1
+ ["value", "second"]
File without changes
@@ -0,0 +1,2 @@
1
+ - first
2
+ - second
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nugrant
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-12-23 00:00:00.000000000 Z
12
+ date: 2013-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: deep_merge
@@ -74,6 +74,7 @@ files:
74
74
  - .gitattributes
75
75
  - .gitignore
76
76
  - .project
77
+ - .travis.yml
77
78
  - CHANGELOG.md
78
79
  - Gemfile
79
80
  - LICENSE.txt
@@ -81,10 +82,12 @@ files:
81
82
  - Rakefile
82
83
  - lib/nugrant.rb
83
84
  - lib/nugrant/config.rb
85
+ - lib/nugrant/helper/yaml.rb
84
86
  - lib/nugrant/parameter_bag.rb
85
87
  - lib/nugrant/parameters.rb
86
- - lib/nugrant/vagrant/user_command.rb
87
- - lib/nugrant/vagrant/user_parameters.rb
88
+ - lib/nugrant/vagrant/command/parameters.rb
89
+ - lib/nugrant/vagrant/command/root.rb
90
+ - lib/nugrant/vagrant/config/user.rb
88
91
  - lib/nugrant/version.rb
89
92
  - lib/vagrant_init.rb
90
93
  - nugrant.gemspec
@@ -94,9 +97,12 @@ files:
94
97
  - test/resources/.vagrantuser
95
98
  - test/resources/README.md
96
99
  - test/resources/Vagrantfile
100
+ - test/resources/json/params_boolean.json
97
101
  - test/resources/json/params_combinations.json
98
102
  - test/resources/json/params_defaults_at_root.json
99
103
  - test/resources/json/params_defaults_not_at_root.json
104
+ - test/resources/json/params_empty.json
105
+ - test/resources/json/params_list.json
100
106
  - test/resources/json/params_project_1.json
101
107
  - test/resources/json/params_project_2.json
102
108
  - test/resources/json/params_simple.json
@@ -106,9 +112,12 @@ files:
106
112
  - test/resources/json/params_user_1.json
107
113
  - test/resources/json/params_user_2.json
108
114
  - test/resources/json/params_windows_eol.json
115
+ - test/resources/yml/params_boolean.yml
109
116
  - test/resources/yml/params_combinations.yml
110
117
  - test/resources/yml/params_defaults_at_root.yml
111
118
  - test/resources/yml/params_defaults_not_at_root.yml
119
+ - test/resources/yml/params_empty.yml
120
+ - test/resources/yml/params_list.yml
112
121
  - test/resources/yml/params_project_1.yml
113
122
  - test/resources/yml/params_project_2.yml
114
123
  - test/resources/yml/params_simple.yml
@@ -130,12 +139,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
130
139
  - - ! '>='
131
140
  - !ruby/object:Gem::Version
132
141
  version: '0'
142
+ segments:
143
+ - 0
144
+ hash: -519440520645182635
133
145
  required_rubygems_version: !ruby/object:Gem::Requirement
134
146
  none: false
135
147
  requirements:
136
148
  - - ! '>='
137
149
  - !ruby/object:Gem::Version
138
150
  version: '0'
151
+ segments:
152
+ - 0
153
+ hash: -519440520645182635
139
154
  requirements: []
140
155
  rubyforge_project:
141
156
  rubygems_version: 1.8.24
@@ -149,9 +164,12 @@ test_files:
149
164
  - test/resources/.vagrantuser
150
165
  - test/resources/README.md
151
166
  - test/resources/Vagrantfile
167
+ - test/resources/json/params_boolean.json
152
168
  - test/resources/json/params_combinations.json
153
169
  - test/resources/json/params_defaults_at_root.json
154
170
  - test/resources/json/params_defaults_not_at_root.json
171
+ - test/resources/json/params_empty.json
172
+ - test/resources/json/params_list.json
155
173
  - test/resources/json/params_project_1.json
156
174
  - test/resources/json/params_project_2.json
157
175
  - test/resources/json/params_simple.json
@@ -161,9 +179,12 @@ test_files:
161
179
  - test/resources/json/params_user_1.json
162
180
  - test/resources/json/params_user_2.json
163
181
  - test/resources/json/params_windows_eol.json
182
+ - test/resources/yml/params_boolean.yml
164
183
  - test/resources/yml/params_combinations.yml
165
184
  - test/resources/yml/params_defaults_at_root.yml
166
185
  - test/resources/yml/params_defaults_not_at_root.yml
186
+ - test/resources/yml/params_empty.yml
187
+ - test/resources/yml/params_list.yml
167
188
  - test/resources/yml/params_project_1.yml
168
189
  - test/resources/yml/params_project_2.yml
169
190
  - test/resources/yml/params_simple.yml
@@ -1,86 +0,0 @@
1
- require 'nugrant'
2
-
3
- module Nugrant
4
- module Vagrant
5
- class UserCommand < ::Vagrant::Command::Base
6
- HANDLED_SUBCOMMANDS = [
7
- "parameters",
8
- ]
9
-
10
- def initialize(arguments, environment)
11
- super(arguments, environment)
12
-
13
- @parameters = Nugrant::Parameters.new()
14
- @options_parser = initialize_parsers()
15
-
16
- @print_help = false
17
- end
18
-
19
- def initialize_parsers()
20
- parser = OptionParser.new
21
-
22
- parser.banner = "Usage: vagrant user subcommand [options]"
23
-
24
- parser.on("-h", "--help", "Print this help") do
25
- @print_help
26
- end
27
-
28
- parser.separator ""
29
- parser.separator "Available subcommands:"
30
-
31
- HANDLED_SUBCOMMANDS.each do |subcommand|
32
- parser.separator " #{subcommand}"
33
- end
34
-
35
- return parser
36
- end
37
-
38
- def execute()
39
- subcommands = parse_options(@options_parser)
40
- if not subcommands
41
- subcommands = ["parameters"]
42
- end
43
-
44
- subcommands = validate_subcommands(subcommands)
45
- if not subcommands
46
- safe_puts(@options_parser.help())
47
- return
48
- end
49
-
50
- # At this point, subcommands are valid
51
- subcommands.each do |subcommand|
52
- execute_subcommand(subcommand)
53
- end
54
- end
55
-
56
- def execute_subcommand(subcommand)
57
- send(:parameters)
58
- end
59
-
60
- def parameters()
61
- parameters = {
62
- 'config' => {
63
- 'user' => @parameters.get_params()
64
- }
65
- }
66
-
67
- safe_puts(parameters.to_yaml(:Separator => ""))
68
- end
69
-
70
- def handled_subcommand?(subcommand)
71
- return HANDLED_SUBCOMMANDS.find_index(subcommand)
72
- end
73
-
74
- def validate_subcommands(subcommands)
75
- subcommands.each do |subcommand|
76
- if not handled_subcommand?(subcommand)
77
- puts "Unknown subcommand [#{subcommand}]."
78
- return nil
79
- end
80
- end
81
-
82
- return subcommands
83
- end
84
- end
85
- end
86
- end
@@ -1,27 +0,0 @@
1
- require 'nugrant'
2
-
3
- module Nugrant
4
- module Vagrant
5
- class UserParameters < ::Vagrant::Config::Base
6
- def initialize()
7
- @parameters = Nugrant::Parameters.new()
8
- end
9
-
10
- def [](param_name)
11
- return @parameters[param_name]
12
- end
13
-
14
- def method_missing(method, *args, &block)
15
- return @parameters.method_missing(method, *args, &block)
16
- end
17
-
18
- def defaults(parameters)
19
- @parameters.defaults(parameters)
20
- end
21
-
22
- def defaults=(parameters)
23
- @parameters.defaults=(parameters)
24
- end
25
- end
26
- end
27
- end