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