rusty_json_schema 0.2.0 → 0.9.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
  SHA256:
3
- metadata.gz: dd6b9fde168fe809a7285e76360ae1a87c55c3e0603d4e4901b76f1b4c101674
4
- data.tar.gz: '08b4831a5dff32132d473d17470fc992c4b6a453472366eca4f7b511b84fea2a'
3
+ metadata.gz: 3bf92f5d1ed9c0186380f1ada17deae759ecfaf396f9f997094b6672df710d33
4
+ data.tar.gz: 0a7dc445d6b9765794ac4a19c030c862a503e90e679191b6abddfba595fbb092
5
5
  SHA512:
6
- metadata.gz: 7b45b35d8d14862cf402215993c2075885ad014a2c80a41394bf9959495a4ecb5993d17bb31d479260f83746325e6c1b3527dfaa630af8967a884f4413ef9f5f
7
- data.tar.gz: a70e61c95d6f55d66da0848fa4edc0a78dad1fa08da140eca8c2f0af8d0365f51eff7f8ee7dfdb855ffe6de1488b0c1499b0bddf3a357a9e34e89a0c4b414404
6
+ metadata.gz: f620866be4dc3ec9ba8c0cf544a888034e6352587f212c5bbb7e9589a7bd93055f0073337d9f465e0ba79abe1686745f1abe48cd0a39b4830683014406ddf898
7
+ data.tar.gz: bf084b4eefbc2f3988894ccf1ef8224c500ebce40373d2737b3fe86715fc4964599634edb7c3d12bd8997ae3b4a31c3a56dba0d2c1c1ef6e1def7227bfda01d7
data/Cargo.toml CHANGED
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "json_schema"
3
- version = "0.1.0"
3
+ version = "0.6.1"
4
4
  authors = ["Leszek Zalewski <leszekzalewski@fastmail.fm>"]
5
5
  edition = "2018"
6
6
 
@@ -10,5 +10,5 @@ crate-type = ["cdylib"]
10
10
 
11
11
  [dependencies]
12
12
  libc = "0.2.81"
13
- jsonschema = "0.4.3"
13
+ jsonschema = "0.9.0"
14
14
  serde_json = "1.0"
data/README.md CHANGED
@@ -8,6 +8,8 @@ Currently during heavy development.
8
8
 
9
9
  ## Installation
10
10
 
11
+ > **NOTE**: Compilation requires openssl-dev / openssl-devel package
12
+
11
13
  Add this line to your application's Gemfile:
12
14
 
13
15
  ```ruby
@@ -45,7 +47,7 @@ To get validation errors
45
47
 
46
48
  ```ruby
47
49
  validator.validate(event_json)
48
- # => ["invalid...", ...]
50
+ # => ["path \"...\": invalid...", ...]
49
51
  ```
50
52
 
51
53
  ## Development
data/ext/Rakefile ADDED
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "thermite/tasks"
4
+ require_relative "../lib/tasks/thermite_dir_patch"
5
+
6
+ project_dir = File.dirname(File.dirname(__FILE__))
7
+ thermite = Thermite::Tasks.new(cargo_project_path: project_dir,
8
+ ruby_project_path: project_dir,
9
+ optional_rust_extension: true)
10
+
11
+ namespace :thermite do # rubocop:disable Metrics/BlockLength
12
+ desc "Clean up default binaries"
13
+ task :clean_binnaries do
14
+ puts "Cleaning up"
15
+ Dir["#{thermite.config.ruby_extension_path}.*.default"].each do |file|
16
+ FileUtils.rm(file)
17
+ end
18
+ end
19
+
20
+ desc "Try to build extension if cargo is available or setup default lib"
21
+ task :build_or_default do
22
+ platform = "#{Gem::Platform.local.cpu}-#{Gem::Platform.local.os}"
23
+ default_ext_path = "#{thermite.config.ruby_extension_path}.#{platform}.default"
24
+
25
+ if thermite.cargo
26
+ profile = ENV.fetch("CARGO_PROFILE", "release")
27
+ thermite.run_cargo_rustc(profile)
28
+
29
+ FileUtils.cp(thermite.config.cargo_target_path(profile, thermite.config.cargo_shared_library),
30
+ thermite.config.ruby_extension_path)
31
+ elsif File.exist?(default_ext_path)
32
+ puts "NOTE: Defaults to pre-build binary #{default_ext_path.inspect} => your mileage may vary."
33
+
34
+ FileUtils.mv(default_ext_path,
35
+ thermite.config.ruby_extension_path)
36
+
37
+ thermite.inform_user_about_cargo
38
+ else
39
+ # Prebuild binary is not available for a given platform, install cargo to
40
+ # compile the gem
41
+ raise thermite.cargo_required_msg
42
+ end
43
+ end
44
+
45
+ desc "Cleanup cargo artifacts"
46
+ task :cargo_clean do
47
+ thermite.run_cargo_if_exists "clean", *thermite.cargo_manifest_path_args
48
+ end
49
+ end
50
+
51
+ task default: %w[thermite:build_or_default thermite:cargo_clean thermite:clean_binnaries]
@@ -9,13 +9,7 @@ module RustyJSONSchema
9
9
 
10
10
  extend FFI::Library
11
11
 
12
- lib_name =
13
- case ::FFI::Platform::LIBSUFFIX
14
- when "so", "dylib" then "libjson_schema"
15
- when "dll" then "json_schema"
16
- end
17
-
18
- ffi_lib File.expand_path("../ext/#{lib_name}.#{::FFI::Platform::LIBSUFFIX}", __dir__)
12
+ ffi_lib File.expand_path("../../ext/json_schema.so", __dir__)
19
13
 
20
14
  attach_function :new, :validator_new, [:string], Validator
21
15
  attach_function :free, :validator_free, [Validator], :void
@@ -17,10 +17,27 @@ module RustyJSONSchema
17
17
 
18
18
  # Simple validation without actual error messages
19
19
  #
20
+ # ## Examples
21
+ #
22
+ # validator = RustyJSONSchema.build(json_schema)
23
+ # validator.valid?(event)
24
+ # # => false|true
25
+ #
20
26
  def valid?(event)
21
27
  Binding.is_valid(self, RustyJSONSchema.dump(event))
22
28
  end
23
29
 
30
+ # Full validation and error messages
31
+ #
32
+ # ## Examples
33
+ #
34
+ # validator = RustyJSONSchema.build(json_schema)
35
+ # validator.validate(event)
36
+ # # => [
37
+ # # 'path "/foo": "rusty" is not a "number"',
38
+ # # ...
39
+ # # ]
40
+ #
24
41
  def validate(event)
25
42
  Binding.validate(self, RustyJSONSchema.dump(event)).to_a
26
43
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RustyJSONSchema
4
4
 
5
- VERSION = "0.2.0"
5
+ VERSION = "0.9.0"
6
6
 
7
7
  end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Update where this option is configurable
4
+ # is not yet released
5
+ module ThermiteDirPatch
6
+
7
+ def ruby_extension_path
8
+ ruby_path("ext", shared_library)
9
+ end
10
+
11
+ end
12
+
13
+ Thermite::Config.prepend(ThermiteDirPatch)
@@ -2,7 +2,7 @@
2
2
 
3
3
  require_relative "lib/rusty_json_schema/version"
4
4
 
5
- Gem::Specification.new do |spec|
5
+ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
6
6
  spec.name = "rusty_json_schema"
7
7
  spec.version = RustyJSONSchema::VERSION
8
8
  spec.authors = ["Leszek Zalewski"]
@@ -16,17 +16,29 @@ Gem::Specification.new do |spec|
16
16
  Currently during heavy development.
17
17
  STR
18
18
 
19
- spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
19
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.6.0")
20
20
 
21
21
  spec.metadata["allowed_push_host"] = "https://rubygems.org"
22
22
  spec.metadata["homepage_uri"] = spec.homepage
23
23
  spec.metadata["source_code_uri"] = spec.homepage
24
24
  spec.metadata["changelog_uri"] = "https://github.com/driv3r/rusty_json_schema/blob/main/CHANGELOG.md"
25
25
 
26
- spec.files = Dir["lib/**/*", "src/**/*.rs", "rusty_json_schema.gemspec", "Cargo.toml", "LICENSE", "README.md"]
26
+ spec.files = Dir[
27
+ "lib/**/*",
28
+ "src/**/*.rs",
29
+ "rusty_json_schema.gemspec",
30
+ "Cargo.toml",
31
+ "LICENSE",
32
+ "README.md",
33
+ "ext/Rakefile",
34
+ "ext/*.default"
35
+ ]
27
36
 
28
37
  spec.require_paths = ["lib"]
29
38
 
39
+ spec.extensions << "ext/Rakefile"
40
+ spec.add_runtime_dependency "thermite", "~> 0"
41
+
30
42
  # Uncomment to register a new dependency of your gem
31
43
  spec.add_dependency "ffi", "~> 1.14"
32
44
  spec.add_dependency "json", ">= 1.0"
data/src/lib.rs CHANGED
@@ -42,7 +42,12 @@ impl Validator {
42
42
 
43
43
  if let Err(validation_errors) = self.schema.validate(event) {
44
44
  for error in validation_errors {
45
- errors.push(error.to_string());
45
+ let path = match format!("{}", error.instance_path).as_str() {
46
+ "" => "/".to_string(),
47
+ p => p.to_string(),
48
+ };
49
+
50
+ errors.push(format!("path \"{}\": {}", path, error));
46
51
  }
47
52
  }
48
53
 
@@ -209,9 +214,9 @@ mod tests {
209
214
  let result = unsafe { helper_validate_result_as_vec(raw_result) };
210
215
 
211
216
  let expectation: Vec<String> = vec![
212
- String::from("\'\"rusty\"\' is not of type \'number\'"),
213
- String::from("\'1\' is not of type \'string\'"),
214
- String::from("\'baz\' is a required property"),
217
+ String::from("path \"/bar\": \"rusty\" is not of type \"number\""),
218
+ String::from("path \"/foo\": 1 is not of type \"string\""),
219
+ String::from("path \"/\": \"baz\" is a required property"),
215
220
  ];
216
221
 
217
222
  assert_eq!(result, expectation);
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rusty_json_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leszek Zalewski
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-12-30 00:00:00.000000000 Z
11
+ date: 2021-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thermite
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: ffi
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -45,24 +59,22 @@ description: |2
45
59
  email:
46
60
  - leszekzalewski@fastmail.fm
47
61
  executables: []
48
- extensions: []
62
+ extensions:
63
+ - ext/Rakefile
49
64
  extra_rdoc_files: []
50
65
  files:
51
66
  - Cargo.toml
52
67
  - README.md
53
- - lib/ext/json_schema.d
54
- - lib/ext/json_schema.dll
55
- - lib/ext/json_schema.dll.exp
56
- - lib/ext/json_schema.dll.lib
57
- - lib/ext/json_schema.pdb
58
- - lib/ext/libjson_schema.d
59
- - lib/ext/libjson_schema.dylib
60
- - lib/ext/libjson_schema.so
68
+ - ext/Rakefile
69
+ - ext/json_schema.so.x64-mingw32.default
70
+ - ext/json_schema.so.x86_64-darwin.default
71
+ - ext/json_schema.so.x86_64-linux.default
61
72
  - lib/rusty_json_schema.rb
62
73
  - lib/rusty_json_schema/binding.rb
63
74
  - lib/rusty_json_schema/nodes_array.rb
64
75
  - lib/rusty_json_schema/validator.rb
65
76
  - lib/rusty_json_schema/version.rb
77
+ - lib/tasks/thermite_dir_patch.rb
66
78
  - rusty_json_schema.gemspec
67
79
  - src/lib.rs
68
80
  homepage: https://github.com/driv3r/rusty_json_schema
@@ -81,15 +93,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
81
93
  requirements:
82
94
  - - ">="
83
95
  - !ruby/object:Gem::Version
84
- version: 2.5.0
96
+ version: 2.6.0
85
97
  required_rubygems_version: !ruby/object:Gem::Requirement
86
98
  requirements:
87
99
  - - ">="
88
100
  - !ruby/object:Gem::Version
89
101
  version: '0'
90
102
  requirements: []
91
- rubyforge_project:
92
- rubygems_version: 2.7.3
103
+ rubygems_version: 3.0.1
93
104
  signing_key:
94
105
  specification_version: 4
95
106
  summary: FFI wrapper around jsonschema-rs Rust library.
@@ -1 +0,0 @@
1
- D:\a\rusty_json_schema\rusty_json_schema\target\x86_64-pc-windows-msvc\release\json_schema.dll: D:\a\rusty_json_schema\rusty_json_schema\src\lib.rs
Binary file
Binary file
Binary file
Binary file
@@ -1 +0,0 @@
1
- /home/runner/work/rusty_json_schema/rusty_json_schema/target/x86_64-unknown-linux-gnu/release/libjson_schema.so: /home/runner/work/rusty_json_schema/rusty_json_schema/src/lib.rs
Binary file
Binary file