nidyx 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +10 -11
- data/lib/nidyx/parse_constants.rb +1 -0
- data/lib/nidyx/parser.rb +21 -9
- data/lib/nidyx/version.rb +1 -1
- data/test/nidyx/test_parser.rb +63 -3
- metadata +24 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dfb9be5f10368cc90ad4e6692306e0b1f525f657
|
4
|
+
data.tar.gz: 5381d4cc120acdc4a4f020d73218951fe4bc54e4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0743f7437b9476c4fe6330fdb54284c8265b3745e1afb9e8f6a5e56e2cb6c43c61b1b16a4e0cd9dc37a103889e0924d99dfdb00631f88a39e56d3d18e536cb30
|
7
|
+
data.tar.gz: 8eca92e4a710fa7d1903db3a3cf5415beb0c1f8f728d6b94b38620004fb3c456a7695b94304b9da82b40d0a7437df559a6e70ca45a79525cff9432bdb812c978
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Nidyx [![Gem Version](https://
|
1
|
+
# Nidyx [![Gem Version](https://badge.fury.io/rb/nidyx.svg)](http://badge.fury.io/rb/nidyx) [![Build Status](https://travis-ci.org/cknadler/nidyx.svg?branch=master)](https://travis-ci.org/cknadler/nidyx) [![Code Climate](https://codeclimate.com/github/cknadler/nidyx/badges/gpa.svg)](https://codeclimate.com/github/cknadler/nidyx) [![Documentation](https://inch-ci.org/github/cknadler/nidyx.svg?branch=master)](https://inch-ci.org/github/cknadler/nidyx)
|
2
2
|
|
3
3
|
[JSON Schema][JSONSchema] ⇒ Model.
|
4
4
|
|
@@ -15,14 +15,15 @@ $ gem install nidyx
|
|
15
15
|
|
16
16
|
```
|
17
17
|
usage: nidyx [-h] [--version]
|
18
|
-
nidyx <schema>
|
19
|
-
[-
|
18
|
+
nidyx <schema> [-n] [-a author] [-c company] [-p project]
|
19
|
+
[-o directory] [-x prefix]
|
20
20
|
[--json-model] # objc specific
|
21
21
|
|
22
22
|
-a, --author AUTHOR Author's name
|
23
23
|
-c, --company COMPANY Company's name
|
24
24
|
-p, --project PROJECT Project's name
|
25
25
|
-o, --output DIRECTORY Output models to a specific directory
|
26
|
+
-x, --class-prefix PREFIX Add a prefix to generated model names
|
26
27
|
-n, --no-comments Generate without header comments
|
27
28
|
--json-model Generate with JSONModel support
|
28
29
|
-h, --help Print usage information
|
@@ -34,19 +35,17 @@ models with JSONModel support.
|
|
34
35
|
Examples
|
35
36
|
========
|
36
37
|
|
37
|
-
|
38
|
-
current directory:
|
38
|
+
Generate models for a given schema.
|
39
39
|
|
40
|
-
$ nidyx example.json.schema
|
40
|
+
$ nidyx example.json.schema
|
41
41
|
|
42
|
-
Specify an ouput directory:
|
42
|
+
Specify an ouput directory and a class prefix:
|
43
43
|
|
44
|
-
$ nidyx example.json.schema ClassPrefix -o /path/to/output/directory
|
44
|
+
$ nidyx example.json.schema -x ClassPrefix -o /path/to/output/directory
|
45
45
|
|
46
|
-
Generate
|
46
|
+
Generate with JSONModel support and optional documentation:
|
47
47
|
|
48
|
-
$ nidyx example.json.schema
|
49
|
-
--json-model -a "Your Name" -c "Company Name" -p "Project Name"
|
48
|
+
$ nidyx example.json.schema --json-model -a "Your Name" -p "Project Name"
|
50
49
|
```
|
51
50
|
|
52
51
|
## Features
|
data/lib/nidyx/parser.rb
CHANGED
@@ -129,28 +129,40 @@ module Nidyx
|
|
129
129
|
obj
|
130
130
|
end
|
131
131
|
|
132
|
-
# Resolves any references
|
132
|
+
# Resolves any references buied in the `items` property of an array
|
133
133
|
# definition. Returns a list of collection types in the array.
|
134
134
|
# @param obj [Hash] the array property schema
|
135
|
-
# @return [Array]
|
135
|
+
# @return [Array] types contained in the array
|
136
136
|
def resolve_array_refs(obj)
|
137
137
|
items = obj[ITEMS_KEY]
|
138
|
-
types = []
|
139
|
-
|
140
138
|
case items
|
141
139
|
when Array
|
142
|
-
items
|
143
|
-
resolve_reference_string(i[REF_KEY])
|
144
|
-
types << class_name_from_ref(i[REF_KEY])
|
145
|
-
end
|
140
|
+
return resolve_items_array(items)
|
146
141
|
when Hash
|
142
|
+
# handle a nested any of key
|
143
|
+
any_of = items[ANY_OF_KEY]
|
144
|
+
return resolve_items_array(any_of) if any_of.is_a?(Array)
|
145
|
+
|
147
146
|
resolve_reference_string(items[REF_KEY])
|
148
|
-
|
147
|
+
return [class_name_from_ref(items[REF_KEY])].compact
|
148
|
+
else
|
149
|
+
return []
|
149
150
|
end
|
151
|
+
end
|
150
152
|
|
153
|
+
# @param items [Array] an array of items
|
154
|
+
# @return [Array] types contained in the array
|
155
|
+
def resolve_items_array(items)
|
156
|
+
types = []
|
157
|
+
items.each do |item|
|
158
|
+
resolve_reference_string(item[REF_KEY])
|
159
|
+
types << class_name_from_ref(item[REF_KEY])
|
160
|
+
end
|
151
161
|
types.compact
|
152
162
|
end
|
153
163
|
|
164
|
+
# @param ref [String] reference in json pointer format
|
165
|
+
# @return [String] the class name of the object at the location of the ref
|
154
166
|
def class_name_from_ref(ref)
|
155
167
|
class_name_from_path(@class_prefix, Nidyx::Pointer.new(ref).path, @schema) if ref
|
156
168
|
end
|
data/lib/nidyx/version.rb
CHANGED
data/test/nidyx/test_parser.rb
CHANGED
@@ -329,7 +329,7 @@ class TestParser < Minitest::Test
|
|
329
329
|
"type" => "object",
|
330
330
|
"nameOverride" => "somethingElse",
|
331
331
|
"properties" => {
|
332
|
-
"recObject" => {
|
332
|
+
"recObject" => {
|
333
333
|
"type" => "object",
|
334
334
|
"nameOverride" => "rec",
|
335
335
|
"properties" => {
|
@@ -353,8 +353,8 @@ class TestParser < Minitest::Test
|
|
353
353
|
# something model
|
354
354
|
model = models["TSSomethingModel"]
|
355
355
|
props = model.properties
|
356
|
-
|
357
|
-
assert_equal("TSSomethingElseModel",
|
356
|
+
value = props.shift
|
357
|
+
assert_equal("TSSomethingElseModel", value.class_name)
|
358
358
|
|
359
359
|
# something else model
|
360
360
|
model = models["TSSomethingElseModel"]
|
@@ -444,6 +444,66 @@ class TestParser < Minitest::Test
|
|
444
444
|
assert_equal(:boolean, bool.type)
|
445
445
|
end
|
446
446
|
|
447
|
+
def test_any_of_array
|
448
|
+
schema = {
|
449
|
+
"type" => "object",
|
450
|
+
"properties" => {
|
451
|
+
"widgets" => {
|
452
|
+
"type" => "array",
|
453
|
+
"items" => {
|
454
|
+
"anyOf" => [
|
455
|
+
{ "$ref" => "#/definitions/object" },
|
456
|
+
{ "$ref" => "#/definitions/otherObject" }
|
457
|
+
]
|
458
|
+
}
|
459
|
+
}
|
460
|
+
},
|
461
|
+
"definitions" => {
|
462
|
+
"object" => {
|
463
|
+
"type" => "object",
|
464
|
+
"properties" => {
|
465
|
+
"count" => { "type" => "integer" }
|
466
|
+
}
|
467
|
+
},
|
468
|
+
"otherObject" => {
|
469
|
+
"type" => "object",
|
470
|
+
"properties" => {
|
471
|
+
"lastObject" => { "$ref" => "#/definitions/lastObject" }
|
472
|
+
}
|
473
|
+
},
|
474
|
+
"lastObject" => {
|
475
|
+
"type" => "object",
|
476
|
+
"properties" => {
|
477
|
+
"limit" => { "type" => "integer" }
|
478
|
+
}
|
479
|
+
}
|
480
|
+
}
|
481
|
+
}
|
482
|
+
|
483
|
+
models = parse(schema)
|
484
|
+
assert_equal(4, models.size)
|
485
|
+
|
486
|
+
# root model
|
487
|
+
props = models["TSModel"].properties
|
488
|
+
value = props.shift
|
489
|
+
assert_equal(:array, value.type)
|
490
|
+
|
491
|
+
# object model
|
492
|
+
props = models["TSObjectModel"].properties
|
493
|
+
value = props.shift
|
494
|
+
assert_equal(:integer, value.type)
|
495
|
+
|
496
|
+
# other object model
|
497
|
+
props = models["TSOtherObjectModel"].properties
|
498
|
+
value = props.shift
|
499
|
+
assert_equal("TSLastObjectModel", value.class_name)
|
500
|
+
|
501
|
+
# last object model
|
502
|
+
props = models["TSLastObjectModel"].properties
|
503
|
+
value = props.shift
|
504
|
+
assert_equal(:integer, value.type)
|
505
|
+
end
|
506
|
+
|
447
507
|
private
|
448
508
|
|
449
509
|
OPTIONS = {
|
metadata
CHANGED
@@ -1,72 +1,73 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nidyx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Knadler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mustache
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.99.
|
19
|
+
version: 0.99.6
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.99.
|
26
|
+
version: 0.99.6
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: terminal-notifier-guard
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: guard-minitest
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
-
description:
|
69
|
+
description: Nidyx generates Objective-C models from JSONSchema files. Use your API's
|
70
|
+
spec to make your client's models in a snap.
|
70
71
|
email: takeshi91k@gmail.com
|
71
72
|
executables:
|
72
73
|
- nidyx
|
@@ -75,6 +76,10 @@ extra_rdoc_files:
|
|
75
76
|
- README.md
|
76
77
|
- LICENSE
|
77
78
|
files:
|
79
|
+
- LICENSE
|
80
|
+
- README.md
|
81
|
+
- bin/nidyx
|
82
|
+
- lib/nidyx.rb
|
78
83
|
- lib/nidyx/common.rb
|
79
84
|
- lib/nidyx/core_ext/string.rb
|
80
85
|
- lib/nidyx/generator.rb
|
@@ -93,13 +98,10 @@ files:
|
|
93
98
|
- lib/nidyx/property.rb
|
94
99
|
- lib/nidyx/reader.rb
|
95
100
|
- lib/nidyx/version.rb
|
96
|
-
- lib/nidyx.rb
|
97
101
|
- templates/objc/implementation.mustache
|
98
102
|
- templates/objc/imports.mustache
|
99
103
|
- templates/objc/interface.mustache
|
100
104
|
- templates/objc/top_info.mustache
|
101
|
-
- README.md
|
102
|
-
- LICENSE
|
103
105
|
- test/nidyx/core_ext/test_string.rb
|
104
106
|
- test/nidyx/objc/test_model_base.rb
|
105
107
|
- test/nidyx/objc/test_property.rb
|
@@ -108,7 +110,6 @@ files:
|
|
108
110
|
- test/nidyx/test_parser.rb
|
109
111
|
- test/nidyx/test_pointer.rb
|
110
112
|
- test/nidyx/test_property.rb
|
111
|
-
- bin/nidyx
|
112
113
|
homepage: https://github.com/cknadler/nidyx
|
113
114
|
licenses:
|
114
115
|
- MIT
|
@@ -119,20 +120,20 @@ require_paths:
|
|
119
120
|
- lib
|
120
121
|
required_ruby_version: !ruby/object:Gem::Requirement
|
121
122
|
requirements:
|
122
|
-
- -
|
123
|
+
- - ">="
|
123
124
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
125
|
+
version: 1.9.3
|
125
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
127
|
requirements:
|
127
|
-
- -
|
128
|
+
- - ">="
|
128
129
|
- !ruby/object:Gem::Version
|
129
130
|
version: '0'
|
130
131
|
requirements: []
|
131
132
|
rubyforge_project:
|
132
|
-
rubygems_version: 2.
|
133
|
+
rubygems_version: 2.4.5
|
133
134
|
signing_key:
|
134
135
|
specification_version: 4
|
135
|
-
summary:
|
136
|
+
summary: JSON Schema -> Objective-C models
|
136
137
|
test_files:
|
137
138
|
- test/nidyx/core_ext/test_string.rb
|
138
139
|
- test/nidyx/objc/test_model_base.rb
|