ree 1.0.5 → 1.0.6
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 +4 -4
- data/Gemfile.lock +10 -1
- data/exe/ree +53 -1
- data/lib/ree/cli/delete_object_schema.rb +33 -0
- data/lib/ree/cli/generate_object_schema.rb +50 -0
- data/lib/ree/cli/generate_package_schema.rb +5 -4
- data/lib/ree/cli.rb +2 -0
- data/lib/ree/contracts/arg_contracts/respond_to.rb +33 -0
- data/lib/ree/contracts/arg_contracts.rb +1 -0
- data/lib/ree/facades/packages_facade.rb +30 -0
- data/lib/ree/version.rb +1 -1
- metadata +19 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a0d23b7d6e73fd42fb81e6a2f80cae29c8ae8b7b7bace7531734bbff0aaacc4b
|
|
4
|
+
data.tar.gz: 71c9516f775b0e430e3b7ae180f44b8ffcaddfeed2b76f5d9e66cddf2d7b9361
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 348a11eec63932f9b4bbcd536438da8ffaeb05a19c5cfc0c71df9d6655d14394b9034ba2d3892e83e29e1529a101e838932f31b76bc09b5682ce230e7eacabe7
|
|
7
|
+
data.tar.gz: 9c73938e83e5873bc7886a7854b533136873802758fc403c76da7a45e7dd046d8905b2ba612c60034a15b8a8bfae5f65ef9a946b9098248ba401f4a26cb37691
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
ree (1.0.
|
|
4
|
+
ree (1.0.6)
|
|
5
5
|
commander (~> 4.6.0)
|
|
6
6
|
|
|
7
7
|
GEM
|
|
@@ -9,9 +9,17 @@ GEM
|
|
|
9
9
|
specs:
|
|
10
10
|
commander (4.6.0)
|
|
11
11
|
highline (~> 2.0.0)
|
|
12
|
+
debug (1.6.2)
|
|
13
|
+
irb (>= 1.3.6)
|
|
14
|
+
reline (>= 0.3.1)
|
|
12
15
|
diff-lcs (1.5.0)
|
|
13
16
|
highline (2.0.3)
|
|
17
|
+
io-console (0.5.11)
|
|
18
|
+
irb (1.4.2)
|
|
19
|
+
reline (>= 0.3.0)
|
|
14
20
|
rake (13.0.6)
|
|
21
|
+
reline (0.3.1)
|
|
22
|
+
io-console (~> 0.5)
|
|
15
23
|
rspec (3.11.0)
|
|
16
24
|
rspec-core (~> 3.11.0)
|
|
17
25
|
rspec-expectations (~> 3.11.0)
|
|
@@ -33,6 +41,7 @@ PLATFORMS
|
|
|
33
41
|
x86_64-linux
|
|
34
42
|
|
|
35
43
|
DEPENDENCIES
|
|
44
|
+
debug
|
|
36
45
|
rake (~> 13.0)
|
|
37
46
|
ree!
|
|
38
47
|
rspec (~> 3.0)
|
data/exe/ree
CHANGED
|
@@ -117,7 +117,7 @@ class ReeCliRunner
|
|
|
117
117
|
c.syntax = 'ree gen.package_json PACKAGE_NAME'
|
|
118
118
|
c.description = 'generates Package.schema.json for specific package'
|
|
119
119
|
c.summary = '> ' + c.description
|
|
120
|
-
c.example 'ree gen.
|
|
120
|
+
c.example 'ree gen.package_json PACKAGE_NAME', ''
|
|
121
121
|
c.option '--skip_objects', String, 'Skip generation of object schemas'
|
|
122
122
|
c.option '--silence', String, 'Silence all logs'
|
|
123
123
|
c.option '--project_path [ROOT_PROJECT_DIR]', String, 'Root project dir path'
|
|
@@ -140,6 +140,58 @@ class ReeCliRunner
|
|
|
140
140
|
end
|
|
141
141
|
end
|
|
142
142
|
|
|
143
|
+
command :"gen.schema_json" do |c|
|
|
144
|
+
c.syntax = 'ree gen.schema_json PACKAGE_NAME OBJECT_PATH'
|
|
145
|
+
c.description = 'generates Schema.json for specified object in specified package'
|
|
146
|
+
c.summary = '> ' + c.description
|
|
147
|
+
c.example 'ree gen.schema_json accounts commands/create_account_cmd.rb', ''
|
|
148
|
+
c.option '--silence', String, 'Silence all logs'
|
|
149
|
+
c.option '--project_path [ROOT_PROJECT_DIR]', String, 'Root project dir path'
|
|
150
|
+
c.action do |args, options|
|
|
151
|
+
package_name = args[0]&.to_sym
|
|
152
|
+
object_path = args[1]
|
|
153
|
+
options_hash = options.__hash__
|
|
154
|
+
|
|
155
|
+
if options_hash[:project_path]
|
|
156
|
+
options_hash[:project_path] = File.expand_path(options_hash[:project_path])
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
default_options = {
|
|
160
|
+
package_name: package_name,
|
|
161
|
+
object_path: object_path,
|
|
162
|
+
project_path: options_hash[:project_path] || File.expand_path(Dir.pwd),
|
|
163
|
+
silence: options_hash.has_key?(:silence)
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
Ree::CLI::GenerateObjectSchema.run(**default_options)
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
command :"delete.schema_json" do |c|
|
|
171
|
+
c.syntax = 'ree delete.schema_json OBJECT_PATH'
|
|
172
|
+
c.description = 'removes Schema.json for specified object '
|
|
173
|
+
c.summary = '> ' + c.description
|
|
174
|
+
c.example 'ree delete.schema_json commands/create_account_cmd.rb', ''
|
|
175
|
+
c.option '--silence', String, 'Silence all logs'
|
|
176
|
+
c.option '--project_path [ROOT_PROJECT_DIR]', String, 'Root project dir path'
|
|
177
|
+
c.action do |args, options|
|
|
178
|
+
object_path = args[0]
|
|
179
|
+
options_hash = options.__hash__
|
|
180
|
+
|
|
181
|
+
if options_hash[:project_path]
|
|
182
|
+
options_hash[:project_path] = File.expand_path(options_hash[:project_path])
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
default_options = {
|
|
186
|
+
object_path: object_path,
|
|
187
|
+
project_path: options_hash[:project_path] || File.expand_path(Dir.pwd),
|
|
188
|
+
silence: options_hash.has_key?(:silence)
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
Ree::CLI::DeleteObjectSchema.run(**default_options)
|
|
192
|
+
end
|
|
193
|
+
end
|
|
194
|
+
|
|
143
195
|
command :"gen.template" do |c|
|
|
144
196
|
c.syntax = "ree gen.template TEMPLATE_NAME [options]"
|
|
145
197
|
c.description = "generates template from ROOT/.ree/templates folder with specified variables"
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
module Ree
|
|
4
|
+
module CLI
|
|
5
|
+
class DeleteObjectSchema
|
|
6
|
+
class << self
|
|
7
|
+
def run(object_path:, project_path:, silence: false)
|
|
8
|
+
ENV['REE_SKIP_ENV_VARS_CHECK'] = 'true'
|
|
9
|
+
|
|
10
|
+
path = Ree.locate_packages_schema(project_path)
|
|
11
|
+
dir = Pathname.new(path).dirname.to_s
|
|
12
|
+
|
|
13
|
+
Ree.init(dir)
|
|
14
|
+
|
|
15
|
+
object_name = object_path.split('/')[-1].split('.').first.to_sym
|
|
16
|
+
|
|
17
|
+
puts("Deleting old #{object_name}.schema.json") if !silence
|
|
18
|
+
|
|
19
|
+
schema_path = Ree::PathHelper.object_schema_rpath(object_path)
|
|
20
|
+
abs_schema_path = File.join(dir, schema_path)
|
|
21
|
+
|
|
22
|
+
if File.exists?(abs_schema_path)
|
|
23
|
+
FileUtils.rm(abs_schema_path)
|
|
24
|
+
|
|
25
|
+
puts(" #{schema_path}: is deleted") if !silence
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
puts("done") if !silence
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
|
|
3
|
+
module Ree
|
|
4
|
+
module CLI
|
|
5
|
+
class GenerateObjectSchema
|
|
6
|
+
class << self
|
|
7
|
+
def run(package_name:, object_path:, project_path:, silence: false)
|
|
8
|
+
ENV['REE_SKIP_ENV_VARS_CHECK'] = 'true'
|
|
9
|
+
|
|
10
|
+
path = Ree.locate_packages_schema(project_path)
|
|
11
|
+
dir = Pathname.new(path).dirname.to_s
|
|
12
|
+
|
|
13
|
+
Ree.init(dir)
|
|
14
|
+
|
|
15
|
+
package_name = package_name.to_sym
|
|
16
|
+
object_name = object_path.split('/')[-1].split('.').first.to_sym
|
|
17
|
+
|
|
18
|
+
puts("Generating #{object_name}.schema.json in #{package_name} package") if !silence
|
|
19
|
+
|
|
20
|
+
facade = Ree.container.packages_facade
|
|
21
|
+
Ree.load_package(package_name)
|
|
22
|
+
|
|
23
|
+
package = facade.get_package(package_name)
|
|
24
|
+
|
|
25
|
+
if facade.has_object?(package_name, object_name)
|
|
26
|
+
object = facade.load_package_object(package_name, object_name)
|
|
27
|
+
Ree.write_object_schema(package.name, object.name)
|
|
28
|
+
|
|
29
|
+
obj_path = Ree::PathHelper.abs_object_schema_path(object)
|
|
30
|
+
else
|
|
31
|
+
file_path = File.join(dir, object_path)
|
|
32
|
+
|
|
33
|
+
if File.exists?(file_path)
|
|
34
|
+
facade.load_file(file_path, package_name)
|
|
35
|
+
facade.dump_package_schema(package_name)
|
|
36
|
+
Ree.write_object_schema(package_name, object_name)
|
|
37
|
+
else
|
|
38
|
+
raise Ree::Error.new("package file not found: #{file_path}")
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
puts(" #{object.name}: #{obj_path}") if !silence
|
|
44
|
+
|
|
45
|
+
puts("done") if !silence
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -23,11 +23,12 @@ module Ree
|
|
|
23
23
|
|
|
24
24
|
package_name = package_name.to_sym
|
|
25
25
|
|
|
26
|
-
Ree.container.packages_facade
|
|
27
|
-
|
|
28
|
-
Ree.
|
|
26
|
+
facade = Ree.container.packages_facade
|
|
27
|
+
facade.load_packages_schema
|
|
28
|
+
Ree.load_package(package_name)
|
|
29
|
+
facade.write_package_schema(package_name)
|
|
29
30
|
|
|
30
|
-
package =
|
|
31
|
+
package = facade.get_package(package_name)
|
|
31
32
|
schema_path = Ree::PathHelper.abs_package_schema_path(package)
|
|
32
33
|
|
|
33
34
|
if include_objects
|
data/lib/ree/cli.rb
CHANGED
|
@@ -5,6 +5,8 @@ module Ree
|
|
|
5
5
|
autoload :Init, 'ree/cli/init'
|
|
6
6
|
autoload :GeneratePackagesSchema, 'ree/cli/generate_packages_schema'
|
|
7
7
|
autoload :GeneratePackageSchema, 'ree/cli/generate_package_schema'
|
|
8
|
+
autoload :GenerateObjectSchema, 'ree/cli/generate_object_schema'
|
|
9
|
+
autoload :DeleteObjectSchema, 'ree/cli/delete_object_schema'
|
|
8
10
|
autoload :GeneratePackage, 'ree/cli/generate_package'
|
|
9
11
|
autoload :GenerateTemplate, 'ree/cli/generate_template'
|
|
10
12
|
autoload :SpecRunner, 'ree/cli/spec_runner'
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Ree::Contracts
|
|
4
|
+
module ArgContracts
|
|
5
|
+
class RespondTo
|
|
6
|
+
extend Ree::Contracts::ArgContracts::Squarable
|
|
7
|
+
|
|
8
|
+
def initialize(*method_names)
|
|
9
|
+
@method_names = method_names
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def valid?(value)
|
|
13
|
+
get_unrespond_list(value).empty?
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def to_s
|
|
17
|
+
"RespondTo#{method_names.inspect}"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def message(value, name, lvl = 1)
|
|
21
|
+
unrespond_list = get_unrespond_list(value)
|
|
22
|
+
"expected to respond to #{unrespond_list.inspect}}"
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
private
|
|
26
|
+
def get_unrespond_list(obj)
|
|
27
|
+
@method_names.reject do |method|
|
|
28
|
+
obj.respond_to?(method)
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
@@ -16,6 +16,7 @@ module Ree::Contracts
|
|
|
16
16
|
autoload :Optblock, 'ree/contracts/arg_contracts/optblock'
|
|
17
17
|
autoload :Or, 'ree/contracts/arg_contracts/or'
|
|
18
18
|
autoload :RangeOf, 'ree/contracts/arg_contracts/range_of'
|
|
19
|
+
autoload :RespondTo, 'ree/contracts/arg_contracts/respond_to'
|
|
19
20
|
autoload :SetOf, 'ree/contracts/arg_contracts/set_of'
|
|
20
21
|
autoload :Splat, 'ree/contracts/arg_contracts/splat'
|
|
21
22
|
autoload :SplatOf, 'ree/contracts/arg_contracts/splat_of'
|
|
@@ -60,6 +60,36 @@ class Ree::PackagesFacade
|
|
|
60
60
|
object
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
+
def has_object?(package_name, object_name)
|
|
64
|
+
package = get_loaded_package(package_name)
|
|
65
|
+
object = package.get_object(object_name)
|
|
66
|
+
|
|
67
|
+
!object.nil?
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
# @param [Symbol] package_name
|
|
71
|
+
# @return nil
|
|
72
|
+
def dump_package_schema(package_name)
|
|
73
|
+
Ree.logger.debug("dump_package_schema(:#{package_name})")
|
|
74
|
+
|
|
75
|
+
read_package_schema_json(package_name)
|
|
76
|
+
package = get_package(package_name)
|
|
77
|
+
|
|
78
|
+
if package.dir
|
|
79
|
+
schema_path = Ree::PathHelper.abs_package_schema_path(package)
|
|
80
|
+
|
|
81
|
+
if !File.exists?(schema_path)
|
|
82
|
+
raise Ree::Error.new("File does not exist: #{schema_path}", :invalid_path)
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
schema = Ree::PackageSchemaBuilder.new.call(package)
|
|
86
|
+
json = JSON.pretty_generate(schema)
|
|
87
|
+
File.write(schema_path, json, mode: 'w')
|
|
88
|
+
|
|
89
|
+
json
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
63
93
|
# @param [Symbol] package_name
|
|
64
94
|
# @return nil
|
|
65
95
|
def write_package_schema(package_name)
|
data/lib/ree/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ree
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.6
|
|
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-
|
|
11
|
+
date: 2022-10-25 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: commander
|
|
@@ -24,6 +24,20 @@ dependencies:
|
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: 4.6.0
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: debug
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
27
41
|
description: Ree makes your ruby life happier
|
|
28
42
|
email:
|
|
29
43
|
- ruslan.gatiyatov@gmail.com
|
|
@@ -49,6 +63,8 @@ files:
|
|
|
49
63
|
- lib/ree/args.rb
|
|
50
64
|
- lib/ree/bean_dsl.rb
|
|
51
65
|
- lib/ree/cli.rb
|
|
66
|
+
- lib/ree/cli/delete_object_schema.rb
|
|
67
|
+
- lib/ree/cli/generate_object_schema.rb
|
|
52
68
|
- lib/ree/cli/generate_package.rb
|
|
53
69
|
- lib/ree/cli/generate_package_schema.rb
|
|
54
70
|
- lib/ree/cli/generate_packages_schema.rb
|
|
@@ -72,6 +88,7 @@ files:
|
|
|
72
88
|
- lib/ree/contracts/arg_contracts/optblock.rb
|
|
73
89
|
- lib/ree/contracts/arg_contracts/or.rb
|
|
74
90
|
- lib/ree/contracts/arg_contracts/range_of.rb
|
|
91
|
+
- lib/ree/contracts/arg_contracts/respond_to.rb
|
|
75
92
|
- lib/ree/contracts/arg_contracts/set_of.rb
|
|
76
93
|
- lib/ree/contracts/arg_contracts/splat.rb
|
|
77
94
|
- lib/ree/contracts/arg_contracts/splat_of.rb
|