ree_lib 1.0.9 → 1.0.12

Sign up to get free protection for your applications and to get access to all the features.
Files changed (20) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -3
  3. data/lib/ree_lib/packages/ree_json/package/ree_json/functions/from_json.rb +5 -1
  4. data/lib/ree_lib/packages/ree_json/schemas/ree_json/functions/from_json.schema.json +1 -1
  5. data/lib/ree_lib/packages/ree_json/spec/ree_json/functions/from_json_spec.rb +4 -0
  6. data/lib/ree_lib/packages/ree_object/Package.schema.json +8 -0
  7. data/lib/ree_lib/packages/ree_object/package/ree_object/functions/dump_as_json.rb +103 -0
  8. data/lib/ree_lib/packages/ree_object/package/ree_object/functions/load_json_dump.rb +77 -0
  9. data/lib/ree_lib/packages/ree_object/schemas/ree_object/functions/dump_as_json.schema.json +27 -0
  10. data/lib/ree_lib/packages/ree_object/schemas/ree_object/functions/load_json_dump.schema.json +27 -0
  11. data/lib/ree_lib/packages/ree_object/spec/ree_object/functions/dump_as_json_spec.rb +56 -0
  12. data/lib/ree_lib/packages/ree_swagger/package/ree_swagger/dto/endpoint_dto.rb +1 -0
  13. data/lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_endpoint_schema.rb +1 -0
  14. data/lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb +3 -2
  15. data/lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_schema.rb +12 -2
  16. data/lib/ree_lib/packages/ree_swagger/schemas/ree_swagger/functions/build_schema.schema.json +4 -0
  17. data/lib/ree_lib/packages/ree_swagger/spec/functions/build_endpoint_schema_spec.rb +5 -0
  18. data/lib/ree_lib/packages/ree_swagger/spec/functions/build_schema_spec.rb +17 -0
  19. data/lib/ree_lib/version.rb +1 -1
  20. metadata +7 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 756ef68a2b67f69d7b39d4877f51bebef0bf9f16c2d826f75a66fa43784ac779
4
- data.tar.gz: f9668ac762030ae0b4e0d53d9edafd7751396b30e4b1f4ae67188b889aef6360
3
+ metadata.gz: 5642d84c9a164bab7fd9b03ba1e34ab6f50a56001e0d0f5c03bfeb329891c2bf
4
+ data.tar.gz: 1ef62cc8d2db588c1f1b91a7d6899e7e1f96df2039c6fb833a77d6f3af35ee17
5
5
  SHA512:
6
- metadata.gz: 7f0f85267b26e8249d4c8c9d46532717acc53a4378e19e20e5f07e2431b751cee6591ac97677ffc528b651fef7428f868a73e9d87ef44103f94a21b412ff5f6d
7
- data.tar.gz: c31dd2b537126f8590b656002f169fbce184448bedc79d4c0c58b7de769a940e5f780a7d73e70595a68966bafda85a13ef73031da79df69808d3eea5fb224352
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.9)
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)
@@ -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' => 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
@@ -13,6 +13,7 @@ class ReeSwagger::EndpointDto
13
13
  path: String,
14
14
  caster: Nilor[ReeMapper::Mapper],
15
15
  serializer: Nilor[ReeMapper::Mapper],
16
+ authenticate: Bool,
16
17
  summary: Nilor[String],
17
18
  description: Nilor[String],
18
19
  response_status: Integer,
@@ -112,6 +112,7 @@ class ReeSwagger::BuildEndpointSchema
112
112
 
113
113
  method_schema[:parameters] = parameters if parameters
114
114
  method_schema[:requestBody] = request_body if request_body
115
+ method_schema[:security] = [{ ApiKeyAuth: [] }] if endpoint.authenticate
115
116
 
116
117
  schema = {endpoint.method => method_schema}
117
118
 
@@ -38,10 +38,11 @@ class ReeSwagger::BuildRequestBodySchema
38
38
 
39
39
  return if properties.empty?
40
40
 
41
- {
41
+ obj = {
42
42
  type: 'object',
43
43
  properties: properties,
44
- required: required_fields
45
44
  }
45
+ obj[:required] = required_fields if required_fields.size != 0
46
+ obj
46
47
  end
47
48
  end
@@ -8,8 +8,8 @@ class ReeSwagger::BuildSchema
8
8
  link 'ree_swagger/dto/endpoint_dto', -> { EndpointDto }
9
9
  end
10
10
 
11
- contract(String, String, String, ArrayOf[EndpointDto] => Hash)
12
- def call(title:, description:, version:, endpoints:)
11
+ contract(String, String, String, String, ArrayOf[EndpointDto] => Hash)
12
+ def call(title:, description:, version:, api_url:, endpoints:)
13
13
  {
14
14
  openapi: "3.0.0",
15
15
  info: {
@@ -17,6 +17,16 @@ class ReeSwagger::BuildSchema
17
17
  description: description,
18
18
  version: version
19
19
  },
20
+ components: {
21
+ securitySchemes: {
22
+ ApiKeyAuth: {
23
+ type: 'apiKey',
24
+ in: 'header',
25
+ name: 'Authorization'
26
+ }
27
+ }
28
+ },
29
+ servers: [{ url: api_url }],
20
30
  paths: endpoints.each_with_object(Hash.new { _1[_2] = {} }) {
21
31
  path_dto = build_endpoint_schema(_1)
22
32
  _2[path_dto.path].merge!(path_dto.schema)
@@ -26,6 +26,10 @@
26
26
  "arg": "version",
27
27
  "type": "String"
28
28
  },
29
+ {
30
+ "arg": "api_url",
31
+ "type": "String"
32
+ },
29
33
  {
30
34
  "arg": "endpoints",
31
35
  "type": "ArrayOf[ReeSwagger::EndpointDto]"
@@ -71,6 +71,7 @@ RSpec.describe :build_endpoint_schema do
71
71
  schema = build_endpoint_schema(ReeSwagger::EndpointDto.new(
72
72
  method: :post,
73
73
  respond_to: :json,
74
+ authenticate: false,
74
75
  path: '/versions/:id',
75
76
  sections: ["versions"],
76
77
  caster: caster,
@@ -97,6 +98,7 @@ RSpec.describe :build_endpoint_schema do
97
98
  csv_schema = build_endpoint_schema(ReeSwagger::EndpointDto.new(
98
99
  method: :get,
99
100
  respond_to: :csv,
101
+ authenticate: false,
100
102
  path: '/files/:id',
101
103
  sections: ["files"],
102
104
  caster: file_caster,
@@ -226,6 +228,7 @@ RSpec.describe :build_endpoint_schema do
226
228
  path: '/versions/:id',
227
229
  caster: caster,
228
230
  respond_to: :json,
231
+ authenticate: false,
229
232
  serializer: nil,
230
233
  response_status: 200,
231
234
  description: nil,
@@ -288,6 +291,7 @@ RSpec.describe :build_endpoint_schema do
288
291
  method: :get,
289
292
  path: '/versions/:id',
290
293
  respond_to: :json,
294
+ authenticate: false,
291
295
  caster: nil,
292
296
  serializer: nil,
293
297
  response_status: 200,
@@ -311,6 +315,7 @@ RSpec.describe :build_endpoint_schema do
311
315
  method: :get,
312
316
  path: '/versions/:id',
313
317
  respond_to: :json,
318
+ authenticate: false,
314
319
  caster: caster,
315
320
  serializer: nil,
316
321
  response_status: 200,
@@ -6,8 +6,10 @@ RSpec.describe :build_schema do
6
6
  title: 'Sample API',
7
7
  description: 'Sample API description',
8
8
  version: '0.0.1',
9
+ api_url: 'https://some-api.com/api/v1',
9
10
  endpoints: [ReeSwagger::EndpointDto.new(
10
11
  method: :get,
12
+ authenticate: true,
11
13
  path: '/version',
12
14
  respond_to: :json,
13
15
  caster: nil,
@@ -27,9 +29,24 @@ RSpec.describe :build_schema do
27
29
  description: 'Sample API description',
28
30
  version: '0.0.1'
29
31
  },
32
+ components: {
33
+ securitySchemes: {
34
+ ApiKeyAuth: {
35
+ in: "header",
36
+ name: "Authorization",
37
+ type: "apiKey",
38
+ }
39
+ }
40
+ },
41
+ servers: [
42
+ { url: 'https://some-api.com/api/v1' }
43
+ ],
30
44
  paths: {
31
45
  '/version' => {
32
46
  get: {
47
+ security: [
48
+ {ApiKeyAuth: []}
49
+ ],
33
50
  responses: {
34
51
  200 => {
35
52
  description: ''
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.9"
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.9
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-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