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,42 +0,0 @@
1
- # Definitions
2
- # =======================================================================
3
-
4
- module NRSER
5
- refine Object do
6
- # Yield `self`. Analogous to {#tap} but returns the result of the invoked
7
- # block.
8
- def thru
9
- yield self
10
- end
11
-
12
- # Older name, depreciated because though 'pipe' was the natural name to me,
13
- # it was probably a poor choice... it's widely used and usually denotes
14
- # streaming of some sort (and rightfully so given Unix pipes).
15
- #
16
- # I think I want to move over to {Object#thru}, but will leave the old
17
- # name for the moment.
18
- #
19
- alias_method :pipe, :thru
20
-
21
-
22
- # See {NRSER.truthy?}.
23
- def truthy?
24
- NRSER.truthy? self
25
- end
26
-
27
- # See {NRSER.falsy?}.
28
- def falsy?
29
- NRSER.falsy? self
30
- end
31
-
32
- # Calls {NRSER.as_hash} on `self` with the provided `key`.
33
- def as_hash key = nil
34
- NRSER.as_hash self, key
35
- end
36
-
37
- # Call {NRSER.as_array} on `self`.
38
- def as_array
39
- NRSER.as_array self
40
- end
41
- end
42
- end # NRSER
@@ -1,28 +0,0 @@
1
- module NRSER
2
- refine OpenStruct do
3
-
4
- # Map values using {NRSER.map_values} into a new {OpenStruct} instance.
5
- #
6
- # @return [OpenStruct]
7
- #
8
- def map_values &block
9
- self.class.new NRSER.map_values(self, &block)
10
- end # #map_values
11
-
12
-
13
- # See {NRSER.to_h_by}
14
- def to_h_by &block
15
- NRSER.to_h_by self, &block
16
- end
17
-
18
- end
19
-
20
- refine OpenStruct.singleton_class do
21
-
22
- # See {NRSER.to_open_struct}.
23
- def from_h hash, freeze: false
24
- NRSER.to_open_struct hash, freeze: freeze
25
- end # .from
26
-
27
- end
28
- end # module NRSER
@@ -1,5 +0,0 @@
1
- module NRSER
2
- refine ::Pathname do
3
- include NRSER::Ext::Pathname
4
- end # Pathname
5
- end # NRSER
@@ -1,5 +0,0 @@
1
- module NRSER
2
- refine ::Set do
3
- include NRSER::Ext::Enumerable
4
- end # refine ::Set
5
- end # NRSER
@@ -1,5 +0,0 @@
1
- module NRSER
2
- refine String do
3
- include NRSER::Ext::String
4
- end # refine String
5
- end # NRSER
@@ -1,20 +0,0 @@
1
- module NRSER
2
- refine ::Symbol do
3
-
4
- # See {NRSER.retriever}.
5
- def to_retriever
6
- NRSER.retriever self
7
- end
8
-
9
- alias_method :retriever, :to_retriever
10
- alias_method :rtvr, :to_retriever
11
-
12
-
13
- # Alias 'sender' methods to built-in {#to_proc} so symbols can behave like
14
- # arrays in this way
15
- alias_method :to_sender, :to_proc
16
- alias_method :sender, :to_sender
17
- alias_method :sndr, :to_sender
18
-
19
- end # refine ::Symbol
20
- end # NRSER
@@ -1,99 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Requirements
4
- # =======================================================================
5
-
6
- # Stdlib
7
- # -----------------------------------------------------------------------
8
-
9
- # Deps
10
- # -----------------------------------------------------------------------
11
-
12
- # Project / Package
13
- # -----------------------------------------------------------------------
14
-
15
-
16
- # Refinements
17
- # =======================================================================
18
-
19
-
20
- # Declarations
21
- # =======================================================================
22
-
23
-
24
- # Definitions
25
- # =======================================================================
26
-
27
- #
28
- class NRSER::RSpex::Described
29
-
30
- # Constants
31
- # ======================================================================
32
-
33
-
34
- # Class Methods
35
- # ======================================================================
36
-
37
-
38
- # Attributes
39
- # ======================================================================
40
-
41
-
42
- # Constructor
43
- # ======================================================================
44
-
45
- # Instantiate a new `NRSER::RSpex::Described`.
46
- def initialize **metadata
47
-
48
- end # #initialize
49
-
50
-
51
- # Instance Methods
52
- # ======================================================================
53
-
54
-
55
- end # class NRSER::RSpex::Described
56
-
57
-
58
-
59
-
60
- # @todo document NRSER::RSpex::Described::Class class.
61
- class NRSER::RSpex::Described::Class < NRSER::RSpex::Described
62
- def initialize class:
63
- end
64
-
65
-
66
- def location
67
- # Get a reasonable file and line for the class
68
- file, line = klass.
69
- # Get an array of all instance methods, excluding inherited ones
70
- # (the `false` arg)
71
- instance_methods( false ).
72
- # Add `#initialize` since it isn't in `#instance_methods` for some
73
- # reason
74
- <<( :initialize ).
75
- # Map those to their {UnboundMethod} objects
76
- map { |sym| klass.instance_method sym }.
77
- # Toss any `nil` values
78
- compact.
79
- # Get the source locations
80
- map( &:source_location ).
81
- # Get the first line in the shortest path
82
- min_by { |(path, line)| [path.length, line] }
83
-
84
- # Another approach I thought of... (untested)
85
- #
86
- # Get the path
87
- # # Get frequency of the paths
88
- # count_by { |(path, line)| path }.
89
- # # Get the one with the most occurrences
90
- # max_by { |path, count| count }.
91
- # # Get just the path (not the count)
92
- # first
93
- end
94
-
95
-
96
- def to_desc
97
-
98
- end
99
- end # class NRSER::RSpex::Described::Class
@@ -1,42 +0,0 @@
1
- # describe_spec_file(
2
- # spec_path: __FILE__,
3
- # description: %{
4
- # Attempting cohesive design for mapping enums and hashes, mostly to hashes
5
- # }
6
- # ) do
7
- #
8
- # def as_keys enum, &block
9
- # if block.nil?
10
- #
11
- # else
12
- # enum.each do |entry|
13
- # yield [entry, nil]
14
- # end
15
- # end
16
- # end
17
- #
18
- # describe "from Enumerable" do
19
- # describe "|entry| => { entry => MAP(entry) }" do
20
- # # Should "work" even if enum is hash-like
21
- # enum.as_keys.map_values { |key| key.attr }
22
- #
23
- # # Will work unless enum is hash-like
24
- # enum.map_values { |key| key.attr }
25
- # end
26
- #
27
- # describe "|entry, nil| => { entry => MAP(key, nil) }" do
28
- # enum.as_keys.map_values { |key, _| key.attr }
29
- # end
30
- # end
31
- #
32
- # describe "from Hash" do
33
- # describe "|key| => { key => MAP(key) }" do
34
- # enum.map_values { |key| key.attr }
35
- # end
36
- #
37
- # describe "|key, value| => { key => MAP(key, value) }" do
38
- # enum.map_values { |key, _| entry.attr }
39
- # end
40
- # end
41
- #
42
- # end # spec file
@@ -1,41 +0,0 @@
1
- using NRSER
2
-
3
- describe NRSER.method(:map_values) do
4
-
5
- it "handles hashes" do
6
- expect(
7
- NRSER.map_values({a: 1, b: 2}) { |k, v| v * 3 }
8
- ).to eq(
9
- {a: 3, b: 6}
10
- )
11
- end # handles hashes
12
-
13
-
14
- it "handles arrays" do
15
- expect(
16
- NRSER.map_values([:a, :b, :c]) { |k, v| "#{ k } is ok!" }
17
- ).to eq(
18
- {a: "a is ok!", b: "b is ok!", c: "c is ok!"}
19
- )
20
- end # handles arrays
21
-
22
-
23
- it "handles sets" do
24
- expect(
25
- NRSER.map_values(Set.new [:a, :b, :c]) { |k, v| "#{ k } is ok!" }
26
- ).to eq(
27
- {a: "a is ok!", b: "b is ok!", c: "c is ok!"}
28
- )
29
- end # handles sets
30
-
31
-
32
- it "handles OpenStruct instances" do
33
- expect(
34
- NRSER.map_values(OpenStruct.new a: 1, b: 2) { |k, v| v * 3 }
35
- ).to eq(
36
- {a: 3, b: 6}
37
- )
38
- end # handles OpenStruct instances
39
-
40
-
41
- end # NRSER.map_values
@@ -1,11 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe "NRSER.truncate" do
4
- it "truncates a string that's longer than length" do
5
- expect( NRSER.truncate "blah blah blah blah", 10 ).to eq "blah bl..."
6
- end
7
-
8
- it "leaves a string alone that's shorter or equal to lenght" do
9
- expect( NRSER.truncate "blah", 10 ).to eq "blah"
10
- end
11
- end # indent
@@ -1,10 +0,0 @@
1
- require 'spec_helper'
2
- require 'nrser/refinements'
3
-
4
- using NRSER
5
-
6
- describe "NRSER.truncate" do
7
- it "refines String" do
8
- expect( "blah blah blah blah".truncate 10 ).to eq "blah bl..."
9
- end
10
- end # indent