configtoolkit 1.0.6 → 1.0.7

Sign up to get free protection for your applications and to get access to all the features.
@@ -40,8 +40,21 @@ class ConstrainedArray
40
40
  # store the constraints.
41
41
  #
42
42
  class << self
43
+ #
44
+ # The class of all of the elements.
45
+ #
43
46
  attr_reader :element_class
47
+
48
+ #
49
+ # The minimum number of elements, or nil if there is no
50
+ # minimum.
51
+ #
44
52
  attr_reader :min_num_elements
53
+
54
+ #
55
+ # The maximum number of elements, or nil if there is no
56
+ # maximum.
57
+ #
45
58
  attr_reader :max_num_elements
46
59
  end
47
60
 
@@ -3,7 +3,24 @@ require 'yaml'
3
3
 
4
4
  module ConfigToolkit
5
5
 
6
+ #
7
+ # This class implements the reader interface for
8
+ # YAML configuration files. It basically is a wrapper
9
+ # over Ruby's YAML library.
10
+ #
6
11
  class YAMLReader
12
+ #
13
+ # ====Description:
14
+ # This constructs a YAMLReader instance for stream,
15
+ # where stream either is a file name (a String)
16
+ # or an IO object.
17
+ #
18
+ # ====Parameters:
19
+ # [stream]
20
+ # A file name (String) or an IO object. If
21
+ # stream is a file name, then the YAMLReader
22
+ # will open the associated file.
23
+ #
7
24
  def initialize(stream)
8
25
  if(stream.class == String)
9
26
  @stream = File.open(stream, "r")
@@ -12,6 +29,11 @@ class YAMLReader
12
29
  end
13
30
  end
14
31
 
32
+ #
33
+ # ====Returns:
34
+ # the contents of the next YAML document read from the underlying
35
+ # stream.
36
+ #
15
37
  def read
16
38
  return YAML::load(@stream)
17
39
  end
@@ -3,57 +3,136 @@ require 'yaml'
3
3
 
4
4
  module ConfigToolkit
5
5
 
6
+ #
7
+ # This class implements the writer interface for
8
+ # YAML configuration files. It basically is a wrapper
9
+ # over Ruby's YAML library.
10
+ #
11
+ # YAML natively supports Integers, Floats, Strings, and Booleans.
12
+ # Instances of other classes are written by Ruby to YAML configuration
13
+ # files by recursively writing each of the instance's variables and
14
+ # noting in the YAML file the associated Ruby classes. This may not
15
+ # be desired behavior for a configuration file, especially if the file
16
+ # is going to be shared with a non-Ruby program. On the other hand,
17
+ # if only Ruby is using the configuration the file, this behavior may
18
+ # well be very desirable (since arbitrarily complex objects can be
19
+ # supported properly by the YAML format). Thus, the YAMLWriter
20
+ # offers two options:
21
+ # * Only standard YAML classes will be written. Values of classes
22
+ # not supported natively by YAML will be converted to Strings.
23
+ # * Non-standard YAML classes will be written.
24
+ #
6
25
  class YAMLWriter
7
- def initialize(stream, only_output_standard_yaml_types)
26
+ #
27
+ # ====Description:
28
+ # This constructs a YAMLWriter instance for stream,
29
+ # where stream either is a file name (a String)
30
+ # or an IO object. If only_output_standard_yaml_classes, then
31
+ # the writer only will output standard YAML classes; all classes not
32
+ # native to YAML will be converted into Strings before being
33
+ # written. If !only_output_standard_yaml_classes, however, then
34
+ # Ruby serialized classes will be written to the configuration
35
+ # file.
36
+ #
37
+ # ====Parameters:
38
+ # [stream]
39
+ # A file name (String) or an IO object. If
40
+ # stream is a file name, then the YAMLReader
41
+ # will open the associated file.
42
+ #
43
+ # [only_output_standard_yaml_classes]
44
+ # Whether or not the writer should output only standard
45
+ # YAML classes.
46
+ #
47
+ def initialize(stream, only_output_standard_yaml_classes)
8
48
  if(stream.class == String)
9
49
  @stream = File.open(stream, "w")
10
50
  else
11
51
  @stream = stream
12
52
  end
13
53
 
14
- @only_output_standard_yaml_types = only_output_standard_yaml_types
54
+ @only_output_standard_yaml_classes = only_output_standard_yaml_classes
15
55
  end
16
56
 
17
- def convert_value_to_standard_yaml_type(param_value)
18
- if(param_value.class == Hash)
19
- return convert_hash_values_to_standard_yaml_types(param_value)
20
- elsif(param_value.class == Array)
21
- new_param_value = []
22
-
23
- param_value.each do |element|
24
- new_param_value.push(convert_value_to_standard_yaml_type(element))
57
+ #
58
+ # ====Description:
59
+ # This method converts value to an equivalent representation
60
+ # in a standard YAML class. In particular,
61
+ # * Hash eleemnts are converted with a
62
+ # convert_hash_value_to_standard_yaml_classes call
63
+ # * Arrays elements are converted with recursive
64
+ # convert_value_to_standard_yaml_class calls
65
+ # * Non-standard YAML classes are converted to Strings (via to_s)
66
+ #
67
+ # ====Parameters:
68
+ # [value]
69
+ # The value to convert
70
+ #
71
+ # ====Returns:
72
+ # An equivalent representation of value in a standard YAML class
73
+ #
74
+ def convert_value_to_standard_yaml_class(value)
75
+ if(value.class == Hash)
76
+ return convert_hash_values_to_standard_yaml_classes(value)
77
+ elsif(value.class == Array)
78
+ new_value = []
79
+
80
+ value.each do |element|
81
+ new_value.push(convert_value_to_standard_yaml_class(element))
25
82
  end
26
83
 
27
- return new_param_value
28
- elsif((param_value.class <= Integer) ||
29
- (param_value.class <= Float) ||
30
- (param_value.class == TrueClass) ||
31
- (param_value.class == FalseClass) ||
32
- (param_value.class == String))
33
- return param_value
84
+ return new_value
85
+ elsif((value.class <= Integer) ||
86
+ (value.class <= Float) ||
87
+ (value.class == TrueClass) ||
88
+ (value.class == FalseClass) ||
89
+ (value.class == String))
90
+ return value
34
91
  else
35
- return param_value.to_s
92
+ return value.to_s
36
93
  end
37
94
  end
95
+ private :convert_value_to_standard_yaml_class
38
96
 
39
- def convert_hash_values_to_standard_yaml_types(config_hash)
40
- standard_yaml_typed_config_hash = {}
97
+ #
98
+ # ====Description:
99
+ # This method converts all elements of hash_value to standard
100
+ # YAML classes via convert_value_to_standard_yaml_class calls.
101
+ #
102
+ # ====Parameters:
103
+ # [hash_value]
104
+ # The Hash to convert
105
+ #
106
+ # ====Returns:
107
+ # An equivalent Hash, the values of which are of standard YAML classes.
108
+ #
109
+ def convert_hash_values_to_standard_yaml_classes(hash_value)
110
+ standard_yaml_class_hash_value = {}
41
111
 
42
- config_hash.each do |param_name, param_value|
43
- standard_yaml_typed_config_hash[param_name] = convert_value_to_standard_yaml_type(param_value)
112
+ hash_value.each do |param_name, value|
113
+ standard_yaml_class_hash_value[param_name] = convert_value_to_standard_yaml_class(value)
44
114
  end
45
115
 
46
- return standard_yaml_typed_config_hash
116
+ return standard_yaml_class_hash_value
47
117
  end
118
+ private :convert_hash_values_to_standard_yaml_classes
48
119
 
120
+ #
121
+ # ====Description:
122
+ # This method writes config_hash to the underlying stream.
123
+ #
124
+ # ====Parameters:
125
+ # [config_hash]
126
+ # The configuration hash to write
127
+ #
49
128
  def write(config_hash)
50
- if(@only_output_standard_yaml_types)
51
- output_config_hash = convert_hash_values_to_standard_yaml_types(config_hash)
129
+ if(@only_output_standard_yaml_classes)
130
+ output_hash = convert_hash_values_to_standard_yaml_classes(config_hash)
52
131
  else
53
- output_config_hash = config_hash
132
+ output_hash = config_hash
54
133
  end
55
134
 
56
- YAML::dump(output_config_hash, @stream)
135
+ YAML::dump(output_hash, @stream)
57
136
  @stream.flush()
58
137
  end
59
138
  end
data/test/test_yaml.rb CHANGED
@@ -13,17 +13,17 @@ class YAMLTest < Test::Unit::TestCase
13
13
  run_reader_test(ConfigToolkit::YAMLReader,
14
14
  "",
15
15
  REFERENCE_SAMPLE_CONFIG,
16
- get_test_config_file_name("sample.standard_yaml_types.yaml"))
16
+ get_test_config_file_name("sample.standard_yaml_classes.yaml"))
17
17
 
18
18
  run_reader_test(ConfigToolkit::YAMLReader,
19
19
  "",
20
20
  REFERENCE_SAMPLE_CONFIG,
21
- get_test_config_file_name("sample.ruby_yaml_types.yaml"))
21
+ get_test_config_file_name("sample.ruby_yaml_classes.yaml"))
22
22
 
23
23
  run_reader_test(ConfigToolkit::YAMLReader,
24
24
  "",
25
25
  REFERENCE_SAMPLE_CONFIG,
26
- File.new(get_test_config_file_name("sample.ruby_yaml_types.yaml"), "r"))
26
+ File.new(get_test_config_file_name("sample.ruby_yaml_classes.yaml"), "r"))
27
27
 
28
28
  run_reader_test(ConfigToolkit::YAMLReader,
29
29
  "contained_sample",
@@ -34,23 +34,23 @@ class YAMLTest < Test::Unit::TestCase
34
34
  def test_writers
35
35
  run_writer_test(ConfigToolkit::YAMLWriter,
36
36
  REFERENCE_SAMPLE_CONFIG,
37
- get_test_config_file_name("sample.standard_yaml_types.yaml"),
38
- get_test_config_file_name("sample.standard_yaml_types.dumped.yaml"),
39
- get_test_config_file_name("sample.standard_yaml_types.dumped.yaml"),
37
+ get_test_config_file_name("sample.standard_yaml_classes.yaml"),
38
+ get_test_config_file_name("sample.standard_yaml_classes.dumped.yaml"),
39
+ get_test_config_file_name("sample.standard_yaml_classes.dumped.yaml"),
40
40
  true)
41
41
 
42
42
  run_writer_test(ConfigToolkit::YAMLWriter,
43
43
  REFERENCE_SAMPLE_CONFIG,
44
- get_test_config_file_name("sample.ruby_yaml_types.yaml"),
45
- get_test_config_file_name("sample.ruby_yaml_types.dumped.yaml"),
46
- get_test_config_file_name("sample.ruby_yaml_types.dumped.yaml"),
44
+ get_test_config_file_name("sample.ruby_yaml_classes.yaml"),
45
+ get_test_config_file_name("sample.ruby_yaml_classes.dumped.yaml"),
46
+ get_test_config_file_name("sample.ruby_yaml_classes.dumped.yaml"),
47
47
  false)
48
48
 
49
49
  run_writer_test(ConfigToolkit::YAMLWriter,
50
50
  REFERENCE_SAMPLE_CONFIG,
51
- get_test_config_file_name("sample.standard_yaml_types.yaml"),
52
- get_test_config_file_name("sample.standard_yaml_types.dumped.yaml"),
53
- File.new(get_test_config_file_name("sample.standard_yaml_types.dumped.yaml"), "w"),
51
+ get_test_config_file_name("sample.standard_yaml_classes.yaml"),
52
+ get_test_config_file_name("sample.standard_yaml_classes.dumped.yaml"),
53
+ File.new(get_test_config_file_name("sample.standard_yaml_classes.dumped.yaml"), "w"),
54
54
  true)
55
55
 
56
56
  run_writer_test(ConfigToolkit::YAMLWriter,
@@ -65,8 +65,8 @@ class YAMLTest < Test::Unit::TestCase
65
65
  run_reader_writer_test(ConfigToolkit::YAMLReader,
66
66
  ConfigToolkit::YAMLWriter,
67
67
  REFERENCE_SAMPLE_CONFIG,
68
- [get_test_config_file_name("sample.standard_yaml_types.dumped.yaml")],
69
- [get_test_config_file_name("sample.standard_yaml_types.dumped.yaml"), false])
68
+ [get_test_config_file_name("sample.standard_yaml_classes.dumped.yaml")],
69
+ [get_test_config_file_name("sample.standard_yaml_classes.dumped.yaml"), false])
70
70
  run_reader_writer_test(ConfigToolkit::YAMLReader,
71
71
  ConfigToolkit::YAMLWriter,
72
72
  REFERENCE_CONTAINED_SAMPLE_CONFIG,
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: configtoolkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - DesigningPatterns
@@ -52,8 +52,8 @@ files:
52
52
  - test/contained_sample.yaml
53
53
  - test/firewall.yaml
54
54
  - test/machines.yaml
55
- - test/sample.ruby_yaml_types.yaml
56
- - test/sample.standard_yaml_types.yaml
55
+ - test/sample.ruby_yaml_classes.yaml
56
+ - test/sample.standard_yaml_classes.yaml
57
57
  - test/webserver.yaml
58
58
  has_rdoc: true
59
59
  homepage: http://configtoolkit.rubyforge.org/