nrser 0.0.30 → 0.1.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.rb +56 -12
- data/lib/nrser/collection.rb +4 -7
- data/lib/nrser/ext.rb +5 -0
- data/lib/nrser/{refinements → ext}/enumerable.rb +11 -9
- data/lib/nrser/ext/pathname.rb +74 -0
- data/lib/nrser/{refinements → ext}/tree.rb +2 -26
- data/lib/nrser/functions.rb +18 -0
- data/lib/nrser/{array.rb → functions/array.rb} +2 -3
- data/lib/nrser/{binding.rb → functions/binding.rb} +0 -2
- data/lib/nrser/functions/enumerable.rb +355 -0
- data/lib/nrser/functions/enumerable/find_all_map.rb +33 -0
- data/lib/nrser/functions/enumerable/find_map.rb +53 -0
- data/lib/nrser/functions/exception.rb +17 -0
- data/lib/nrser/{hash.rb → functions/hash.rb} +0 -0
- data/lib/nrser/functions/hash/bury.rb +147 -0
- data/lib/nrser/{hash → functions/hash}/deep_merge.rb +5 -5
- data/lib/nrser/{hash → functions/hash}/except_keys.rb +2 -0
- data/lib/nrser/{hash → functions/hash}/guess_label_key_type.rb +3 -1
- data/lib/nrser/{hash → functions/hash}/slice_keys.rb +3 -1
- data/lib/nrser/{hash → functions/hash}/stringify_keys.rb +2 -0
- data/lib/nrser/{hash → functions/hash}/symbolize_keys.rb +3 -1
- data/lib/nrser/{hash → functions/hash}/transform_keys.rb +3 -1
- data/lib/nrser/functions/merge_by.rb +29 -0
- data/lib/nrser/{object.rb → functions/object.rb} +0 -0
- data/lib/nrser/{object → functions/object}/as_array.rb +2 -0
- data/lib/nrser/{object → functions/object}/as_hash.rb +7 -5
- data/lib/nrser/{object → functions/object}/truthy.rb +46 -7
- data/lib/nrser/{open_struct.rb → functions/open_struct.rb} +0 -0
- data/lib/nrser/functions/path.rb +150 -0
- data/lib/nrser/{proc.rb → functions/proc.rb} +1 -22
- data/lib/nrser/functions/string.rb +297 -0
- data/lib/nrser/functions/string/looks_like.rb +44 -0
- data/lib/nrser/{text.rb → functions/text.rb} +0 -0
- data/lib/nrser/{text → functions/text}/indentation.rb +2 -16
- data/lib/nrser/{text → functions/text}/lines.rb +1 -2
- data/lib/nrser/{text → functions/text}/word_wrap.rb +2 -4
- data/lib/nrser/{tree.rb → functions/tree.rb} +0 -0
- data/lib/nrser/{tree → functions/tree}/each_branch.rb +6 -7
- data/lib/nrser/functions/tree/leaves.rb +92 -0
- data/lib/nrser/{tree → functions/tree}/map_branches.rb +31 -32
- data/lib/nrser/functions/tree/map_leaves.rb +56 -0
- data/lib/nrser/{tree → functions/tree}/map_tree.rb +9 -20
- data/lib/nrser/{tree → functions/tree}/transform.rb +0 -10
- data/lib/nrser/logger.rb +9 -10
- data/lib/nrser/message.rb +3 -7
- data/lib/nrser/meta.rb +2 -0
- data/lib/nrser/meta/class_attrs.rb +3 -9
- data/lib/nrser/meta/props.rb +19 -19
- data/lib/nrser/meta/props/base.rb +4 -10
- data/lib/nrser/meta/props/prop.rb +12 -28
- data/lib/nrser/no_arg.rb +1 -3
- data/lib/nrser/refinements.rb +5 -0
- data/lib/nrser/refinements/array.rb +5 -17
- data/lib/nrser/refinements/enumerator.rb +1 -3
- data/lib/nrser/refinements/hash.rb +3 -15
- data/lib/nrser/refinements/object.rb +2 -2
- data/lib/nrser/refinements/open_struct.rb +0 -2
- data/lib/nrser/refinements/pathname.rb +3 -46
- data/lib/nrser/refinements/set.rb +2 -6
- data/lib/nrser/refinements/string.rb +2 -2
- data/lib/nrser/rspex.rb +16 -13
- data/lib/nrser/types.rb +6 -20
- data/lib/nrser/types/any.rb +0 -1
- data/lib/nrser/types/booleans.rb +1 -1
- data/lib/nrser/types/combinators.rb +5 -5
- data/lib/nrser/types/in.rb +0 -21
- data/lib/nrser/types/responds.rb +1 -0
- data/lib/nrser/types/trees.rb +1 -0
- data/lib/nrser/version.rb +2 -3
- data/spec/nrser/{template_spec.rb → functions/binding/template_spec.rb} +0 -0
- data/spec/nrser/functions/enumerable/find_all_map_spec.rb +28 -0
- data/spec/nrser/functions/enumerable/find_bounded_spec.rb +70 -0
- data/spec/nrser/functions/enumerable/find_map_spec.rb +38 -0
- data/spec/nrser/functions/enumerable/find_only_spec.rb +25 -0
- data/spec/nrser/functions/enumerable/to_h_by_spec.rb +28 -0
- data/spec/nrser/{format_exception_spec.rb → functions/exception/format_exception_spec.rb} +0 -0
- data/spec/nrser/{hash → functions/hash}/bury_spec.rb +0 -0
- data/spec/nrser/{hash → functions/hash}/guess_label_key_type_spec.rb +0 -0
- data/spec/nrser/{hash_spec.rb → functions/hash_spec.rb} +0 -7
- data/spec/nrser/{merge_by_spec.rb → functions/merge_by_spec.rb} +0 -0
- data/spec/nrser/{truthy_spec.rb → functions/object/truthy_spec.rb} +0 -0
- data/spec/nrser/{open_struct_spec.rb → functions/open_struct_spec.rb} +0 -0
- data/spec/nrser/{string → functions/string}/common_prefix_spec.rb +0 -0
- data/spec/nrser/{string → functions/string}/looks_like_spec.rb +0 -0
- data/spec/nrser/{truncate_spec.rb → functions/string/truncate_spec.rb} +0 -0
- data/spec/nrser/{text → functions/text}/dedent/gotchas_spec.rb +0 -0
- data/spec/nrser/{text → functions/text}/dedent_spec.rb +0 -0
- data/spec/nrser/{indent_spec.rb → functions/text/indent_spec.rb} +0 -0
- data/spec/nrser/{tree → functions/tree}/each_branch_spec.rb +0 -0
- data/spec/nrser/{tree → functions/tree}/leaves_spec.rb +0 -0
- data/spec/nrser/{tree → functions/tree}/map_branch_spec.rb +0 -0
- data/spec/nrser/{tree → functions/tree}/map_tree_spec.rb +0 -0
- data/spec/nrser/{tree → functions/tree}/transform_spec.rb +0 -0
- data/spec/nrser/{tree → functions/tree}/transformer_spec.rb +0 -0
- data/spec/nrser/meta/class_attrs_spec.rb +12 -14
- data/spec/spec_helper.rb +2 -3
- metadata +136 -110
- data/lib/nrser/enumerable.rb +0 -288
- data/lib/nrser/exception.rb +0 -7
- data/lib/nrser/hash/bury.rb +0 -154
- data/lib/nrser/merge_by.rb +0 -26
- data/lib/nrser/string.rb +0 -294
- data/lib/nrser/string/looks_like.rb +0 -51
- data/lib/nrser/tree/leaves.rb +0 -92
- data/lib/nrser/tree/map_leaves.rb +0 -63
- data/spec/nrser/enumerable_spec.rb +0 -111
@@ -1,20 +1,8 @@
|
|
1
|
-
# Requirements
|
2
|
-
# =======================================================================
|
3
|
-
|
4
|
-
# Project / Package
|
5
|
-
# -----------------------------------------------------------------------
|
6
|
-
require_relative './enumerable'
|
7
|
-
require_relative './tree'
|
8
|
-
|
9
|
-
|
10
|
-
# Definitions
|
11
|
-
# =======================================================================
|
12
|
-
|
13
1
|
module NRSER
|
14
2
|
|
15
3
|
refine ::Hash do
|
16
|
-
include NRSER::
|
17
|
-
include NRSER::
|
4
|
+
include NRSER::Ext::Enumerable
|
5
|
+
include NRSER::Ext::Tree
|
18
6
|
|
19
7
|
|
20
8
|
# See {NRSER.except_keys!}.
|
@@ -159,4 +147,4 @@ module NRSER
|
|
159
147
|
end
|
160
148
|
|
161
149
|
end # refine ::Hash
|
162
|
-
end # NRSER
|
150
|
+
end # NRSER
|
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
# Project / Package
|
11
11
|
# -----------------------------------------------------------------------
|
12
|
-
require 'nrser/object'
|
12
|
+
require 'nrser/functions/object'
|
13
13
|
|
14
14
|
|
15
15
|
# Definitions
|
@@ -53,4 +53,4 @@ module NRSER
|
|
53
53
|
NRSER.as_array self
|
54
54
|
end
|
55
55
|
end
|
56
|
-
end # NRSER
|
56
|
+
end # NRSER
|
@@ -1,48 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
refine Pathname do
|
5
|
-
# override to accept Pathname instances.
|
6
|
-
#
|
7
|
-
# @param [String] *prefixes
|
8
|
-
# the prefixes to see if the Pathname starts with.
|
9
|
-
#
|
10
|
-
# @return [Boolean]
|
11
|
-
# true if the Pathname starts with any of the prefixes.
|
12
|
-
#
|
13
|
-
def start_with? *prefixes
|
14
|
-
to_s.start_with? *prefixes.map(&:to_s)
|
15
|
-
end
|
16
|
-
|
17
|
-
# override sub to support Pathname instances as patterns.
|
18
|
-
#
|
19
|
-
# @param [String | Regexp | Pathname] pattern
|
20
|
-
# thing to replace.
|
21
|
-
#
|
22
|
-
# @param [String | Hash] replacement
|
23
|
-
# thing to replace it with.
|
24
|
-
#
|
25
|
-
# @return [Pathname]
|
26
|
-
# new Pathname.
|
27
|
-
#
|
28
|
-
def sub pattern, replacement
|
29
|
-
case pattern
|
30
|
-
when Pathname
|
31
|
-
super pattern.to_s, replacement
|
32
|
-
else
|
33
|
-
super pattern, replacement
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
|
38
|
-
# Just returns `self`. Implemented to match the {String#to_pn} API so it
|
39
|
-
# can be called on an argument that may be either one.
|
40
|
-
#
|
41
|
-
# @return [Pathname]
|
42
|
-
#
|
43
|
-
def to_pn
|
44
|
-
Pathname.new self
|
45
|
-
end
|
46
|
-
|
1
|
+
module NRSER
|
2
|
+
refine ::Pathname do
|
3
|
+
include NRSER::Ext::Pathname
|
47
4
|
end # Pathname
|
48
5
|
end # NRSER
|
data/lib/nrser/rspex.rb
CHANGED
@@ -22,8 +22,7 @@
|
|
22
22
|
|
23
23
|
# Project / Package
|
24
24
|
# -----------------------------------------------------------------------
|
25
|
-
|
26
|
-
require 'nrser/rspex/shared_examples'
|
25
|
+
require_relative './rspex/shared_examples'
|
27
26
|
|
28
27
|
|
29
28
|
# Helpers
|
@@ -40,7 +39,7 @@ require 'nrser/rspex/shared_examples'
|
|
40
39
|
def merge_expectations *expectations
|
41
40
|
Hash.new { |result, state|
|
42
41
|
result[state] = []
|
43
|
-
}.tap { |result|
|
42
|
+
}.tap { |result|
|
44
43
|
expectations.each { |ex|
|
45
44
|
ex.each { |state, clauses|
|
46
45
|
result[state] += clauses.to_a
|
@@ -98,7 +97,7 @@ end
|
|
98
97
|
|
99
98
|
module NRSER; end
|
100
99
|
|
101
|
-
module NRSER::RSpex
|
100
|
+
module NRSER::RSpex
|
102
101
|
|
103
102
|
# Constants
|
104
103
|
# =====================================================================
|
@@ -270,7 +269,7 @@ module NRSER::RSpex
|
|
270
269
|
describe description, **metadata, type: type do
|
271
270
|
subject( &subject_block ) if subject_block
|
272
271
|
module_exec &body
|
273
|
-
end # description,
|
272
|
+
end # description,
|
274
273
|
|
275
274
|
end # #describe_x_type
|
276
275
|
|
@@ -281,7 +280,7 @@ module NRSER::RSpex
|
|
281
280
|
# set a bunch of stuff up and build a helpful description.
|
282
281
|
#
|
283
282
|
# @todo
|
284
|
-
# This is totally just a one-off right now... would need to be
|
283
|
+
# This is totally just a one-off right now... would need to be
|
285
284
|
# generalized quite a bit...
|
286
285
|
#
|
287
286
|
# 1. Extraction of module, class, etc from metadata should be flexible
|
@@ -299,7 +298,7 @@ module NRSER::RSpex
|
|
299
298
|
#
|
300
299
|
# @return [nil]
|
301
300
|
#
|
302
|
-
def describe_spec_file description
|
301
|
+
def describe_spec_file description: nil,
|
303
302
|
spec_path:,
|
304
303
|
bind_subject: true,
|
305
304
|
**metadata,
|
@@ -312,7 +311,12 @@ module NRSER::RSpex
|
|
312
311
|
|
313
312
|
spec_rel_path = "./#{ Pathname.new( spec_path ).relative_path_from Pathname.getwd }"
|
314
313
|
|
315
|
-
desc =
|
314
|
+
desc = [
|
315
|
+
"#{ metadata[:module].name }.#{ metadata[:method] }",
|
316
|
+
"(#{ loc })",
|
317
|
+
description,
|
318
|
+
"Spec (#{ spec_rel_path})"
|
319
|
+
].compact.join " "
|
316
320
|
|
317
321
|
describe desc, **metadata do
|
318
322
|
if bind_subject
|
@@ -375,7 +379,7 @@ module NRSER::RSpex
|
|
375
379
|
# Aliases to other names I was using at first... not preferring their use
|
376
380
|
# at the moment.
|
377
381
|
#
|
378
|
-
# The `when_` one sucks because Atom de-dents the line, and `describe_`
|
382
|
+
# The `when_` one sucks because Atom de-dents the line, and `describe_`
|
379
383
|
# is just clearer what the block is doing for people reading it.
|
380
384
|
alias_method :called_with, :describe_called_with
|
381
385
|
alias_method :when_called_with, :describe_called_with
|
@@ -400,7 +404,7 @@ module NRSER::RSpex
|
|
400
404
|
# Object that will receive the message to create the new subject.
|
401
405
|
#
|
402
406
|
# @param [Boolean] publicly:
|
403
|
-
# Send message publicly via {Object#public_send} (default) or privately
|
407
|
+
# Send message publicly via {Object#public_send} (default) or privately
|
404
408
|
# via {Object.send}.
|
405
409
|
#
|
406
410
|
# @return
|
@@ -422,7 +426,7 @@ module NRSER::RSpex
|
|
422
426
|
# Aliases to other names I was using at first... not preferring their use
|
423
427
|
# at the moment.
|
424
428
|
#
|
425
|
-
# The `when_` one sucks because Atom de-dents the line, and `describe_`
|
429
|
+
# The `when_` one sucks because Atom de-dents the line, and `describe_`
|
426
430
|
# is just clearer what the block is doing for people reading it.
|
427
431
|
alias_method :sent_to, :describe_sent_to
|
428
432
|
alias_method :when_sent_to, :describe_sent_to
|
@@ -442,7 +446,7 @@ module NRSER::RSpex
|
|
442
446
|
#
|
443
447
|
# 1. Expects a string title.
|
444
448
|
#
|
445
|
-
# 2. Prepends a little section squiggle `§` to the title so sections are
|
449
|
+
# 2. Prepends a little section squiggle `§` to the title so sections are
|
446
450
|
# easier to pick out visually.
|
447
451
|
#
|
448
452
|
# 3. Adds `type: :section` metadata.
|
@@ -629,4 +633,3 @@ end
|
|
629
633
|
|
630
634
|
# Make available at the top-level
|
631
635
|
include NRSER::RSpex::ExampleGroup
|
632
|
-
|
data/lib/nrser/types.rb
CHANGED
@@ -1,23 +1,7 @@
|
|
1
|
-
# Requirements
|
2
|
-
# =======================================================================
|
3
|
-
|
4
|
-
# Stdlib
|
5
|
-
# ---------------------------------------------------------------------
|
6
|
-
|
7
|
-
# TODO Not sure if this needs to be here... can't find any usage of it in
|
8
|
-
# quick searches, but I don't want to remove it now.
|
9
|
-
require 'pp'
|
10
|
-
|
11
|
-
# Deps
|
12
|
-
# ---------------------------------------------------------------------
|
13
|
-
|
14
|
-
# Package
|
15
|
-
# ---------------------------------------------------------------------
|
16
|
-
|
17
1
|
# Abstract infrastructure for type creation - stuff that doesn't define any
|
18
2
|
# concrete type instances.
|
19
3
|
#
|
20
|
-
# Files that define concrete type instances on load (usually as module
|
4
|
+
# Files that define concrete type instances on load (usually as module
|
21
5
|
# constants, which I'm still questioning a bit as a design because of the
|
22
6
|
# uncontrollable mutability of Ruby and the importance of type checks)
|
23
7
|
# need to be required in the "Post-Processing" section at the bottom.
|
@@ -30,14 +14,12 @@ require_relative './types/where'
|
|
30
14
|
require_relative './types/combinators'
|
31
15
|
require_relative './types/maybe'
|
32
16
|
require_relative './types/attrs'
|
33
|
-
require_relative './types/responds'
|
34
17
|
require_relative './types/in'
|
35
18
|
|
36
19
|
|
37
20
|
# Refinements
|
38
21
|
# =======================================================================
|
39
22
|
|
40
|
-
require 'nrser/refinements'
|
41
23
|
using NRSER
|
42
24
|
|
43
25
|
|
@@ -143,7 +125,7 @@ module NRSER::Types
|
|
143
125
|
end # .match
|
144
126
|
|
145
127
|
|
146
|
-
# make a type instance from a object representation that can come from
|
128
|
+
# make a type instance from a object representation that can come from
|
147
129
|
# a YAML or JSON declaration.
|
148
130
|
def self.from_repr repr
|
149
131
|
match repr, {
|
@@ -168,6 +150,10 @@ end # NRSER::Types
|
|
168
150
|
|
169
151
|
require_relative './types/any'
|
170
152
|
require_relative './types/booleans'
|
153
|
+
|
154
|
+
# Requires `booleans`
|
155
|
+
require_relative './types/responds'
|
156
|
+
|
171
157
|
require_relative './types/numbers'
|
172
158
|
require_relative './types/strings'
|
173
159
|
require_relative './types/symbols'
|
data/lib/nrser/types/any.rb
CHANGED
data/lib/nrser/types/booleans.rb
CHANGED
@@ -16,8 +16,8 @@ module NRSER::Types
|
|
16
16
|
|
17
17
|
|
18
18
|
def default_name
|
19
|
-
"#{ self.class.short_name }<" +
|
20
|
-
@types.map {|type| type.name }.join(',') +
|
19
|
+
"#{ self.class.short_name }<" +
|
20
|
+
@types.map {|type| type.name }.join(',') +
|
21
21
|
">"
|
22
22
|
end
|
23
23
|
|
@@ -100,7 +100,7 @@ module NRSER::Types
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
-
class Union < Combinator
|
103
|
+
class Union < Combinator
|
104
104
|
def test value
|
105
105
|
@types.any? {|type| type.test value}
|
106
106
|
end
|
@@ -113,7 +113,7 @@ module NRSER::Types
|
|
113
113
|
|
114
114
|
singleton_class.send :alias_method, :one_of, :union
|
115
115
|
|
116
|
-
class Intersection < Combinator
|
116
|
+
class Intersection < Combinator
|
117
117
|
def test value
|
118
118
|
@types.all? {|type| type.test value}
|
119
119
|
end
|
@@ -130,4 +130,4 @@ module NRSER::Types
|
|
130
130
|
|
131
131
|
singleton_class.send :alias_method, :all_of, :intersection
|
132
132
|
|
133
|
-
end # NRSER::Types
|
133
|
+
end # NRSER::Types
|
data/lib/nrser/types/in.rb
CHANGED
@@ -1,30 +1,9 @@
|
|
1
|
-
# Requirements
|
2
|
-
# =======================================================================
|
3
|
-
|
4
|
-
# Stdlib
|
5
|
-
# -----------------------------------------------------------------------
|
6
|
-
|
7
|
-
# Deps
|
8
|
-
# -----------------------------------------------------------------------
|
9
|
-
|
10
|
-
# Project / Package
|
11
|
-
# -----------------------------------------------------------------------
|
12
|
-
require_relative './where'
|
13
|
-
|
14
|
-
|
15
1
|
# Refinements
|
16
2
|
# =======================================================================
|
17
3
|
|
18
|
-
require 'nrser/refinements'
|
19
4
|
using NRSER
|
20
5
|
|
21
6
|
|
22
|
-
# Declarations
|
23
|
-
# =======================================================================
|
24
|
-
|
25
|
-
module NRSER; end
|
26
|
-
|
27
|
-
|
28
7
|
# Definitions
|
29
8
|
# =======================================================================
|
30
9
|
|
data/lib/nrser/types/responds.rb
CHANGED
data/lib/nrser/types/trees.rb
CHANGED
data/lib/nrser/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
module NRSER
|
2
|
-
VERSION = "0.0
|
2
|
+
VERSION = "0.1.0"
|
3
3
|
|
4
4
|
module Version
|
5
5
|
|
@@ -11,7 +11,7 @@ module NRSER
|
|
11
11
|
end # .gem_version
|
12
12
|
|
13
13
|
|
14
|
-
# The `Gem::Version` "release" for {NRSER::VERSION} - everything before
|
14
|
+
# The `Gem::Version` "release" for {NRSER::VERSION} - everything before
|
15
15
|
# any `-<alpha-numeric>` prerelease part (like `-dev`).
|
16
16
|
#
|
17
17
|
# @see https://ruby-doc.org/stdlib-2.4.1/libdoc/rubygems/rdoc/Gem/Version.html#method-i-release
|
@@ -47,6 +47,5 @@ module NRSER
|
|
47
47
|
)
|
48
48
|
end # .doc_url
|
49
49
|
|
50
|
-
|
51
50
|
end
|
52
51
|
end
|
File without changes
|
@@ -0,0 +1,28 @@
|
|
1
|
+
describe_spec_file(
|
2
|
+
spec_path: __FILE__,
|
3
|
+
module: NRSER,
|
4
|
+
method: :find_all_map,
|
5
|
+
) do
|
6
|
+
|
7
|
+
describe "when results are found" do
|
8
|
+
it "should return the block results" do
|
9
|
+
expect(
|
10
|
+
subject.call( [1, 2, 3, 4] ) do |i|
|
11
|
+
if i.even?
|
12
|
+
"#{ i } is even!"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
).to eq ["2 is even!", "4 is even!"]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
describe "when block returns `false`" do
|
21
|
+
it "response should be empty" do
|
22
|
+
expect(
|
23
|
+
subject.call( [1, 2, 3] ) { |i| false }
|
24
|
+
).to eq []
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|