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,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