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.
- 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
@@ -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,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
|
data/spec/design/mapping_spec.rb
DELETED
@@ -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
|