nrser 0.2.2 → 0.3.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 (188) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nrser/char/alpha_numeric_sub.rb +1 -2
  3. data/lib/nrser/char.rb +0 -6
  4. data/lib/nrser/core_ext/array.rb +120 -0
  5. data/lib/nrser/core_ext/binding.rb +44 -0
  6. data/lib/nrser/{functions → core_ext}/enumerable/find_map.rb +18 -15
  7. data/lib/nrser/{ext → core_ext}/enumerable.rb +10 -24
  8. data/lib/nrser/core_ext/exception.rb +30 -0
  9. data/lib/nrser/core_ext/hash/extract_values_at.rb +49 -0
  10. data/lib/nrser/core_ext/hash/transform_values_with_keys.rb +24 -0
  11. data/lib/nrser/core_ext/hash.rb +50 -0
  12. data/lib/nrser/core_ext/module/method_objects.rb +96 -0
  13. data/lib/nrser/core_ext/module/names.rb +69 -0
  14. data/lib/nrser/core_ext/module/source_locations.rb +214 -0
  15. data/lib/nrser/core_ext/module.rb +2 -0
  16. data/lib/nrser/core_ext/object/lazy_var.rb +31 -0
  17. data/lib/nrser/core_ext/object.rb +46 -0
  18. data/lib/nrser/core_ext/open_struct.rb +6 -0
  19. data/lib/nrser/{ext → core_ext}/pathname.rb +8 -5
  20. data/lib/nrser/{ext → core_ext}/string.rb +6 -12
  21. data/lib/nrser/core_ext/symbol.rb +13 -0
  22. data/lib/nrser/core_ext/time.rb +46 -0
  23. data/lib/nrser/core_ext.rb +13 -0
  24. data/lib/nrser/errors/abstract_method_error.rb +150 -0
  25. data/lib/nrser/errors/argument_error.rb +42 -0
  26. data/lib/nrser/errors/nicer_error.rb +298 -72
  27. data/lib/nrser/errors/type_error.rb +46 -0
  28. data/lib/nrser/errors.rb +4 -53
  29. data/lib/nrser/ext/tree.rb +3 -0
  30. data/lib/nrser/functions/enumerable/associate.rb +6 -9
  31. data/lib/nrser/functions/enumerable/include_slice.rb +2 -3
  32. data/lib/nrser/functions/enumerable.rb +1 -3
  33. data/lib/nrser/functions/exception.rb +1 -1
  34. data/lib/nrser/functions/hash.rb +0 -6
  35. data/lib/nrser/functions/merge_by.rb +2 -2
  36. data/lib/nrser/functions/module/method_objects.rb +77 -0
  37. data/lib/nrser/functions/module.rb +1 -2
  38. data/lib/nrser/functions/open_struct.rb +25 -35
  39. data/lib/nrser/functions/proc.rb +1 -6
  40. data/lib/nrser/functions/string/looks_like.rb +32 -1
  41. data/lib/nrser/functions/string.rb +1 -40
  42. data/lib/nrser/functions/text/lines.rb +2 -1
  43. data/lib/nrser/functions.rb +0 -1
  44. data/lib/nrser/graph/tsorter.rb +41 -0
  45. data/lib/nrser/labs/core_ext/binding.rb +37 -0
  46. data/lib/nrser/labs/stash.rb +372 -0
  47. data/lib/nrser/{logging → log}/appender/sync.rb +3 -3
  48. data/lib/nrser/log/appender.rb +3 -0
  49. data/lib/nrser/{logging → log}/formatters/color.rb +47 -20
  50. data/lib/nrser/log/formatters/mixin.rb +270 -0
  51. data/lib/nrser/{logging → log}/formatters.rb +0 -0
  52. data/lib/nrser/log/logger.rb +229 -0
  53. data/lib/nrser/log/mixin.rb +56 -0
  54. data/lib/nrser/log.rb +723 -0
  55. data/lib/nrser/message.rb +24 -3
  56. data/lib/nrser/meta/source/location.rb +158 -0
  57. data/lib/nrser/meta.rb +1 -1
  58. data/lib/nrser/props/class_methods.rb +118 -0
  59. data/lib/nrser/props/immutable/hash.rb +111 -0
  60. data/lib/nrser/props/immutable/hash_variable.rb +82 -0
  61. data/lib/nrser/props/immutable/instance_variables.rb +48 -0
  62. data/lib/nrser/props/immutable/vector.rb +107 -0
  63. data/lib/nrser/props/instance_methods.rb +184 -0
  64. data/lib/nrser/props/metadata.rb +359 -0
  65. data/lib/nrser/props/mutable/instance_variables.rb +60 -0
  66. data/lib/nrser/props/mutable/stash.rb +199 -0
  67. data/lib/nrser/{meta/props → props}/prop.rb +217 -112
  68. data/lib/nrser/props/storage/instance_variable.rb +85 -0
  69. data/lib/nrser/props/storage/instance_variables.rb +67 -0
  70. data/lib/nrser/props/storage/key.rb +88 -0
  71. data/lib/nrser/props.rb +9 -0
  72. data/lib/nrser/refinements/sugar.rb +41 -0
  73. data/lib/nrser/refinements/types.rb +2 -2
  74. data/lib/nrser/refinements.rb +14 -16
  75. data/lib/nrser/rspex/example_group/describe_attribute.rb +24 -0
  76. data/lib/nrser/rspex/example_group/describe_called_with.rb +1 -6
  77. data/lib/nrser/rspex/example_group/{describe_use_case.rb → describe_case.rb} +6 -3
  78. data/lib/nrser/rspex/example_group/describe_class.rb +1 -0
  79. data/lib/nrser/rspex/example_group/describe_group.rb +29 -0
  80. data/lib/nrser/rspex/example_group/describe_instance_method.rb +2 -2
  81. data/lib/nrser/rspex/example_group/describe_message.rb +35 -0
  82. data/lib/nrser/rspex/example_group/describe_method.rb +23 -2
  83. data/lib/nrser/rspex/example_group/describe_module.rb +19 -0
  84. data/lib/nrser/rspex/example_group/describe_response_to.rb +32 -0
  85. data/lib/nrser/rspex/example_group/describe_section.rb +38 -0
  86. data/lib/nrser/rspex/example_group/describe_sent_to.rb +52 -0
  87. data/lib/nrser/rspex/example_group/describe_source_file.rb +49 -0
  88. data/lib/nrser/rspex/example_group/describe_spec_file.rb +41 -108
  89. data/lib/nrser/rspex/example_group/describe_when.rb +14 -7
  90. data/lib/nrser/rspex/example_group/describe_x.rb +39 -12
  91. data/lib/nrser/rspex/example_group/overrides.rb +66 -0
  92. data/lib/nrser/rspex/example_group.rb +20 -252
  93. data/lib/nrser/rspex/format.rb +83 -17
  94. data/lib/nrser/rspex.rb +4 -34
  95. data/lib/nrser/sugar/method_missing_forwarder.rb +50 -0
  96. data/lib/nrser/{env → sys/env}/path.rb +1 -2
  97. data/lib/nrser/{env.rb → sys/env.rb} +2 -1
  98. data/lib/nrser/sys.rb +5 -0
  99. data/lib/nrser/types/any.rb +36 -7
  100. data/lib/nrser/types/{array.rb → arrays.rb} +32 -81
  101. data/lib/nrser/types/attrs.rb +68 -15
  102. data/lib/nrser/types/booleans.rb +95 -34
  103. data/lib/nrser/types/bounded.rb +12 -10
  104. data/lib/nrser/types/combinators.rb +74 -37
  105. data/lib/nrser/types/errors/check_error.rb +86 -0
  106. data/lib/nrser/types/errors/from_string_error.rb +82 -0
  107. data/lib/nrser/types/factory.rb +91 -0
  108. data/lib/nrser/types/hashes.rb +171 -26
  109. data/lib/nrser/types/in.rb +25 -12
  110. data/lib/nrser/types/is.rb +50 -18
  111. data/lib/nrser/types/is_a.rb +52 -33
  112. data/lib/nrser/types/labels.rb +6 -33
  113. data/lib/nrser/types/maybe.rb +12 -4
  114. data/lib/nrser/types/nil.rb +24 -4
  115. data/lib/nrser/types/not.rb +6 -16
  116. data/lib/nrser/types/numbers.rb +94 -57
  117. data/lib/nrser/types/pairs.rb +57 -57
  118. data/lib/nrser/types/paths.rb +112 -133
  119. data/lib/nrser/types/responds.rb +64 -74
  120. data/lib/nrser/types/shape.rb +29 -24
  121. data/lib/nrser/types/strings.rb +25 -17
  122. data/lib/nrser/types/symbols.rb +19 -17
  123. data/lib/nrser/types/trees.rb +18 -70
  124. data/lib/nrser/types/tuples.rb +36 -40
  125. data/lib/nrser/types/type.rb +342 -91
  126. data/lib/nrser/types/when.rb +40 -18
  127. data/lib/nrser/types/where.rb +94 -9
  128. data/lib/nrser/types.rb +72 -63
  129. data/lib/nrser/version.rb +1 -1
  130. data/lib/nrser.rb +18 -18
  131. data/spec/lib/nrser/{functions/binding/template_spec.rb → core_ext/binding/erb_spec.rb} +5 -5
  132. data/spec/lib/nrser/{functions → core_ext}/enumerable/find_map_spec.rb +8 -6
  133. data/spec/lib/nrser/{refinements → core_ext}/hash_spec.rb +9 -22
  134. data/spec/lib/nrser/errors/abstract_method_error_spec.rb +12 -5
  135. data/spec/lib/nrser/functions/enumerable/{to_h_by_spec.rb → associate_spec.rb} +1 -1
  136. data/spec/lib/nrser/functions/merge_by_spec.rb +1 -1
  137. data/spec/lib/nrser/functions/tree/each_branch_spec.rb +3 -3
  138. data/spec/lib/nrser/functions/tree/transform_spec.rb +14 -15
  139. data/spec/lib/nrser/gem_ext/hamster/json_spec.rb +4 -0
  140. data/spec/lib/nrser/meta/source/location_spec.rb +86 -0
  141. data/spec/lib/nrser/props/immutable/hash_spec.rb +297 -0
  142. data/spec/lib/nrser/props/immutable/vector_spec.rb +296 -0
  143. data/spec/lib/nrser/{meta/props_spec.rb → props/original_props_spec.rb} +11 -16
  144. data/spec/lib/nrser/{meta/props → props}/to_and_from_data_spec.rb +10 -8
  145. data/spec/lib/nrser/refinements/array_spec.rb +2 -15
  146. data/spec/lib/nrser/refinements/erb_spec.rb +5 -7
  147. data/spec/lib/nrser/refinements/set_spec.rb +2 -15
  148. data/spec/lib/nrser/{env → sys/env}/path/insert_spec.rb +4 -2
  149. data/spec/lib/nrser/{env → sys/env}/path_spec.rb +4 -2
  150. data/spec/lib/nrser/types/array_spec.rb +8 -8
  151. data/spec/lib/nrser/types/paths_spec.rb +15 -18
  152. data/spec/spec_helper.rb +4 -0
  153. metadata +109 -69
  154. data/lib/nrser/ext/binding.rb +0 -36
  155. data/lib/nrser/ext/module.rb +0 -62
  156. data/lib/nrser/ext.rb +0 -8
  157. data/lib/nrser/functions/binding.rb +0 -76
  158. data/lib/nrser/functions/enumerable/map_keys.rb +0 -0
  159. data/lib/nrser/functions/enumerable/map_values.rb +0 -94
  160. data/lib/nrser/functions/hash/deep_merge.rb +0 -57
  161. data/lib/nrser/functions/hash/except_keys.rb +0 -44
  162. data/lib/nrser/functions/hash/slice_keys.rb +0 -43
  163. data/lib/nrser/functions/hash/stringify_keys.rb +0 -55
  164. data/lib/nrser/functions/hash/symbolize_keys.rb +0 -57
  165. data/lib/nrser/functions/hash/transform_keys.rb +0 -140
  166. data/lib/nrser/functions/module/methods.rb +0 -206
  167. data/lib/nrser/functions/module/source_locations.rb +0 -213
  168. data/lib/nrser/logging/appender.rb +0 -3
  169. data/lib/nrser/logging.rb +0 -353
  170. data/lib/nrser/meta/props/base.rb +0 -31
  171. data/lib/nrser/meta/props.rb +0 -357
  172. data/lib/nrser/refinements/array.rb +0 -133
  173. data/lib/nrser/refinements/binding.rb +0 -6
  174. data/lib/nrser/refinements/enumerator.rb +0 -5
  175. data/lib/nrser/refinements/exception.rb +0 -35
  176. data/lib/nrser/refinements/hash.rb +0 -150
  177. data/lib/nrser/refinements/module.rb +0 -5
  178. data/lib/nrser/refinements/object.rb +0 -42
  179. data/lib/nrser/refinements/open_struct.rb +0 -28
  180. data/lib/nrser/refinements/pathname.rb +0 -5
  181. data/lib/nrser/refinements/set.rb +0 -5
  182. data/lib/nrser/refinements/string.rb +0 -5
  183. data/lib/nrser/refinements/symbol.rb +0 -20
  184. data/lib/nrser/rspex/described.rb +0 -99
  185. data/spec/design/mapping_spec.rb +0 -42
  186. data/spec/lib/nrser/functions/hash_spec.rb +0 -41
  187. data/spec/lib/nrser/functions/string/truncate_spec.rb +0 -11
  188. data/spec/lib/nrser/refinements/truncate_spec.rb +0 -10
@@ -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
- # @todo Document array_like method.
30
- #
31
- # @param [type] arg_name
32
- # @todo Add name param description.
33
- #
34
- # @return [return_type]
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
- # @todo Document hash_like method.
52
- #
53
- # @param [type] arg_name
54
- # @todo Add name param description.
55
- #
56
- # @return [return_type]
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
- # @todo Document tree method.
74
- #
75
- # @param [type] arg_name
76
- # @todo Add name param description.
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
@@ -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::ANY}).
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
- def default_name
54
- '[' + @types.map( &:name ).join( ', ' ) + ']'
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
- # @todo Document test method.
62
- #
63
- # @param [type] arg_name
64
- # @todo Add name param description.
60
+ # Test value for membership.
65
61
  #
66
- # @return [return_type]
67
- # @todo Document return value.
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
- # @todo Document tuple method.
106
+ # Get a tuple type.
110
107
  #
111
- # @param [type] arg_name
112
- # @todo Add name param description.
108
+ # @param *types (see TupleType#initialize)
109
+ # @param **options (see TupleType#initialize)
113
110
  #
114
- # @return [return_type]
115
- # @todo Document return value.
111
+ # @return [NRSER::Types::Type]
116
112
  #
117
- def self.tuple *types, **options
113
+ def_factory :tuple do |*types, **options|
118
114
  TupleType.new *types, **options
119
115
  end # .tuple
120
116