nrser 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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