ree 1.0.4 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e57edb7f0df533aeaa9eee8080c4f06866d79fecef5723d3c7ec7aff25588ad2
4
- data.tar.gz: 1362854e356e8d325938ded4c97c98062c9297b0d21ff6bf6fee65d8062305d8
3
+ metadata.gz: a0d23b7d6e73fd42fb81e6a2f80cae29c8ae8b7b7bace7531734bbff0aaacc4b
4
+ data.tar.gz: 71c9516f775b0e430e3b7ae180f44b8ffcaddfeed2b76f5d9e66cddf2d7b9361
5
5
  SHA512:
6
- metadata.gz: b01300e1c77ac9376979433fc530c936a7011b3442fbe237ab169d140169b9ee5793a3314e5759d9d7c956c3d3971906d2eae2c87af9975d3daa72ee491866fd
7
- data.tar.gz: 07cbdf0ca6a2ed2a34c3c5678703598831156beedb8abc27a40930ca27e85961b16b2a88ae4d0444c0984a59da33a1bb8b635446e87c252aaf7369dd7c2296ba
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)
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.packages_json PACKAGE_NAME', ''
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,15 +23,16 @@ module Ree
23
23
 
24
24
  package_name = package_name.to_sym
25
25
 
26
- Ree.container.packages_facade.load_packages_schema
27
- package = Ree.load_package(package_name)
28
- Ree.container.packages_facade.write_package_schema(package_name)
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 = Ree.container.packages_facade.get_package(package_name)
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
34
- schemas_path = Ree::PathHelper.abs_package_object_schemas_path(package)
35
+ schemas_path = Ree::PathHelper.abs_package_schemas_dir(package)
35
36
 
36
37
  FileUtils.rm_rf(schemas_path)
37
38
  FileUtils.mkdir_p(schemas_path)
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'
@@ -6,11 +6,6 @@ class Ree::PathHelper
6
6
  SCHEMAS_FOLDER = 'schemas'
7
7
 
8
8
  class << self
9
- def abs_package_object_schemas_path(package)
10
- root_dir = project_root_dir(package)
11
- File.join(root_dir, SCHEMAS_FOLDER)
12
- end
13
-
14
9
  # @param [Ree::Object] object
15
10
  # @return [String] Absolute object file path
16
11
  def abs_object_path(object)
@@ -71,6 +66,14 @@ class Ree::PathHelper
71
66
  )
72
67
  end
73
68
 
69
+ # @param [Ree::Package] package Package schema
70
+ # @return [String] Absolute package schemas folder path (ex. /data/project/bc/accounts/schemas)
71
+ def abs_package_schemas_dir(package)
72
+ File.join(
73
+ project_root_dir(package), package.dir, Ree::SCHEMAS
74
+ )
75
+ end
76
+
74
77
  # @param [Ree::Package] package Package schema
75
78
  # @return [String] Absolute package schema path
76
79
  def abs_package_schema_path(package)
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Ree
4
- VERSION = "1.0.4"
4
+ VERSION = "1.0.6"
5
5
  end
data/lib/ree.rb CHANGED
@@ -245,12 +245,13 @@ module Ree
245
245
 
246
246
  facade.packages_store.packages.each do |package|
247
247
  next if package.gem?
248
+ next if package.dir.nil?
248
249
  puts("Generating Package.schema.json for :#{package.name} package") if !silence
249
250
 
250
251
  facade.load_entire_package(package.name)
251
252
  facade.write_package_schema(package.name)
252
253
 
253
- schemas_path = Ree::PathHelper.abs_package_object_schemas_path(package)
254
+ schemas_path = Ree::PathHelper.abs_package_schemas_dir(package)
254
255
 
255
256
  FileUtils.rm_rf(schemas_path)
256
257
  FileUtils.mkdir_p(schemas_path)
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
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-08-29 00:00:00.000000000 Z
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