masterplan 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem "activesupport", '~>2.3.5'
3
+ gem "activesupport"
4
4
 
5
5
  group :development do
6
6
  gem "rspec", "~> 2.3.0"
data/Gemfile.lock CHANGED
@@ -1,15 +1,19 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (2.3.10)
5
- diff-lcs (1.1.2)
4
+ activesupport (3.2.2)
5
+ i18n (~> 0.6)
6
+ multi_json (~> 1.0)
7
+ diff-lcs (1.1.3)
6
8
  git (1.2.5)
9
+ i18n (0.6.0)
7
10
  jeweler (1.5.2)
8
11
  bundler (~> 1.0.0)
9
12
  git (>= 1.2.5)
10
13
  rake
11
- rake (0.8.7)
12
- rcov (0.9.9)
14
+ multi_json (1.1.0)
15
+ rake (0.9.2.2)
16
+ rcov (1.0.0)
13
17
  rspec (2.3.0)
14
18
  rspec-core (~> 2.3.0)
15
19
  rspec-expectations (~> 2.3.0)
@@ -23,7 +27,7 @@ PLATFORMS
23
27
  ruby
24
28
 
25
29
  DEPENDENCIES
26
- activesupport (~> 2.3.5)
30
+ activesupport
27
31
  bundler (~> 1.0.0)
28
32
  jeweler (~> 1.5.2)
29
33
  rcov
data/README.rdoc CHANGED
@@ -128,6 +128,12 @@ The implicit rules are:
128
128
 
129
129
  You can add extra rules with the rule method - see Masterplan::DefineRules#rule for details.
130
130
 
131
+ You can control the verbosity of the output with the :format option:
132
+
133
+ >> Masterplan.compare(:scheme => doc, :to => {:example => :data}, :format => :mini)
134
+
135
+ Valid values are :full (the default), or :mini. :mini produces only a one-line output (leaving out the "Expected...but was" part).
136
+
131
137
  There is also an added assertion for unit tests or specs:
132
138
 
133
139
  assert_masterplan(doc, [{:example => :data})
@@ -152,15 +158,12 @@ Note that for the moment, schemes, i.e. the outermost object, can only be hashes
152
158
 
153
159
  (sudo) gem install masterplan
154
160
 
161
+ (Note that the latest version is probably not available as a gem directly).
162
+
155
163
  Or, install latest version from Github with bundler by adding this to your Gemfile:
156
164
 
157
165
  gem 'masterplan', :git => 'git://github.com/traveliq/masterplan.git'
158
166
 
159
- == Dependencies
160
-
161
- You'll need ActiveSupport, but that should be handled automatically.
162
- Under Ruby 1.9.x, however, you need the test-unit gem. It works for us with test-unit 1.2.3.
163
-
164
167
  == Authors
165
168
 
166
169
  Martin Tepper (monogreen.de), Holger Pillmann (holger.pillmann@gmail.com), Dr. Florian Odronitz (odo@mac.com)
data/Rakefile CHANGED
@@ -13,12 +13,12 @@ require 'jeweler'
13
13
  Jeweler::Tasks.new do |gem|
14
14
  # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
15
  gem.name = "masterplan"
16
- gem.homepage = "http://github.com/traveliq/masterplan"
16
+ gem.homepage = "http://github.com/MGPalmer/masterplan"
17
17
  gem.license = "MIT"
18
18
  summary = %Q{Masterplan is a library for comparing Ruby data structures against predefined templates - like XML Schema without the XML.}
19
19
  gem.summary = summary
20
20
  gem.description = summary + " Please see the README on github for more information."
21
- gem.email = "developer@traveliq.net"
21
+ gem.email = "mgpalmer@monogreen.de"
22
22
  gem.authors = ["Martin Tepper"]
23
23
  # Include your dependencies below. Runtime dependencies are required when using your gem,
24
24
  # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.0
1
+ 0.5.0
data/lib/masterplan.rb CHANGED
@@ -3,9 +3,6 @@ require 'active_support/version'
3
3
  if ActiveSupport::VERSION::STRING >= "3.0.0"
4
4
  require 'active_support/core_ext'
5
5
  end
6
- if RUBY_VERSION > '1.9'
7
- gem 'test-unit'
8
- end
9
6
  require 'test/unit/assertions'
10
7
  require 'masterplan'
11
8
  require 'masterplan/rule'
@@ -20,12 +17,14 @@ module Masterplan
20
17
 
21
18
  class << self
22
19
 
23
- def compare(options = {:scheme => {}, :to => {}})
20
+ def compare(options = {:scheme => {}, :to => {}, :format => :full})
24
21
  scheme = options[:scheme]
25
22
  testee = options[:to]
23
+ format = options[:format] || :full
26
24
  raise ArgumentError, ":to needs to be a hash !" unless testee.is_a?(Hash)
27
25
  raise ArgumentError, ":scheme needs to be a Masterplan::Document !" unless scheme.is_a?(Document)
28
- compare_hash(scheme, testee)
26
+ raise ArgumentError, ":format needs to be one of [:full, :mini] !" unless [:full, :mini].include?(format)
27
+ compare_hash(scheme, testee, format)
29
28
  true
30
29
  end
31
30
 
@@ -39,14 +38,44 @@ module Masterplan
39
38
  end
40
39
  end
41
40
 
42
- def compare_hash(template, testee, trail = ["root"])
43
- template.stringify_keys!
41
+ def compare_hash_keys(template, testee, trail)
42
+ mandatory_keys = Set.new
43
+ optional_keys = Set.new
44
+ template.keys.each do |key|
45
+ if key.is_a?(Masterplan::Rule) && key.options["optional"]
46
+ optional_keys << key.example_value.to_s
47
+ else
48
+ mandatory_keys << key.to_s
49
+ end
50
+ end
51
+ failed = false
44
52
  testee.stringify_keys!
45
- raise FailedError, "keys don't match in #{format_path(trail)}:\nexpected:\t#{template.keys.sort.join(',')}\nreceived:\t#{testee.keys.sort.join(',')}" if template.keys.sort != testee.keys.sort
46
- template.each do |t_key, t_value|
53
+ testee_set = Set.new(testee.keys)
54
+ if((mandatory_keys - testee_set).size > 0) # missing keys
55
+ failed = true
56
+ else
57
+ extra_keys = (testee_set - mandatory_keys)
58
+ if extra_keys.size > 0 && !extra_keys.subset?(optional_keys)
59
+ failed = true
60
+ end
61
+ end
62
+ if failed
63
+ raise FailedError, "keys don't match in #{format_path(trail)}:\nexpected:\t#{mandatory_keys.sort.join(',')}\nreceived:\t#{testee.keys.sort.join(',')}"
64
+ end
65
+ end
66
+
67
+ def compare_hash(template, testee, format, trail = ["root"])
68
+ compare_hash_keys(template, testee, trail)
69
+ template.each do |t_key_or_rule, t_value|
70
+ key_is_optional = t_key_or_rule.is_a?(Masterplan::Rule) && t_key_or_rule.options["optional"]
71
+ t_key = if key_is_optional
72
+ t_key_or_rule.example_value.to_s
73
+ else
74
+ t_key_or_rule.to_s
75
+ end
47
76
  current_path = trail + [t_key]
48
77
  value = testee[t_key]
49
- compare_value(t_value, value, format_path(current_path))
78
+ compare_value(t_value, value, format_path(current_path)) unless key_is_optional and value.nil?
50
79
  if value && t_value.is_a?(Array)
51
80
  # all array elements need to be of the same type as the first value in the template
52
81
  elements_template = t_value.first
@@ -54,7 +83,7 @@ module Masterplan
54
83
  array_path = current_path + [index]
55
84
  compare_value(elements_template, elements_value, format_path(array_path))
56
85
  if elements_value.is_a?(Hash)
57
- compare_hash(elements_template, elements_value, array_path)
86
+ compare_hash(elements_template, elements_value, format, array_path)
58
87
  end
59
88
  end
60
89
  end
@@ -64,16 +93,16 @@ module Masterplan
64
93
  array_path = current_path + [index]
65
94
  compare_value(elements_template, elements_value, format_path(array_path))
66
95
  if elements_value.is_a?(Hash)
67
- compare_hash(elements_template, elements_value, array_path)
96
+ compare_hash(elements_template, elements_value, format, array_path)
68
97
  end
69
98
  end
70
99
  end
71
100
  if value.is_a?(Hash)
72
101
  if t_value.is_a?(Masterplan::Rule)
73
102
  compare_value(t_value, value, current_path)
74
- compare_hash(t_value.example_value, value, current_path)
103
+ compare_hash(t_value.example_value, value, format, current_path)
75
104
  else
76
- compare_hash(t_value, value, current_path)
105
+ compare_hash(t_value, value, format, current_path)
77
106
  end
78
107
  end
79
108
  end
@@ -84,10 +113,14 @@ module Masterplan
84
113
  error = Masterplan::FailedError.new
85
114
  error.printed = true
86
115
 
87
- expected = PP.pp(template, '')
88
- outcome = PP.pp(testee, '')
116
+ if format == :mini
117
+ raise error, e.message, caller
118
+ else
119
+ expected = PP.pp(template, '')
120
+ outcome = PP.pp(testee, '')
89
121
 
90
- raise error, "#{e.message}\n\nExpected:\n#{expected}\n\nbut was:\n#{outcome}", caller
122
+ raise error, "#{e.message}\n\nExpected:\n#{expected}\n\nbut was:\n#{outcome}", caller
123
+ end
91
124
  end
92
125
 
93
126
  def format_path(trail)
@@ -5,11 +5,14 @@ module Masterplan
5
5
  module DefineRules
6
6
 
7
7
  # This turns the supplied +example_value+ (any object) into an object that carries rules about itself with it.
8
- # The rules will be applied when a template is compared with assert_masterplan. Rules are:
8
+ # The rules will be applied when a template is compared with assert_masterplan or Masterplan.compare. Rules are:
9
9
  # (default): This always applies - the value must be of the same class as the +example_value+
10
10
  # 'allow_nil': This allows the value to be nil (breaking the first rule)
11
11
  # 'included_in': Pass an array of values - the value must be one of these
12
12
  # 'matches': Pass a regexp - the value must match it, and be a String
13
+ #
14
+ # There is one special rule that only works on hash keys:
15
+ # 'optional' : This makes the hash key optional, i.e. no error will occur if the key (and its value) are missing.
13
16
  def rule(example_value, options = {})
14
17
  Rule.new(example_value, options)
15
18
  end
@@ -14,7 +14,7 @@ module Masterplan
14
14
  def to_hash
15
15
  result = {}
16
16
  each do |k, v|
17
- result[k] = self.class.derulerize(v)
17
+ result[self.class.derulerize(k)] = self.class.derulerize(v)
18
18
  end
19
19
  result
20
20
  end
@@ -1,7 +1,7 @@
1
1
  module Masterplan
2
2
  class Rule
3
3
 
4
- OPTIONS = ["allow_nil", "compare_each", "included_in", "matches"]
4
+ OPTIONS = ["allow_nil", "compare_each", "included_in", "matches", "optional"]
5
5
 
6
6
  attr_accessor :options, :example_value
7
7
 
@@ -11,6 +11,7 @@ module Masterplan
11
11
  options['compare_each'] ||= false
12
12
  options["included_in"] ||= false
13
13
  options["matches"] ||= false
14
+ options["optional"] ||= false
14
15
  raise ArgumentError, "options can be #{OPTIONS.join(',')}, not #{options.keys.inspect}" unless options.keys.sort == OPTIONS.sort
15
16
  self.example_value = example
16
17
  self.options = options
data/masterplan.gemspec CHANGED
@@ -4,14 +4,14 @@
4
4
  # -*- encoding: utf-8 -*-
5
5
 
6
6
  Gem::Specification.new do |s|
7
- s.name = %q{masterplan}
8
- s.version = "0.4.0"
7
+ s.name = "masterplan"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Martin Tepper"]
12
- s.date = %q{2011-02-09}
13
- s.description = %q{Masterplan is a library for comparing Ruby data structures against predefined templates - like XML Schema without the XML. Please see the README on github for more information.}
14
- s.email = %q{developer@traveliq.net}
12
+ s.date = "2012-04-11"
13
+ s.description = "Masterplan is a library for comparing Ruby data structures against predefined templates - like XML Schema without the XML. Please see the README on github for more information."
14
+ s.email = "mgpalmer@monogreen.de"
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
17
  "README.rdoc"
@@ -34,11 +34,11 @@ Gem::Specification.new do |s|
34
34
  "spec/masterplan_spec.rb",
35
35
  "spec/spec_helper.rb"
36
36
  ]
37
- s.homepage = %q{http://github.com/traveliq/masterplan}
37
+ s.homepage = "http://github.com/MGPalmer/masterplan"
38
38
  s.licenses = ["MIT"]
39
39
  s.require_paths = ["lib"]
40
- s.rubygems_version = %q{1.5.0}
41
- s.summary = %q{Masterplan is a library for comparing Ruby data structures against predefined templates - like XML Schema without the XML.}
40
+ s.rubygems_version = "1.8.19"
41
+ s.summary = "Masterplan is a library for comparing Ruby data structures against predefined templates - like XML Schema without the XML."
42
42
  s.test_files = [
43
43
  "spec/masterplan_spec.rb",
44
44
  "spec/spec_helper.rb"
@@ -48,20 +48,20 @@ Gem::Specification.new do |s|
48
48
  s.specification_version = 3
49
49
 
50
50
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
- s.add_runtime_dependency(%q<activesupport>, ["~> 2.3.5"])
51
+ s.add_runtime_dependency(%q<activesupport>, [">= 0"])
52
52
  s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
53
53
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
54
54
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
55
55
  s.add_development_dependency(%q<rcov>, [">= 0"])
56
56
  else
57
- s.add_dependency(%q<activesupport>, ["~> 2.3.5"])
57
+ s.add_dependency(%q<activesupport>, [">= 0"])
58
58
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
59
59
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
60
60
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
61
61
  s.add_dependency(%q<rcov>, [">= 0"])
62
62
  end
63
63
  else
64
- s.add_dependency(%q<activesupport>, ["~> 2.3.5"])
64
+ s.add_dependency(%q<activesupport>, [">= 0"])
65
65
  s.add_dependency(%q<rspec>, ["~> 2.3.0"])
66
66
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
67
67
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
@@ -6,7 +6,7 @@ describe "Masterplan" do
6
6
  before(:each) do
7
7
  @scheme = Masterplan::Document.new({
8
8
  "ship" => {
9
- "parts" => [
9
+ :parts => [
10
10
  {
11
11
  "name" => "Mast",
12
12
  "length" => rule(12.3, :allow_nil => true),
@@ -19,7 +19,11 @@ describe "Masterplan" do
19
19
  "material" => "steel",
20
20
  "scream" => "HAAAAAARGH"
21
21
  }
22
- ]
22
+ ],
23
+ rule(:flags, :optional => true) => {
24
+ "image" => "jolly roger",
25
+ "count" => 1
26
+ }
23
27
  }
24
28
  })
25
29
  end
@@ -67,7 +71,17 @@ describe "Masterplan" do
67
71
  end.should raise_error(ArgumentError, /scheme needs to be a Masterplan::Document/)
68
72
  end
69
73
 
70
- it "complains if there are extra keys" do
74
+ it "complains if not given a proper format key" do
75
+ lambda do
76
+ Masterplan.compare(
77
+ :scheme => Masterplan::Document.new({}),
78
+ :to => {},
79
+ :format => :medium
80
+ )
81
+ end.should raise_error(ArgumentError, ":format needs to be one of [:full, :mini] !")
82
+ end
83
+
84
+ it "complains if there are extra keys (unless they are optional)" do
71
85
  test_value_and_expect(
72
86
  { :ship => {}, :boat => {} },
73
87
  Masterplan::FailedError, /expected: ship*\n*received: boat,ship/
@@ -88,6 +102,119 @@ describe "Masterplan" do
88
102
  )
89
103
  end
90
104
 
105
+ context "optional keys" do
106
+
107
+ it "complains if a value is nil when in an optional but given value" do
108
+ test_value_and_expect(
109
+ {
110
+ :ship => {
111
+ :parts => [
112
+ :name => "Thingy",
113
+ :length => 1.0,
114
+ :material => "human",
115
+ :scream => "UUUUUUUUH"
116
+ ],
117
+ :flags => {
118
+ "image" => nil,
119
+ "count" => 1
120
+ }
121
+ }
122
+ },
123
+ Masterplan::FailedError, /value at 'root'=>'ship'=>'flags'=>'image' \(NilClass\) is not a String/
124
+ )
125
+ end
126
+
127
+ it "complains if keys don't match up when in an optional but given value" do
128
+ test_value_and_expect(
129
+ {
130
+ :ship => {
131
+ :parts => [
132
+ :name => "Thingy",
133
+ :length => 1.0,
134
+ :material => "human",
135
+ :scream => "UUUUUUUUH"
136
+ ],
137
+ "flags" => {
138
+ "count" => 1
139
+ }
140
+ }
141
+ },
142
+ Masterplan::FailedError, /expected: count,image*\n*received: count/
143
+ )
144
+ end
145
+
146
+ context "with subsets of mandatory and optional keys" do
147
+ before(:each) do
148
+ @multi_scheme = Masterplan::Document.new({
149
+ :mandatory_1 => "aaa",
150
+ :mandatory_2 => "aaa",
151
+ rule(:optional_1, :optional => true) => "aaa",
152
+ rule(:optional_2, :optional => true) => "aaa",
153
+ })
154
+ end
155
+
156
+ it "doesn't complain when all keys are given" do
157
+ Masterplan.compare(
158
+ :scheme => @multi_scheme,
159
+ :to => {
160
+ :mandatory_1 => "aaa",
161
+ :mandatory_2 => "aaa",
162
+ :optional_1 => "aaa",
163
+ :optional_2 => "aaa",
164
+ }
165
+ ).should be_true
166
+ end
167
+
168
+ it "doesn't complain when only mandatory keys are given" do
169
+ Masterplan.compare(
170
+ :scheme => @multi_scheme,
171
+ :to => {
172
+ :mandatory_1 => "aaa",
173
+ :mandatory_2 => "aaa",
174
+ }
175
+ ).should be_true
176
+ end
177
+
178
+ it "doesn't complain when only some optional keys are given" do
179
+ Masterplan.compare(
180
+ :scheme => @multi_scheme,
181
+ :to => {
182
+ :mandatory_1 => "aaa",
183
+ :mandatory_2 => "aaa",
184
+ :optional_2 => "aaa"
185
+ }
186
+ ).should be_true
187
+ end
188
+
189
+ it "complains when one mandatory key is missing" do
190
+ lambda do
191
+ Masterplan.compare(
192
+ :scheme => @multi_scheme,
193
+ :to => {:optional_1 => "aa", :optional_2 => "aaa", :mandatory_2 => "aaa"}
194
+ )
195
+ end.should raise_error(Masterplan::FailedError, /expected: mandatory_1,mandatory_2*\n*received: mandatory_2,optional_1,optional_2/)
196
+ end
197
+
198
+ it "complains when all mandatory keys are missing" do
199
+ lambda do
200
+ Masterplan.compare(
201
+ :scheme => @multi_scheme,
202
+ :to => {:optional_1 => "aa", :optional_2 => "aaa"}
203
+ )
204
+ end.should raise_error(Masterplan::FailedError, /expected: mandatory_1,mandatory_2*\n*received:/)
205
+ end
206
+
207
+ it "complains when everything is missing" do
208
+ lambda do
209
+ Masterplan.compare(
210
+ :scheme => @multi_scheme,
211
+ :to => {}
212
+ )
213
+ end.should raise_error(Masterplan::FailedError, /expected: mandatory_1,mandatory_2*\n*received:/)
214
+ end
215
+ end
216
+ end
217
+
91
218
  it "does not complain if a value is nil and the rule allows nil" do
92
219
  Masterplan.compare(
93
220
  :scheme => @scheme,
@@ -109,11 +236,60 @@ describe "Masterplan" do
109
236
  )
110
237
  end
111
238
 
239
+ [nil, :full].each do |format|
240
+ it "produces full output for format = #{format}" do
241
+ lambda do
242
+ Masterplan.compare(
243
+ :scheme => @scheme,
244
+ :to => { :ship => [] },
245
+ :format => format
246
+ )
247
+ end.should raise_error(
248
+ /value at 'root'=>'ship' \(Array\) is not a Hash !\n\s*?Expected:.*?but was/m
249
+ )
250
+ end
251
+ end
252
+
253
+ it "produces one-line output when using :mini format" do
254
+ lambda do
255
+ Masterplan.compare(
256
+ :scheme => @scheme,
257
+ :to => { :ship => [] },
258
+ :format => :mini
259
+ )
260
+ end.should raise_error(
261
+ "value at 'root'=>'ship' (Array) is not a Hash !"
262
+ )
263
+ end
264
+
112
265
  it "checks all values of value arrays, but only against the first array value of the scheme"
113
266
  it "checks all array values one-to-one if the compare_each rule is used"
114
267
  end
115
268
 
116
- it "convertsinto plain example hashes"
269
+ it "converts into plain example hashes" do
270
+ @scheme.to_hash.should == {
271
+ "ship" => {
272
+ :parts => [
273
+ {
274
+ "name" => "Mast",
275
+ "scream" => "AAAAAAH",
276
+ "length" => 12.3,
277
+ "material" => "wood"
278
+ },
279
+ {
280
+ "name" => "Rudder",
281
+ "scream" => "HAAAAAARGH",
282
+ "length" => nil,
283
+ "material" => "steel"
284
+ }
285
+ ],
286
+ :flags => {
287
+ "image" => "jolly roger",
288
+ "count" => 1
289
+ }
290
+ }
291
+ }
292
+ end
117
293
  it "doesn't create a Document out of anything other than a Hash"
118
294
  it "checks that the examples of rules obey the rules"
119
295
  it "has a unit test extension method"
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: masterplan
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 4
8
+ - 5
9
9
  - 0
10
- version: 0.4.0
10
+ version: 0.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Martin Tepper
@@ -15,28 +15,24 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-02-09 00:00:00 +01:00
19
- default_executable:
18
+ date: 2012-04-11 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- name: activesupport
23
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ requirement: &id001 !ruby/object:Gem::Requirement
24
22
  none: false
25
23
  requirements:
26
- - - ~>
24
+ - - ">="
27
25
  - !ruby/object:Gem::Version
28
- hash: 9
26
+ hash: 3
29
27
  segments:
30
- - 2
31
- - 3
32
- - 5
33
- version: 2.3.5
28
+ - 0
29
+ version: "0"
30
+ version_requirements: *id001
31
+ name: activesupport
34
32
  prerelease: false
35
33
  type: :runtime
36
- requirement: *id001
37
34
  - !ruby/object:Gem::Dependency
38
- name: rspec
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
35
+ requirement: &id002 !ruby/object:Gem::Requirement
40
36
  none: false
41
37
  requirements:
42
38
  - - ~>
@@ -47,12 +43,12 @@ dependencies:
47
43
  - 3
48
44
  - 0
49
45
  version: 2.3.0
46
+ version_requirements: *id002
47
+ name: rspec
50
48
  prerelease: false
51
49
  type: :development
52
- requirement: *id002
53
50
  - !ruby/object:Gem::Dependency
54
- name: bundler
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
51
+ requirement: &id003 !ruby/object:Gem::Requirement
56
52
  none: false
57
53
  requirements:
58
54
  - - ~>
@@ -63,12 +59,12 @@ dependencies:
63
59
  - 0
64
60
  - 0
65
61
  version: 1.0.0
62
+ version_requirements: *id003
63
+ name: bundler
66
64
  prerelease: false
67
65
  type: :development
68
- requirement: *id003
69
66
  - !ruby/object:Gem::Dependency
70
- name: jeweler
71
- version_requirements: &id004 !ruby/object:Gem::Requirement
67
+ requirement: &id004 !ruby/object:Gem::Requirement
72
68
  none: false
73
69
  requirements:
74
70
  - - ~>
@@ -79,12 +75,12 @@ dependencies:
79
75
  - 5
80
76
  - 2
81
77
  version: 1.5.2
78
+ version_requirements: *id004
79
+ name: jeweler
82
80
  prerelease: false
83
81
  type: :development
84
- requirement: *id004
85
82
  - !ruby/object:Gem::Dependency
86
- name: rcov
87
- version_requirements: &id005 !ruby/object:Gem::Requirement
83
+ requirement: &id005 !ruby/object:Gem::Requirement
88
84
  none: false
89
85
  requirements:
90
86
  - - ">="
@@ -93,11 +89,12 @@ dependencies:
93
89
  segments:
94
90
  - 0
95
91
  version: "0"
92
+ version_requirements: *id005
93
+ name: rcov
96
94
  prerelease: false
97
95
  type: :development
98
- requirement: *id005
99
96
  description: Masterplan is a library for comparing Ruby data structures against predefined templates - like XML Schema without the XML. Please see the README on github for more information.
100
- email: developer@traveliq.net
97
+ email: mgpalmer@monogreen.de
101
98
  executables: []
102
99
 
103
100
  extensions: []
@@ -122,8 +119,7 @@ files:
122
119
  - masterplan.gemspec
123
120
  - spec/masterplan_spec.rb
124
121
  - spec/spec_helper.rb
125
- has_rdoc: true
126
- homepage: http://github.com/traveliq/masterplan
122
+ homepage: http://github.com/MGPalmer/masterplan
127
123
  licenses:
128
124
  - MIT
129
125
  post_install_message:
@@ -152,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
148
  requirements: []
153
149
 
154
150
  rubyforge_project:
155
- rubygems_version: 1.5.0
151
+ rubygems_version: 1.8.19
156
152
  signing_key:
157
153
  specification_version: 3
158
154
  summary: Masterplan is a library for comparing Ruby data structures against predefined templates - like XML Schema without the XML.