ree_lib 1.0.10 → 1.0.13

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: 44e1a436822756b530e7f11947c68f43377096b4b15d8c6d60880a8f2116d1b2
4
- data.tar.gz: cea2b849ec06361e461b282c93632cbcc2131bedfcbf260c87fcca56dfb53539
3
+ metadata.gz: 03420b754f18500299e45b5b611cb72b44693075ec9a93d46481cf891321f69f
4
+ data.tar.gz: 0b58f43befc8d14d5165b91d741f25fff71965940c735e91ef8440b362d864eb
5
5
  SHA512:
6
- metadata.gz: 53f014bef46e41b7f1826ef4487ff0fce03c66b4578a7d6ddd65a37aaa94989aef52523dd368514f1e533b141aac9e9fedc341e4cc14b69dc4a1528482c53ed1
7
- data.tar.gz: fe75d4036275c8a4013fbb064ced2f61b014c7ccccb5e48b7966e83f22f44adbc47345b37c01c2498f6f1d1dc035a21bf3ffa6a86a9aca0ac85665d8a13ac74b
6
+ metadata.gz: 5ce6ccf2789d46751b5ba170fa413c0d0ccc4648c4db7cea76e929ea28123bff3dfc427350631432c0297a43d474d79de69e71b6b076861a137b794b6b9f8c6f
7
+ data.tar.gz: 2cc846873cbc183a9afa1587dff954e2c41fd75a7edbb19929ff2528e18b48c2d74613e482dbf3f80522eccb9a499ef00b094f9a73e368757b27fa9e599938bb
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.10)
4
+ ree_lib (1.0.13)
5
5
  binding_of_caller (~> 1.0.0)
6
6
  i18n (~> 1.12.0)
7
7
  loofah (~> 2.18.0)
@@ -36,17 +36,15 @@ GEM
36
36
  crass (~> 1.0.2)
37
37
  nokogiri (>= 1.5.9)
38
38
  msgpack (1.5.4)
39
- nokogiri (1.13.8-x86_64-darwin)
40
- racc (~> 1.4)
41
39
  nokogiri (1.13.8-x86_64-linux)
42
40
  racc (~> 1.4)
43
- oj (3.13.20)
41
+ oj (3.13.21)
44
42
  pg (1.4.2)
45
43
  public_suffix (4.0.7)
46
44
  racc (1.6.0)
47
45
  rainbow (3.1.1)
48
46
  rake (13.0.6)
49
- ree (1.0.3)
47
+ ree (1.0.4)
50
48
  commander (~> 4.6.0)
51
49
  rexml (3.2.5)
52
50
  rollbar (3.3.1)
@@ -7,6 +7,8 @@ class ReeJson::FromJson
7
7
  }
8
8
  end
9
9
 
10
+ ParseJsonError = Class.new(StandardError)
11
+
10
12
  contract(
11
13
  Any,
12
14
  Kwargs[
@@ -16,7 +18,7 @@ class ReeJson::FromJson
16
18
  symbol_keys?: Bool,
17
19
  RestKeys => Any
18
20
  ] => Hash
19
- ).throws(ArgumentError)
21
+ ).throws(ParseJsonError)
20
22
  def call(object, mode: :rails, **opts)
21
23
  options = DEFAULT_OPTIONS
22
24
  .dup
@@ -25,5 +27,7 @@ class ReeJson::FromJson
25
27
  )
26
28
 
27
29
  Oj.load(object, options)
30
+ rescue ArgumentError, EncodingError
31
+ raise ParseJsonError.new
28
32
  end
29
33
  end
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "doc": "",
12
12
  "throws": [
13
- "ArgumentError"
13
+ "ReeJson::FromJson::ParseJsonError"
14
14
  ],
15
15
  "return": "Hash",
16
16
  "args": [
@@ -11,4 +11,8 @@ RSpec.describe :from_json do
11
11
  result = from_json("{\":id\":{\"^o\":\"Object\"}}", mode: :object)
12
12
  expect(result[:id]).to be_a(Object)
13
13
  }
14
+
15
+ it {
16
+ expect{from_json("{213: \"123\"}")}.to raise_error(ReeJson::FromJson::ParseJsonError)
17
+ }
14
18
  end
@@ -27,10 +27,18 @@
27
27
  "name": "deep_freeze",
28
28
  "schema": "packages/ree_object/schemas/ree_object/functions/deep_freeze.schema.json"
29
29
  },
30
+ {
31
+ "name": "dump_as_json",
32
+ "schema": "packages/ree_object/schemas/ree_object/functions/dump_as_json.schema.json"
33
+ },
30
34
  {
31
35
  "name": "is_blank",
32
36
  "schema": "packages/ree_object/schemas/ree_object/functions/is_blank.schema.json"
33
37
  },
38
+ {
39
+ "name": "load_json_dump",
40
+ "schema": "packages/ree_object/schemas/ree_object/functions/load_json_dump.schema.json"
41
+ },
34
42
  {
35
43
  "name": "not_blank",
36
44
  "schema": "packages/ree_object/schemas/ree_object/functions/not_blank.schema.json"
@@ -0,0 +1,103 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+
5
+ class ReeObject::DumpAsJson
6
+ include Ree::FnDSL
7
+
8
+ fn :dump_as_json do
9
+ def_error { RecursiveObjectErr }
10
+ end
11
+
12
+ ARRAY = 'array'
13
+ HASH = 'hash'
14
+ PRIMITIVE = 'primitive'
15
+ OBJECT = 'object'
16
+
17
+ BASIC_TYPES = [
18
+ Date, Time, Numeric, String, FalseClass, TrueClass, NilClass, Symbol,
19
+ Module, Class
20
+ ].freeze
21
+
22
+ contract(
23
+ Any => Or[Hash, ArrayOf[Any], *BASIC_TYPES]
24
+ ).throws(RecursiveObjectErr)
25
+ def call(obj)
26
+ recursively_convert(obj, {})
27
+ end
28
+
29
+ private
30
+
31
+ def recursively_convert(obj, cache)
32
+ ancestors = obj.class.ancestors
33
+
34
+ if ancestors.intersection(BASIC_TYPES).size > 0
35
+ {
36
+ 'type' => PRIMITIVE,
37
+ 'class' => obj.class.name,
38
+ 'value' => dump_primitive(obj)
39
+ }
40
+ elsif obj.is_a?(Array)
41
+ {
42
+ 'type' => ARRAY,
43
+ 'class' => 'Array',
44
+ 'value' => obj.map { recursively_convert(_1, cache) }
45
+ }
46
+ elsif obj.is_a?(Hash)
47
+ {
48
+ 'type' => HASH,
49
+ 'class' => 'Hash',
50
+ 'value' => convert_hash(obj, cache)
51
+ }
52
+ elsif obj.is_a?(Proc)
53
+ raise ArgumentError, "procs are not supported"
54
+ else
55
+ {
56
+ 'type' => OBJECT,
57
+ 'class' => obj.class.name || (raise ArgumentError.new("anonymous classes are not supported")),
58
+ 'value' => convert_object(obj, cache)
59
+ }
60
+ end
61
+ end
62
+
63
+ PRIMITIVE_SET = Set.new([Symbol, Date, Time, DateTime, Module, Class])
64
+
65
+ def dump_primitive(val)
66
+ if PRIMITIVE_SET.include?(val.class)
67
+ val.to_s
68
+ else
69
+ val
70
+ end
71
+ end
72
+
73
+ def convert_hash(obj, cache)
74
+ result = []
75
+
76
+ obj.each do |k, v|
77
+ result << [
78
+ recursively_convert(k, cache),
79
+ recursively_convert(v, cache),
80
+ ]
81
+ end
82
+
83
+ result
84
+ end
85
+
86
+ def convert_object(obj, cache)
87
+ if cache.key?(obj.object_id)
88
+ raise RecursiveObjectErr, "Recursive object found: #{obj}"
89
+ end
90
+
91
+ cache[obj.object_id] = true
92
+ result = []
93
+
94
+ obj.instance_variables.each do |var|
95
+ result << [
96
+ recursively_convert(var, cache),
97
+ recursively_convert(obj.instance_variable_get(var), cache),
98
+ ]
99
+ end
100
+
101
+ result
102
+ end
103
+ end
@@ -0,0 +1,77 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ReeObject::LoadJsonDump
4
+ include Ree::FnDSL
5
+
6
+ fn :load_json_dump
7
+
8
+ ARRAY = 'array'
9
+ HASH = 'hash'
10
+ PRIMITIVE = 'primitive'
11
+ OBJECT = 'object'
12
+
13
+ contract(Hash => Any)
14
+ def call(dump)
15
+ recursively_load(dump)
16
+ end
17
+
18
+ private
19
+
20
+ def recursively_load(dump)
21
+ case dump['type']
22
+ when ARRAY
23
+ dump['value'].map { recursively_load(_1)}
24
+ when HASH
25
+ result = {}
26
+
27
+ dump['value'].map do |v|
28
+ result[recursively_load(v[0])] = recursively_load(v[1])
29
+ end
30
+
31
+ result
32
+ when PRIMITIVE
33
+ load_primitive(dump['class'], dump['value'])
34
+ when OBJECT
35
+ load_object(dump['class'], dump['value'])
36
+ else
37
+ raise NotImplementedError, "unsupported type provider '#{dump['type']}'"
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def load_primitive(class_str, val)
44
+ if class_str == 'Class' || class_str == 'Module'
45
+ return Object.const_get(val)
46
+ end
47
+
48
+ klass = Object.const_get(class_str)
49
+
50
+ if klass == Symbol
51
+ val.to_sym
52
+ elsif klass == Date
53
+ Date.parse(val)
54
+ elsif klass == Time
55
+ Time.parse(val)
56
+ elsif klass == DateTime
57
+ DateTime.parse(val)
58
+ elsif klass == Module || klass == Class
59
+ klass
60
+ else
61
+ val
62
+ end
63
+ end
64
+
65
+ def load_object(class_str, val)
66
+ klass = Object.const_get(class_str)
67
+ obj = klass.allocate
68
+
69
+ val.each do |v|
70
+ var = recursively_load(v[0])
71
+ value = recursively_load(v[1])
72
+ obj.instance_variable_set(var, value)
73
+ end
74
+
75
+ obj
76
+ end
77
+ end
@@ -0,0 +1,27 @@
1
+ {
2
+ "schema_type": "object",
3
+ "schema_version": "1.0",
4
+ "name": "dump_as_json",
5
+ "path": "packages/ree_object/package/ree_object/functions/dump_as_json.rb",
6
+ "mount_as": "fn",
7
+ "class": "ReeObject::DumpAsJson",
8
+ "factory": null,
9
+ "methods": [
10
+ {
11
+ "doc": "",
12
+ "throws": [
13
+ "ReeObject::DumpAsJson::RecursiveObjectErr"
14
+ ],
15
+ "return": "Or[Hash, ArrayOf[Any], Date, Time, Numeric, String, FalseClass, TrueClass, NilClass, Symbol, Module, Class]",
16
+ "args": [
17
+ {
18
+ "arg": "obj",
19
+ "type": "Any"
20
+ }
21
+ ]
22
+ }
23
+ ],
24
+ "links": [
25
+
26
+ ]
27
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "schema_type": "object",
3
+ "schema_version": "1.0",
4
+ "name": "load_json_dump",
5
+ "path": "packages/ree_object/package/ree_object/functions/load_json_dump.rb",
6
+ "mount_as": "fn",
7
+ "class": "ReeObject::LoadJsonDump",
8
+ "factory": null,
9
+ "methods": [
10
+ {
11
+ "doc": "",
12
+ "throws": [
13
+
14
+ ],
15
+ "return": "Any",
16
+ "args": [
17
+ {
18
+ "arg": "dump",
19
+ "type": "Hash"
20
+ }
21
+ ]
22
+ }
23
+ ],
24
+ "links": [
25
+
26
+ ]
27
+ }
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal = true
2
+
3
+ RSpec.describe :dump_as_json do
4
+ link :dump_as_json, from: :ree_object
5
+ link :load_json_dump, from: :ree_object
6
+
7
+ let(:klass) {
8
+ class TestObjCLass
9
+ attr_reader :integer, :string, :array, :hash, :object, :klass, :module
10
+
11
+ def initialize
12
+ @integer = 1
13
+ @string = 'string'
14
+ @array = [1, 'string', 3, { 'name' => 'John'}]
15
+
16
+ @hash = {
17
+ id: 1,
18
+ 'test' => 2,
19
+ nested: {
20
+ some_value: 1,
21
+ another_value: 2
22
+ },
23
+ name: 'name'
24
+ }
25
+
26
+ @object = Object.new
27
+ @klass = Object
28
+ @module = Module
29
+
30
+ @object.instance_exec do
31
+ @name = 'John'
32
+ @last_name = 'Doe'
33
+ end
34
+ end
35
+ end
36
+
37
+ TestObjCLass
38
+ }
39
+
40
+ context "object" do
41
+ it {
42
+ orig_obj = klass.new
43
+ result = dump_as_json([orig_obj])
44
+ obj = load_json_dump(result).first
45
+
46
+ expect(obj.integer).to eq(orig_obj.integer)
47
+ expect(obj.string).to eq(orig_obj.string)
48
+ expect(obj.array).to eq(orig_obj.array)
49
+ expect(obj.hash).to eq(orig_obj.hash)
50
+ expect(obj.klass).to eq(orig_obj.klass)
51
+ expect(obj.module).to eq(orig_obj.module)
52
+ expect(obj.object.instance_variable_get(:@name)).to eq(orig_obj.object.instance_variable_get(:@name))
53
+ expect(obj.object.instance_variable_get(:@last_name)).to eq(orig_obj.object.instance_variable_get(:@last_name))
54
+ }
55
+ end
56
+ end
@@ -31,10 +31,10 @@ RSpec.describe :build_schema do
31
31
  },
32
32
  components: {
33
33
  securitySchemes: {
34
- bearerAuth: {
35
- type: 'http',
36
- scheme: 'bearer',
37
- bearerFormat: 'JWT'
34
+ ApiKeyAuth: {
35
+ in: "header",
36
+ name: "Authorization",
37
+ type: "apiKey",
38
38
  }
39
39
  }
40
40
  },
@@ -45,7 +45,7 @@ RSpec.describe :build_schema do
45
45
  '/version' => {
46
46
  get: {
47
47
  security: [
48
- {bearerAuth: []}
48
+ {ApiKeyAuth: []}
49
49
  ],
50
50
  responses: {
51
51
  200 => {
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.10"
4
+ VERSION = "1.0.13"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.10
4
+ version: 1.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-16 00:00:00.000000000 Z
11
+ date: 2022-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ree
@@ -1035,13 +1035,17 @@ files:
1035
1035
  - lib/ree_lib/packages/ree_object/package/ree_object/functions/as_json.rb
1036
1036
  - lib/ree_lib/packages/ree_object/package/ree_object/functions/deep_dup.rb
1037
1037
  - lib/ree_lib/packages/ree_object/package/ree_object/functions/deep_freeze.rb
1038
+ - lib/ree_lib/packages/ree_object/package/ree_object/functions/dump_as_json.rb
1038
1039
  - lib/ree_lib/packages/ree_object/package/ree_object/functions/is_blank.rb
1040
+ - lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb
1039
1041
  - lib/ree_lib/packages/ree_object/package/ree_object/functions/not_blank.rb
1040
1042
  - lib/ree_lib/packages/ree_object/package/ree_object/functions/to_obj.rb
1041
1043
  - lib/ree_lib/packages/ree_object/schemas/ree_object/functions/as_json.schema.json
1042
1044
  - lib/ree_lib/packages/ree_object/schemas/ree_object/functions/deep_dup.schema.json
1043
1045
  - lib/ree_lib/packages/ree_object/schemas/ree_object/functions/deep_freeze.schema.json
1046
+ - lib/ree_lib/packages/ree_object/schemas/ree_object/functions/dump_as_json.schema.json
1044
1047
  - lib/ree_lib/packages/ree_object/schemas/ree_object/functions/is_blank.schema.json
1048
+ - lib/ree_lib/packages/ree_object/schemas/ree_object/functions/load_json_dump.schema.json
1045
1049
  - lib/ree_lib/packages/ree_object/schemas/ree_object/functions/not_blank.schema.json
1046
1050
  - lib/ree_lib/packages/ree_object/schemas/ree_object/functions/to_hash.schema.json
1047
1051
  - lib/ree_lib/packages/ree_object/schemas/ree_object/functions/to_obj.schema.json
@@ -1049,6 +1053,7 @@ files:
1049
1053
  - lib/ree_lib/packages/ree_object/spec/ree_object/functions/as_json_spec.rb
1050
1054
  - lib/ree_lib/packages/ree_object/spec/ree_object/functions/deep_dup_spec.rb
1051
1055
  - lib/ree_lib/packages/ree_object/spec/ree_object/functions/deep_freeze_spec.rb
1056
+ - lib/ree_lib/packages/ree_object/spec/ree_object/functions/dump_as_json_spec.rb
1052
1057
  - lib/ree_lib/packages/ree_object/spec/ree_object/functions/is_blank_spec.rb
1053
1058
  - lib/ree_lib/packages/ree_object/spec/ree_object/functions/not_blank_spec.rb
1054
1059
  - lib/ree_lib/packages/ree_object/spec/ree_object/functions/to_obj_spec.rb