ree_lib 1.0.11 → 1.0.12

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: d1857f5c4388ddb54b06b96eec4dff68b48500010d6fe83c7745074c259e3ba6
4
- data.tar.gz: 7b8c5bca28e57ee3da6fc6ccb1c032db43b9b1bfb516c23c7cb6be8aed0c2e5c
3
+ metadata.gz: 5642d84c9a164bab7fd9b03ba1e34ab6f50a56001e0d0f5c03bfeb329891c2bf
4
+ data.tar.gz: 1ef62cc8d2db588c1f1b91a7d6899e7e1f96df2039c6fb833a77d6f3af35ee17
5
5
  SHA512:
6
- metadata.gz: cedd921b6f53e8d6510f8bf55d52a3414dda9440012277798aa5ff77429c01448520574377e28d36aa6784d6e6dec9509b5830670a6ef1d2c772e430db1dcead
7
- data.tar.gz: c1df54e9603fbe776a4ce507bff3379e699592052735ed93caa9078232879b914957e611bdb5098efd1f5440488005cdcb60eaba8a8672559dd7e72f50104282
6
+ metadata.gz: 81a32a78567d690bbeef04c74d4636bfe7ba3e9096870be936cae4420ce3371bb74f8d237545dd7a73dc543b147a952aeed85eaff180a1ea07222bc4eb3fbb7b
7
+ data.tar.gz: a7e6e807ec71aec8275dd753abb1f491adfc75228051b65059fd1eb55e4816696f0d95e2550be78535fca6e8b5daec4c864eb395a5037619e41715e2ed7d9b8c
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.11)
4
+ ree_lib (1.0.12)
5
5
  binding_of_caller (~> 1.0.0)
6
6
  i18n (~> 1.12.0)
7
7
  loofah (~> 2.18.0)
@@ -36,8 +36,6 @@ 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
41
  oj (3.13.20)
@@ -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' => obj.class,
44
+ 'value' => obj.map { recursively_convert(_1, cache) }
45
+ }
46
+ elsif obj.is_a?(Hash)
47
+ {
48
+ 'type' => HASH,
49
+ 'class' => obj.class,
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.11"
4
+ VERSION = "1.0.12"
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.11
4
+ version: 1.0.12
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-18 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