stannum 0.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.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +21 -0
  3. data/CODE_OF_CONDUCT.md +132 -0
  4. data/DEVELOPMENT.md +105 -0
  5. data/LICENSE +22 -0
  6. data/README.md +1327 -0
  7. data/config/locales/en.rb +47 -0
  8. data/lib/stannum/attribute.rb +115 -0
  9. data/lib/stannum/constraint.rb +65 -0
  10. data/lib/stannum/constraints/absence.rb +42 -0
  11. data/lib/stannum/constraints/anything.rb +28 -0
  12. data/lib/stannum/constraints/base.rb +285 -0
  13. data/lib/stannum/constraints/boolean.rb +33 -0
  14. data/lib/stannum/constraints/delegator.rb +71 -0
  15. data/lib/stannum/constraints/enum.rb +64 -0
  16. data/lib/stannum/constraints/equality.rb +47 -0
  17. data/lib/stannum/constraints/hashes/extra_keys.rb +126 -0
  18. data/lib/stannum/constraints/hashes/indifferent_key.rb +74 -0
  19. data/lib/stannum/constraints/hashes.rb +11 -0
  20. data/lib/stannum/constraints/identity.rb +46 -0
  21. data/lib/stannum/constraints/nothing.rb +28 -0
  22. data/lib/stannum/constraints/presence.rb +42 -0
  23. data/lib/stannum/constraints/signature.rb +92 -0
  24. data/lib/stannum/constraints/signatures/map.rb +17 -0
  25. data/lib/stannum/constraints/signatures/tuple.rb +17 -0
  26. data/lib/stannum/constraints/signatures.rb +11 -0
  27. data/lib/stannum/constraints/tuples/extra_items.rb +84 -0
  28. data/lib/stannum/constraints/tuples.rb +10 -0
  29. data/lib/stannum/constraints/type.rb +113 -0
  30. data/lib/stannum/constraints/types/array_type.rb +148 -0
  31. data/lib/stannum/constraints/types/big_decimal_type.rb +16 -0
  32. data/lib/stannum/constraints/types/date_time_type.rb +16 -0
  33. data/lib/stannum/constraints/types/date_type.rb +16 -0
  34. data/lib/stannum/constraints/types/float_type.rb +14 -0
  35. data/lib/stannum/constraints/types/hash_type.rb +205 -0
  36. data/lib/stannum/constraints/types/hash_with_indifferent_keys.rb +21 -0
  37. data/lib/stannum/constraints/types/hash_with_string_keys.rb +21 -0
  38. data/lib/stannum/constraints/types/hash_with_symbol_keys.rb +21 -0
  39. data/lib/stannum/constraints/types/integer_type.rb +14 -0
  40. data/lib/stannum/constraints/types/nil_type.rb +20 -0
  41. data/lib/stannum/constraints/types/proc_type.rb +14 -0
  42. data/lib/stannum/constraints/types/string_type.rb +14 -0
  43. data/lib/stannum/constraints/types/symbol_type.rb +14 -0
  44. data/lib/stannum/constraints/types/time_type.rb +14 -0
  45. data/lib/stannum/constraints/types.rb +25 -0
  46. data/lib/stannum/constraints/union.rb +85 -0
  47. data/lib/stannum/constraints.rb +26 -0
  48. data/lib/stannum/contract.rb +243 -0
  49. data/lib/stannum/contracts/array_contract.rb +108 -0
  50. data/lib/stannum/contracts/base.rb +597 -0
  51. data/lib/stannum/contracts/builder.rb +72 -0
  52. data/lib/stannum/contracts/definition.rb +74 -0
  53. data/lib/stannum/contracts/hash_contract.rb +136 -0
  54. data/lib/stannum/contracts/indifferent_hash_contract.rb +78 -0
  55. data/lib/stannum/contracts/map_contract.rb +199 -0
  56. data/lib/stannum/contracts/parameters/arguments_contract.rb +185 -0
  57. data/lib/stannum/contracts/parameters/keywords_contract.rb +174 -0
  58. data/lib/stannum/contracts/parameters/signature_contract.rb +29 -0
  59. data/lib/stannum/contracts/parameters.rb +15 -0
  60. data/lib/stannum/contracts/parameters_contract.rb +530 -0
  61. data/lib/stannum/contracts/tuple_contract.rb +213 -0
  62. data/lib/stannum/contracts.rb +19 -0
  63. data/lib/stannum/errors.rb +730 -0
  64. data/lib/stannum/messages/default_strategy.rb +124 -0
  65. data/lib/stannum/messages.rb +25 -0
  66. data/lib/stannum/parameter_validation.rb +216 -0
  67. data/lib/stannum/rspec/match_errors.rb +17 -0
  68. data/lib/stannum/rspec/match_errors_matcher.rb +93 -0
  69. data/lib/stannum/rspec/validate_parameter.rb +23 -0
  70. data/lib/stannum/rspec/validate_parameter_matcher.rb +506 -0
  71. data/lib/stannum/rspec.rb +8 -0
  72. data/lib/stannum/schema.rb +131 -0
  73. data/lib/stannum/struct.rb +444 -0
  74. data/lib/stannum/support/coercion.rb +114 -0
  75. data/lib/stannum/support/optional.rb +69 -0
  76. data/lib/stannum/support.rb +8 -0
  77. data/lib/stannum/version.rb +57 -0
  78. data/lib/stannum.rb +27 -0
  79. metadata +216 -0
data/lib/stannum.rb ADDED
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'stannum/version'
4
+
5
+ # A library for specifying and validating data structures.
6
+ module Stannum
7
+ autoload :Constraint, 'stannum/constraint'
8
+ autoload :Constraints, 'stannum/constraints'
9
+ autoload :Contract, 'stannum/contract'
10
+ autoload :Contracts, 'stannum/contracts'
11
+ autoload :Errors, 'stannum/errors'
12
+ autoload :Messages, 'stannum/messages'
13
+ autoload :ParameterValidation, 'stannum/parameter_validation'
14
+ autoload :Struct, 'stannum/struct'
15
+
16
+ # @return [String] the absolute path to the gem directory.
17
+ def self.gem_path
18
+ pattern = /#{File::SEPARATOR}lib#{File::SEPARATOR}?\z/
19
+
20
+ __dir__.sub(pattern, '')
21
+ end
22
+
23
+ # @return [String] the current version of the gem.
24
+ def self.version
25
+ @version ||= Stannum::Version.to_gem_version
26
+ end
27
+ end
metadata ADDED
@@ -0,0 +1,216 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stannum
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Rob "Merlin" Smith
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-10-08 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sleeping_king_studios-tools
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.0'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.0.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.0'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.0.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '3.10'
40
+ type: :development
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '3.10'
47
+ - !ruby/object:Gem::Dependency
48
+ name: rspec-sleeping_king_studios
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.6'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.6'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rubocop
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '1.18'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '1.18'
75
+ - !ruby/object:Gem::Dependency
76
+ name: rubocop-rspec
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '2.4'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '2.4'
89
+ - !ruby/object:Gem::Dependency
90
+ name: simplecov
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.21'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '0.21'
103
+ description: |-
104
+ A focused library for specifying and validating data structures. Stannum
105
+ provides tools to define data schemas for domain objects, method arguments,
106
+ or other structured data and to validate data against and coerce data to
107
+ the defined schema.
108
+ email:
109
+ - merlin@sleepingkingstudios.com
110
+ executables: []
111
+ extensions: []
112
+ extra_rdoc_files: []
113
+ files:
114
+ - CHANGELOG.md
115
+ - CODE_OF_CONDUCT.md
116
+ - DEVELOPMENT.md
117
+ - LICENSE
118
+ - README.md
119
+ - config/locales/en.rb
120
+ - lib/stannum.rb
121
+ - lib/stannum/attribute.rb
122
+ - lib/stannum/constraint.rb
123
+ - lib/stannum/constraints.rb
124
+ - lib/stannum/constraints/absence.rb
125
+ - lib/stannum/constraints/anything.rb
126
+ - lib/stannum/constraints/base.rb
127
+ - lib/stannum/constraints/boolean.rb
128
+ - lib/stannum/constraints/delegator.rb
129
+ - lib/stannum/constraints/enum.rb
130
+ - lib/stannum/constraints/equality.rb
131
+ - lib/stannum/constraints/hashes.rb
132
+ - lib/stannum/constraints/hashes/extra_keys.rb
133
+ - lib/stannum/constraints/hashes/indifferent_key.rb
134
+ - lib/stannum/constraints/identity.rb
135
+ - lib/stannum/constraints/nothing.rb
136
+ - lib/stannum/constraints/presence.rb
137
+ - lib/stannum/constraints/signature.rb
138
+ - lib/stannum/constraints/signatures.rb
139
+ - lib/stannum/constraints/signatures/map.rb
140
+ - lib/stannum/constraints/signatures/tuple.rb
141
+ - lib/stannum/constraints/tuples.rb
142
+ - lib/stannum/constraints/tuples/extra_items.rb
143
+ - lib/stannum/constraints/type.rb
144
+ - lib/stannum/constraints/types.rb
145
+ - lib/stannum/constraints/types/array_type.rb
146
+ - lib/stannum/constraints/types/big_decimal_type.rb
147
+ - lib/stannum/constraints/types/date_time_type.rb
148
+ - lib/stannum/constraints/types/date_type.rb
149
+ - lib/stannum/constraints/types/float_type.rb
150
+ - lib/stannum/constraints/types/hash_type.rb
151
+ - lib/stannum/constraints/types/hash_with_indifferent_keys.rb
152
+ - lib/stannum/constraints/types/hash_with_string_keys.rb
153
+ - lib/stannum/constraints/types/hash_with_symbol_keys.rb
154
+ - lib/stannum/constraints/types/integer_type.rb
155
+ - lib/stannum/constraints/types/nil_type.rb
156
+ - lib/stannum/constraints/types/proc_type.rb
157
+ - lib/stannum/constraints/types/string_type.rb
158
+ - lib/stannum/constraints/types/symbol_type.rb
159
+ - lib/stannum/constraints/types/time_type.rb
160
+ - lib/stannum/constraints/union.rb
161
+ - lib/stannum/contract.rb
162
+ - lib/stannum/contracts.rb
163
+ - lib/stannum/contracts/array_contract.rb
164
+ - lib/stannum/contracts/base.rb
165
+ - lib/stannum/contracts/builder.rb
166
+ - lib/stannum/contracts/definition.rb
167
+ - lib/stannum/contracts/hash_contract.rb
168
+ - lib/stannum/contracts/indifferent_hash_contract.rb
169
+ - lib/stannum/contracts/map_contract.rb
170
+ - lib/stannum/contracts/parameters.rb
171
+ - lib/stannum/contracts/parameters/arguments_contract.rb
172
+ - lib/stannum/contracts/parameters/keywords_contract.rb
173
+ - lib/stannum/contracts/parameters/signature_contract.rb
174
+ - lib/stannum/contracts/parameters_contract.rb
175
+ - lib/stannum/contracts/tuple_contract.rb
176
+ - lib/stannum/errors.rb
177
+ - lib/stannum/messages.rb
178
+ - lib/stannum/messages/default_strategy.rb
179
+ - lib/stannum/parameter_validation.rb
180
+ - lib/stannum/rspec.rb
181
+ - lib/stannum/rspec/match_errors.rb
182
+ - lib/stannum/rspec/match_errors_matcher.rb
183
+ - lib/stannum/rspec/validate_parameter.rb
184
+ - lib/stannum/rspec/validate_parameter_matcher.rb
185
+ - lib/stannum/schema.rb
186
+ - lib/stannum/struct.rb
187
+ - lib/stannum/support.rb
188
+ - lib/stannum/support/coercion.rb
189
+ - lib/stannum/support/optional.rb
190
+ - lib/stannum/version.rb
191
+ homepage: http://sleepingkingstudios.com
192
+ licenses:
193
+ - MIT
194
+ metadata:
195
+ bug_tracker_uri: https://github.com/sleepingkingstudios/stannum/issues
196
+ source_code_uri: https://github.com/sleepingkingstudios/stannum
197
+ post_install_message:
198
+ rdoc_options: []
199
+ require_paths:
200
+ - lib
201
+ required_ruby_version: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - ">="
204
+ - !ruby/object:Gem::Version
205
+ version: '2.6'
206
+ required_rubygems_version: !ruby/object:Gem::Requirement
207
+ requirements:
208
+ - - ">="
209
+ - !ruby/object:Gem::Version
210
+ version: '0'
211
+ requirements: []
212
+ rubygems_version: 3.1.4
213
+ signing_key:
214
+ specification_version: 4
215
+ summary: A library for specifying and validating data structures.
216
+ test_files: []