json-schema-lite 0.1.1 → 0.2.0

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