json-schema-lite 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 90b0236550b791f3b4da1f151fe3f27636f2ba94
4
- data.tar.gz: d76487b6fcdd15ef59ef76210d452dfb2452cb9f
3
+ metadata.gz: c226af7c67ffc462fa2eb5c615f8b41f27d1ddd7
4
+ data.tar.gz: 8a3092eadfee3c0a4af4ae24713e378c206118eb
5
5
  SHA512:
6
- metadata.gz: 78b7b0f6e37862f9ff60109ed29f70d8cbfe915d882961a83da13d448988dd2887be7eb326c34395336d9b1932cc950b584d6ef6cbc550996114e4178de4ba79
7
- data.tar.gz: d2d35063ac0d8cf5e0d3e83f6d768c5e34f6771b825c912db8a0c2c746e5413bc6c9c650786a7cf2d71322880e493da92ab02e0a52a1debb760bca233cfcdf2c
6
+ metadata.gz: ef5c395345396336fed65827849268ef1df2c41855e9527b7ea4d5a06238777d0f81668d365a719d5541b7f945627e3e04f5c0762c2c54b8dd67a0354ddf7fce
7
+ data.tar.gz: b60984c2ab691ca8ba5fb4efd66eca51e85b048e8199da63e9a9142a181731eb882906187d9b9bbbc37d3ae1166185ee8bb10cbffd39f69e92d0ece37e73919c
data/README.md CHANGED
@@ -18,6 +18,23 @@ Or install it yourself as:
18
18
 
19
19
  ## Usage
20
20
 
21
+ - generate by block
22
+ ```ruby
23
+ JSON::Schema::Lite.generate do
24
+ string :title, required: true
25
+ string :body, required: true
26
+ number :vote
27
+ object :author do
28
+ string :name
29
+ end
30
+ array :tags, :string
31
+ array :related do
32
+ string :title
33
+ end
34
+ end
35
+ ```
36
+
37
+ - generate by object
21
38
  ```ruby
22
39
  JSON::Schema::Lite.generate type: :object,
23
40
  required: [:title, :body],
@@ -25,9 +42,13 @@ JSON::Schema::Lite.generate type: :object,
25
42
  title: :string,
26
43
  body: :string,
27
44
  vote: :number,
28
- tags: [
29
- type: :string
30
- ],
45
+ author: {
46
+ type: :object,
47
+ properties: {
48
+ name: :string,
49
+ }
50
+ },
51
+ tags: [:string],
31
52
  related: [
32
53
  type: :object,
33
54
  properties: {
@@ -37,6 +58,7 @@ JSON::Schema::Lite.generate type: :object,
37
58
  }
38
59
  ```
39
60
 
61
+ - generated json schema
40
62
  ```json
41
63
  {
42
64
  "type": "object",
@@ -45,10 +67,16 @@ JSON::Schema::Lite.generate type: :object,
45
67
  "title": { "type": "string" },
46
68
  "body": { "type": "string" },
47
69
  "vote": { "type": "number" },
70
+ "author": {
71
+ "type": "object",
72
+ "properties": {
73
+ "name": { "type": "string" }
74
+ }
75
+ },
48
76
  "tags": {
49
77
  "type": "array",
50
78
  "items": {
51
- "type": "string"
79
+ "type": "string"
52
80
  }
53
81
  },
54
82
  "related": {
@@ -78,4 +106,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/munky6
78
106
  ## License
79
107
 
80
108
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
81
-
@@ -0,0 +1,52 @@
1
+ module JSON
2
+ class Schema
3
+ module Lite
4
+ class Block < Hash
5
+
6
+ def initialize(&block)
7
+ self.instance_eval &block
8
+ end
9
+
10
+ %w(string number boolean null).each do |method|
11
+ define_method method do |key, option = {}|
12
+ set_properties key, __method__
13
+ add_required key if option[:required]
14
+ end
15
+ end
16
+
17
+ def array(key, *args, &block)
18
+ prop = {
19
+ type: :array
20
+ }
21
+ if block_given?
22
+ prop[:items] = self.class.new(&block)
23
+ else
24
+ prop[:items] = { type: args[0] }
25
+ if args.size >= 2 && args[1].is_a?(Hash)
26
+ option = args[1]
27
+ add_required key if option[:required]
28
+ end
29
+ end
30
+ set_properties key, prop
31
+ end
32
+
33
+ def object(key, &block)
34
+ set_properties key, self.class.new(&block)
35
+ end
36
+
37
+ private
38
+
39
+ def set_properties(key, prop)
40
+ self[:type] ||= :object
41
+ self[:properties] ||= {}
42
+ self[:properties][key] = prop.is_a?(Hash) ? prop : { type: prop }
43
+ end
44
+
45
+ def add_required(key)
46
+ self[:required] ||= []
47
+ self[:required] << key
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,29 @@
1
+ module JSON
2
+ class Schema
3
+ module Lite
4
+ module Object
5
+ def self.define(definition)
6
+ option = definition.is_a?(Hash) ? definition.delete(:option) || {} : {}
7
+
8
+ {}.tap do |json_schema|
9
+ if definition.is_a? Hash
10
+ definition.each_pair do |k, v|
11
+ if k.to_s == 'properties' || option[:properties]
12
+ v[:option] = { properties: true } if v.is_a?(Hash) && v[:properties].nil?
13
+ json_schema[k] = define v
14
+ else
15
+ json_schema[k] = v
16
+ end
17
+ end
18
+ elsif definition.is_a? Array
19
+ json_schema[:type] = :array
20
+ json_schema[:items] = define definition[0]
21
+ else
22
+ json_schema[:type] = definition
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,7 +1,7 @@
1
1
  module JSON
2
2
  class Schema
3
3
  module Lite
4
- VERSION = "0.1.1"
4
+ VERSION = '0.2.0'
5
5
  end
6
6
  end
7
7
  end
@@ -1,33 +1,25 @@
1
- require 'json/schema/lite/version'
2
1
  require 'json'
2
+ require 'json/schema/lite/version'
3
+ require 'json/schema/lite/block'
4
+ require 'json/schema/lite/object'
3
5
 
4
6
  module JSON
5
7
  class Schema
6
8
  module Lite
7
- def self.define(definition)
8
- option = definition.is_a?(Hash) ? definition.delete(:option) || {} : {}
9
-
10
- {}.tap do |json_schema|
11
- if definition.is_a? Hash
12
- definition.each_pair do |k, v|
13
- if k.to_s == 'properties' || option[:properties]
14
- v[:option] = { properties: true } if v.is_a?(Hash) && v[:properties].nil?
15
- json_schema[k] = define v
16
- else
17
- json_schema[k] = v
18
- end
19
- end
20
- elsif definition.is_a? Array
21
- json_schema[:type] = :array
22
- json_schema[:items] = define definition[0]
23
- else
24
- json_schema[:type] = definition
25
- end
9
+ def self.define(definition = nil, &block)
10
+ if block_given?
11
+ Block.new &block
12
+ else
13
+ Object.define definition
26
14
  end
27
15
  end
28
16
 
29
- def self.generate(definition)
30
- define(definition).to_json
17
+ def self.generate(definition = nil, &block)
18
+ if block_given?
19
+ define(&block).to_json
20
+ else
21
+ define(definition).to_json
22
+ end
31
23
  end
32
24
  end
33
25
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json-schema-lite
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masayuki Uehara
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-07-22 00:00:00.000000000 Z
11
+ date: 2015-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -99,6 +99,8 @@ files:
99
99
  - bin/setup
100
100
  - json-schema-lite.gemspec
101
101
  - lib/json/schema/lite.rb
102
+ - lib/json/schema/lite/block.rb
103
+ - lib/json/schema/lite/object.rb
102
104
  - lib/json/schema/lite/version.rb
103
105
  homepage: https://github.com/munky69rock/json-schema-lite
104
106
  licenses: