nrser 0.3.9 → 0.3.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/nrser/char/alpha_numeric_sub.rb +9 -19
- data/lib/nrser/char/special.rb +5 -5
- data/lib/nrser/core_ext/array.rb +36 -13
- data/lib/nrser/core_ext/enumerable.rb +1 -0
- data/lib/nrser/core_ext/enumerable/find_map.rb +1 -1
- data/lib/nrser/core_ext/hash/bury.rb +3 -0
- data/lib/nrser/core_ext/hash/extract_values_at.rb +2 -2
- data/lib/nrser/core_ext/method/full_name.rb +1 -1
- data/lib/nrser/core_ext/module/method_objects.rb +1 -1
- data/lib/nrser/core_ext/module/source_locations.rb +27 -15
- data/lib/nrser/core_ext/object/lazy_var.rb +1 -1
- data/lib/nrser/core_ext/pathname.rb +67 -12
- data/lib/nrser/core_ext/pathname/subpath.rb +86 -0
- data/lib/nrser/core_ext/string.rb +28 -1
- data/lib/nrser/core_ext/symbol.rb +11 -12
- data/lib/nrser/errors/README.md +154 -0
- data/lib/nrser/errors/attr_error.rb +146 -53
- data/lib/nrser/errors/count_error.rb +61 -12
- data/lib/nrser/errors/nicer_error.rb +42 -71
- data/lib/nrser/errors/value_error.rb +53 -58
- data/lib/nrser/functions.rb +0 -2
- data/lib/nrser/functions/enumerable.rb +5 -17
- data/lib/nrser/functions/enumerable/associate.rb +14 -5
- data/lib/nrser/functions/enumerable/find_all_map.rb +1 -1
- data/lib/nrser/functions/enumerable/include_slice/array_include_slice.rb +1 -1
- data/lib/nrser/functions/hash/bury.rb +2 -12
- data/lib/nrser/functions/merge_by.rb +2 -2
- data/lib/nrser/functions/module/method_objects.rb +2 -2
- data/lib/nrser/functions/path.rb +185 -165
- data/lib/nrser/functions/path/normalized.rb +84 -0
- data/lib/nrser/functions/string.rb +4 -4
- data/lib/nrser/functions/text/README.md +4 -0
- data/lib/nrser/functions/text/format.rb +53 -0
- data/lib/nrser/functions/text/indentation.rb +6 -6
- data/lib/nrser/functions/text/word_wrap.rb +2 -2
- data/lib/nrser/functions/tree/map_leaves.rb +3 -3
- data/lib/nrser/functions/tree/map_tree.rb +2 -2
- data/lib/nrser/functions/tree/transform.rb +1 -18
- data/lib/nrser/gem_ext/README.md +4 -0
- data/lib/nrser/labs/README.md +8 -0
- data/lib/nrser/labs/config.rb +163 -0
- data/lib/nrser/labs/i8.rb +49 -159
- data/lib/nrser/labs/i8/struct.rb +167 -0
- data/lib/nrser/labs/i8/struct/hash.rb +140 -0
- data/lib/nrser/labs/i8/struct/vector.rb +149 -0
- data/lib/nrser/labs/i8/surjection.rb +211 -0
- data/lib/nrser/labs/lots/consumer.rb +19 -0
- data/lib/nrser/labs/lots/parser.rb +21 -1
- data/lib/nrser/labs/stash.rb +4 -4
- data/lib/nrser/log.rb +25 -21
- data/lib/nrser/log/appender/sync.rb +15 -11
- data/lib/nrser/log/formatters/color.rb +0 -3
- data/lib/nrser/log/formatters/mixin.rb +4 -4
- data/lib/nrser/log/logger.rb +54 -6
- data/lib/nrser/log/mixin.rb +2 -1
- data/lib/nrser/log/plugin.rb +6 -6
- data/lib/nrser/log/types.rb +46 -29
- data/lib/nrser/mean_streak.rb +0 -8
- data/lib/nrser/mean_streak/document.rb +1 -4
- data/lib/nrser/message.rb +3 -3
- data/lib/nrser/meta/README.md +4 -0
- data/lib/nrser/meta/lazy_attr.rb +2 -2
- data/lib/nrser/meta/source/location.rb +1 -1
- data/lib/nrser/props.rb +34 -3
- data/lib/nrser/props/class_methods.rb +2 -1
- data/lib/nrser/props/instance_methods.rb +9 -9
- data/lib/nrser/props/metadata.rb +4 -12
- data/lib/nrser/props/mutable/stash.rb +5 -2
- data/lib/nrser/props/prop.rb +10 -19
- data/lib/nrser/rspex.rb +1 -20
- data/lib/nrser/rspex/example_group/describe_attribute.rb +3 -0
- data/lib/nrser/rspex/example_group/describe_called_with.rb +9 -4
- data/lib/nrser/rspex/example_group/describe_case.rb +1 -0
- data/lib/nrser/rspex/example_group/describe_class.rb +2 -0
- data/lib/nrser/rspex/example_group/describe_group.rb +1 -1
- data/lib/nrser/rspex/example_group/describe_instance.rb +3 -1
- data/lib/nrser/rspex/example_group/describe_message.rb +1 -1
- data/lib/nrser/rspex/example_group/describe_method.rb +64 -30
- data/lib/nrser/rspex/example_group/describe_response_to.rb +1 -1
- data/lib/nrser/rspex/example_group/describe_section.rb +4 -1
- data/lib/nrser/rspex/example_group/describe_sent_to.rb +1 -1
- data/lib/nrser/rspex/example_group/describe_setup.rb +1 -0
- data/lib/nrser/rspex/example_group/describe_source_file.rb +1 -1
- data/lib/nrser/rspex/example_group/describe_spec_file.rb +4 -2
- data/lib/nrser/rspex/example_group/describe_when.rb +2 -1
- data/lib/nrser/rspex/example_group/describe_x.rb +5 -5
- data/lib/nrser/rspex/format.rb +0 -15
- data/lib/nrser/sugar/method_missing_forwarder.rb +3 -3
- data/lib/nrser/sys/env/path.rb +2 -28
- data/lib/nrser/types.rb +63 -12
- data/lib/nrser/types/README.md +76 -0
- data/lib/nrser/types/arrays.rb +192 -137
- data/lib/nrser/types/attributes.rb +269 -0
- data/lib/nrser/types/booleans.rb +134 -83
- data/lib/nrser/types/bounded.rb +110 -47
- data/lib/nrser/types/collections.rb +119 -0
- data/lib/nrser/types/combinators.rb +283 -196
- data/lib/nrser/types/doc/display_table.md +66 -0
- data/lib/nrser/types/eqiuvalent.rb +91 -0
- data/lib/nrser/types/errors/check_error.rb +5 -11
- data/lib/nrser/types/errors/from_string_error.rb +3 -3
- data/lib/nrser/types/factory.rb +287 -20
- data/lib/nrser/types/hashes.rb +227 -179
- data/lib/nrser/types/in.rb +73 -36
- data/lib/nrser/types/is.rb +67 -60
- data/lib/nrser/types/is_a.rb +141 -84
- data/lib/nrser/types/labels.rb +45 -16
- data/lib/nrser/types/maybe.rb +6 -3
- data/lib/nrser/types/nil.rb +64 -27
- data/lib/nrser/types/not.rb +92 -34
- data/lib/nrser/types/numbers.rb +224 -169
- data/lib/nrser/types/pairs.rb +113 -89
- data/lib/nrser/types/paths.rb +250 -137
- data/lib/nrser/types/responds.rb +167 -89
- data/lib/nrser/types/selector.rb +234 -0
- data/lib/nrser/types/shape.rb +136 -65
- data/lib/nrser/types/strings.rb +189 -63
- data/lib/nrser/types/symbols.rb +83 -33
- data/lib/nrser/types/top.rb +89 -0
- data/lib/nrser/types/tuples.rb +134 -98
- data/lib/nrser/types/type.rb +617 -505
- data/lib/nrser/types/when.rb +123 -98
- data/lib/nrser/types/where.rb +182 -91
- data/lib/nrser/version.rb +1 -1
- data/spec/lib/nrser/core_ext/pathname/subpath_spec.rb +22 -0
- data/spec/lib/nrser/errors/attr_error_spec.rb +68 -0
- data/spec/lib/nrser/errors/count_error_spec.rb +69 -0
- data/spec/lib/nrser/functions/path/normalize_path_spec.rb +35 -0
- data/spec/lib/nrser/functions/tree/map_tree_spec.rb +74 -96
- data/spec/lib/nrser/functions/tree/transform_spec.rb +11 -11
- data/spec/lib/nrser/labs/config_spec.rb +22 -0
- data/spec/lib/nrser/labs/i8/struct_spec.rb +39 -0
- data/spec/lib/nrser/types/display_spec.rb +50 -0
- data/spec/lib/nrser/types/paths_spec.rb +16 -10
- data/spec/lib/nrser/types/selector_spec.rb +125 -0
- data/spec/spec_helper.rb +4 -5
- metadata +105 -22
- data/lib/nrser/types/any.rb +0 -41
- data/lib/nrser/types/attrs.rb +0 -213
- data/lib/nrser/types/trees.rb +0 -42
data/lib/nrser/types/shape.rb
CHANGED
@@ -2,79 +2,150 @@
|
|
2
2
|
# encoding: UTF-8
|
3
3
|
|
4
4
|
|
5
|
+
# Requirements
|
6
|
+
# ========================================================================
|
7
|
+
|
8
|
+
# Project / Package
|
9
|
+
# ------------------------------------------------------------------------
|
10
|
+
|
11
|
+
require_relative './type'
|
12
|
+
|
13
|
+
|
14
|
+
# Namespace
|
15
|
+
# ========================================================================
|
16
|
+
|
17
|
+
module NRSER
|
18
|
+
module Types
|
19
|
+
|
20
|
+
|
5
21
|
# Definitions
|
6
22
|
# =======================================================================
|
7
23
|
|
8
|
-
|
24
|
+
# Create a {Shape} type that parameterizes {#pairs} of object keys and {Type}
|
25
|
+
# values.
|
26
|
+
#
|
27
|
+
# Members of the type are values `v` for which for all keys `k` and
|
28
|
+
# paired value types `t_k` `v[k]` is a member of `t_k`:
|
29
|
+
#
|
30
|
+
# shape.pairs.all? { |k, t_k| t_k.test? v[k] }
|
31
|
+
#
|
32
|
+
# @note
|
33
|
+
# Construct shape types using the {.Shape} factory.
|
34
|
+
#
|
35
|
+
class Shape < Type
|
9
36
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
@pairs.all? { |k, v|
|
41
|
-
v === value[k]
|
42
|
-
}
|
43
|
-
rescue
|
44
|
-
false
|
45
|
-
end
|
37
|
+
# Attributes
|
38
|
+
# ========================================================================
|
39
|
+
|
40
|
+
# TODO document `pairs` attribute.
|
41
|
+
#
|
42
|
+
# @return [Hash]
|
43
|
+
#
|
44
|
+
attr_reader :pairs
|
45
|
+
|
46
|
+
|
47
|
+
# Constructor
|
48
|
+
# ======================================================================
|
49
|
+
|
50
|
+
# Instantiate a new `NRSER::Types::Shape`.
|
51
|
+
def initialize pairs, **options
|
52
|
+
super **options
|
53
|
+
@pairs = pairs.map { |k, v|
|
54
|
+
[k, NRSER::Types.make( v )]
|
55
|
+
}.to_h.freeze
|
56
|
+
end # #initialize
|
57
|
+
|
58
|
+
|
59
|
+
# Instance Methods
|
60
|
+
# ======================================================================
|
61
|
+
|
62
|
+
def test? value
|
63
|
+
begin
|
64
|
+
@pairs.all? { |k, v| v === value[k] }
|
65
|
+
rescue
|
66
|
+
false
|
46
67
|
end
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
# @!group Display Instance Methods
|
72
|
+
# --------------------------------------------------------------------------
|
73
|
+
|
74
|
+
def string_format pre:, post:, method:, spaces: true
|
75
|
+
space = spaces ? ' ' : ''
|
76
|
+
|
77
|
+
inner = @pairs.map { |k, v|
|
78
|
+
key_part = if k.is_a? Symbol
|
79
|
+
"#{ k }:#{ space }"
|
55
80
|
else
|
56
|
-
|
81
|
+
"#{ k.inspect }#{ space }=>#{ space }"
|
57
82
|
end
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
83
|
+
|
84
|
+
key_part + v.public_send( method )
|
85
|
+
}
|
86
|
+
|
87
|
+
pre + inner.join( ",#{ space }" ) + post
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
def default_symbolic
|
92
|
+
string_format pre: '{', post: '}', method: :symbolic
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
def explain
|
97
|
+
string_format pre: 'Shape<', post: '>', method: :explain
|
98
|
+
end
|
99
|
+
|
100
|
+
# @!endgroup Display Instance Methods # ************************************
|
101
|
+
|
102
|
+
|
103
|
+
def has_from_data?
|
104
|
+
pairs.values.all? { |type| type.has_from_data? }
|
105
|
+
end
|
72
106
|
|
73
107
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
108
|
+
def custom_from_data data
|
109
|
+
pairs.map { |key, type|
|
110
|
+
[ key, type.from_data( data[key] ) ]
|
111
|
+
}.to_h
|
78
112
|
end
|
79
113
|
|
80
|
-
end #
|
114
|
+
end # class Shape
|
115
|
+
|
116
|
+
|
117
|
+
# @!group Shape Type Factories
|
118
|
+
# ----------------------------------------------------------------------------
|
119
|
+
|
120
|
+
#@!method self.Shape pairs, **options
|
121
|
+
# Create a {Shape} type that parameterizes `pairs` of object keys and {Type}
|
122
|
+
# values.
|
123
|
+
#
|
124
|
+
# Members of the type are values `v` for which for all keys `k` and
|
125
|
+
# paired value types `t_k` `v[k]` is a member of `t_k`:
|
126
|
+
#
|
127
|
+
# shape.pairs.all? { |k, t_k| t_k.test? v[k] }
|
128
|
+
#
|
129
|
+
# @param [Hash<Object, TYPE>] pairs
|
130
|
+
# See {Shape#initialize}.
|
131
|
+
#
|
132
|
+
# @param [Hash] options
|
133
|
+
# Passed to {Type#initialize}.
|
134
|
+
#
|
135
|
+
# @return [Shape]
|
136
|
+
#
|
137
|
+
def_type :Shape,
|
138
|
+
parameterize: true,
|
139
|
+
&->( pairs, **options ) do
|
140
|
+
Shape.new pairs, **options
|
141
|
+
end # .Shape
|
142
|
+
|
143
|
+
# @!endgroup Shape Type Factories # ******************************************
|
144
|
+
|
145
|
+
|
146
|
+
# /Namespace
|
147
|
+
# ========================================================================
|
148
|
+
|
149
|
+
end # module Types
|
150
|
+
end # module NRSER
|
151
|
+
|
data/lib/nrser/types/strings.rb
CHANGED
@@ -1,72 +1,198 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
|
5
|
+
# Requirements
|
6
|
+
# ========================================================================
|
7
|
+
|
8
|
+
# Project / Package
|
9
|
+
# ------------------------------------------------------------------------
|
10
|
+
|
1
11
|
require_relative './is'
|
2
12
|
require_relative './is_a'
|
3
|
-
require_relative './
|
13
|
+
require_relative './attributes'
|
4
14
|
require_relative './not'
|
5
15
|
|
6
16
|
|
7
|
-
|
8
|
-
|
9
|
-
|
17
|
+
# Namespace
|
18
|
+
# ========================================================================
|
19
|
+
|
20
|
+
module NRSER
|
21
|
+
module Types
|
22
|
+
|
23
|
+
|
24
|
+
# Definitions
|
25
|
+
# ========================================================================
|
10
26
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
27
|
+
# @!group String Type Factories
|
28
|
+
# ----------------------------------------------------------------------------
|
29
|
+
|
30
|
+
#@!method self.String length: nil, encoding: nil, **options
|
31
|
+
# Get a {Type} whose members {.IsA} {::String}, along with some other optional
|
32
|
+
# common attribute checks ({::String#length} and {::String#encoding}).
|
33
|
+
#
|
34
|
+
# If `encoding:` is specified and no `from_s:` is provided, will add a
|
35
|
+
# {Type#form_s} that attempts to transcode strings that are not already in the
|
36
|
+
# target encoding (via a simple `String#encode( encoding )`).
|
37
|
+
#
|
38
|
+
# If you for some reason don't want {Type#from_s} to try to transcode, just
|
39
|
+
# provide a `from_s:` {Proc} that doesn't do it - `->( s ) { s }` to just
|
40
|
+
# use whatever tha cat drags in.
|
41
|
+
#
|
42
|
+
# If `from_s` is otherwise not provided, adds the obvious identity function.
|
43
|
+
#
|
44
|
+
# @param [nil | Integer | {min: Integer?, max: Integer?, length: Integer?}]
|
45
|
+
# length
|
46
|
+
# Optionally admit only strings of a specified length. This does not affect
|
47
|
+
# any default `from_s` - loaded strings must already be the specific length.
|
48
|
+
#
|
49
|
+
# @param [String] encoding
|
50
|
+
# Optional {::String#encoding} check. See notes above regarding default
|
51
|
+
# `from_s` that may be added.
|
52
|
+
#
|
53
|
+
# @param [Hash] options
|
54
|
+
# Passed to {Type#initialize}.
|
55
|
+
#
|
56
|
+
# @return [Type]
|
57
|
+
#
|
58
|
+
def_type :String,
|
59
|
+
aliases: [ :str ],
|
60
|
+
&->( length: nil, encoding: nil, **options ) do
|
61
|
+
|
62
|
+
if [ length, encoding ].all?( &:nil? )
|
63
|
+
# Give 'er the obvious `#from_s` if she don't already have one
|
64
|
+
options[:from_s] ||= ->( s ) { s }
|
65
|
+
|
66
|
+
IsA.new ::String, **options
|
67
|
+
|
68
|
+
else
|
69
|
+
types = [ IsA.new( ::String ) ]
|
70
|
+
types << self.Length( length ) if length
|
71
|
+
|
72
|
+
if encoding
|
73
|
+
# If we didn't get a `from_s`, provide one that will try to transcode to
|
74
|
+
# `encoding` (unless it's already there)
|
75
|
+
options[:from_s] ||= ->( string ) {
|
76
|
+
if string.encoding == encoding
|
77
|
+
string
|
78
|
+
else
|
79
|
+
string.encode encoding
|
80
|
+
end
|
81
|
+
}
|
82
|
+
|
83
|
+
types << self.Attributes( encoding: encoding )
|
84
|
+
|
18
85
|
else
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
intersection *types, **options
|
86
|
+
# We don't need to handle encoding, so set the obvious `#from_s` if
|
87
|
+
# one was not provided
|
88
|
+
options[:from_s] ||= ->( s ) { s }
|
89
|
+
|
24
90
|
end
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
# Get a {Type} only satisfied by empty strings.
|
29
|
-
#
|
30
|
-
# @param [String] name: (default 'EmptyString')
|
31
|
-
#
|
32
|
-
def_factory(
|
33
|
-
:EmptyString,
|
34
|
-
aliases: [ :empty_str, :empty_string ],
|
35
|
-
) do |name: 'EmptyString', **options|
|
36
|
-
str length: 0, name: name, **options
|
37
|
-
end
|
38
|
-
|
39
|
-
|
40
|
-
def_factory(
|
41
|
-
:NonEmptyString,
|
42
|
-
aliases: [ :non_empty_str, :non_empty_string ],
|
43
|
-
) do |name: 'NonEmptyString', **options|
|
44
|
-
str length: {min: 1}, name: name, **options
|
45
|
-
end
|
46
|
-
|
47
|
-
|
48
|
-
def_factory(
|
49
|
-
:Character,
|
50
|
-
aliases: [ :char, :character ],
|
51
|
-
) do |name: 'Character', **options|
|
52
|
-
str length: 1, name: name, **options
|
91
|
+
|
92
|
+
self.Intersection *types, **options
|
53
93
|
end
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
end #
|
94
|
+
|
95
|
+
end # .String
|
96
|
+
|
97
|
+
|
98
|
+
#@!method self.EmptyString encoding: nil, **options
|
99
|
+
# Get a {Type} only satisfied by empty strings.
|
100
|
+
#
|
101
|
+
# @param encoding (see .String)
|
102
|
+
#
|
103
|
+
# @param [Hash] options
|
104
|
+
# Passed to {Type#initialize}.
|
105
|
+
#
|
106
|
+
# @return [Type]
|
107
|
+
#
|
108
|
+
def_type :EmptyString,
|
109
|
+
aliases: [ :empty_str ],
|
110
|
+
&->( encoding: nil, **options ) do
|
111
|
+
self.String **options, length: 0, encoding: encoding
|
112
|
+
end # .EmptyString
|
113
|
+
|
114
|
+
|
115
|
+
#@!method self.NonEmptyString encoding: nil, **options
|
116
|
+
# {.String} of length `1` or more.
|
117
|
+
#
|
118
|
+
# @param encoding (see .String)
|
119
|
+
#
|
120
|
+
# @param [Hash] options
|
121
|
+
# Passed to {Type#initialize}.
|
122
|
+
#
|
123
|
+
# @return [Type]
|
124
|
+
#
|
125
|
+
def_type :NonEmptyString,
|
126
|
+
aliases: [ :non_empty_str ],
|
127
|
+
&->( encoding: nil, **options ) do
|
128
|
+
self.String **options, length: {min: 1}, encoding: encoding
|
129
|
+
end # .NonEmptyString
|
130
|
+
|
131
|
+
|
132
|
+
#@!method self.Character encoding: nil, **options
|
133
|
+
# {.String} of length `1` (Ruby lacks a character class).
|
134
|
+
#
|
135
|
+
# @param encoding (see .String)
|
136
|
+
#
|
137
|
+
# @param [Hash] options
|
138
|
+
# Passed to {Type#initialize}.
|
139
|
+
#
|
140
|
+
# @return [Type]
|
141
|
+
#
|
142
|
+
def_type :Character,
|
143
|
+
aliases: [ :char ],
|
144
|
+
&->( encoding: nil, **options ) do
|
145
|
+
self.String **options, length: 1, encoding: encoding
|
146
|
+
end # .Character
|
147
|
+
|
148
|
+
|
149
|
+
#@!method self.UTF8String length: nil, **options
|
150
|
+
# A type satisfied by UTF-8 encoded {.String}.
|
151
|
+
#
|
152
|
+
# @param length (see .String)
|
153
|
+
#
|
154
|
+
# @param [Hash] options
|
155
|
+
# Passed to {Type#initialize}.
|
156
|
+
#
|
157
|
+
# @return [Type]
|
158
|
+
#
|
159
|
+
def_type :UTF8String,
|
160
|
+
# NOTE "UTF8String".underscore -> "utf8_string"
|
161
|
+
aliases: [ :utf_8_string,
|
162
|
+
:utf8,
|
163
|
+
:utf_8,
|
164
|
+
:utf8_str,
|
165
|
+
:utf_8_str ],
|
166
|
+
&->( length: nil, **options ) do
|
167
|
+
self.String **options, length: length, encoding: Encoding::UTF_8
|
168
|
+
end # .UTF8String
|
169
|
+
|
170
|
+
|
171
|
+
#@!method self.UTF8Character **options
|
172
|
+
# A type satisfied by UTF-8 encoded {.Character}.
|
173
|
+
#
|
174
|
+
# @param encoding (see .String)
|
175
|
+
#
|
176
|
+
# @param [Hash] options
|
177
|
+
# Passed to {Type#initialize}.
|
178
|
+
#
|
179
|
+
# @return [Type]
|
180
|
+
#
|
181
|
+
def_type :UTF8Character,
|
182
|
+
# NOTE "UTF8Character".underscore -> "utf8_character"
|
183
|
+
aliases: [ :utf_8_character,
|
184
|
+
:utf8_char,
|
185
|
+
:utf_8_char ],
|
186
|
+
&->( **options ) do
|
187
|
+
self.Character **options, encoding: Encoding::UTF_8
|
188
|
+
end # .UTF8Character
|
189
|
+
|
190
|
+
|
191
|
+
# @!endgroup String Type Factories # *****************************************
|
192
|
+
|
193
|
+
|
194
|
+
# /Namespace
|
195
|
+
# ========================================================================
|
196
|
+
|
197
|
+
end # module Types
|
198
|
+
end # module NRSER
|