nrser 0.2.2 → 0.3.0
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 +1 -2
- data/lib/nrser/char.rb +0 -6
- data/lib/nrser/core_ext/array.rb +120 -0
- data/lib/nrser/core_ext/binding.rb +44 -0
- data/lib/nrser/{functions → core_ext}/enumerable/find_map.rb +18 -15
- data/lib/nrser/{ext → core_ext}/enumerable.rb +10 -24
- data/lib/nrser/core_ext/exception.rb +30 -0
- data/lib/nrser/core_ext/hash/extract_values_at.rb +49 -0
- data/lib/nrser/core_ext/hash/transform_values_with_keys.rb +24 -0
- data/lib/nrser/core_ext/hash.rb +50 -0
- data/lib/nrser/core_ext/module/method_objects.rb +96 -0
- data/lib/nrser/core_ext/module/names.rb +69 -0
- data/lib/nrser/core_ext/module/source_locations.rb +214 -0
- data/lib/nrser/core_ext/module.rb +2 -0
- data/lib/nrser/core_ext/object/lazy_var.rb +31 -0
- data/lib/nrser/core_ext/object.rb +46 -0
- data/lib/nrser/core_ext/open_struct.rb +6 -0
- data/lib/nrser/{ext → core_ext}/pathname.rb +8 -5
- data/lib/nrser/{ext → core_ext}/string.rb +6 -12
- data/lib/nrser/core_ext/symbol.rb +13 -0
- data/lib/nrser/core_ext/time.rb +46 -0
- data/lib/nrser/core_ext.rb +13 -0
- data/lib/nrser/errors/abstract_method_error.rb +150 -0
- data/lib/nrser/errors/argument_error.rb +42 -0
- data/lib/nrser/errors/nicer_error.rb +298 -72
- data/lib/nrser/errors/type_error.rb +46 -0
- data/lib/nrser/errors.rb +4 -53
- data/lib/nrser/ext/tree.rb +3 -0
- data/lib/nrser/functions/enumerable/associate.rb +6 -9
- data/lib/nrser/functions/enumerable/include_slice.rb +2 -3
- data/lib/nrser/functions/enumerable.rb +1 -3
- data/lib/nrser/functions/exception.rb +1 -1
- data/lib/nrser/functions/hash.rb +0 -6
- data/lib/nrser/functions/merge_by.rb +2 -2
- data/lib/nrser/functions/module/method_objects.rb +77 -0
- data/lib/nrser/functions/module.rb +1 -2
- data/lib/nrser/functions/open_struct.rb +25 -35
- data/lib/nrser/functions/proc.rb +1 -6
- data/lib/nrser/functions/string/looks_like.rb +32 -1
- data/lib/nrser/functions/string.rb +1 -40
- data/lib/nrser/functions/text/lines.rb +2 -1
- data/lib/nrser/functions.rb +0 -1
- data/lib/nrser/graph/tsorter.rb +41 -0
- data/lib/nrser/labs/core_ext/binding.rb +37 -0
- data/lib/nrser/labs/stash.rb +372 -0
- data/lib/nrser/{logging → log}/appender/sync.rb +3 -3
- data/lib/nrser/log/appender.rb +3 -0
- data/lib/nrser/{logging → log}/formatters/color.rb +47 -20
- data/lib/nrser/log/formatters/mixin.rb +270 -0
- data/lib/nrser/{logging → log}/formatters.rb +0 -0
- data/lib/nrser/log/logger.rb +229 -0
- data/lib/nrser/log/mixin.rb +56 -0
- data/lib/nrser/log.rb +723 -0
- data/lib/nrser/message.rb +24 -3
- data/lib/nrser/meta/source/location.rb +158 -0
- data/lib/nrser/meta.rb +1 -1
- data/lib/nrser/props/class_methods.rb +118 -0
- data/lib/nrser/props/immutable/hash.rb +111 -0
- data/lib/nrser/props/immutable/hash_variable.rb +82 -0
- data/lib/nrser/props/immutable/instance_variables.rb +48 -0
- data/lib/nrser/props/immutable/vector.rb +107 -0
- data/lib/nrser/props/instance_methods.rb +184 -0
- data/lib/nrser/props/metadata.rb +359 -0
- data/lib/nrser/props/mutable/instance_variables.rb +60 -0
- data/lib/nrser/props/mutable/stash.rb +199 -0
- data/lib/nrser/{meta/props → props}/prop.rb +217 -112
- data/lib/nrser/props/storage/instance_variable.rb +85 -0
- data/lib/nrser/props/storage/instance_variables.rb +67 -0
- data/lib/nrser/props/storage/key.rb +88 -0
- data/lib/nrser/props.rb +9 -0
- data/lib/nrser/refinements/sugar.rb +41 -0
- data/lib/nrser/refinements/types.rb +2 -2
- data/lib/nrser/refinements.rb +14 -16
- data/lib/nrser/rspex/example_group/describe_attribute.rb +24 -0
- data/lib/nrser/rspex/example_group/describe_called_with.rb +1 -6
- data/lib/nrser/rspex/example_group/{describe_use_case.rb → describe_case.rb} +6 -3
- data/lib/nrser/rspex/example_group/describe_class.rb +1 -0
- data/lib/nrser/rspex/example_group/describe_group.rb +29 -0
- data/lib/nrser/rspex/example_group/describe_instance_method.rb +2 -2
- data/lib/nrser/rspex/example_group/describe_message.rb +35 -0
- data/lib/nrser/rspex/example_group/describe_method.rb +23 -2
- data/lib/nrser/rspex/example_group/describe_module.rb +19 -0
- data/lib/nrser/rspex/example_group/describe_response_to.rb +32 -0
- data/lib/nrser/rspex/example_group/describe_section.rb +38 -0
- data/lib/nrser/rspex/example_group/describe_sent_to.rb +52 -0
- data/lib/nrser/rspex/example_group/describe_source_file.rb +49 -0
- data/lib/nrser/rspex/example_group/describe_spec_file.rb +41 -108
- data/lib/nrser/rspex/example_group/describe_when.rb +14 -7
- data/lib/nrser/rspex/example_group/describe_x.rb +39 -12
- data/lib/nrser/rspex/example_group/overrides.rb +66 -0
- data/lib/nrser/rspex/example_group.rb +20 -252
- data/lib/nrser/rspex/format.rb +83 -17
- data/lib/nrser/rspex.rb +4 -34
- data/lib/nrser/sugar/method_missing_forwarder.rb +50 -0
- data/lib/nrser/{env → sys/env}/path.rb +1 -2
- data/lib/nrser/{env.rb → sys/env.rb} +2 -1
- data/lib/nrser/sys.rb +5 -0
- data/lib/nrser/types/any.rb +36 -7
- data/lib/nrser/types/{array.rb → arrays.rb} +32 -81
- data/lib/nrser/types/attrs.rb +68 -15
- data/lib/nrser/types/booleans.rb +95 -34
- data/lib/nrser/types/bounded.rb +12 -10
- data/lib/nrser/types/combinators.rb +74 -37
- data/lib/nrser/types/errors/check_error.rb +86 -0
- data/lib/nrser/types/errors/from_string_error.rb +82 -0
- data/lib/nrser/types/factory.rb +91 -0
- data/lib/nrser/types/hashes.rb +171 -26
- data/lib/nrser/types/in.rb +25 -12
- data/lib/nrser/types/is.rb +50 -18
- data/lib/nrser/types/is_a.rb +52 -33
- data/lib/nrser/types/labels.rb +6 -33
- data/lib/nrser/types/maybe.rb +12 -4
- data/lib/nrser/types/nil.rb +24 -4
- data/lib/nrser/types/not.rb +6 -16
- data/lib/nrser/types/numbers.rb +94 -57
- data/lib/nrser/types/pairs.rb +57 -57
- data/lib/nrser/types/paths.rb +112 -133
- data/lib/nrser/types/responds.rb +64 -74
- data/lib/nrser/types/shape.rb +29 -24
- data/lib/nrser/types/strings.rb +25 -17
- data/lib/nrser/types/symbols.rb +19 -17
- data/lib/nrser/types/trees.rb +18 -70
- data/lib/nrser/types/tuples.rb +36 -40
- data/lib/nrser/types/type.rb +342 -91
- data/lib/nrser/types/when.rb +40 -18
- data/lib/nrser/types/where.rb +94 -9
- data/lib/nrser/types.rb +72 -63
- data/lib/nrser/version.rb +1 -1
- data/lib/nrser.rb +18 -18
- data/spec/lib/nrser/{functions/binding/template_spec.rb → core_ext/binding/erb_spec.rb} +5 -5
- data/spec/lib/nrser/{functions → core_ext}/enumerable/find_map_spec.rb +8 -6
- data/spec/lib/nrser/{refinements → core_ext}/hash_spec.rb +9 -22
- data/spec/lib/nrser/errors/abstract_method_error_spec.rb +12 -5
- data/spec/lib/nrser/functions/enumerable/{to_h_by_spec.rb → associate_spec.rb} +1 -1
- data/spec/lib/nrser/functions/merge_by_spec.rb +1 -1
- data/spec/lib/nrser/functions/tree/each_branch_spec.rb +3 -3
- data/spec/lib/nrser/functions/tree/transform_spec.rb +14 -15
- data/spec/lib/nrser/gem_ext/hamster/json_spec.rb +4 -0
- data/spec/lib/nrser/meta/source/location_spec.rb +86 -0
- data/spec/lib/nrser/props/immutable/hash_spec.rb +297 -0
- data/spec/lib/nrser/props/immutable/vector_spec.rb +296 -0
- data/spec/lib/nrser/{meta/props_spec.rb → props/original_props_spec.rb} +11 -16
- data/spec/lib/nrser/{meta/props → props}/to_and_from_data_spec.rb +10 -8
- data/spec/lib/nrser/refinements/array_spec.rb +2 -15
- data/spec/lib/nrser/refinements/erb_spec.rb +5 -7
- data/spec/lib/nrser/refinements/set_spec.rb +2 -15
- data/spec/lib/nrser/{env → sys/env}/path/insert_spec.rb +4 -2
- data/spec/lib/nrser/{env → sys/env}/path_spec.rb +4 -2
- data/spec/lib/nrser/types/array_spec.rb +8 -8
- data/spec/lib/nrser/types/paths_spec.rb +15 -18
- data/spec/spec_helper.rb +4 -0
- metadata +109 -69
- data/lib/nrser/ext/binding.rb +0 -36
- data/lib/nrser/ext/module.rb +0 -62
- data/lib/nrser/ext.rb +0 -8
- data/lib/nrser/functions/binding.rb +0 -76
- data/lib/nrser/functions/enumerable/map_keys.rb +0 -0
- data/lib/nrser/functions/enumerable/map_values.rb +0 -94
- data/lib/nrser/functions/hash/deep_merge.rb +0 -57
- data/lib/nrser/functions/hash/except_keys.rb +0 -44
- data/lib/nrser/functions/hash/slice_keys.rb +0 -43
- data/lib/nrser/functions/hash/stringify_keys.rb +0 -55
- data/lib/nrser/functions/hash/symbolize_keys.rb +0 -57
- data/lib/nrser/functions/hash/transform_keys.rb +0 -140
- data/lib/nrser/functions/module/methods.rb +0 -206
- data/lib/nrser/functions/module/source_locations.rb +0 -213
- data/lib/nrser/logging/appender.rb +0 -3
- data/lib/nrser/logging.rb +0 -353
- data/lib/nrser/meta/props/base.rb +0 -31
- data/lib/nrser/meta/props.rb +0 -357
- data/lib/nrser/refinements/array.rb +0 -133
- data/lib/nrser/refinements/binding.rb +0 -6
- data/lib/nrser/refinements/enumerator.rb +0 -5
- data/lib/nrser/refinements/exception.rb +0 -35
- data/lib/nrser/refinements/hash.rb +0 -150
- data/lib/nrser/refinements/module.rb +0 -5
- data/lib/nrser/refinements/object.rb +0 -42
- data/lib/nrser/refinements/open_struct.rb +0 -28
- data/lib/nrser/refinements/pathname.rb +0 -5
- data/lib/nrser/refinements/set.rb +0 -5
- data/lib/nrser/refinements/string.rb +0 -5
- data/lib/nrser/refinements/symbol.rb +0 -20
- data/lib/nrser/rspex/described.rb +0 -99
- data/spec/design/mapping_spec.rb +0 -42
- data/spec/lib/nrser/functions/hash_spec.rb +0 -41
- data/spec/lib/nrser/functions/string/truncate_spec.rb +0 -11
- data/spec/lib/nrser/refinements/truncate_spec.rb +0 -10
data/lib/nrser/types/trees.rb
CHANGED
@@ -1,12 +1,6 @@
|
|
1
1
|
# Requirements
|
2
2
|
# =======================================================================
|
3
3
|
|
4
|
-
# Stdlib
|
5
|
-
# -----------------------------------------------------------------------
|
6
|
-
|
7
|
-
# Deps
|
8
|
-
# -----------------------------------------------------------------------
|
9
|
-
|
10
4
|
# Project / Package
|
11
5
|
# -----------------------------------------------------------------------
|
12
6
|
require_relative './combinators'
|
@@ -14,81 +8,35 @@ require_relative './responds'
|
|
14
8
|
require_relative './is_a'
|
15
9
|
|
16
10
|
|
17
|
-
# Refinements
|
18
|
-
# =======================================================================
|
19
|
-
|
20
|
-
require 'nrser/refinements'
|
21
|
-
using NRSER
|
22
|
-
|
23
|
-
|
24
11
|
# Definitions
|
25
12
|
# =======================================================================
|
26
13
|
|
27
14
|
module NRSER::Types
|
28
15
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
# @todo Document return value.
|
36
|
-
#
|
37
|
-
def self.array_like **options
|
38
|
-
if options.empty?
|
39
|
-
ARRAY_LIKE
|
40
|
-
else
|
41
|
-
intersection \
|
42
|
-
is_a( Enumerable ),
|
43
|
-
respond_to( :each_index ),
|
44
|
-
**options
|
45
|
-
end
|
16
|
+
def_factory :array_like do |name: 'ArrayLike', **options|
|
17
|
+
intersection \
|
18
|
+
is_a( Enumerable ),
|
19
|
+
respond_to( :each_index ),
|
20
|
+
name: name,
|
21
|
+
**options
|
46
22
|
end # .array_like
|
47
23
|
|
48
|
-
ARRAY_LIKE = array_like( name: 'ArrayLikeType' ).freeze
|
49
|
-
|
50
24
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
# @todo Document return value.
|
58
|
-
#
|
59
|
-
def self.hash_like **options
|
60
|
-
if options.empty?
|
61
|
-
HASH_LIKE
|
62
|
-
else
|
63
|
-
intersection \
|
64
|
-
is_a( Enumerable ),
|
65
|
-
respond_to( :each_pair ),
|
66
|
-
**options
|
67
|
-
end
|
25
|
+
def_factory :hash_like do |name: 'HashLike', **options|
|
26
|
+
intersection \
|
27
|
+
is_a( Enumerable ),
|
28
|
+
respond_to( :each_pair ),
|
29
|
+
name: name,
|
30
|
+
**options
|
68
31
|
end # .hash_like
|
69
32
|
|
70
|
-
HASH_LIKE = hash_like( name: 'HashLikeType' ).freeze
|
71
33
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
# @return [return_type]
|
79
|
-
# @todo Document return value.
|
80
|
-
#
|
81
|
-
def self.tree **options
|
82
|
-
if options.empty?
|
83
|
-
TREE
|
84
|
-
else
|
85
|
-
union \
|
86
|
-
array_like,
|
87
|
-
hash_like,
|
88
|
-
**options
|
89
|
-
end
|
34
|
+
def_factory :tree do |name: 'Tree', **options|
|
35
|
+
union \
|
36
|
+
array_like,
|
37
|
+
hash_like,
|
38
|
+
name: name,
|
39
|
+
**options
|
90
40
|
end # .tree
|
91
41
|
|
92
|
-
TREE = tree( name: 'TreeType' ).freeze
|
93
|
-
|
94
42
|
end # module NRSER::Types
|
data/lib/nrser/types/tuples.rb
CHANGED
@@ -1,21 +1,9 @@
|
|
1
1
|
# Requirements
|
2
2
|
# =======================================================================
|
3
3
|
|
4
|
-
# Stdlib
|
5
|
-
# -----------------------------------------------------------------------
|
6
|
-
|
7
|
-
# Deps
|
8
|
-
# -----------------------------------------------------------------------
|
9
|
-
|
10
4
|
# Project / Package
|
11
5
|
# -----------------------------------------------------------------------
|
12
|
-
|
13
|
-
|
14
|
-
# Refinements
|
15
|
-
# =======================================================================
|
16
|
-
|
17
|
-
require 'nrser/refinements'
|
18
|
-
using NRSER
|
6
|
+
require_relative './arrays'
|
19
7
|
|
20
8
|
|
21
9
|
# Definitions
|
@@ -24,49 +12,58 @@ using NRSER
|
|
24
12
|
module NRSER::Types
|
25
13
|
|
26
14
|
# Tuple type - array of fixed length and types (though those could be
|
27
|
-
# {NRSER::Types
|
15
|
+
# {NRSER::Types.any}).
|
28
16
|
#
|
29
17
|
class TupleType < NRSER::Types::ArrayType
|
30
18
|
|
31
|
-
# Constants
|
32
|
-
# ======================================================================
|
33
|
-
|
34
|
-
|
35
|
-
# Class Methods
|
36
|
-
# ======================================================================
|
37
|
-
|
38
|
-
|
39
19
|
# Attributes
|
40
20
|
# ======================================================================
|
41
21
|
|
22
|
+
# The types of each of the tuple indexes.
|
23
|
+
#
|
24
|
+
# @return [Array<NRSER::Types::Type>]
|
25
|
+
#
|
26
|
+
attr_reader :types
|
27
|
+
|
42
28
|
|
43
29
|
# Constructor
|
44
30
|
# ======================================================================
|
45
31
|
|
46
32
|
# Instantiate a new `TupleType`.
|
33
|
+
#
|
34
|
+
# @param [Array] *types
|
35
|
+
# Tuple value types by their index in the tuples.
|
36
|
+
#
|
37
|
+
# Entries are passed through {NRSER::Types.make} to create the type
|
38
|
+
# if needed.
|
39
|
+
#
|
40
|
+
# @param [Hash<Symbol, *>] **options
|
41
|
+
# Type options; see {NRSER::Types::Type#initialize}.
|
42
|
+
#
|
47
43
|
def initialize *types, **options
|
48
44
|
super **options
|
49
|
-
@types = types.map &NRSER::Types.method(:make)
|
45
|
+
@types = types.map( &NRSER::Types.method(:make) ).freeze
|
50
46
|
end # #initialize
|
51
47
|
|
52
48
|
|
53
|
-
|
54
|
-
|
49
|
+
# @return [String]
|
50
|
+
# See {NRSER::Types::Type#explain}
|
51
|
+
#
|
52
|
+
def explain
|
53
|
+
'Array<(' + @types.map( &:explain ).join( ', ' ) + ')>'
|
55
54
|
end
|
56
55
|
|
57
56
|
|
58
57
|
# Instance Methods
|
59
58
|
# ======================================================================
|
60
59
|
|
61
|
-
#
|
62
|
-
#
|
63
|
-
# @param [type] arg_name
|
64
|
-
# @todo Add name param description.
|
60
|
+
# Test value for membership.
|
65
61
|
#
|
66
|
-
# @
|
67
|
-
#
|
62
|
+
# @param (see NRSER::Types::Type#test?)
|
63
|
+
# @return (see NRSER::Types::Type#test?)
|
64
|
+
# @raise (see NRSER::Types::Type#test?)
|
68
65
|
#
|
69
|
-
def test value
|
66
|
+
def test? value
|
70
67
|
# Test the super class first
|
71
68
|
return false unless super( value )
|
72
69
|
|
@@ -77,7 +74,7 @@ module NRSER::Types
|
|
77
74
|
@types.each_with_index.all? { |type, index|
|
78
75
|
type.test value[index]
|
79
76
|
}
|
80
|
-
end # #test
|
77
|
+
end # #test?
|
81
78
|
|
82
79
|
|
83
80
|
# @return [Boolean]
|
@@ -85,7 +82,7 @@ module NRSER::Types
|
|
85
82
|
# *all* it's types can load values from strings.
|
86
83
|
#
|
87
84
|
def has_from_s?
|
88
|
-
@types.all? &:has_from_s?
|
85
|
+
@from_s || @types.all?( &:has_from_s? )
|
89
86
|
end # #has_from_s?
|
90
87
|
|
91
88
|
|
@@ -106,15 +103,14 @@ module NRSER::Types
|
|
106
103
|
end # class TupleType
|
107
104
|
|
108
105
|
|
109
|
-
#
|
106
|
+
# Get a tuple type.
|
110
107
|
#
|
111
|
-
# @param
|
112
|
-
#
|
108
|
+
# @param *types (see TupleType#initialize)
|
109
|
+
# @param **options (see TupleType#initialize)
|
113
110
|
#
|
114
|
-
# @return [
|
115
|
-
# @todo Document return value.
|
111
|
+
# @return [NRSER::Types::Type]
|
116
112
|
#
|
117
|
-
|
113
|
+
def_factory :tuple do |*types, **options|
|
118
114
|
TupleType.new *types, **options
|
119
115
|
end # .tuple
|
120
116
|
|