nugrant 0.0.12 → 0.0.13

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.
@@ -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