nidyx 0.2.0 → 0.2.1

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: 8433c258d171e3151329b3623a8fb03ee27cd9a6
4
- data.tar.gz: 69d7d5702a72d1123c2bf0659e82c6d517714598
3
+ metadata.gz: dfb9be5f10368cc90ad4e6692306e0b1f525f657
4
+ data.tar.gz: 5381d4cc120acdc4a4f020d73218951fe4bc54e4
5
5
  SHA512:
6
- metadata.gz: 7c5d42a4d48c2b1a4b2a45b6e5b99eb27f4a04bed8a25de6b97ca2c102651cf3e11d037260ac105471d46eb5a4a78973685e837d97d2b5107ee412fc6c613275
7
- data.tar.gz: 8fed850402a9f1480479aef191a0e45c66bd95515c1606ea5d4adef2a1e2f8a5ef95eb55d848692ca7dd2ea6023efd4646e21d9819e5d4343f3327448eb48f7e
6
+ metadata.gz: 0743f7437b9476c4fe6330fdb54284c8265b3745e1afb9e8f6a5e56e2cb6c43c61b1b16a4e0cd9dc37a103889e0924d99dfdb00631f88a39e56d3d18e536cb30
7
+ data.tar.gz: 8eca92e4a710fa7d1903db3a3cf5415beb0c1f8f728d6b94b38620004fb3c456a7695b94304b9da82b40d0a7437df559a6e70ca45a79525cff9432bdb812c978
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Nidyx [![Gem Version](https://img.shields.io/gem/v/nidyx.svg)](https://rubygems.org/gems/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)
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> <class-prefix>
19
- [-n] [-a author] [-c company] [-p project] [-o directory]
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
- Bare minimum. Given a schema and a class prefix, generate models in the
38
- current directory:
38
+ Generate models for a given schema.
39
39
 
40
- $ nidyx example.json.schema ClassPrefix
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 models with JSONModel support and optional documentation:
46
+ Generate with JSONModel support and optional documentation:
47
47
 
48
- $ nidyx example.json.schema ClassPrefix -o /path/to/output/directory \
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
@@ -13,6 +13,7 @@ module Nidyx
13
13
  NAME_OVERRIDE_KEY = "nameOverride"
14
14
  ITEMS_KEY = "items"
15
15
  MINIMUM_KEY = "minimum"
16
+ ANY_OF_KEY = "anyOf"
16
17
 
17
18
  ###
18
19
  # Internal schema key definitions
data/lib/nidyx/parser.rb CHANGED
@@ -129,28 +129,40 @@ module Nidyx
129
129
  obj
130
130
  end
131
131
 
132
- # Resolves any references burried in the `items` property of an array
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] list of types in the 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.each do |i|
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
- types << class_name_from_ref(items[REF_KEY])
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
@@ -1,3 +1,3 @@
1
1
  module Nidyx
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -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
- name = props.shift
357
- assert_equal("TSSomethingElseModel", name.class_name)
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.0
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-05-22 00:00:00.000000000 Z
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.5
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.5
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: ruby_gntp
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: JSON Schema -> Objective-C model generator
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: '0'
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.0.2
133
+ rubygems_version: 2.4.5
133
134
  signing_key:
134
135
  specification_version: 4
135
- summary: Nidyx
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