logic_pro 0.1.1 → 1.0

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: 3b89f8778ba7166bf27fb7d4f24aee4295e819836713b75bccbd8eba0acb86b8
4
- data.tar.gz: ddbea924703c05ecf83ff7dbde606c5d40c24dfbd7aff8f5ac97ad5ab4fbf5ca
3
+ metadata.gz: e39d0315970503a400579582036f7b473cf690edd10d071a107564a76248af81
4
+ data.tar.gz: 81f0767b3c9b3054b384da1c9fbc5c3e3056c8cbcaf9db3d647b2a3ed87722d3
5
5
  SHA512:
6
- metadata.gz: 387fc5e33d7c231ea871df4f74c3fba3115ab0315deb790853728c089f17ad57e6170a77e386ab69b6164f3ce977d3c7a5cfc3dec70a80aa20bb942474bee162
7
- data.tar.gz: 19aa8bc09775172d8d3448f4286cff1b01e67241c1632ef0ad24a1457d2cf8f8d5f48e17d813a7c1cbf862100e8cdd65269574e6f099ef36d832f17bff220fe6
6
+ metadata.gz: cff05ffa4a46f15c628441160af3ce502e14691947c878209964e749615d50138d35531e026b59f1ceb4321925e9f9a36bf89be5b0d37d726e34a01bd66bd787
7
+ data.tar.gz: f8e915851d6a170575c11cc5407071e8715962a89fe9449ece33bfec1d7d657a073dc5894af20f904a884ebd172f0e1995e23eaf9c3dea380dd0e05949fba4f5
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- logic_pro (0.1.0)
4
+ logic_pro (1.0)
5
5
  activemodel
6
6
  dry-struct
7
7
  interactor
@@ -40,7 +40,7 @@ GEM
40
40
  concurrent-ruby (~> 1.0)
41
41
  ice_nine (0.11.2)
42
42
  interactor (3.1.2)
43
- minitest (5.16.2)
43
+ minitest (5.16.3)
44
44
  rake (12.3.3)
45
45
  rspec (3.11.0)
46
46
  rspec-core (~> 3.11.0)
@@ -0,0 +1,30 @@
1
+ module LogicPro
2
+ module ActiveRecordTypes
3
+ def define_types(classes)
4
+ classes.each do |active_record_class_name|
5
+ active_record_class = "::#{active_record_class_name}".constantize
6
+ type_class_name = active_record_class.to_s.gsub('::', '_')
7
+
8
+ record_constructor = Constructor(active_record_class) do |entity|
9
+ if entity.blank? || entity.class.name == active_record_class.name
10
+ entity
11
+ else
12
+ raise "Invalid collection type #{collection.class} for #{active_record_class.name}"
13
+ end
14
+ end
15
+
16
+ collection_constructor = Constructor(active_record_class.none.class) do |collection|
17
+ if collection.respond_to?(:model) && collection.model.name == active_record_class.name
18
+ collection
19
+ else
20
+ raise "Invalid collection type #{collection.class} for #{active_record_class.name}"
21
+ end
22
+ end
23
+
24
+ const_set(type_class_name, record_constructor.meta(class_name: active_record_class.name))
25
+
26
+ const_set("#{type_class_name}Collection", collection_constructor.meta(class_name: active_record_class.none.class))
27
+ end
28
+ end
29
+ end
30
+ end
@@ -2,9 +2,7 @@ module LogicPro
2
2
  class Form < Dry::Struct
3
3
  ATTRIBUTES_PROPERTIES = %i[abstract as].freeze
4
4
 
5
- module Types
6
- include LogicPro::Types
7
- end
5
+ Types = LogicPro::Types
8
6
 
9
7
  transform_keys(&:to_sym)
10
8
 
@@ -2,13 +2,15 @@ module LogicPro
2
2
  module InteractorForm
3
3
  extend ActiveSupport::Concern
4
4
 
5
- module Types
6
- include LogicPro::Types
7
- end
5
+ Types = LogicPro::Types
8
6
 
9
7
  class_methods do
10
8
  def context_form
11
- @context_form ||= Object.const_set('ContextForm', Class.new(LogicPro::Form))
9
+ @context_form ||= begin
10
+ new_class = Class.new(LogicPro::Form)
11
+
12
+ self.const_set('ContextForm', new_class)
13
+ end
12
14
  end
13
15
 
14
16
  def attribute(*args)
@@ -27,13 +29,13 @@ module LogicPro
27
29
  context_form.validates(*args)
28
30
  end
29
31
 
30
- def validate(*args)
31
- context_form.validate(*args)
32
+ def validate(*args, **options)
33
+ context_form.validate(*args, **options)
32
34
  end
33
35
  end
34
36
 
35
37
  def context_form
36
- @context_form ||= self.class.context_form.new(context.to_h)
38
+ @context_form ||= ContextForm.new(context.to_h)
37
39
  end
38
40
  end
39
41
  end
@@ -9,5 +9,6 @@ module LogicPro
9
9
  Float = Constructor(::Float, &:to_f)
10
10
  Integer = Constructor(::Integer, &:to_i)
11
11
  DateTime = Constructor(::DateTime) { |value| ::DateTime.parse(value.to_s) if value.present? }
12
+ InteractorType = Constructor(::Interactor) { |value| value }
12
13
  end
13
14
  end
@@ -1,5 +1,6 @@
1
1
  module LogicPro
2
2
  module Types
3
3
  include LogicPro::PrimitiveTypes
4
+ extend LogicPro::ActiveRecordTypes
4
5
  end
5
6
  end
@@ -1,3 +1,3 @@
1
1
  module LogicPro
2
- VERSION = "0.1.1"
2
+ VERSION = '1.0'.freeze
3
3
  end
data/lib/logic_pro.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'interactor'
2
2
  require 'dry-struct'
3
3
  require 'logic_pro/version'
4
- require 'logic_pro/models_types'
4
+ require 'logic_pro/active_record_types'
5
5
  require 'logic_pro/primitive_types'
6
6
  require 'logic_pro/types'
7
7
  require 'logic_pro/form'
data/logic_pro-0.2.gem ADDED
Binary file
Binary file
Binary file
data/logic_pro.gemspec CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |spec|
18
18
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
19
  end
20
20
 
21
- spec.add_dependency "dry-struct"
22
- spec.add_dependency "interactor"
23
- spec.add_dependency "activemodel"
21
+ spec.add_dependency 'activemodel'
22
+ spec.add_dependency 'dry-struct'
23
+ spec.add_dependency 'interactor'
24
24
 
25
25
  spec.bindir = 'exe'
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logic_pro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: '1.0'
5
5
  platform: ruby
6
6
  authors:
7
7
  - bezrukavyi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-09 00:00:00.000000000 Z
11
+ date: 2022-08-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: dry-struct
14
+ name: activemodel
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: interactor
28
+ name: dry-struct
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: activemodel
42
+ name: interactor
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -71,13 +71,16 @@ files:
71
71
  - bin/console
72
72
  - bin/setup
73
73
  - lib/logic_pro.rb
74
+ - lib/logic_pro/active_record_types.rb
74
75
  - lib/logic_pro/form.rb
75
76
  - lib/logic_pro/interactor.rb
76
77
  - lib/logic_pro/interactor_form.rb
77
- - lib/logic_pro/models_types.rb
78
78
  - lib/logic_pro/primitive_types.rb
79
79
  - lib/logic_pro/types.rb
80
80
  - lib/logic_pro/version.rb
81
+ - logic_pro-0.2.gem
82
+ - logic_pro-0.4.1.gem
83
+ - logic_pro-0.4.2.gem
81
84
  - logic_pro.gemspec
82
85
  homepage: https://github.com/bezrukavyi/logic_pro
83
86
  licenses:
@@ -1,24 +0,0 @@
1
- module LogicPro
2
- module ModelsTypes
3
- def self.add(base, classes)
4
- classes.each do |active_record_class_name|
5
- active_record_class = active_record_class_name.constantize
6
- type_class_name = active_record_class.to_s.gsub('Ratesmgr::', '').gsub('::', '_')
7
-
8
- base.const_set(type_class_name, base::Instance(active_record_class).meta(class_name: active_record_class.name).optional)
9
-
10
- collection_constructor = base::Constructor(active_record_class.none.class) do |collection|
11
- if collection.respond_to?(:model) && collection.model == active_record_class
12
- collection
13
- else
14
- raise "Invalid collection type #{collection.class} for #{active_record_class.name}"
15
- end
16
- end
17
-
18
- base.const_set("#{type_class_name}Collection", collection_constructor.meta(class_name: active_record_class.none.class))
19
- end
20
-
21
- parent
22
- end
23
- end
24
- end