castkit 0.3.0 → 0.3.1

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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +39 -0
  3. data/README.md +11 -3
  4. data/castkit.gemspec +2 -0
  5. data/lib/castkit/attribute.rb +82 -59
  6. data/lib/castkit/attributes/definition.rb +64 -0
  7. data/lib/castkit/attributes/options.rb +214 -0
  8. data/lib/castkit/castkit.rb +13 -3
  9. data/lib/castkit/cli/generate.rb +14 -0
  10. data/lib/castkit/contract/base.rb +0 -12
  11. data/lib/castkit/contract/validator.rb +5 -1
  12. data/lib/castkit/core/attributes.rb +87 -44
  13. data/lib/castkit/data_object.rb +2 -25
  14. data/lib/castkit/{ext → dsl}/attribute/access.rb +1 -1
  15. data/lib/castkit/{ext → dsl}/attribute/error_handling.rb +1 -1
  16. data/lib/castkit/{ext → dsl}/attribute/options.rb +1 -1
  17. data/lib/castkit/{ext → dsl}/attribute/validation.rb +3 -3
  18. data/lib/castkit/dsl/attribute.rb +47 -0
  19. data/lib/castkit/{ext → dsl}/data_object/contract.rb +1 -1
  20. data/lib/castkit/{ext → dsl}/data_object/deserialization.rb +6 -2
  21. data/lib/castkit/{ext → dsl}/data_object/plugins.rb +1 -1
  22. data/lib/castkit/{ext → dsl}/data_object/serialization.rb +1 -1
  23. data/lib/castkit/dsl/data_object.rb +61 -0
  24. data/lib/castkit/types/base.rb +24 -3
  25. data/lib/castkit/validators/boolean_validator.rb +3 -3
  26. data/lib/castkit/version.rb +1 -1
  27. data/lib/castkit.rb +1 -4
  28. data/lib/generators/attribute.rb +39 -0
  29. data/lib/generators/templates/attribute.rb.tt +21 -0
  30. data/lib/generators/templates/attribute_spec.rb.tt +41 -0
  31. data/lib/generators/templates/contract.rb.tt +2 -0
  32. data/lib/generators/templates/data_object.rb.tt +2 -0
  33. data/lib/generators/templates/type.rb.tt +2 -0
  34. data/lib/generators/templates/validator.rb.tt +1 -1
  35. metadata +45 -12
  36. data/.rspec_status +0 -195
  37. data/lib/castkit/core/registerable.rb +0 -59
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "castkit/attributes/definition"
4
+
5
+ module Castkit
6
+ module Attributes
7
+ # Attribute definition for <%= config[:class_name] %>.
8
+ #
9
+ # This definition can be reused across DataObjects to avoid repeating shared options.
10
+ #
11
+ # @example
12
+ # class UserDto < Castkit::DataObject
13
+ # include Castkit::Attributes
14
+ #
15
+ # attribute :name, using: <%= config[:class_name] %>
16
+ # end
17
+ class <%= config[:class_name] %> < Castkit::Attributes::Definition
18
+ <% if config[:type].empty? %># type :string<% else %>type :<%= config[:type] %><% end %>
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+ require "castkit/attributes/<%= config[:name] %>"
5
+
6
+ RSpec.describe Castkit::Attributes::<%= config[:class_name] %> do
7
+ subject(:attribute) { described_class }
8
+
9
+ let(:type) { attribute.definition[:type] }
10
+ let(:options) { attribute.definition[:options] }
11
+
12
+ describe ".definition" do
13
+ it "returns a valid definition" do
14
+ expect(type).to be_a(Symbol).or be_a(Class)
15
+ expect(options).to be_a(Hash)
16
+ end
17
+ end
18
+
19
+ describe "defined type" do
20
+ it "returns defined type" do
21
+ expect(type).to eq(:<%= config[:type] %>)
22
+ end
23
+ end
24
+
25
+ describe "defined options" do
26
+ it "includes expected keys" do
27
+ expect(options.keys).to all(be_a(Symbol))
28
+ end
29
+
30
+ it "includes known default keys" do
31
+ expect(options.keys).to include(:required, :access)
32
+ end
33
+ end
34
+
35
+ describe "DSL behavior" do
36
+ it "overrides required and access values" do
37
+ expect(options[:required]).to be(true)
38
+ expect(options[:access]).to eq(%i[read write])
39
+ end
40
+ end
41
+ end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "castkit/contracts/base"
4
+
3
5
  module Castkit
4
6
  module Contracts
5
7
  # Contract definition for <%= config[:class_name] %>.
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "castkit/data_object"
4
+
3
5
  module Castkit
4
6
  module DataObjects
5
7
  # Data transfer object for <%= config[:class_name] %>.
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "castkit/types/base"
4
+
3
5
  module Castkit
4
6
  module Types
5
7
  # Type definition for <%= config[:class_name] %> (:<%= config[:name] %>) attributes.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "base"
3
+ require "castkit/validators/base"
4
4
 
5
5
  module Castkit
6
6
  module Validators
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: castkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Lucas
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-04-17 00:00:00.000000000 Z
11
+ date: 2025-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -52,6 +52,34 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: simplecov
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov-cobertura
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  - !ruby/object:Gem::Dependency
56
84
  name: yard
57
85
  requirement: !ruby/object:Gem::Requirement
@@ -76,7 +104,6 @@ extensions: []
76
104
  extra_rdoc_files: []
77
105
  files:
78
106
  - ".rspec"
79
- - ".rspec_status"
80
107
  - ".rubocop.yml"
81
108
  - CHANGELOG.md
82
109
  - CODE_OF_CONDUCT.md
@@ -86,6 +113,8 @@ files:
86
113
  - castkit.gemspec
87
114
  - lib/castkit.rb
88
115
  - lib/castkit/attribute.rb
116
+ - lib/castkit/attributes/definition.rb
117
+ - lib/castkit/attributes/options.rb
89
118
  - lib/castkit/castkit.rb
90
119
  - lib/castkit/cli.rb
91
120
  - lib/castkit/cli/generate.rb
@@ -100,17 +129,18 @@ files:
100
129
  - lib/castkit/core/attribute_types.rb
101
130
  - lib/castkit/core/attributes.rb
102
131
  - lib/castkit/core/config.rb
103
- - lib/castkit/core/registerable.rb
104
132
  - lib/castkit/data_object.rb
133
+ - lib/castkit/dsl/attribute.rb
134
+ - lib/castkit/dsl/attribute/access.rb
135
+ - lib/castkit/dsl/attribute/error_handling.rb
136
+ - lib/castkit/dsl/attribute/options.rb
137
+ - lib/castkit/dsl/attribute/validation.rb
138
+ - lib/castkit/dsl/data_object.rb
139
+ - lib/castkit/dsl/data_object/contract.rb
140
+ - lib/castkit/dsl/data_object/deserialization.rb
141
+ - lib/castkit/dsl/data_object/plugins.rb
142
+ - lib/castkit/dsl/data_object/serialization.rb
105
143
  - lib/castkit/error.rb
106
- - lib/castkit/ext/attribute/access.rb
107
- - lib/castkit/ext/attribute/error_handling.rb
108
- - lib/castkit/ext/attribute/options.rb
109
- - lib/castkit/ext/attribute/validation.rb
110
- - lib/castkit/ext/data_object/contract.rb
111
- - lib/castkit/ext/data_object/deserialization.rb
112
- - lib/castkit/ext/data_object/plugins.rb
113
- - lib/castkit/ext/data_object/serialization.rb
114
144
  - lib/castkit/inflector.rb
115
145
  - lib/castkit/plugins.rb
116
146
  - lib/castkit/serializers/base.rb
@@ -133,11 +163,14 @@ files:
133
163
  - lib/castkit/validators/numeric_validator.rb
134
164
  - lib/castkit/validators/string_validator.rb
135
165
  - lib/castkit/version.rb
166
+ - lib/generators/attribute.rb
136
167
  - lib/generators/base.rb
137
168
  - lib/generators/contract.rb
138
169
  - lib/generators/data_object.rb
139
170
  - lib/generators/plugin.rb
140
171
  - lib/generators/serializer.rb
172
+ - lib/generators/templates/attribute.rb.tt
173
+ - lib/generators/templates/attribute_spec.rb.tt
141
174
  - lib/generators/templates/contract.rb.tt
142
175
  - lib/generators/templates/contract_spec.rb.tt
143
176
  - lib/generators/templates/data_object.rb.tt
data/.rspec_status DELETED
@@ -1,195 +0,0 @@
1
- example_id | status | run_time |
2
- ------------------------------------------------------------- | ------ | --------------- |
3
- ./spec/castkit/attribute_spec.rb[1:1:1] | passed | 0.00045 seconds |
4
- ./spec/castkit/attribute_spec.rb[1:1:2] | passed | 0.00004 seconds |
5
- ./spec/castkit/attribute_spec.rb[1:1:3] | passed | 0.00004 seconds |
6
- ./spec/castkit/attribute_spec.rb[1:1:4] | passed | 0.00003 seconds |
7
- ./spec/castkit/attribute_spec.rb[1:2:1] | passed | 0.00096 seconds |
8
- ./spec/castkit/attribute_spec.rb[1:3:1] | passed | 0.00004 seconds |
9
- ./spec/castkit/attribute_spec.rb[1:3:2] | passed | 0.00004 seconds |
10
- ./spec/castkit/attribute_spec.rb[1:3:3] | passed | 0.00003 seconds |
11
- ./spec/castkit/attribute_spec.rb[1:3:4] | passed | 0.00079 seconds |
12
- ./spec/castkit/base_spec.rb[1:1:1] | passed | 0.00007 seconds |
13
- ./spec/castkit/base_spec.rb[1:2:1] | passed | 0.00365 seconds |
14
- ./spec/castkit/base_spec.rb[1:3:1] | passed | 0.00009 seconds |
15
- ./spec/castkit/base_spec.rb[1:3:2] | passed | 0.00006 seconds |
16
- ./spec/castkit/base_spec.rb[1:4:1] | passed | 0.00005 seconds |
17
- ./spec/castkit/contract/validator_spec.rb[1:1:1:1] | passed | 0.00008 seconds |
18
- ./spec/castkit/contract/validator_spec.rb[1:1:2:1] | passed | 0.00038 seconds |
19
- ./spec/castkit/contract/validator_spec.rb[1:1:3:1] | passed | 0.00007 seconds |
20
- ./spec/castkit/contract/validator_spec.rb[1:1:4:1] | passed | 0.00009 seconds |
21
- ./spec/castkit/contract/validator_spec.rb[1:1:5:1] | passed | 0.00008 seconds |
22
- ./spec/castkit/contract_spec.rb[1:1:1] | passed | 0.0003 seconds |
23
- ./spec/castkit/contract_spec.rb[1:1:2] | passed | 0.001 seconds |
24
- ./spec/castkit/contract_spec.rb[1:1:3] | passed | 0.00008 seconds |
25
- ./spec/castkit/contract_spec.rb[1:1:4] | passed | 0.00006 seconds |
26
- ./spec/castkit/contract_spec.rb[1:1:5] | passed | 0.00006 seconds |
27
- ./spec/castkit/contract_spec.rb[1:1:6] | passed | 0.00006 seconds |
28
- ./spec/castkit/core/attribute_types_spec.rb[1:1:1] | passed | 0.00005 seconds |
29
- ./spec/castkit/core/attribute_types_spec.rb[1:1:2] | passed | 0.00003 seconds |
30
- ./spec/castkit/core/attribute_types_spec.rb[1:1:3] | passed | 0.00003 seconds |
31
- ./spec/castkit/core/attribute_types_spec.rb[1:1:4] | passed | 0.00003 seconds |
32
- ./spec/castkit/core/attribute_types_spec.rb[1:1:5] | passed | 0.00003 seconds |
33
- ./spec/castkit/core/attribute_types_spec.rb[1:1:6] | passed | 0.00003 seconds |
34
- ./spec/castkit/core/attribute_types_spec.rb[1:1:7] | passed | 0.00003 seconds |
35
- ./spec/castkit/core/attribute_types_spec.rb[1:1:8] | passed | 0.00006 seconds |
36
- ./spec/castkit/core/attribute_types_spec.rb[1:1:9] | passed | 0.00004 seconds |
37
- ./spec/castkit/core/attribute_types_spec.rb[1:1:10] | passed | 0.00005 seconds |
38
- ./spec/castkit/core/attribute_types_spec.rb[1:1:11] | passed | 0.00003 seconds |
39
- ./spec/castkit/core/attribute_types_spec.rb[1:1:12] | passed | 0.00003 seconds |
40
- ./spec/castkit/core/attributes_spec.rb[1:1:1] | passed | 0.00005 seconds |
41
- ./spec/castkit/core/attributes_spec.rb[1:1:2] | passed | 0.00005 seconds |
42
- ./spec/castkit/core/attributes_spec.rb[1:1:3] | passed | 0.00005 seconds |
43
- ./spec/castkit/core/attributes_spec.rb[1:2:1] | passed | 0.00004 seconds |
44
- ./spec/castkit/core/attributes_spec.rb[1:3:1] | passed | 0.00005 seconds |
45
- ./spec/castkit/core/attributes_spec.rb[1:4:1] | passed | 0.00056 seconds |
46
- ./spec/castkit/core/attributes_spec.rb[1:5:1] | passed | 0.00005 seconds |
47
- ./spec/castkit/core/attributes_spec.rb[1:6:1] | passed | 0.00028 seconds |
48
- ./spec/castkit/core/attributes_spec.rb[1:7:1] | passed | 0.00005 seconds |
49
- ./spec/castkit/core/config_spec.rb[1:1:1] | passed | 0.00003 seconds |
50
- ./spec/castkit/core/config_spec.rb[1:1:2] | passed | 0.00003 seconds |
51
- ./spec/castkit/core/config_spec.rb[1:2:1] | passed | 0.00003 seconds |
52
- ./spec/castkit/core/config_spec.rb[1:3:1] | passed | 0.00003 seconds |
53
- ./spec/castkit/core/config_spec.rb[1:3:2] | passed | 0.00003 seconds |
54
- ./spec/castkit/core/config_spec.rb[1:4:1] | passed | 0.00003 seconds |
55
- ./spec/castkit/core/config_spec.rb[1:4:2] | passed | 0.00003 seconds |
56
- ./spec/castkit/core/config_spec.rb[1:5:1] | passed | 0.00004 seconds |
57
- ./spec/castkit/core/config_spec.rb[1:5:2] | passed | 0.00003 seconds |
58
- ./spec/castkit/data_object_spec.rb[1:1:1] | passed | 0.00094 seconds |
59
- ./spec/castkit/data_object_spec.rb[1:1:2] | passed | 0.00022 seconds |
60
- ./spec/castkit/data_object_spec.rb[1:2:1] | passed | 0.00014 seconds |
61
- ./spec/castkit/data_object_spec.rb[1:2:2] | passed | 0.00174 seconds |
62
- ./spec/castkit/data_object_spec.rb[1:2:3] | passed | 0.0001 seconds |
63
- ./spec/castkit/data_object_spec.rb[1:3:1] | passed | 0.00008 seconds |
64
- ./spec/castkit/data_object_spec.rb[1:3:2] | passed | 0.00008 seconds |
65
- ./spec/castkit/data_object_spec.rb[1:4:1] | passed | 0.00021 seconds |
66
- ./spec/castkit/data_object_spec.rb[1:5:1] | passed | 0.00013 seconds |
67
- ./spec/castkit/data_object_spec.rb[1:5:2] | passed | 0.0001 seconds |
68
- ./spec/castkit/data_object_spec.rb[1:5:3] | passed | 0.00012 seconds |
69
- ./spec/castkit/data_object_spec.rb[1:5:4] | passed | 0.0001 seconds |
70
- ./spec/castkit/data_object_spec.rb[1:5:5] | passed | 0.00073 seconds |
71
- ./spec/castkit/data_object_spec.rb[1:5:6] | passed | 0.00015 seconds |
72
- ./spec/castkit/data_object_spec.rb[1:5:7] | passed | 0.00011 seconds |
73
- ./spec/castkit/data_object_spec.rb[1:6:1] | passed | 0.0001 seconds |
74
- ./spec/castkit/data_object_spec.rb[1:7:1] | passed | 0.0001 seconds |
75
- ./spec/castkit/data_object_spec.rb[1:8:1] | passed | 0.00021 seconds |
76
- ./spec/castkit/data_object_spec.rb[1:8:2] | passed | 0.00011 seconds |
77
- ./spec/castkit/data_object_spec.rb[1:9:1] | passed | 0.00011 seconds |
78
- ./spec/castkit/default_serializer_spec.rb[1:1:1] | passed | 0.00011 seconds |
79
- ./spec/castkit/default_serializer_spec.rb[1:2:1] | passed | 0.00023 seconds |
80
- ./spec/castkit/default_serializer_spec.rb[1:2:2] | passed | 0.00008 seconds |
81
- ./spec/castkit/default_serializer_spec.rb[1:2:3] | passed | 0.00016 seconds |
82
- ./spec/castkit/default_serializer_spec.rb[1:3:1] | passed | 0.00019 seconds |
83
- ./spec/castkit/default_serializer_spec.rb[1:3:2] | passed | 0.00027 seconds |
84
- ./spec/castkit/default_serializer_spec.rb[1:3:3] | passed | 0.00016 seconds |
85
- ./spec/castkit/default_serializer_spec.rb[1:3:4] | passed | 0.00012 seconds |
86
- ./spec/castkit/default_serializer_spec.rb[1:4:1] | passed | 0.00008 seconds |
87
- ./spec/castkit/default_serializer_spec.rb[1:5:1] | passed | 0.00007 seconds |
88
- ./spec/castkit/default_serializer_spec.rb[1:5:2] | passed | 0.00006 seconds |
89
- ./spec/castkit/default_serializer_spec.rb[1:5:3] | passed | 0.00006 seconds |
90
- ./spec/castkit/ext/attribute/access_spec.rb[1:1:1] | passed | 0.00004 seconds |
91
- ./spec/castkit/ext/attribute/access_spec.rb[1:1:2:1] | passed | 0.00011 seconds |
92
- ./spec/castkit/ext/attribute/access_spec.rb[1:1:3:1] | passed | 0.00003 seconds |
93
- ./spec/castkit/ext/attribute/access_spec.rb[1:1:4:1] | passed | 0.00003 seconds |
94
- ./spec/castkit/ext/attribute/access_spec.rb[1:2:1:1] | passed | 0.00004 seconds |
95
- ./spec/castkit/ext/attribute/access_spec.rb[1:2:2:1] | passed | 0.00004 seconds |
96
- ./spec/castkit/ext/attribute/access_spec.rb[1:2:3:1] | passed | 0.00004 seconds |
97
- ./spec/castkit/ext/attribute/access_spec.rb[1:3:1] | passed | 0.00003 seconds |
98
- ./spec/castkit/ext/attribute/access_spec.rb[1:3:2] | passed | 0.00009 seconds |
99
- ./spec/castkit/ext/attribute/access_spec.rb[1:3:3] | passed | 0.00004 seconds |
100
- ./spec/castkit/ext/attribute/access_spec.rb[1:3:4] | passed | 0.00003 seconds |
101
- ./spec/castkit/ext/attribute/access_spec.rb[1:3:5] | passed | 0.00003 seconds |
102
- ./spec/castkit/ext/attribute/access_spec.rb[1:4:1:1] | passed | 0.00005 seconds |
103
- ./spec/castkit/ext/attribute/access_spec.rb[1:4:2:1] | passed | 0.00004 seconds |
104
- ./spec/castkit/ext/attribute/access_spec.rb[1:4:3:1] | passed | 0.00004 seconds |
105
- ./spec/castkit/ext/attribute/access_spec.rb[1:5:1] | passed | 0.00004 seconds |
106
- ./spec/castkit/ext/attribute/access_spec.rb[1:5:2] | passed | 0.00003 seconds |
107
- ./spec/castkit/ext/attribute/access_spec.rb[1:5:3] | passed | 0.00003 seconds |
108
- ./spec/castkit/ext/attribute/access_spec.rb[1:6:1:1] | passed | 0.00003 seconds |
109
- ./spec/castkit/ext/attribute/access_spec.rb[1:6:2:1] | passed | 0.00003 seconds |
110
- ./spec/castkit/ext/attribute/access_spec.rb[1:6:3:1] | passed | 0.00003 seconds |
111
- ./spec/castkit/ext/attribute/access_spec.rb[1:7:1:1] | passed | 0.00003 seconds |
112
- ./spec/castkit/ext/attribute/access_spec.rb[1:7:2:1] | passed | 0.00003 seconds |
113
- ./spec/castkit/ext/attribute/options_spec.rb[1:1:1:1] | passed | 0.00005 seconds |
114
- ./spec/castkit/ext/attribute/options_spec.rb[1:1:2:1] | passed | 0.00004 seconds |
115
- ./spec/castkit/ext/attribute/options_spec.rb[1:2:1:1] | passed | 0.00004 seconds |
116
- ./spec/castkit/ext/attribute/options_spec.rb[1:2:2:1] | passed | 0.00011 seconds |
117
- ./spec/castkit/ext/attribute/options_spec.rb[1:3:1:1] | passed | 0.00004 seconds |
118
- ./spec/castkit/ext/attribute/options_spec.rb[1:3:2:1] | passed | 0.00004 seconds |
119
- ./spec/castkit/ext/attribute/options_spec.rb[1:3:3:1] | passed | 0.00004 seconds |
120
- ./spec/castkit/ext/attribute/options_spec.rb[1:4:1] | passed | 0.00004 seconds |
121
- ./spec/castkit/ext/attribute/options_spec.rb[1:5:1] | passed | 0.00003 seconds |
122
- ./spec/castkit/ext/attribute/options_spec.rb[1:5:2:1] | passed | 0.00004 seconds |
123
- ./spec/castkit/ext/attribute/options_spec.rb[1:6:1] | passed | 0.00009 seconds |
124
- ./spec/castkit/ext/attribute/options_spec.rb[1:7:1] | passed | 0.00004 seconds |
125
- ./spec/castkit/ext/attribute/options_spec.rb[1:7:2:1] | passed | 0.00004 seconds |
126
- ./spec/castkit/ext/attribute/options_spec.rb[1:8:1] | passed | 0.00003 seconds |
127
- ./spec/castkit/ext/attribute/options_spec.rb[1:8:2:1] | passed | 0.00004 seconds |
128
- ./spec/castkit/ext/attribute/options_spec.rb[1:9:1:1] | passed | 0.00006 seconds |
129
- ./spec/castkit/ext/attribute/options_spec.rb[1:9:2:1] | passed | 0.00004 seconds |
130
- ./spec/castkit/ext/attribute/options_spec.rb[1:9:3:1] | passed | 0.00004 seconds |
131
- ./spec/castkit/ext/attribute/options_spec.rb[1:10:1:1] | passed | 0.00004 seconds |
132
- ./spec/castkit/ext/attribute/options_spec.rb[1:10:2:1] | passed | 0.00004 seconds |
133
- ./spec/castkit/ext/attribute/options_spec.rb[1:11:1:1] | passed | 0.00004 seconds |
134
- ./spec/castkit/ext/attribute/options_spec.rb[1:11:2:1] | passed | 0.00004 seconds |
135
- ./spec/castkit/ext/attribute/options_spec.rb[1:12:1:1] | passed | 0.00004 seconds |
136
- ./spec/castkit/ext/attribute/options_spec.rb[1:12:2:1] | passed | 0.00004 seconds |
137
- ./spec/castkit/ext/attribute/validation_spec.rb[1:1:1:1] | passed | 0.00012 seconds |
138
- ./spec/castkit/ext/attribute/validation_spec.rb[1:1:2:1:1] | passed | 0.00017 seconds |
139
- ./spec/castkit/ext/attribute/validation_spec.rb[1:1:2:2:1] | passed | 0.00014 seconds |
140
- ./spec/castkit/ext/attribute/validation_spec.rb[1:1:3:1] | passed | 0.00007 seconds |
141
- ./spec/castkit/ext/attribute/validation_spec.rb[1:1:4:1:1] | passed | 0.00008 seconds |
142
- ./spec/castkit/ext/attribute/validation_spec.rb[1:1:4:2:1] | passed | 0.00018 seconds |
143
- ./spec/castkit/ext/attribute/validation_spec.rb[1:1:5:1:1] | passed | 0.00008 seconds |
144
- ./spec/castkit/ext/attribute/validation_spec.rb[1:1:5:2:1] | passed | 0.00011 seconds |
145
- ./spec/castkit/ext/data_object/deserialization_spec.rb[1:1:1] | passed | 0.00015 seconds |
146
- ./spec/castkit/ext/data_object/deserialization_spec.rb[1:2:1] | passed | 0.00006 seconds |
147
- ./spec/castkit/ext/data_object/deserialization_spec.rb[1:2:2] | passed | 0.00005 seconds |
148
- ./spec/castkit/ext/data_object/deserialization_spec.rb[1:3:1] | passed | 0.00014 seconds |
149
- ./spec/castkit/ext/data_object/deserialization_spec.rb[1:4:1] | passed | 0.00006 seconds |
150
- ./spec/castkit/ext/data_object/serialization_spec.rb[1:1:1] | passed | 0.00003 seconds |
151
- ./spec/castkit/ext/data_object/serialization_spec.rb[1:1:2] | passed | 0.00003 seconds |
152
- ./spec/castkit/ext/data_object/serialization_spec.rb[1:2:1] | passed | 0.00003 seconds |
153
- ./spec/castkit/ext/data_object/serialization_spec.rb[1:2:2] | passed | 0.00003 seconds |
154
- ./spec/castkit/ext/data_object/serialization_spec.rb[1:3:1] | passed | 0.00004 seconds |
155
- ./spec/castkit/ext/data_object/serialization_spec.rb[1:4:1] | passed | 0.00004 seconds |
156
- ./spec/castkit/ext/data_object/serialization_spec.rb[1:4:2] | passed | 0.00003 seconds |
157
- ./spec/castkit/validators/numeric_validator_spec.rb[1:1:1:1] | passed | 0.00004 seconds |
158
- ./spec/castkit/validators/numeric_validator_spec.rb[1:1:2:1] | passed | 0.00004 seconds |
159
- ./spec/castkit/validators/numeric_validator_spec.rb[1:1:3:1] | passed | 0.00003 seconds |
160
- ./spec/castkit/validators/numeric_validator_spec.rb[1:1:4:1] | passed | 0.00003 seconds |
161
- ./spec/castkit/validators/string_validator_spec.rb[1:1:1:1:1] | passed | 0.00003 seconds |
162
- ./spec/castkit/validators/string_validator_spec.rb[1:1:2:1] | passed | 0.00004 seconds |
163
- ./spec/castkit/validators/string_validator_spec.rb[1:1:2:2] | passed | 0.00027 seconds |
164
- ./spec/castkit/validators/string_validator_spec.rb[1:1:3:1] | passed | 0.00007 seconds |
165
- ./spec/castkit/validators/string_validator_spec.rb[1:1:3:2] | passed | 0.00004 seconds |
166
- ./spec/castkit/validators/string_validator_spec.rb[1:1:4:1] | passed | 0.00006 seconds |
167
- ./spec/castkit/validators/validator_spec.rb[1:1:1] | passed | 0.00004 seconds |
168
- ./spec/castkit/validators/validator_spec.rb[1:2:1] | passed | 0.00004 seconds |
169
- ./spec/castkit_spec.rb[1:1] | passed | 0.00003 seconds |
170
- ./spec/castkit_spec.rb[1:2:1:1] | passed | 0.00015 seconds |
171
- ./spec/castkit_spec.rb[1:2:1:2] | passed | 0.00008 seconds |
172
- ./spec/castkit_spec.rb[1:2:1:3] | passed | 0.00012 seconds |
173
- ./spec/castkit_spec.rb[1:2:1:4] | passed | 0.00017 seconds |
174
- ./spec/castkit_spec.rb[1:2:2:1] | passed | 0.00013 seconds |
175
- ./spec/castkit_spec.rb[1:2:2:2] | passed | 0.00009 seconds |
176
- ./spec/castkit_spec.rb[1:2:2:3] | passed | 0.00007 seconds |
177
- ./spec/castkit_spec.rb[1:2:3:1] | passed | 0.0001 seconds |
178
- ./spec/castkit_spec.rb[1:2:3:2] | passed | 0.00007 seconds |
179
- ./spec/castkit_spec.rb[1:2:3:3] | passed | 0.00005 seconds |
180
- ./spec/castkit_spec.rb[1:2:4:1] | passed | 0.00372 seconds |
181
- ./spec/castkit_spec.rb[1:3:1] | passed | 0.00324 seconds |
182
- ./spec/castkit_spec.rb[1:3:2] | passed | 0.00333 seconds |
183
- ./spec/castkit_spec.rb[1:3:3] | passed | 0.00022 seconds |
184
- ./spec/castkit_spec.rb[1:3:4] | passed | 0.00022 seconds |
185
- ./spec/castkit_spec.rb[1:3:5] | passed | 0.00013 seconds |
186
- ./spec/castkit_spec.rb[1:3:6] | passed | 0.00017 seconds |
187
- ./spec/castkit_spec.rb[1:3:7] | passed | 0.00023 seconds |
188
- ./spec/castkit_spec.rb[1:3:8] | passed | 0.0002 seconds |
189
- ./spec/configuration_spec.rb[1:1:1] | passed | 0.00008 seconds |
190
- ./spec/configuration_spec.rb[1:2:1] | passed | 0.00005 seconds |
191
- ./spec/configuration_spec.rb[1:3:1] | passed | 0.00005 seconds |
192
- ./spec/configuration_spec.rb[1:3:2] | passed | 0.00004 seconds |
193
- ./spec/configuration_spec.rb[1:3:3] | passed | 0.00004 seconds |
194
- ./spec/configuration_spec.rb[1:3:4] | passed | 0.00006 seconds |
195
- ./spec/configuration_spec.rb[1:4:1] | passed | 0.00006 seconds |
@@ -1,59 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "../castkit"
4
-
5
- module Castkit
6
- module Core
7
- # Provides methods to register dynamically generated contracts and data objects
8
- # into the appropriate Castkit namespaces (`Castkit::Contracts`, `Castkit::DataObjects`).
9
- #
10
- # This is useful when working with ephemeral classes (e.g., from `Contract.build` or
11
- # `.to_dataobject`) that should be persisted and referenced as constants.
12
- #
13
- # @example Registering a contract class
14
- # contract = Castkit::Contract.build(:user) { string :id }
15
- # contract.extend(Castkit::Core::Registerable)
16
- # contract.register! # => Castkit::Contracts::User
17
- #
18
- # @example Registering a DTO
19
- # dto = contract.to_dataobject
20
- # dto.extend(Castkit::Core::Registerable)
21
- # dto.register!(as: :UserDto) # => Castkit::DataObjects::UserDto
22
- module Registerable
23
- CASTKIT_NAMESPACES = {
24
- contracts: Castkit::Contracts,
25
- dataobjects: Castkit::DataObjects
26
- }.freeze
27
-
28
- # Registers the current class in the specified Castkit namespace.
29
- #
30
- # @param namespace [Symbol] `:contracts` or `:dataobjects`
31
- # @param as [String, Symbol, nil] Optional constant name override (PascalCase).
32
- # If not provided, falls back to the class's name (via `Inflector.pascalize(self.name)`).
33
- #
34
- # @raise [Castkit::Error] if class is anonymous or name already exists in the namespace
35
- # @return [Class] the registered class
36
- def register!(namespace:, as: nil)
37
- name = Castkit::Inflector.pascalize(as || self.name)
38
- raise Castkit::Error, "Unable to register anonymous classes, use as: ClassName" if name.nil?
39
-
40
- ns = Castkit.const_get(namespace.to_s.capitalize, false)
41
- raise Castkit::Error, "#{name} is already registered in #{ns}" if defined_in_namespace?(ns, name)
42
-
43
- ns.const_set(name, self)
44
- self
45
- end
46
-
47
- private
48
-
49
- # Checks whether a constant is already defined in the given namespace.
50
- #
51
- # @param namespace [Module] target module (e.g., `Castkit::Contracts`)
52
- # @param name [String, Symbol]
53
- # @return [Boolean]
54
- def defined_in_namespace?(namespace, name)
55
- namespace.const_defined?(name.to_s.to_sym, false)
56
- end
57
- end
58
- end
59
- end