json_schema_tools 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- OTJhOGY1MWU1MjhmMjAwMjg2YmNlMzM4MWY0ZjI0YzE1ZDkxYjAxZQ==
4
+ MGQwMzVlNmIwYjkxYjhkY2UxNGVjMTdhMGNmMDRhMjJkNmU3MmUwZQ==
5
5
  data.tar.gz: !binary |-
6
- NTY2N2ZmNDg4MDc0NzUzYmFmNzYyODg1MjAwMjA1MzcyNjBjMDZmNg==
6
+ Yjc3N2MyM2NjMDYzOGU2YTRlM2ZlNTkyMmNmOTU4ZGI3MmYyOTU4ZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MWI1OGE0MTdlNjM3NDYwMGZjMjc5MThhNjRmMjAwNTJjNWViMGJiNThhMGFh
10
- M2ZjM2YxMWYxOTk0Y2ViMTU4YjJkMjE4Y2JmY2M3NjQzMzZjOGRiMTNjODg0
11
- MmE3MDM1NzZmNmU0NzEwMjE3Y2MyYjcwZDQ0NDljN2ZiYzE5NDI=
9
+ Zjk2ZDQwNDNiYzM5NTRkYWY2NzcyYTMwNWQzZGI3YTc4ZjkzNTQxNTJhMjAw
10
+ MDA2YWQxN2QwNmU0NzZmZDJhMzI2ZDBlNzQ2ZDE4OWI1YTE4YjA2YjFlNzll
11
+ OTcxNWE3NjkwYWU4ZWRjY2ZkYzQwODIxMjcxOWEzOWQwMTUyNGI=
12
12
  data.tar.gz: !binary |-
13
- YWZlMDgzMDFjZDI1M2IzNDQwNDI5ZTM5MTkzYjg3NzNkMGQwYTExNmZmYzQz
14
- ZTdhMDQ4ZmUwMTU2Njg3YTQ4MzI5ZGMwY2VjM2ZhNGVjYzFlNDYyYTA2ZDZk
15
- MmE4ZjE3ZDA3ZWM1MThhZDFmOTFmZWI0NmQ2NWI3OTVlNDUzMDc=
13
+ Y2Y3NmZjZmY0Y2Q4NGVmNTRmYWMyMGQ4NzMyN2E4OTBmZDUyNmE3MTllM2Q3
14
+ MzUyYmIzMWQwNjI5ODk2ZjFjOWY3OWZkYjdiNmQyNWY1ZjRjMmEwNjI0Njc0
15
+ N2ViNWUyMGY0YWM5YzY3YzUzYmZhZmI3NDlmYTc3YThhYjEyZTg=
@@ -28,7 +28,8 @@ module SchemaTools
28
28
  # @param [Hash{Symbol=>Mixed}] opts additional options
29
29
  # @options opts [String|Symbol] :class_name used as hash key. Should be
30
30
  # a lowercase underscored name and it MUST have an existing schema file.
31
- # Use it to override the default, which is obj.class.name
31
+ # Use it to override the default, which is obj.class.name. Only used for
32
+ # top-level object NOT nested objects
32
33
  # @options opts [Array<String>] :fields to return. If not set all schema
33
34
  # properties are used.
34
35
  # @options opts [String] :path of the schema files overriding global one
@@ -71,8 +72,10 @@ module SchemaTools
71
72
  schema['properties'].each do |field, prop|
72
73
  next if fields && !fields.include?(field)
73
74
  if prop['type'] == 'array'
75
+ opts.delete(:class_name)
74
76
  data[field] = parse_list(obj, field, prop, opts)
75
77
  elsif prop['type'] == 'object' # a singular related object
78
+ opts.delete(:class_name)
76
79
  data[field] = parse_object(obj, field, prop, opts)
77
80
  else # a simple field is only added if the object knows it
78
81
  data[field] = obj.send(field) if obj.respond_to?(field)
@@ -142,6 +145,11 @@ module SchemaTools
142
145
  if obj.respond_to?( field ) && rel_obj = obj.send( field )
143
146
  if prop['properties'] && prop['properties']['$ref']
144
147
  res = from_schema(rel_obj, opts)
148
+ elsif prop['oneOf']
149
+ # auto-detects which schema to use depending on the rel_object type
150
+ # Simpler than detecting the object type or $ref to use inside the
151
+ # oneOf array
152
+ res = from_schema(rel_obj, opts)
145
153
  else
146
154
  # NO recursion directly get values from related object. Does
147
155
  # NOT allow deeper nesting so you MUST define an own schema to be save
@@ -42,6 +42,12 @@ module SchemaTools
42
42
  elsif path_or_schema.is_a?(::String) || path_or_schema.nil?
43
43
  path = path_or_schema
44
44
  file_path = File.join(path || SchemaTools.schema_path, "#{schema_name}.json")
45
+ unless File.exist?(file_path)
46
+ # check if file exists else try to find first real path in sub-dirs
47
+ recursive_search = Dir.glob( File.join(SchemaTools.schema_path, '**/*', "#{schema_name}.json"))[0]
48
+ # use only if we found something, else keep path which will throw error on file.open later
49
+ file_path = recursive_search || file_path
50
+ end
45
51
  else
46
52
  raise ArgumentError, 'Second parameter must be a path or a schema!'
47
53
  end
@@ -1,3 +1,3 @@
1
1
  module SchemaTools
2
- VERSION = '0.2.4'
2
+ VERSION = '0.2.5'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_schema_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Georg Leciejewski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-21 00:00:00.000000000 Z
11
+ date: 2014-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json