jimmy 0.4.8 → 0.5.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: 4a51616d28eabe1ac8cb2d1847768821eb1c01df
4
- data.tar.gz: 1c1ce6030830cab1f48bcfbf270be194ab6d2a49
3
+ metadata.gz: a57c984eab30453b66049bd8720bfcb7a18ff973
4
+ data.tar.gz: f157a9c9e255a546e79119a2cb1a5d0c9a353b17
5
5
  SHA512:
6
- metadata.gz: b6ff1d5007aabd96af72c03204d824a1d5d87c6fa6d94f7bc7e8b2dbf3e2663e9682dd009e81fef2deb8fbf8e352ce1b4a801fd69927bf30ef4544fb3c918c41
7
- data.tar.gz: fa9d5101cee006b9f425e656f285b723ea305dba85301b238f0010e17a29699093fe764f7bf8daf5efd5e9c5ed34303ba424921916d1ca88a50ab095f05532dd
6
+ metadata.gz: 9db24fb7aacca4036027e564cdbe6a0dbbb8e65743958d4e7d41e0aecd85d4d8d5cabb13ecdf8f7e5e40b89ee8154567de3266a074aa1e2873be215b7b9cd124
7
+ data.tar.gz: 0a863b9d1e2b3c1483f6b7ccf57c29518d89eb66e59da556fd566e92f7e0690af6fd3a0af33eee38beda3bcbbbe03c9316a944b94c7fc94d76aebd05dfd4a559
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.1.5
data/jimmy.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
 
12
12
  spec.summary = 'Jimmy the JSON Schema DSL'
13
13
  spec.description = 'Jimmy makes it a snap to compose detailed JSON schema documents.'
14
- spec.homepage = 'https://github.com/orionvm/jimmy'
14
+ spec.homepage = 'https://github.com/hx/jimmy'
15
15
 
16
16
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
17
  spec.bindir = 'bin'
data/lib/jimmy/domain.rb CHANGED
@@ -7,16 +7,20 @@ require_relative 'schema_creation'
7
7
 
8
8
  module Jimmy
9
9
  class Domain
10
+ DEFAULT_OPTIONS = {
11
+ transform_keys: nil
12
+ }
10
13
 
11
- attr_reader :root, :types, :partials
14
+ attr_reader :root, :types, :partials, :options
12
15
 
13
- def initialize(root)
16
+ def initialize(root, **options)
14
17
  @root = URI(root)
15
18
  @schemas = {}
16
19
  @types = {}
17
20
  @partials = {}
18
21
  @import_paths = []
19
22
  @uri_formatter = -> _, name { @root + "#{name}.json#" }
23
+ @options = DEFAULT_OPTIONS.merge(options)
20
24
  end
21
25
 
22
26
  def domain
@@ -1,3 +1,5 @@
1
+ require_relative '../transform_keys'
2
+
1
3
  module Jimmy
2
4
  class SchemaTypes::Object < SchemaType
3
5
  register!
@@ -20,7 +22,7 @@ module Jimmy
20
22
  trait(:allow_additional) { attrs[:additional_properties] = true }
21
23
 
22
24
  nested do |schema, property_name|
23
- (attrs[:properties] ||= {})[property_name] = schema
25
+ (attrs[:properties] ||= {})[TransformKeys.transformer.transform(property_name, domain.options[:transform_keys])] = schema
24
26
  end
25
27
 
26
28
  compile do |hash|
@@ -0,0 +1,31 @@
1
+ module Jimmy
2
+ module TransformKeys
3
+ def camel_upper(str)
4
+ camel_lower(str).sub(/\A(.)/) { $1.upcase }
5
+ end
6
+
7
+ def camel_lower(str)
8
+ str.gsub(/[-_\s]+(.)/) { $1.upcase }
9
+ end
10
+
11
+ class Transformer
12
+ include TransformKeys
13
+
14
+ def cache(method)
15
+ (@cache ||= {})[method] ||= {}
16
+ end
17
+
18
+ def transform(sym, method)
19
+ if method
20
+ cache(method)[sym] ||= __send__(method, sym.to_s).to_sym
21
+ else
22
+ sym
23
+ end
24
+ end
25
+ end
26
+
27
+ def self.transformer
28
+ @transformer ||= Transformer.new
29
+ end
30
+ end
31
+ end
data/lib/jimmy/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Jimmy
2
- VERSION = '0.4.8'
2
+ VERSION = '0.5.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jimmy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.8
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neil E. Pearson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-31 00:00:00.000000000 Z
11
+ date: 2016-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema
@@ -88,6 +88,7 @@ extensions: []
88
88
  extra_rdoc_files: []
89
89
  files:
90
90
  - ".gitignore"
91
+ - ".ruby-version"
91
92
  - Gemfile
92
93
  - LICENSE
93
94
  - README.md
@@ -112,10 +113,11 @@ files:
112
113
  - lib/jimmy/schema_types/object.rb
113
114
  - lib/jimmy/schema_types/string.rb
114
115
  - lib/jimmy/symbol_array.rb
116
+ - lib/jimmy/transform_keys.rb
115
117
  - lib/jimmy/type_reference.rb
116
118
  - lib/jimmy/validation_error.rb
117
119
  - lib/jimmy/version.rb
118
- homepage: https://github.com/orionvm/jimmy
120
+ homepage: https://github.com/hx/jimmy
119
121
  licenses:
120
122
  - Apache License, Version 2.0
121
123
  metadata: {}
@@ -135,7 +137,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
137
  version: '0'
136
138
  requirements: []
137
139
  rubyforge_project:
138
- rubygems_version: 2.4.5.1
140
+ rubygems_version: 2.4.3
139
141
  signing_key:
140
142
  specification_version: 4
141
143
  summary: Jimmy the JSON Schema DSL