schemacop 3.0.0.rc4 → 3.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7d4b39e7b5e7391e8c5a8ff8ca7a1b008b19f1b62496e9a48e4180f7e953449d
4
- data.tar.gz: 77bcf64925543433aad78dc02fbe610801db6a618cb1c8b154cea1a55c7220cf
3
+ metadata.gz: 8beb01b4d3fc6d20f2179d2e44086b534d50b673248635d19782fba609737ce3
4
+ data.tar.gz: e905b06d0f7bed58cf5a1247a4ec4a201fe053241516aa6269275b87ef41ba31
5
5
  SHA512:
6
- metadata.gz: 75030bf09dcbdc5f556e48aac4ac9b200713b3cb59c5a6dfa071bcb642e030638bc3de80a1969378b33c9c77ab5c0ca3f44866c2ce691e827b4067025ca89f0e
7
- data.tar.gz: 54de1f2cac717dc6d8b4fcc89bdb679c7d7d528785a2a664bc9940061b1e5015bebd9827677bb581bc838f87ad62e0d54db87d13ce5ba0fa70ca44a37985e539
6
+ metadata.gz: 2418e8eacb3854f85b8fa4689d3a4819d4b6ff76aedb0910c5e7b2f41566d15339347e5890e46588f4d8859f79594bd049988d669e9c3486d4bef4db06733fa7
7
+ data.tar.gz: 26e0d958b4509fa5376703d17bc00ca05d28fc39fc631a26e2444356065e3c2f80982aa8411b89d197bccafa4a18023aaf3933221be347e1030973e8f64af5e4
data/CHANGELOG.md CHANGED
@@ -10,7 +10,30 @@
10
10
  ### Changes
11
11
  -->
12
12
 
13
- ## 3.0.0.rc4 (2020-02-02)
13
+ ## 3.0.3 (2021-02-15)
14
+
15
+ * Fix boolean node casting
16
+
17
+ ## 3.0.2 (2021-02-14)
18
+
19
+ * Fix #15 Code to ignore Zeitwerk fails when Zeitwerk is disabled
20
+
21
+ ## 3.0.1 (2021-02-11)
22
+
23
+ * Add format `symbol` to strings
24
+
25
+ ## 3.0.0 (2021-02-08)
26
+
27
+ * Setup Zeitwerk ignores for Rails applications
28
+
29
+ * Read previous `3.0.0.rcX` entries for all changes included
30
+ in this stable release
31
+
32
+ ## 3.0.0.rc5 (2021-02-05)
33
+
34
+ * Use `ruby2_keywords` for compatibility with ruby `2.6.2`
35
+
36
+ ## 3.0.0.rc4 (2021-02-02)
14
37
 
15
38
  * Fix some minor bugs
16
39
 
@@ -19,19 +42,19 @@
19
42
  * `used_external_schemas` for the `ReferenceNode` is now applied
20
43
  recursively
21
44
 
22
- ## 3.0.0.rc3 (2020-01-28)
45
+ ## 3.0.0.rc3 (2021-01-28)
23
46
 
24
47
  * Add minor improvements to the documentation
25
48
 
26
49
  * Internal restructuring, no changes in API
27
50
 
28
- ## 3.0.0.rc2 (2020-01-28)
51
+ ## 3.0.0.rc2 (2021-01-28)
29
52
 
30
53
  * Represent node names as strings internally
31
54
 
32
55
  * Update documentation
33
56
 
34
- ## 3.0.0.rc1 (2020-01-22)
57
+ ## 3.0.0.rc1 (2021-01-22)
35
58
 
36
59
  * Add support for ruby `3.0.0`
37
60
 
@@ -39,7 +62,7 @@
39
62
 
40
63
  * Document all `v3` nodes
41
64
 
42
- ## 3.0.0.rc0 (2020-01-14)
65
+ ## 3.0.0.rc0 (2021-01-14)
43
66
 
44
67
  * Add `Schemacop::Schema3`
45
68
 
data/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020 Sitrox
3
+ Copyright © 2016 - 2021 Sitrox
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -16,7 +16,7 @@ Schemacop is tested with the following ruby versions:
16
16
  * 2.7.1
17
17
  * 3.0.0
18
18
 
19
- For these versions, the automated CI tests are ran on travis. Other ruby versions might work, but stick to these versions for best results.
19
+ Other ruby versions might work but are not covered by our Travis tests.
20
20
 
21
21
  ## Basic example
22
22
 
@@ -118,4 +118,4 @@ To run tests:
118
118
 
119
119
  ## Copyright
120
120
 
121
- Copyright (c) 2020 Sitrox. See `LICENSE` for further details.
121
+ Copyright © 2016 - 2021 Sitrox. See `LICENSE` for further details.
data/README_V3.md CHANGED
@@ -241,6 +241,9 @@ transformed into various types.
241
241
  * `number`
242
242
  The string must be a number and will be casted to a ruby `Float` object.
243
243
 
244
+ * `symbol`
245
+ The string can be anything and will be casted to a ruby `Symbol` object.
246
+
244
247
  #### Examples
245
248
 
246
249
  ```ruby
@@ -1191,14 +1194,17 @@ local schemas > context schemas > global schemas
1191
1194
 
1192
1195
  Where:
1193
1196
 
1194
- * local schemas: Defined by using the DSL method? `scm`
1197
+ * local schemas: Defined by using the DSL method `scm`
1195
1198
  * context schemas: Defined in the current context using `context.schema`
1196
1199
  * global schemas: Defined in a ruby file in the load path
1197
1200
 
1198
1201
  ### Rails applications
1199
1202
 
1200
- In Rails applications, your schemas are automatically eager-laoded from the load
1201
- path `'app/schemas'` when your application is started.
1203
+ In Rails applications, your schemas are automatically eager-loaded from the load
1204
+ path `'app/schemas'` when your application is started, unless your application
1205
+ is running in the `DEVELOPMENT` environment. In the `DEVELOPMENT` environment,
1206
+ schemas are loaded each time when they are used, and as such you can make changes
1207
+ to your external schemas without having to restart the server each time.
1202
1208
 
1203
1209
  After starting your application, you can reference them like normally defined
1204
1210
  reference schemas, with the name being relative to the load path.
@@ -1246,8 +1252,12 @@ schema.validate!({usr: {first_name: 'Joe', last_name: 'Doe', groups: [{name: 'fo
1246
1252
  ### Non-Rails applications
1247
1253
 
1248
1254
  Usage in non-Rails applications is the same as with usage in Rails applications,
1249
- however you need to eager load the schemas yourself:
1255
+ however you might need to eager load the schemas yourself:
1250
1256
 
1251
1257
  ```ruby
1252
1258
  Schemacop::V3::GlobalContext.eager_load!
1253
1259
  ```
1260
+
1261
+ As mentioned before, you can also use the external schemas without having to
1262
+ eager-load them, but if you use the schemas multiple times, it might be better
1263
+ to eager-load them on start of your application / script.
data/Rakefile CHANGED
@@ -18,6 +18,7 @@ task :gemspec do
18
18
  # needs access to ActiveSupport::HashWithIndifferentAccess and expects
19
19
  # behavior of that as in version 5 of ActiveSupport.
20
20
  spec.add_dependency 'activesupport', '>= 4.0'
21
+ spec.add_dependency 'ruby2_keywords', '0.0.4'
21
22
  spec.add_development_dependency 'bundler'
22
23
  spec.add_development_dependency 'rake'
23
24
  spec.add_development_dependency 'minitest'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.0.0.rc4
1
+ 3.0.3
data/lib/schemacop.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  # External dependencies
2
+ require 'ruby2_keywords'
2
3
  require 'active_support/all'
3
4
  require 'set'
4
5
 
@@ -5,6 +5,13 @@ module Schemacop
5
5
  unless Rails.env.development?
6
6
  V3::GlobalContext.eager_load!
7
7
  end
8
+
9
+ # Tell Zeitwerk to ignore the files in our load path
10
+ if defined?(Rails) && defined?(Zeitwerk) && Rails.autoloaders.zeitwerk_enabled?
11
+ Schemacop.load_paths.each do |load_path|
12
+ Rails.autoloaders.main.ignore(Rails.root.join(load_path))
13
+ end
14
+ end
8
15
  end
9
16
  end
10
17
  end
@@ -7,14 +7,14 @@ module Schemacop
7
7
  @prefix = prefix
8
8
  end
9
9
 
10
- def method_missing(symbol, *args, **kwargs, &block)
10
+ ruby2_keywords def method_missing(symbol, *args, &block)
11
11
  symbol = :"#{@prefix}#{symbol}" if @prefix
12
12
 
13
13
  if @methods.include?(symbol)
14
14
  if @delegation_object.respond_to?(symbol)
15
- @delegation_object.send(symbol, *args, **kwargs, &block)
15
+ @delegation_object.send(symbol, *args, &block)
16
16
  elsif @backup_binding.respond_to?(symbol)
17
- @backup_binding.send(symbol, *args, **kwargs, &block)
17
+ @backup_binding.send(symbol, *args, &block)
18
18
  else
19
19
  super
20
20
  end
@@ -11,6 +11,14 @@ module Schemacop
11
11
  FalseClass => :boolean
12
12
  }
13
13
  end
14
+
15
+ def cast(value)
16
+ if value.is_a?(TrueClass) || value.is_a?(FalseClass)
17
+ value
18
+ else
19
+ default
20
+ end
21
+ end
14
22
  end
15
23
  end
16
24
  end
@@ -16,6 +16,7 @@ module Schemacop
16
16
  email: URI::MailTo::EMAIL_REGEXP,
17
17
  boolean: /^(true|false)$/,
18
18
  binary: nil,
19
+ symbol: nil,
19
20
  integer: /^-?[0-9]+$/,
20
21
  number: /^-?[0-9]+(\.[0-9]+)?$/
21
22
  }.freeze
@@ -87,6 +88,8 @@ module Schemacop
87
88
  return Integer(to_cast)
88
89
  when :number
89
90
  return Float(to_cast)
91
+ when :symbol
92
+ return to_cast.to_sym
90
93
  else
91
94
  return to_cast
92
95
  end
data/schemacop.gemspec CHANGED
@@ -1,14 +1,14 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: schemacop 3.0.0.rc4 ruby lib
2
+ # stub: schemacop 3.0.3 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "schemacop".freeze
6
- s.version = "3.0.0.rc4"
6
+ s.version = "3.0.3"
7
7
 
8
- s.required_rubygems_version = Gem::Requirement.new("> 1.3.1".freeze) if s.respond_to? :required_rubygems_version=
8
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
9
9
  s.require_paths = ["lib".freeze]
10
10
  s.authors = ["Sitrox".freeze]
11
- s.date = "2021-02-02"
11
+ s.date = "2021-02-15"
12
12
  s.files = [".gitignore".freeze, ".releaser_config".freeze, ".rubocop.yml".freeze, ".travis.yml".freeze, ".yardopts".freeze, "CHANGELOG.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README.md".freeze, "README_V2.md".freeze, "README_V3.md".freeze, "RUBY_VERSION".freeze, "Rakefile".freeze, "VERSION".freeze, "lib/schemacop.rb".freeze, "lib/schemacop/base_schema.rb".freeze, "lib/schemacop/exceptions.rb".freeze, "lib/schemacop/railtie.rb".freeze, "lib/schemacop/schema.rb".freeze, "lib/schemacop/schema2.rb".freeze, "lib/schemacop/schema3.rb".freeze, "lib/schemacop/scoped_env.rb".freeze, "lib/schemacop/v2.rb".freeze, "lib/schemacop/v2/caster.rb".freeze, "lib/schemacop/v2/collector.rb".freeze, "lib/schemacop/v2/dupper.rb".freeze, "lib/schemacop/v2/field_node.rb".freeze, "lib/schemacop/v2/node.rb".freeze, "lib/schemacop/v2/node_resolver.rb".freeze, "lib/schemacop/v2/node_supporting_field.rb".freeze, "lib/schemacop/v2/node_supporting_type.rb".freeze, "lib/schemacop/v2/node_with_block.rb".freeze, "lib/schemacop/v2/validator/array_validator.rb".freeze, "lib/schemacop/v2/validator/boolean_validator.rb".freeze, "lib/schemacop/v2/validator/float_validator.rb".freeze, "lib/schemacop/v2/validator/hash_validator.rb".freeze, "lib/schemacop/v2/validator/integer_validator.rb".freeze, "lib/schemacop/v2/validator/nil_validator.rb".freeze, "lib/schemacop/v2/validator/number_validator.rb".freeze, "lib/schemacop/v2/validator/object_validator.rb".freeze, "lib/schemacop/v2/validator/string_validator.rb".freeze, "lib/schemacop/v2/validator/symbol_validator.rb".freeze, "lib/schemacop/v3.rb".freeze, "lib/schemacop/v3/all_of_node.rb".freeze, "lib/schemacop/v3/any_of_node.rb".freeze, "lib/schemacop/v3/array_node.rb".freeze, "lib/schemacop/v3/boolean_node.rb".freeze, "lib/schemacop/v3/combination_node.rb".freeze, "lib/schemacop/v3/context.rb".freeze, "lib/schemacop/v3/dsl_scope.rb".freeze, "lib/schemacop/v3/global_context.rb".freeze, "lib/schemacop/v3/hash_node.rb".freeze, "lib/schemacop/v3/integer_node.rb".freeze, "lib/schemacop/v3/is_not_node.rb".freeze, "lib/schemacop/v3/node.rb".freeze, "lib/schemacop/v3/node_registry.rb".freeze, "lib/schemacop/v3/number_node.rb".freeze, "lib/schemacop/v3/numeric_node.rb".freeze, "lib/schemacop/v3/object_node.rb".freeze, "lib/schemacop/v3/one_of_node.rb".freeze, "lib/schemacop/v3/reference_node.rb".freeze, "lib/schemacop/v3/result.rb".freeze, "lib/schemacop/v3/string_node.rb".freeze, "lib/schemacop/v3/symbol_node.rb".freeze, "schemacop.gemspec".freeze, "test/lib/test_helper.rb".freeze, "test/schemas/nested/group.rb".freeze, "test/schemas/user.rb".freeze, "test/unit/schemacop/v2/casting_test.rb".freeze, "test/unit/schemacop/v2/collector_test.rb".freeze, "test/unit/schemacop/v2/custom_check_test.rb".freeze, "test/unit/schemacop/v2/custom_if_test.rb".freeze, "test/unit/schemacop/v2/defaults_test.rb".freeze, "test/unit/schemacop/v2/empty_test.rb".freeze, "test/unit/schemacop/v2/nil_dis_allow_test.rb".freeze, "test/unit/schemacop/v2/node_resolver_test.rb".freeze, "test/unit/schemacop/v2/short_forms_test.rb".freeze, "test/unit/schemacop/v2/types_test.rb".freeze, "test/unit/schemacop/v2/validator_array_test.rb".freeze, "test/unit/schemacop/v2/validator_boolean_test.rb".freeze, "test/unit/schemacop/v2/validator_float_test.rb".freeze, "test/unit/schemacop/v2/validator_hash_test.rb".freeze, "test/unit/schemacop/v2/validator_integer_test.rb".freeze, "test/unit/schemacop/v2/validator_nil_test.rb".freeze, "test/unit/schemacop/v2/validator_number_test.rb".freeze, "test/unit/schemacop/v2/validator_object_test.rb".freeze, "test/unit/schemacop/v2/validator_string_test.rb".freeze, "test/unit/schemacop/v2/validator_symbol_test.rb".freeze, "test/unit/schemacop/v3/all_of_node_test.rb".freeze, "test/unit/schemacop/v3/any_of_node_test.rb".freeze, "test/unit/schemacop/v3/array_node_test.rb".freeze, "test/unit/schemacop/v3/boolean_node_test.rb".freeze, "test/unit/schemacop/v3/global_context_test.rb".freeze, "test/unit/schemacop/v3/hash_node_test.rb".freeze, "test/unit/schemacop/v3/integer_node_test.rb".freeze, "test/unit/schemacop/v3/is_not_node_test.rb".freeze, "test/unit/schemacop/v3/node_test.rb".freeze, "test/unit/schemacop/v3/number_node_test.rb".freeze, "test/unit/schemacop/v3/object_node_test.rb".freeze, "test/unit/schemacop/v3/one_of_node_test.rb".freeze, "test/unit/schemacop/v3/reference_node_test.rb".freeze, "test/unit/schemacop/v3/string_node_test.rb".freeze, "test/unit/schemacop/v3/symbol_node_test.rb".freeze]
13
13
  s.homepage = "https://github.com/sitrox/schemacop".freeze
14
14
  s.licenses = ["MIT".freeze]
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
 
22
22
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
23
23
  s.add_runtime_dependency(%q<activesupport>.freeze, [">= 4.0"])
24
+ s.add_runtime_dependency(%q<ruby2_keywords>.freeze, ["= 0.0.4"])
24
25
  s.add_development_dependency(%q<bundler>.freeze, [">= 0"])
25
26
  s.add_development_dependency(%q<rake>.freeze, [">= 0"])
26
27
  s.add_development_dependency(%q<minitest>.freeze, [">= 0"])
@@ -32,6 +33,7 @@ Gem::Specification.new do |s|
32
33
  s.add_development_dependency(%q<simplecov>.freeze, ["= 0.21.2"])
33
34
  else
34
35
  s.add_dependency(%q<activesupport>.freeze, [">= 4.0"])
36
+ s.add_dependency(%q<ruby2_keywords>.freeze, ["= 0.0.4"])
35
37
  s.add_dependency(%q<bundler>.freeze, [">= 0"])
36
38
  s.add_dependency(%q<rake>.freeze, [">= 0"])
37
39
  s.add_dependency(%q<minitest>.freeze, [">= 0"])
@@ -44,6 +46,7 @@ Gem::Specification.new do |s|
44
46
  end
45
47
  else
46
48
  s.add_dependency(%q<activesupport>.freeze, [">= 4.0"])
49
+ s.add_dependency(%q<ruby2_keywords>.freeze, ["= 0.0.4"])
47
50
  s.add_dependency(%q<bundler>.freeze, [">= 0"])
48
51
  s.add_dependency(%q<rake>.freeze, [">= 0"])
49
52
  s.add_dependency(%q<minitest>.freeze, [">= 0"])
@@ -120,6 +120,22 @@ module Schemacop
120
120
  ]
121
121
  })
122
122
  end
123
+
124
+ def test_cast
125
+ schema :boolean
126
+
127
+ assert_cast(true, true)
128
+ assert_cast(false, false)
129
+ assert_cast(nil, nil)
130
+ end
131
+
132
+ def test_cast_default
133
+ schema :boolean, default: true
134
+
135
+ assert_cast(true, true)
136
+ assert_cast(false, false)
137
+ assert_cast(nil, true)
138
+ end
123
139
  end
124
140
  end
125
141
  end
@@ -165,6 +165,23 @@ module Schemacop
165
165
  assert_cast('john.doe@example.com', 'john.doe@example.com')
166
166
  end
167
167
 
168
+ def test_format_symbol
169
+ schema :string, format: :symbol
170
+
171
+ assert_json(type: :string, format: :symbol)
172
+
173
+ assert_validation 'foobar'
174
+ assert_validation ''
175
+
176
+ assert_validation 234 do
177
+ error '/', 'Invalid type, expected "string".'
178
+ end
179
+
180
+ assert_cast(nil, nil)
181
+ assert_cast('foobar', :foobar)
182
+ assert_cast('039n23$g- sfk3/', :'039n23$g- sfk3/')
183
+ end
184
+
168
185
  def test_enum
169
186
  schema :string, enum: ['foo', 'some string', 'some other string', 42]
170
187
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: schemacop
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.rc4
4
+ version: 3.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sitrox
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-02 00:00:00.000000000 Z
11
+ date: 2021-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '4.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ruby2_keywords
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.4
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.4
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -274,9 +288,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
274
288
  version: '0'
275
289
  required_rubygems_version: !ruby/object:Gem::Requirement
276
290
  requirements:
277
- - - ">"
291
+ - - ">="
278
292
  - !ruby/object:Gem::Version
279
- version: 1.3.1
293
+ version: '0'
280
294
  requirements: []
281
295
  rubygems_version: 3.0.3
282
296
  signing_key: