jschematic 0.0.2 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- jschematic (0.0.1)
4
+ jschematic (0.0.2)
5
5
  addressable
6
6
 
7
7
  GEM
data/History.txt CHANGED
@@ -1,3 +1,9 @@
1
+ == 0.0.5
2
+ * Initial support for validation contexts (Mike Sassak)
3
+ * $ref support (Mike Sassak)
4
+ * Basic DateTime, Date support (Mike Sassak)
5
+ * Separate IPv4 and IPv6 classes (Mike Sassak)
6
+
1
7
  == 0.0.2
2
8
  * Refactored Properties and PatternProperties so the latter inherits from the former (Mike Sassak)
3
9
  * Simple IPv4 CIDR format support (Mike Sassak)
data/README.md CHANGED
@@ -2,24 +2,23 @@
2
2
 
3
3
  Jschematic is a JSON Schema v3 Validator for Ruby.
4
4
 
5
- It is currently incomplete, alpha quality software.
5
+ It is currently pre-release software. The basics work fairly well, but
6
+ it is a work in progress.
6
7
 
7
- Having said that, most of the core schema definition is supported
8
- with these exceptions:
8
+ Most of the core schema definition is supported with these exceptions:
9
9
 
10
- * $ref
11
10
  * $schema
12
11
  * extends
13
12
  * divisibleBy
14
13
  * disallow
15
14
 
16
- In addition to this, only IPv4, IPv6 and URI formats are currently
15
+ In addition to this, only DateTime, Date, IPv4, IPv6 and URI formats are currently
17
16
  implemented.
18
17
 
19
- Please report any bugs you find (and you will find bugs) at the issue
20
- tracker here: https://github.com/msassak/jschematic/issues.
18
+ Please report any bugs you find in the issue tracker here:
19
+ https://github.com/msassak/jschematic/issues.
21
20
 
22
- ## Usage
21
+ ## Basic Usage
23
22
 
24
23
  require 'jschematic'
25
24
  Jschematic.validate(json, schema) # => true or false
@@ -30,6 +29,10 @@ tracker here: https://github.com/msassak/jschematic/issues.
30
29
  Jschematic doesn't care how you turn JSON into Ruby (though we use the
31
30
  fine yajl-ruby gem for testing).
32
31
 
32
+ ## Advanced Usage
33
+
34
+ Hasn't been documented yet.
35
+
33
36
  ## Testing
34
37
 
35
38
  $ cucumber
@@ -42,6 +45,7 @@ Or `rake` if you want to run both.
42
45
  * http://tools.ietf.org/html/draft-zyp-json-schema-03
43
46
  * https://github.com/kriszyp/json-schema
44
47
  * http://tools.ietf.org/html/rfc3986
48
+ * https://groups.google.com/d/topic/json-schema/lftABvH5KkA/discussion
45
49
 
46
50
  ## Copyright
47
51
 
@@ -53,3 +53,37 @@ Feature: Core schema: format
53
53
  But these are not valid JSON:
54
54
  | "" |
55
55
  | "127.0.0.1" |
56
+
57
+ Scenario: Date-Time
58
+ When the schema is:
59
+ """
60
+ {
61
+ "type": "string",
62
+ "format": "date-time"
63
+ }
64
+ """
65
+ Then these are valid JSON:
66
+ | "1999-12-31T23:59:59Z" |
67
+ | "2011-02-27T10:12:13Z" |
68
+ | "1980-02-29T08:51:32Z" |
69
+ But these are not valid JSON:
70
+ | "1999-12-31" |
71
+ | "1981-02-29T01:01:01Z" |
72
+ | "August 1st, 1986" |
73
+
74
+ Scenario: Date
75
+ When the schema is:
76
+ """
77
+ {
78
+ "type": "string",
79
+ "format": "date"
80
+ }
81
+ """
82
+ Then these are valid JSON:
83
+ | "1999-12-31" |
84
+ | "2011-02-27" |
85
+ | "1980-02-29" |
86
+ But these are not valid JSON:
87
+ | "1981-02-29" |
88
+ | "August 1st, 1986" |
89
+
data/features/id.feature CHANGED
@@ -1,4 +1,10 @@
1
1
  Feature: Core schema: id
2
+
3
+ See: https://groups.google.com/d/msg/json-schema/lftABvH5KkA/KW93ZX-JdpsJ
4
+ for an explanation. The relevant part is "URIs, not URLs", i.e. id attributes
5
+ are for *identifying* schemas, not for *locating* them. No retrieval is
6
+ necessary.
7
+
2
8
  Scenario: absolute URI, single schema
3
9
  When the schema is:
4
10
  """
@@ -10,17 +16,6 @@ Feature: Core schema: id
10
16
  Then the id of "Test Schema" is "http://www.example.com/schemas/json"
11
17
 
12
18
  Scenario: relative URI, single schema
13
- I-D says: "If this schema is not contained in any parent schema, the
14
- current URI of the parent schema is held to be the URI under which
15
- this schema was addressed."
16
-
17
- I think this means that the id of the root schema is taken to be the
18
- URI from which the schema was retrieved, i.e. schema validators are
19
- supposed to include an HTTP client, which seems a bit bonkers to me,
20
- or the client passes in the URI from where the schema was retrieved,
21
- which is weird, but more palatable. The current implementation does
22
- neither of these, but I don't think it's too important at this point.
23
-
24
19
  When the schema is:
25
20
  """
26
21
  {
@@ -0,0 +1,138 @@
1
+ Feature: Core schema: $ref
2
+ Scenario: Ref resolves to the same schema
3
+ When the schema is:
4
+ """
5
+ {
6
+ "id": "http://www.example.com/schemas/person",
7
+ "title": "The Best Person Schema Ever",
8
+ "properties": {
9
+ "name": { "type": "string" },
10
+ "age": { "type": "integer" },
11
+ "favorite_person": { "$ref": "http://www.example.com/schemas/person" }
12
+ }
13
+ }
14
+ """
15
+ Then this is valid JSON:
16
+ """
17
+ {
18
+ "name": "Felizberto Albi",
19
+ "age": 24,
20
+ "favorite_person": {
21
+ "name": "Lil Wayne Pangles",
22
+ "age": 52,
23
+ "favorite_person": {
24
+ "name": "Birdman Pangles",
25
+ "age": 71,
26
+ "favorite_person": {
27
+ "name": "Best here to be silent",
28
+ "age": 105
29
+ }
30
+ }
31
+ }
32
+ }
33
+ """
34
+ But this is not valid JSON:
35
+ """
36
+ {
37
+ "name": "Felizberto Albi",
38
+ "age": 24,
39
+ "favorite_person": {
40
+ "name": "Lil Wayne Pangles",
41
+ "age": "At least a billion. At least."
42
+ }
43
+ }
44
+ """
45
+
46
+ Scenario: Ref with relative path resolves to the same schema
47
+ TODO: This scenario shares too much information with the one above it.
48
+
49
+ When the schema is:
50
+ """
51
+ {
52
+ "id": "http://www.example.com/schemas/person",
53
+ "title": "The Best Person Schema Ever",
54
+ "properties": {
55
+ "name": { "type": "string" },
56
+ "age": { "type": "integer" },
57
+ "favorite_person": { "$ref": "/schemas/person" }
58
+ }
59
+ }
60
+ """
61
+ Then this is valid JSON:
62
+ """
63
+ {
64
+ "name": "Felizberto Albi",
65
+ "age": 24,
66
+ "favorite_person": {
67
+ "name": "Lil Wayne Pangles",
68
+ "age": 52,
69
+ "favorite_person": {
70
+ "name": "Birdman Pangles",
71
+ "age": 71,
72
+ "favorite_person": {
73
+ "name": "Best here to be silent",
74
+ "age": 105
75
+ }
76
+ }
77
+ }
78
+ }
79
+ """
80
+ But this is not valid JSON:
81
+ """
82
+ {
83
+ "name": "Felizberto Albi",
84
+ "age": 24,
85
+ "favorite_person": {
86
+ "name": "Lil Wayne Pangles",
87
+ "age": "At least a billion. At least."
88
+ }
89
+ }
90
+ """
91
+
92
+ Scenario: Ref resolves to different schema
93
+ Given this schema:
94
+ """
95
+ {
96
+ "id": "http://www.example.com/schemas/person",
97
+ "title": "The Best Person Schema Ever",
98
+ "properties": {
99
+ "name": { "type": "string" },
100
+ "age": { "type": "integer" }
101
+ }
102
+ }
103
+ """
104
+ And this schema:
105
+ """
106
+ {
107
+ "title": "A Happy Family Much Like All Other Happy Families",
108
+ "type": "array",
109
+ "items": {
110
+ "$ref": "http://www.example.com/schemas/person"
111
+ }
112
+ }
113
+ """
114
+ Then this is valid JSON:
115
+ """
116
+ [
117
+ {
118
+ "name": "Anna Arkadyevna Karenina",
119
+ "age": 18
120
+ },
121
+
122
+ {
123
+ "name": "Count Alexei Kirillovich Vronsky",
124
+ "age": 25
125
+ }
126
+ ]
127
+ """
128
+ But this is not valid JSON:
129
+ """
130
+ [
131
+ {
132
+ "name": "The Underground Man",
133
+ "age": "timeless"
134
+ }
135
+ ]
136
+ """
137
+
138
+ Scenario: Ref appears before the id it references
@@ -1,36 +1,40 @@
1
+ Given "this schema:" do |schema|
2
+ add_schema(parse(schema))
3
+ end
4
+
1
5
  When /^the schema is '(.+)'$/ do |schema|
2
- @schema = parse(schema)
6
+ add_schema(parse(schema))
3
7
  end
4
8
 
5
9
  When "the schema is:" do |schema|
6
- @schema = parse(schema)
10
+ add_schema(parse(schema))
7
11
  end
8
12
 
9
13
  Then /^'(.+)' is valid JSON$/ do |json|
10
- assert_valid(parse(json), @schema)
14
+ assert_valid(parse(json), all_schemas)
11
15
  end
12
16
 
13
17
  Then /^'(.+)' is not valid JSON$/ do |json|
14
- assert_invalid(parse(json), @schema)
18
+ assert_invalid(parse(json), all_schemas)
15
19
  end
16
20
 
17
21
  Then "this is valid JSON:" do |json|
18
- assert_valid(parse(json), @schema)
22
+ assert_valid(parse(json), all_schemas)
19
23
  end
20
24
 
21
25
  Then "this is not valid JSON:" do |json|
22
- assert_invalid(parse(json), @schema)
26
+ assert_invalid(parse(json), all_schemas)
23
27
  end
24
28
 
25
29
  Then "these are valid JSON:" do |instances|
26
30
  instances.raw.each do |row|
27
- assert_valid(parse(row[0]), @schema)
31
+ assert_valid(parse(row[0]), all_schemas)
28
32
  end
29
33
  end
30
34
 
31
35
  Then "these are not valid JSON:" do |instances|
32
36
  instances.raw.each do |row|
33
- assert_invalid(parse(row[0]), @schema)
37
+ assert_invalid(parse(row[0]), all_schemas)
34
38
  end
35
39
  end
36
40
 
@@ -46,16 +50,25 @@ module JschematicWorld
46
50
  raise "Parsing '#{json}' failed with #{e.to_s}"
47
51
  end
48
52
 
49
- def assert_valid(json, raw_schema)
50
- Jschematic.validate(json, raw_schema).should be_true
53
+ def assert_valid(json, raw_schemas)
54
+ Jschematic.validate(json, *raw_schemas).should be_true
51
55
  end
52
56
 
53
- def assert_invalid(json, raw_schema)
54
- Jschematic.validate(json, raw_schema).should be_false
57
+ def assert_invalid(json, raw_schemas)
58
+ Jschematic.validate(json, *raw_schemas).should be_false
55
59
  end
56
60
 
57
61
  def build_schema
58
- @_schema ||= Jschematic::Schema.new(@schema)
62
+ @_schema ||= Jschematic::Schema.new(all_schemas.first)
63
+ end
64
+
65
+ def add_schema(schema)
66
+ @_schemas ||= []
67
+ @_schemas << schema
68
+ end
69
+
70
+ def all_schemas
71
+ @_schemas ||= []
59
72
  end
60
73
  end
61
74
 
data/jschematic.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'jschematic'
3
- s.version = '0.0.2'
3
+ s.version = '0.0.5'
4
4
  s.authors = ["Mike Sassak"]
5
5
  s.description = "JSON Schema v3 Validator"
6
6
  s.summary = "jschematic #{s.version}"
@@ -1,20 +1,18 @@
1
1
  require 'ipaddr'
2
2
  require 'addressable/uri'
3
+ require 'date'
3
4
 
4
5
  module Jschematic
5
6
  module Attributes
6
7
  module Format
7
8
  def self.new(format)
8
- case format
9
- when "uri"
10
- Uri.new
11
- when "ip-address", "ipv6"
12
- Ip.new(format)
13
- when "cidr"
14
- Cidr.new(format)
15
- else
16
- NullFormat.new
9
+ format_class = format.split(/[^\w\d]/).inject("") do |name, part|
10
+ name << part.capitalize
17
11
  end
12
+
13
+ const_get(format_class).new
14
+ rescue NameError
15
+ NullFormat.new(format)
18
16
  end
19
17
 
20
18
  class Uri
@@ -27,20 +25,21 @@ module Jschematic
27
25
  end
28
26
  end
29
27
 
30
- class Ip
28
+ class IpAddress
31
29
  include Jschematic::Element
32
30
 
33
- def initialize(version)
34
- @method = case version
35
- when "ip-address"
36
- :ipv4?
37
- when "ipv6"
38
- :ipv6?
39
- end
31
+ def accepts?(addr)
32
+ IPAddr.new(addr).ipv4?
33
+ rescue ArgumentError
34
+ false
40
35
  end
36
+ end
37
+
38
+ class Ipv6
39
+ include Jschematic::Element
41
40
 
42
41
  def accepts?(addr)
43
- IPAddr.new(addr).send(@method)
42
+ IPAddr.new(addr).ipv6?
44
43
  rescue ArgumentError
45
44
  false
46
45
  end
@@ -52,12 +51,37 @@ module Jschematic
52
51
  def accepts?(addr_with_cidr)
53
52
  addr, cidr = addr_with_cidr.split("/")
54
53
  return false unless cidr && (1..32).include?(cidr.to_i)
55
- Ip.new("ip-address").accepts?(addr)
54
+ IpAddress.new.accepts?(addr)
55
+ end
56
+ end
57
+
58
+ class DateTime
59
+ include Jschematic::Element
60
+
61
+ def accepts?(date_time)
62
+ ::DateTime.strptime(date_time)
63
+ rescue ArgumentError
64
+ false
65
+ end
66
+ end
67
+
68
+ class Date
69
+ include Jschematic::Element
70
+
71
+ def accepts?(date)
72
+ ::Date.strptime(date)
73
+ rescue ArgumentError
74
+ false
56
75
  end
57
76
  end
58
77
 
59
78
  class NullFormat
60
79
  include Jschematic::Element
80
+ attr_reader :format
81
+
82
+ def initialize(format)
83
+ @format = format
84
+ end
61
85
 
62
86
  def accepts?(instance)
63
87
  true
@@ -0,0 +1,20 @@
1
+ require 'addressable/uri'
2
+
3
+ require 'jschematic/element'
4
+
5
+ module Jschematic
6
+ module Attributes
7
+ class Ref
8
+ include Jschematic::Element
9
+
10
+ def initialize(uri)
11
+ @uri = Addressable::URI.parse(uri)
12
+ end
13
+
14
+ def accepts?(instance)
15
+ schema = Schema.schema_for(@uri) || raise(SchemaNotFoundError.new(@uri))
16
+ schema.accepts?(instance)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -18,11 +18,13 @@ require 'jschematic/attributes/min_length'
18
18
  require 'jschematic/attributes/max_length'
19
19
  require 'jschematic/attributes/enum'
20
20
  require 'jschematic/attributes/format'
21
+ require 'jschematic/attributes/ref'
21
22
 
22
23
  module Jschematic
23
24
  module Attributes
24
25
  def self.[](name)
25
- const_get(name[0].chr.capitalize + name[1..-1])
26
+ name_without_meta = name.gsub(/^\$/, '')
27
+ const_get(name_without_meta[0].chr.capitalize + name_without_meta[1..-1])
26
28
  end
27
29
  end
28
30
  end
@@ -0,0 +1,13 @@
1
+ require 'jschematic/schema'
2
+
3
+ module Jschematic
4
+ class Context
5
+ def initialize(*schemas)
6
+ @schemas = schemas.collect{ |raw_schema| Schema.new(raw_schema) }
7
+ end
8
+
9
+ def validate!(instance)
10
+ @schemas.last.accepts?(instance)
11
+ end
12
+ end
13
+ end
@@ -1,8 +1,9 @@
1
- require 'jschematic/validation_error'
1
+ require 'jschematic/exceptions'
2
2
 
3
3
  module Jschematic
4
4
  module Element
5
5
  attr_accessor :parent
6
+ attr_writer :id
6
7
 
7
8
  def required?
8
9
  false
@@ -12,6 +13,14 @@ module Jschematic
12
13
  nil
13
14
  end
14
15
 
16
+ def id
17
+ if @parent
18
+ @parent.id + @id
19
+ else
20
+ @id
21
+ end
22
+ end
23
+
15
24
  def to_s
16
25
  self.class.to_s
17
26
  end
@@ -10,4 +10,16 @@ module Jschematic
10
10
  "#{what} expected #{expected} but found #{actual}"
11
11
  end
12
12
  end
13
+
14
+ class SchemaNotFoundError < StandardError
15
+ attr_reader :uri
16
+
17
+ def initialize(uri)
18
+ @uri = uri
19
+ end
20
+
21
+ def to_s
22
+ "Cannot find schema for reference '#{uri}'"
23
+ end
24
+ end
13
25
  end
@@ -15,7 +15,26 @@ module Jschematic
15
15
  schema
16
16
  end
17
17
 
18
- attr_reader :default, :title, :description, :id
18
+ def self.schema_for(ref)
19
+ if ref.relative?
20
+ rel = ref.omit(:scheme, :host, :port)
21
+ if match = schemas.find{ |ref, _| rel == ref.omit(:scheme, :host, :port) }
22
+ match[-1]
23
+ end
24
+ else
25
+ schemas[ref]
26
+ end
27
+ end
28
+
29
+ def self.add_schema(id, schema)
30
+ schemas[id] = schema
31
+ end
32
+
33
+ def self.schemas
34
+ @schemas ||= {}
35
+ end
36
+
37
+ attr_reader :default, :title, :description
19
38
 
20
39
  attr_accessor :name
21
40
  attr_writer :parent
@@ -28,6 +47,8 @@ module Jschematic
28
47
  @description = @raw_schema.delete("description") || ""
29
48
  @id = Addressable::URI.parse(@raw_schema.delete("id") || "")
30
49
 
50
+ self.class.add_schema(@id, self) unless @id.to_s.empty?
51
+
31
52
  @raw_schema.each_pair do |attribute, value|
32
53
  begin
33
54
  attribute = Attributes[attribute].new(value){ |dep| @raw_schema[dep] }
@@ -51,14 +72,6 @@ module Jschematic
51
72
  children.any?{ |child| child.required? }
52
73
  end
53
74
 
54
- def id
55
- if @parent
56
- @parent.id + @id
57
- else
58
- @id
59
- end
60
- end
61
-
62
75
  private
63
76
 
64
77
  def add_default(instance)
data/lib/jschematic.rb CHANGED
@@ -1,13 +1,13 @@
1
- require 'jschematic/schema'
1
+ require 'jschematic/context'
2
2
 
3
3
  module Jschematic
4
- def self.validate(instance, schema)
5
- validate!(instance, schema)
4
+ def self.validate(instance, *schemas)
5
+ validate!(instance, *schemas)
6
6
  rescue ValidationError
7
7
  false
8
8
  end
9
9
 
10
- def self.validate!(instance, schema)
11
- Schema.new(schema).accepts?(instance)
10
+ def self.validate!(instance, *schemas)
11
+ Context.new(*schemas).validate!(instance)
12
12
  end
13
13
  end
@@ -1,5 +1,31 @@
1
1
  require 'spec_helper'
2
2
 
3
+ shared_examples_for "an element" do |args|
4
+ let(:parent) { double("a parent element") }
5
+ let(:good) { args[:good] }
6
+ let(:bad) { args[:bad] }
7
+
8
+ it "has a parent" do
9
+ element.parent = parent
10
+ element.parent.should === parent
11
+ end
12
+
13
+ it "accepts good instance values" do
14
+ element.should accept(good)
15
+ end
16
+
17
+ it "does not accept bad instance values" do
18
+ element.should_not accept(bad)
19
+ end
20
+
21
+ xit "adds errors to its parent" do
22
+ parent = Parent.new
23
+ element.parent = parent
24
+ element.validate(:garbage)
25
+ parent.errors.should include(some_stuff)
26
+ end
27
+ end
28
+
3
29
  module Jschematic
4
30
  module Attributes
5
31
  describe Enum do
@@ -9,6 +35,10 @@ module Jschematic
9
35
  expect { subject.new("this is allowed, right?") }.to raise_error
10
36
  expect { subject.new(["not", "really"]) }.to_not raise_error
11
37
  end
38
+
39
+ it_should_behave_like "an element", good: 1, bad: 2 do
40
+ let(:element) { subject.new([1]) }
41
+ end
12
42
  end
13
43
  end
14
44
  end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ module Jschematic
4
+ module Attributes
5
+ describe Format do
6
+ it "returns a NullFormat when the format is not found" do
7
+ format = Format.new("i-don't-exist")
8
+ format.should be_an_instance_of(Format::NullFormat)
9
+ format.format.should == "i-don't-exist"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,15 @@
1
+ require 'spec_helper'
2
+
3
+ module Jschematic
4
+ module Attributes
5
+ describe Ref do
6
+ describe "#accepts?" do
7
+ it "fails when the references schema does not exist" do
8
+ Schema.schemas.should be_empty
9
+ ref = Ref.new("does_not_exist")
10
+ expect { ref.accepts?({}) }.to raise_error(Jschematic::SchemaNotFoundError)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -7,6 +7,11 @@ module Jschematic
7
7
  Attributes::ExclusiveMaximum.should_receive(:new).with(1, 2)
8
8
  subject["exclusiveMaximum"].new(1, 2)
9
9
  end
10
+
11
+ it "strips leading '$'" do
12
+ Attributes::Ref.should_receive(:new).with("foo")
13
+ subject["$ref"].new("foo")
14
+ end
10
15
  end
11
16
  end
12
17
  end
@@ -32,27 +32,14 @@ module Jschematic
32
32
  description.should == ""
33
33
  end
34
34
  end
35
- end
36
-
37
- class Parent
38
- attr_reader :id
39
- def initialize(opts)
40
- @id = opts["id"]
41
- @children = []
42
- end
43
35
 
44
- def add_child(child)
45
- child.parent = self
46
- @children << child
47
- end
48
- end
49
-
50
- describe Schema, "as a child element" do
51
- it "builds its id from its parent" do
52
- parent = Parent.new("id" => "http://www.example.com/parent/")
53
- schema = Schema.new("id" => "child")
54
- parent.add_child(schema)
55
- schema.id.should == "http://www.example.com/parent/child"
36
+ describe "#id" do
37
+ it "is built from the parent's id" do
38
+ parent = Parent.new("id" => "http://www.example.com/parent/")
39
+ schema = Schema.new("id" => "child")
40
+ parent.add_child(schema)
41
+ schema.id.should == "http://www.example.com/parent/child"
42
+ end
56
43
  end
57
44
  end
58
45
  end
data/spec/spec_helper.rb CHANGED
@@ -14,3 +14,20 @@ RSpec::Matchers.define :accept do |instance_value|
14
14
  end
15
15
  end
16
16
 
17
+ module Jschematic
18
+ class Parent
19
+ include Jschematic::Composite
20
+
21
+ def initialize(opts)
22
+ self.id = opts["id"]
23
+ end
24
+ end
25
+
26
+ class Child
27
+ include Jschematic::Element
28
+
29
+ def accepts?(instance)
30
+ !!instance
31
+ end
32
+ end
33
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 5
9
+ version: 0.0.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Mike Sassak
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-02-22 00:00:00 -06:00
17
+ date: 2011-03-15 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -99,6 +99,7 @@ files:
99
99
  - features/pattern.feature
100
100
  - features/pattern_properties.feature
101
101
  - features/properties.feature
102
+ - features/ref.feature
102
103
  - features/required.feature
103
104
  - features/step_definitions/jschematic_steps.rb
104
105
  - features/support/env.rb
@@ -123,18 +124,22 @@ files:
123
124
  - lib/jschematic/attributes/pattern.rb
124
125
  - lib/jschematic/attributes/pattern_properties.rb
125
126
  - lib/jschematic/attributes/properties.rb
127
+ - lib/jschematic/attributes/ref.rb
126
128
  - lib/jschematic/attributes/required.rb
127
129
  - lib/jschematic/attributes/type.rb
128
130
  - lib/jschematic/attributes/unique_items.rb
129
131
  - lib/jschematic/composite.rb
132
+ - lib/jschematic/context.rb
130
133
  - lib/jschematic/element.rb
131
134
  - lib/jschematic/errors.rb
135
+ - lib/jschematic/exceptions.rb
132
136
  - lib/jschematic/schema.rb
133
- - lib/jschematic/validation_error.rb
134
137
  - spec/jschematic/attributes/enum_spec.rb
138
+ - spec/jschematic/attributes/format_spec.rb
135
139
  - spec/jschematic/attributes/max_items_spec.rb
136
140
  - spec/jschematic/attributes/min_items_spec.rb
137
141
  - spec/jschematic/attributes/minimum_maximum_spec.rb
142
+ - spec/jschematic/attributes/ref_spec.rb
138
143
  - spec/jschematic/attributes/required_spec.rb
139
144
  - spec/jschematic/attributes/type_spec.rb
140
145
  - spec/jschematic/attributes_spec.rb
@@ -172,7 +177,7 @@ rubyforge_project:
172
177
  rubygems_version: 1.3.7
173
178
  signing_key:
174
179
  specification_version: 3
175
- summary: jschematic 0.0.2
180
+ summary: jschematic 0.0.5
176
181
  test_files:
177
182
  - features/default.feature
178
183
  - features/dependencies.feature
@@ -185,14 +190,17 @@ test_files:
185
190
  - features/pattern.feature
186
191
  - features/pattern_properties.feature
187
192
  - features/properties.feature
193
+ - features/ref.feature
188
194
  - features/required.feature
189
195
  - features/step_definitions/jschematic_steps.rb
190
196
  - features/support/env.rb
191
197
  - features/type.feature
192
198
  - spec/jschematic/attributes/enum_spec.rb
199
+ - spec/jschematic/attributes/format_spec.rb
193
200
  - spec/jschematic/attributes/max_items_spec.rb
194
201
  - spec/jschematic/attributes/min_items_spec.rb
195
202
  - spec/jschematic/attributes/minimum_maximum_spec.rb
203
+ - spec/jschematic/attributes/ref_spec.rb
196
204
  - spec/jschematic/attributes/required_spec.rb
197
205
  - spec/jschematic/attributes/type_spec.rb
198
206
  - spec/jschematic/attributes_spec.rb