nugrant 0.0.12 → 0.0.13

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,12 @@
1
+ # 0.0.13
2
+
3
+ * Cleanup `Parameters` and `ParameterBag` interface
4
+ * The method `defaults` has been removed from the bag
5
+ * Setting defaults on `Parameters` now recompute the final bag
6
+ * Improved `vagrant user parameters` command
7
+ * Now using the exact config as seen by Vagrant, this includes defaults parameters
8
+ * An option has been added to only see defaults parameters
9
+
1
10
  # 0.0.12
2
11
 
3
12
  * Added travis configuration file
@@ -1,26 +1,29 @@
1
1
  module Nugrant
2
2
  class ParameterBag
3
3
  def initialize(parameters)
4
- if parameters == nil
5
- return
6
- end
4
+ @bag = recompute(parameters)
5
+ end
7
6
 
8
- @bag = {}
9
- @defaults = {}
7
+ def recompute(parameters)
8
+ @bag = transform(parameters)
9
+ return @bag
10
+ end
10
11
 
11
- parameters.each do |key, value|
12
- if key == "defaults"
13
- raise ArgumentError, "The key 'defaults' has restricted usage and cannot be defined"
14
- end
12
+ def transform(parameters)
13
+ bag = {}
14
+ return bag if parameters == nil
15
15
 
16
+ parameters.each do |key, value|
16
17
  if not value.is_a?(Hash)
17
- @bag[key] = value
18
+ bag[key] = value
18
19
  next
19
20
  end
20
21
 
21
22
  # It is a hash, transform it into a bag
22
- @bag[key] = Nugrant::ParameterBag.new(value)
23
+ bag[key] = Nugrant::ParameterBag.new(value)
23
24
  end
25
+
26
+ return bag
24
27
  end
25
28
 
26
29
  def [](param_name)
@@ -32,15 +35,11 @@ module Nugrant
32
35
  end
33
36
 
34
37
  def has_param?(param_name)
35
- return @bag != nil && @bag.has_key?(param_name)
38
+ return @bag.has_key?(param_name)
36
39
  end
37
40
 
38
41
  def get_param(param_name)
39
42
  if not has_param?(param_name)
40
- if @defaults[param_name]
41
- return @defaults[param_name]
42
- end
43
-
44
43
  raise KeyError, "Undefined parameter '#{param_name}'"
45
44
  end
46
45
 
@@ -50,19 +49,5 @@ module Nugrant
50
49
  def get_params()
51
50
  return @bag
52
51
  end
53
-
54
- def defaults(parameters)
55
- parameters.each do |key, value|
56
- if value.is_a?(Hash) and has_param?(key)
57
- @bag[key].defaults(value)
58
- end
59
- end
60
-
61
- @defaults = Nugrant::ParameterBag.new(parameters)
62
- end
63
-
64
- def defaults=(parameters)
65
- defaults(parameters)
66
- end
67
52
  end
68
53
  end
@@ -5,57 +5,44 @@ require 'yaml'
5
5
 
6
6
  module Nugrant
7
7
  class Parameters < Nugrant::ParameterBag
8
+ attr_reader :defaults, :system, :user, :project, :all
9
+
8
10
  def initialize(config = nil)
9
11
  if config == nil
10
12
  config = Nugrant::Config.new()
11
13
  end
12
14
 
13
15
  @config = config
14
- @parameters = load_parameters()
15
-
16
- super(@parameters)
17
- end
18
-
19
- def get_bag()
20
- @bag
21
- end
22
16
 
23
- def get_params()
24
- return @parameters
25
- end
17
+ @defaults = nil
18
+ @system = parse_parameters(@config.system_params_path)
19
+ @user = parse_parameters(@config.user_params_path)
20
+ @project = parse_parameters(@config.project_params_path)
26
21
 
27
- def get_project_params()
28
- return @project_parameters
22
+ @all = compute_all()
29
23
  end
30
24
 
31
- def get_user_params()
32
- return @user_parameters
33
- end
25
+ def defaults=(parameters)
26
+ @defaults = parameters
34
27
 
35
- def get_system_params()
36
- return @system_parameters
28
+ # When defaults change, we need to recompute parameters hierarchy
29
+ compute_all()
37
30
  end
38
31
 
39
- def load_parameters()
40
- @project_parameters = load_parameters_file(@config.project_params_path)
41
- @user_parameters = load_parameters_file(@config.user_params_path)
42
- @system_parameters = load_parameters_file(@config.system_params_path)
43
-
44
- parameters = Hash.new()
45
-
46
- if @project_parameters == nil and @user_parameters == nil and @system_parameters == nil
47
- return parameters
48
- end
32
+ def compute_all()
33
+ @all = Hash.new()
34
+ @all.deep_merge!(@defaults) if @defaults != nil
35
+ @all.deep_merge!(@system) if @system != nil
36
+ @all.deep_merge!(@user) if @user != nil
37
+ @all.deep_merge!(@project) if @project != nil
49
38
 
50
- parameters.deep_merge!(@system_parameters) if @system_parameters != nil
51
- parameters.deep_merge!(@user_parameters) if @user_parameters != nil
52
- parameters.deep_merge!(@project_parameters) if @project_parameters != nil
39
+ self.recompute(@all)
53
40
 
54
- return parameters
41
+ return @all
55
42
  end
56
43
 
57
- def load_parameters_file(file_path)
58
- data = parse(file_path)
44
+ def parse_parameters(file_path)
45
+ data = parse_data(file_path)
59
46
  if data == nil || !data.kind_of?(Hash)
60
47
  return
61
48
  end
@@ -68,7 +55,7 @@ module Nugrant
68
55
  return data
69
56
  end
70
57
 
71
- def parse(file_path)
58
+ def parse_data(file_path)
72
59
  return if not File.exists?(file_path)
73
60
 
74
61
  begin
@@ -9,6 +9,7 @@ module Nugrant
9
9
  super(arguments, environment)
10
10
 
11
11
  @show_help = false
12
+ @show_defaults = false
12
13
  @show_system = false
13
14
  @show_user = false
14
15
  @show_project = false
@@ -26,6 +27,10 @@ module Nugrant
26
27
  @show_help = true
27
28
  end
28
29
 
30
+ parser.on("-d", "--defaults", "Show only defaults parameters") do
31
+ @show_defaults = true
32
+ end
33
+
29
34
  parser.on("-s", "--system", "Show only system parameters") do
30
35
  @show_system = true
31
36
  end
@@ -43,11 +48,6 @@ module Nugrant
43
48
  "of all parameters that would be available for usage in the Vagrantfile.\n" +
44
49
  "The hierarchy of the parameters is respected, so the final values are\n" +
45
50
  "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
51
  end
52
52
  end
53
53
 
@@ -57,11 +57,19 @@ module Nugrant
57
57
 
58
58
  return help(parser) if @show_help
59
59
 
60
- system() if @show_system
61
- user() if @show_user
62
- project() if @show_project
60
+ @logger.debug("'Parameters' each target VM...")
61
+ with_target_vms(arguments) do |vm|
62
+ parameters = vm.config.keys[:user].parameters
63
+
64
+ @env.ui.info("# Vm '#{vm.name}'", :prefix => false)
63
65
 
64
- all() if !@show_system && !@show_user && !@show_project
66
+ defaults(parameters) if @show_defaults
67
+ system(parameters) if @show_system
68
+ user(parameters) if @show_user
69
+ project(parameters) if @show_project
70
+
71
+ all(parameters) if !@show_defaults && !@show_system && !@show_user && !@show_project
72
+ end
65
73
 
66
74
  return 0
67
75
  end
@@ -70,55 +78,57 @@ module Nugrant
70
78
  @env.ui.info(parser.help, :prefix => false)
71
79
  end
72
80
 
73
- def system()
74
- parameters = Nugrant::Parameters.new()
75
-
76
- print_header("System")
77
- print_parameters(parameters.get_system_params())
81
+ def defaults(parameters)
82
+ print_results("Defaults", parameters.defaults)
78
83
  end
79
84
 
80
- def user()
81
- parameters = Nugrant::Parameters.new()
82
-
83
- print_header("User")
84
- print_parameters(parameters.get_user_params())
85
+ def system(parameters)
86
+ print_results("System", parameters.system)
85
87
  end
86
88
 
87
- def project()
88
- parameters = Nugrant::Parameters.new()
89
-
90
- print_header("Project")
91
- print_parameters(parameters.get_project_params())
89
+ def user(parameters)
90
+ print_results("User", parameters.user)
92
91
  end
93
92
 
94
- def all()
95
- parameters = Nugrant::Parameters.new()
96
-
97
- print_parameters(parameters.get_params())
93
+ def project(parameters)
94
+ print_results("Project", parameters.project)
98
95
  end
99
96
 
100
- def print_header(kind)
101
- @env.ui.info("#{kind.capitalize} parameters", :prefix => false)
102
- @env.ui.info("-----------------------------------------------", :prefix => false)
97
+ def all(parameters)
98
+ print_results("All", parameters.all)
103
99
  end
104
100
 
105
- def print_parameters(parameters)
101
+ def print_results(kind, parameters)
106
102
  if !parameters || parameters.empty?()
103
+ print_header(kind)
107
104
  @env.ui.info(" Empty", :prefix => false)
108
105
  @env.ui.info("", :prefix => false)
109
106
  return
110
107
  end
111
108
 
112
- data = {
109
+ print_parameters(kind, {
113
110
  'config' => {
114
111
  'user' => parameters
115
112
  }
116
- }
113
+ })
114
+ end
117
115
 
118
- string = Nugrant::Helper::Yaml.format(data.to_yaml)
116
+ def print_parameters(kind, data)
117
+ string = Nugrant::Helper::Yaml.format(data.to_yaml, :indent => 1)
118
+
119
+ print_header(kind)
119
120
  @env.ui.info(string, :prefix => false)
120
121
  @env.ui.info("", :prefix => false)
121
122
  end
123
+
124
+ def print_header(kind, length = 50)
125
+ @env.ui.info(" #{kind.capitalize} Parameters", :prefix => false)
126
+ @env.ui.info(" " + "-" * length, :prefix => false)
127
+ end
128
+
129
+ def compute_header_length(string)
130
+
131
+ end
122
132
  end
123
133
  end
124
134
  end
@@ -4,6 +4,8 @@ module Nugrant
4
4
  module Vagrant
5
5
  module Config
6
6
  class User < ::Vagrant::Config::Base
7
+ attr_reader :parameters
8
+
7
9
  def initialize()
8
10
  @parameters = Nugrant::Parameters.new()
9
11
  end
@@ -1,3 +1,3 @@
1
1
  module Nugrant
2
- VERSION = "0.0.12"
2
+ VERSION = "0.0.13"
3
3
  end
@@ -12,9 +12,9 @@ Gem::Specification.new do |gem|
12
12
  gem.homepage = "https://github.com/nuecho/nugrant"
13
13
  gem.summary = "Vagrant plugin to enable user specific configuration parameters."
14
14
  gem.description = <<-EOF
15
- This gem is in fact a Vagrant pluging. By installing this gem, it will be
15
+ This gem is in fact a Vagrant plugin. By installing this gem, it will be
16
16
  possible to define user specific configuration files that will be merge
17
- directly into the Vagrant configuration. This is usefull if you need to
17
+ directly into the Vagrant configuration. This is useful if you need to
18
18
  share a Vagrantfile to multiple developers but would like to customize
19
19
  some parameters for each users differently.
20
20
  EOF
@@ -183,11 +183,6 @@ class Nugrant::TestParameters < Test::Unit::TestCase
183
183
  def test_defaults()
184
184
  filetypes.each do |params_filetype|
185
185
  parameters = create_parameters(params_filetype, "params_simple", invalid_path, invalid_path)
186
- parameters.defaults({"test" => "override", "level" => "new"})
187
-
188
- assert_equal("value", parameters.test)
189
- assert_equal("new", parameters.level)
190
-
191
186
  parameters.defaults = {"test" => "override1", "level" => "new1"}
192
187
 
193
188
  assert_equal("value", parameters.test)
@@ -198,7 +193,7 @@ class Nugrant::TestParameters < Test::Unit::TestCase
198
193
  def test_empty_file()
199
194
  filetypes.each do |params_filetype|
200
195
  parameters = create_parameters(params_filetype, "params_empty", invalid_path, invalid_path)
201
- parameters.defaults({"test" => "value"})
196
+ parameters.defaults = {"test" => "value"}
202
197
 
203
198
  assert_equal("value", parameters.test)
204
199
  end
@@ -208,7 +203,7 @@ class Nugrant::TestParameters < Test::Unit::TestCase
208
203
  ["boolean", "list"].each do |wrong_type|
209
204
  filetypes.each do |params_filetype|
210
205
  parameters = create_parameters(params_filetype, "params_#{wrong_type}", invalid_path, invalid_path)
211
- parameters.defaults({"test" => "value"})
206
+ parameters.defaults = {"test" => "value"}
212
207
 
213
208
  assert_equal("value", parameters.test)
214
209
  end
@@ -81,84 +81,4 @@ class Nugrant::TestParameterBag < Test::Unit::TestCase
81
81
  bag["invalid_value"]
82
82
  end
83
83
  end
84
-
85
- def test_restricted_key_defaults()
86
- assert_raise(ArgumentError) do
87
- results = create_bag({"defaults" => "one"})
88
- puts("Results: #{results.inspect} (Should have thrown!)")
89
- end
90
-
91
- assert_raise(ArgumentError) do
92
- results = create_bag({"level" => {"defaults" => "value"}})
93
- puts("Results: #{results.inspect} (Should have thrown!)")
94
- end
95
- end
96
-
97
- def test_defaults()
98
- run_test_defaults({
99
- "first" => {
100
- "level1" => "value1",
101
- "level2" => "value2",
102
- "deeper" => {
103
- "level3" => "value3"
104
- }
105
- },
106
- }, {
107
- "first" => {
108
- "level1" => "default1",
109
- "level3" => "default3",
110
- "deeper" => {
111
- "level3" => "default3",
112
- "level4" => "value4"
113
- }
114
- },
115
- "second" => {
116
- "level1" => "default1"
117
- },
118
- "third" => "default3"
119
- }, {
120
- "first" => {
121
- "level1" => "value1",
122
- "level2" => "value2",
123
- "level3" => "default3",
124
- "deeper" => {
125
- "level3" => "value3",
126
- "level4" => "value4"
127
- }
128
- },
129
- "second" => {
130
- "level1" => "default1"
131
- },
132
- "third" => "default3"
133
- })
134
- end
135
-
136
- def test_defaults_empty()
137
- defaults = {
138
- "first" => {
139
- "second" => {
140
- "third" => {
141
- "value1" => "one",
142
- "value2" => "two"
143
- },
144
- "fourth" => "third",
145
- },
146
- "fifth" => "four"
147
- }
148
- }
149
-
150
- run_test_defaults({}, defaults, defaults)
151
- end
152
-
153
- def run_test_defaults(parameters, parameters_defaults, expected)
154
- bag = create_bag(parameters)
155
- bag.defaults(parameters_defaults)
156
-
157
- assert_bag(expected, bag)
158
-
159
- bag = create_bag(parameters)
160
- bag.defaults = parameters_defaults
161
-
162
- assert_bag(expected, bag)
163
- end
164
84
  end
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.12
4
+ version: 0.0.13
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: 2013-02-10 00:00:00.000000000 Z
12
+ date: 2013-02-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: deep_merge
@@ -59,9 +59,9 @@ dependencies:
59
59
  - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.0.5
62
- description: ! " This gem is in fact a Vagrant pluging. By installing this gem,
62
+ description: ! " This gem is in fact a Vagrant plugin. By installing this gem,
63
63
  it will be\n possible to define user specific configuration files that will
64
- be merge\n directly into the Vagrant configuration. This is usefull if you need
64
+ be merge\n directly into the Vagrant configuration. This is useful if you need
65
65
  to\n share a Vagrantfile to multiple developers but would like to customize\n
66
66
  \ some parameters for each users differently.\n"
67
67
  email:
@@ -141,7 +141,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
141
141
  version: '0'
142
142
  segments:
143
143
  - 0
144
- hash: -519440520645182635
144
+ hash: -1143289133319579260
145
145
  required_rubygems_version: !ruby/object:Gem::Requirement
146
146
  none: false
147
147
  requirements:
@@ -150,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
150
150
  version: '0'
151
151
  segments:
152
152
  - 0
153
- hash: -519440520645182635
153
+ hash: -1143289133319579260
154
154
  requirements: []
155
155
  rubyforge_project:
156
156
  rubygems_version: 1.8.24