stupidedi 1.2.5 → 1.2.6
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/README.md +3 -10
- data/lib/ruby/array.rb +223 -185
- data/lib/ruby/blank.rb +50 -66
- data/lib/ruby/hash.rb +14 -3
- data/lib/ruby/instance_exec.rb +20 -17
- data/lib/ruby/module.rb +53 -43
- data/lib/ruby/object.rb +61 -56
- data/lib/ruby/string.rb +70 -65
- data/lib/ruby/symbol.rb +22 -19
- data/lib/ruby/to_d.rb +71 -70
- data/lib/ruby/to_date.rb +18 -24
- data/lib/ruby/to_time.rb +16 -18
- data/lib/ruby/try.rb +40 -38
- data/lib/stupidedi.rb +3 -6
- data/lib/stupidedi/builder/builder_dsl.rb +2 -1
- data/lib/stupidedi/builder/constraint_table.rb +2 -0
- data/lib/stupidedi/builder/generation.rb +2 -0
- data/lib/stupidedi/builder/identifier_stack.rb +2 -0
- data/lib/stupidedi/builder/instruction.rb +2 -0
- data/lib/stupidedi/builder/instruction_table.rb +2 -0
- data/lib/stupidedi/builder/navigation.rb +2 -0
- data/lib/stupidedi/builder/state_machine.rb +2 -0
- data/lib/stupidedi/builder/states/abstract_state.rb +2 -0
- data/lib/stupidedi/builder/states/failure_state.rb +2 -0
- data/lib/stupidedi/builder/states/functional_group_state.rb +2 -0
- data/lib/stupidedi/builder/states/initial_state.rb +2 -0
- data/lib/stupidedi/builder/states/interchange_state.rb +2 -0
- data/lib/stupidedi/builder/states/loop_state.rb +2 -0
- data/lib/stupidedi/builder/states/table_state.rb +2 -0
- data/lib/stupidedi/builder/states/transaction_set_state.rb +2 -0
- data/lib/stupidedi/builder/states/transmission_state.rb +2 -0
- data/lib/stupidedi/builder/tokenization.rb +2 -0
- data/lib/stupidedi/color.rb +2 -0
- data/lib/stupidedi/config.rb +4 -1
- data/lib/stupidedi/config/code_list_config.rb +5 -1
- data/lib/stupidedi/config/editor_config.rb +5 -1
- data/lib/stupidedi/config/functional_group_config.rb +5 -2
- data/lib/stupidedi/config/interchange_config.rb +9 -5
- data/lib/stupidedi/config/transaction_set_config.rb +5 -1
- data/lib/stupidedi/contrib/003010/guides/PS830.rb +4 -4
- data/lib/stupidedi/contrib/004010/guides/SH856.rb +2 -2
- data/lib/stupidedi/editor.rb +0 -1
- data/lib/stupidedi/editor/00401.rb +2 -0
- data/lib/stupidedi/editor/004010.rb +2 -0
- data/lib/stupidedi/editor/004010/N4.rb +2 -0
- data/lib/stupidedi/editor/00501.rb +2 -0
- data/lib/stupidedi/editor/005010.rb +2 -0
- data/lib/stupidedi/editor/005010/N4.rb +2 -0
- data/lib/stupidedi/editor/X12.rb +2 -0
- data/lib/stupidedi/editor/X222-HC837.rb +2 -0
- data/lib/stupidedi/editor/abstract_ed.rb +2 -0
- data/lib/stupidedi/editor/claim_ack.rb +2 -0
- data/lib/stupidedi/editor/implementation_ack.rb +2 -0
- data/lib/stupidedi/editor/interchange_ack.rb +2 -0
- data/lib/stupidedi/editor/result.rb +2 -0
- data/lib/stupidedi/editor/result_set.rb +2 -0
- data/lib/stupidedi/editor/transaction_set_ed.rb +2 -0
- data/lib/stupidedi/editor/transmission_ed.rb +2 -0
- data/lib/stupidedi/either.rb +2 -0
- data/lib/stupidedi/guides/004010.rb +2 -0
- data/lib/stupidedi/guides/004010/X091A1-HP835.rb +2 -0
- data/lib/stupidedi/guides/004010/element_reqs.rb +2 -0
- data/lib/stupidedi/guides/004010/guide_builder.rb +2 -0
- data/lib/stupidedi/guides/004010/segment_reqs.rb +2 -0
- data/lib/stupidedi/guides/005010.rb +2 -0
- data/lib/stupidedi/guides/005010/X214-HN277.rb +2 -0
- data/lib/stupidedi/guides/005010/X221-HP835.rb +2 -0
- data/lib/stupidedi/guides/005010/X221A1-HP835.rb +2 -0
- data/lib/stupidedi/guides/005010/X222-HC837P.rb +2 -0
- data/lib/stupidedi/guides/005010/X222A1-HC837P.rb +2 -0
- data/lib/stupidedi/guides/005010/X231-FA999.rb +2 -0
- data/lib/stupidedi/guides/005010/X231A1-FA999.rb +2 -0
- data/lib/stupidedi/guides/005010/element_reqs.rb +2 -0
- data/lib/stupidedi/guides/005010/guide_builder.rb +2 -0
- data/lib/stupidedi/guides/005010/segment_reqs.rb +2 -0
- data/lib/stupidedi/inspect.rb +1 -0
- data/lib/stupidedi/reader.rb +2 -1
- data/lib/stupidedi/reader/input.rb +2 -0
- data/lib/stupidedi/reader/input/abstract_input.rb +2 -1
- data/lib/stupidedi/reader/input/delegated_input.rb +2 -1
- data/lib/stupidedi/reader/input/file_input.rb +2 -0
- data/lib/stupidedi/reader/position.rb +2 -0
- data/lib/stupidedi/reader/result.rb +2 -0
- data/lib/stupidedi/reader/segment_dict.rb +2 -0
- data/lib/stupidedi/reader/separators.rb +2 -0
- data/lib/stupidedi/reader/stream_reader.rb +2 -0
- data/lib/stupidedi/reader/token_reader.rb +2 -0
- data/lib/stupidedi/reader/tokens/component_element_tok.rb +2 -0
- data/lib/stupidedi/reader/tokens/composite_element_tok.rb +2 -0
- data/lib/stupidedi/reader/tokens/repeated_element_tok.rb +2 -1
- data/lib/stupidedi/reader/tokens/segment_tok.rb +2 -0
- data/lib/stupidedi/reader/tokens/simple_element_tok.rb +2 -0
- data/lib/stupidedi/schema/abstract_def.rb +2 -0
- data/lib/stupidedi/schema/abstract_use.rb +2 -0
- data/lib/stupidedi/schema/code_list.rb +3 -2
- data/lib/stupidedi/schema/element_def.rb +2 -0
- data/lib/stupidedi/schema/element_req.rb +2 -0
- data/lib/stupidedi/schema/element_use.rb +3 -2
- data/lib/stupidedi/schema/functional_group_def.rb +2 -0
- data/lib/stupidedi/schema/interchange_def.rb +2 -0
- data/lib/stupidedi/schema/loop_def.rb +3 -2
- data/lib/stupidedi/schema/repeat_count.rb +3 -2
- data/lib/stupidedi/schema/segment_def.rb +2 -0
- data/lib/stupidedi/schema/segment_req.rb +2 -0
- data/lib/stupidedi/schema/segment_use.rb +4 -3
- data/lib/stupidedi/schema/syntax_note.rb +2 -0
- data/lib/stupidedi/schema/table_def.rb +2 -0
- data/lib/stupidedi/schema/transaction_set_def.rb +2 -0
- data/lib/stupidedi/sets.rb +1 -0
- data/lib/stupidedi/tail_call.rb +1 -0
- data/lib/stupidedi/thread_local.rb +1 -0
- data/lib/stupidedi/values/abstract_element_val.rb +2 -0
- data/lib/stupidedi/values/abstract_val.rb +2 -0
- data/lib/stupidedi/values/composite_element_val.rb +4 -3
- data/lib/stupidedi/values/functional_group_val.rb +3 -2
- data/lib/stupidedi/values/interchange_val.rb +2 -1
- data/lib/stupidedi/values/invalid_envelope_val.rb +3 -2
- data/lib/stupidedi/values/invalid_segment_val.rb +2 -1
- data/lib/stupidedi/values/loop_val.rb +3 -2
- data/lib/stupidedi/values/repeated_element_val.rb +3 -2
- data/lib/stupidedi/values/segment_val.rb +3 -2
- data/lib/stupidedi/values/segment_val_group.rb +2 -0
- data/lib/stupidedi/values/simple_element_val.rb +3 -2
- data/lib/stupidedi/values/table_val.rb +3 -2
- data/lib/stupidedi/values/transaction_set_val.rb +3 -2
- data/lib/stupidedi/values/transmission_val.rb +2 -0
- data/lib/stupidedi/version.rb +1 -1
- data/lib/stupidedi/versions/functional_groups.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/002001.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/002001/element_defs.rb +2 -1
- data/lib/stupidedi/versions/functional_groups/002001/element_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/002001/element_types.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/002001/element_types/date_val.rb +3 -7
- data/lib/stupidedi/versions/functional_groups/002001/element_types/fixnum_val.rb +5 -12
- data/lib/stupidedi/versions/functional_groups/002001/element_types/float_val.rb +6 -15
- data/lib/stupidedi/versions/functional_groups/002001/element_types/identifier_val.rb +5 -17
- data/lib/stupidedi/versions/functional_groups/002001/element_types/operators.rb +34 -18
- data/lib/stupidedi/versions/functional_groups/002001/element_types/string_val.rb +7 -17
- data/lib/stupidedi/versions/functional_groups/002001/element_types/time_val.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/002001/functional_group_def.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/002001/segment_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/002001/segment_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/002001/syntax_notes.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/002001/transaction_set_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003010.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003010/element_defs.rb +2 -1
- data/lib/stupidedi/versions/functional_groups/003010/element_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003010/element_types.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003010/element_types/date_val.rb +3 -7
- data/lib/stupidedi/versions/functional_groups/003010/element_types/fixnum_val.rb +4 -10
- data/lib/stupidedi/versions/functional_groups/003010/element_types/float_val.rb +6 -14
- data/lib/stupidedi/versions/functional_groups/003010/element_types/identifier_val.rb +5 -17
- data/lib/stupidedi/versions/functional_groups/003010/element_types/operators.rb +34 -18
- data/lib/stupidedi/versions/functional_groups/003010/element_types/string_val.rb +7 -17
- data/lib/stupidedi/versions/functional_groups/003010/element_types/time_val.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003010/functional_group_def.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003010/segment_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003010/segment_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003010/syntax_notes.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003010/transaction_set_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003040.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003040/element_defs.rb +2 -1
- data/lib/stupidedi/versions/functional_groups/003040/element_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003040/element_types.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003040/element_types/date_val.rb +3 -7
- data/lib/stupidedi/versions/functional_groups/003040/element_types/fixnum_val.rb +5 -11
- data/lib/stupidedi/versions/functional_groups/003040/element_types/float_val.rb +6 -14
- data/lib/stupidedi/versions/functional_groups/003040/element_types/identifier_val.rb +5 -17
- data/lib/stupidedi/versions/functional_groups/003040/element_types/operators.rb +34 -18
- data/lib/stupidedi/versions/functional_groups/003040/element_types/string_val.rb +7 -17
- data/lib/stupidedi/versions/functional_groups/003040/element_types/time_val.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003040/functional_group_def.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003040/segment_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003040/segment_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003040/syntax_notes.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003040/transaction_set_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003050.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003050/element_defs.rb +2 -1
- data/lib/stupidedi/versions/functional_groups/003050/element_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003050/element_types.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003050/element_types/date_val.rb +3 -7
- data/lib/stupidedi/versions/functional_groups/003050/element_types/fixnum_val.rb +5 -11
- data/lib/stupidedi/versions/functional_groups/003050/element_types/float_val.rb +6 -14
- data/lib/stupidedi/versions/functional_groups/003050/element_types/identifier_val.rb +5 -17
- data/lib/stupidedi/versions/functional_groups/003050/element_types/operators.rb +34 -18
- data/lib/stupidedi/versions/functional_groups/003050/element_types/string_val.rb +7 -17
- data/lib/stupidedi/versions/functional_groups/003050/element_types/time_val.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003050/functional_group_def.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003050/segment_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003050/segment_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003050/syntax_notes.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/003050/transaction_set_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/004010.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_defs.rb +2 -1
- data/lib/stupidedi/versions/functional_groups/004010/element_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_types.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/004010/element_types/date_val.rb +3 -7
- data/lib/stupidedi/versions/functional_groups/004010/element_types/fixnum_val.rb +5 -11
- data/lib/stupidedi/versions/functional_groups/004010/element_types/float_val.rb +6 -14
- data/lib/stupidedi/versions/functional_groups/004010/element_types/identifier_val.rb +5 -17
- data/lib/stupidedi/versions/functional_groups/004010/element_types/operators.rb +34 -18
- data/lib/stupidedi/versions/functional_groups/004010/element_types/string_val.rb +7 -17
- data/lib/stupidedi/versions/functional_groups/004010/element_types/time_val.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/004010/functional_group_def.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/004010/segment_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/004010/segment_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/004010/syntax_notes.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/004010/transaction_set_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/004010/transaction_set_defs/HP835.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_types.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/element_types/date_val.rb +3 -7
- data/lib/stupidedi/versions/functional_groups/005010/element_types/fixnum_val.rb +4 -12
- data/lib/stupidedi/versions/functional_groups/005010/element_types/float_val.rb +6 -14
- data/lib/stupidedi/versions/functional_groups/005010/element_types/identifier_val.rb +5 -17
- data/lib/stupidedi/versions/functional_groups/005010/element_types/operators.rb +34 -18
- data/lib/stupidedi/versions/functional_groups/005010/element_types/string_val.rb +7 -17
- data/lib/stupidedi/versions/functional_groups/005010/element_types/time_val.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/functional_group_def.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/segment_reqs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/syntax_notes.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/FA999.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HB271.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HC837.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HI278.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HN277.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HP835.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HR276.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/HS270.rb +2 -0
- data/lib/stupidedi/versions/functional_groups/005010/transaction_set_defs/RA820.rb +2 -0
- data/lib/stupidedi/versions/interchanges.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00200.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00200/element_defs.rb +2 -1
- data/lib/stupidedi/versions/interchanges/00200/interchange_def.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00200/segment_defs.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00300.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00300/element_defs.rb +2 -1
- data/lib/stupidedi/versions/interchanges/00300/interchange_def.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00300/segment_defs.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00400.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00400/element_defs.rb +2 -1
- data/lib/stupidedi/versions/interchanges/00400/interchange_def.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00400/segment_defs.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00401.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00401/element_defs.rb +2 -1
- data/lib/stupidedi/versions/interchanges/00401/interchange_def.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00401/segment_defs.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00501.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00501/element_defs.rb +2 -1
- data/lib/stupidedi/versions/interchanges/00501/interchange_def.rb +2 -0
- data/lib/stupidedi/versions/interchanges/00501/segment_defs.rb +2 -0
- data/lib/stupidedi/writer/claredi.rb +2 -0
- data/lib/stupidedi/writer/default.rb +2 -0
- data/lib/stupidedi/zipper.rb +2 -0
- data/lib/stupidedi/zipper/abstract_cursor.rb +2 -0
- data/lib/stupidedi/zipper/dangling_cursor.rb +2 -0
- data/lib/stupidedi/zipper/edited_cursor.rb +2 -0
- data/lib/stupidedi/zipper/memoized_cursor.rb +2 -0
- data/lib/stupidedi/zipper/path.rb +2 -0
- data/lib/stupidedi/zipper/root_cursor.rb +2 -0
- data/spec/examples/integration/parsing.example +1 -0
- data/spec/examples/ruby/array.example +3 -2
- data/spec/examples/ruby/blank.example +15 -14
- data/spec/examples/ruby/count.example +1 -0
- data/spec/examples/ruby/object.example +2 -2
- data/spec/examples/ruby/string.example +1 -0
- data/spec/examples/ruby/symbol.example +2 -21
- data/spec/examples/ruby/to_d.example +1 -0
- data/spec/examples/ruby/try.example +1 -0
- data/spec/examples/stupidedi/reader/input/delegated_input.example +1 -0
- data/spec/examples/stupidedi/reader/token_reader.example +2 -1
- data/spec/examples/stupidedi/versions/005010/element_types/an.example +1 -0
- data/spec/examples/stupidedi/versions/005010/element_types/nn.example +1 -0
- data/spec/examples/stupidedi/versions/005010/element_types/r.example +1 -0
- data/spec/spec_helper.rb +3 -4
- data/spec/support/matchers/navigation_matchers.rb +1 -0
- data/spec/support/quickcheck.rb +2 -1
- data/spec/support/quickcheck/serialized_edi.rb +1 -0
- data/spec/support/rcov.rb +3 -3
- metadata +3 -4
- data/lib/ruby/enumerable.rb +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92ea0385370f3e4b2c78354360628986b05d388a
|
4
|
+
data.tar.gz: f4e0c0afd30345c303c7baf272a1e8bc92406c1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 333c3e34198b7de9ab66b24beea12aeb559d88f62b64f56d3b004af2db2c5a361d3f2369e31da6a00b9e547a0444d55f96c7bc49eb5e93444d964149c0c3d57b
|
7
|
+
data.tar.gz: 8af0836876ae602978852e3d14d9774d36be5e7ef2b23bcce1ca1a4832d859a302749b163bb4c319cd6a6706cd06cbe9fbd30ac7c8c8782fb5a18be14aa903b9
|
data/README.md
CHANGED
@@ -18,17 +18,10 @@ notices, and health care claims. It is similar to XML in some ways,
|
|
18
18
|
but precedes it by about 15 years; so if you think XML sucks, you
|
19
19
|
will love to hate EDI.
|
20
20
|
|
21
|
-
###
|
21
|
+
### Credits
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
reported problems caused by these patches, since they are unintentionally
|
26
|
-
incompatible.
|
27
|
-
|
28
|
-
There is a pull request ([72](https://github.com/kputnam/stupidedi/pull/72))
|
29
|
-
which should solve these. Please test the `refinements` branch and provide
|
30
|
-
feedback -- it imposes a requirement of Ruby 2.1+, but should otherwise be
|
31
|
-
a seemless change.
|
23
|
+
* __Author__: [Kyle Putnam](https://github.com/kputnam)
|
24
|
+
* __Maintainer__: [Isi Robayna](https://github.com/irobayna)
|
32
25
|
|
33
26
|
## What problem does it solve?
|
34
27
|
|
data/lib/ruby/array.rb
CHANGED
@@ -1,189 +1,227 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
1
|
+
module Stupidedi
|
2
|
+
module Refinements
|
3
|
+
|
4
|
+
refine Array do
|
5
|
+
def blank?
|
6
|
+
empty?
|
7
|
+
end
|
8
|
+
|
9
|
+
def present?
|
10
|
+
not empty?
|
11
|
+
end
|
12
|
+
|
13
|
+
# Return the first item. Raises an `IndexError` if the Array is `empty?`.
|
14
|
+
#
|
15
|
+
# @example
|
16
|
+
# [1, 2, 3].head #=> 1
|
17
|
+
#
|
18
|
+
def head
|
19
|
+
raise IndexError, "head of empty list" if empty?
|
20
|
+
x, = self
|
21
|
+
x
|
22
|
+
end
|
23
|
+
|
24
|
+
# True if `#at` is defined for the given `n`
|
25
|
+
#
|
26
|
+
# @example
|
27
|
+
# [1, 2, 3].defined_at?(0) #=> true
|
28
|
+
# [].defined_at?(0) #=> false
|
29
|
+
#
|
30
|
+
def defined_at?(n)
|
31
|
+
n < length and -n <= length
|
32
|
+
end
|
33
|
+
|
34
|
+
# @group Selection
|
35
|
+
#############################################################################
|
36
|
+
|
37
|
+
# Selects all elements except the first.
|
38
|
+
#
|
39
|
+
# @example
|
40
|
+
# [1, 2, 3].tail #=> [2, 3]
|
41
|
+
# [1].tail #=> []
|
42
|
+
# [].tail #=> []
|
43
|
+
#
|
44
|
+
# @return [Array]
|
45
|
+
def tail
|
46
|
+
_, *xs = self
|
47
|
+
xs
|
48
|
+
end
|
49
|
+
|
50
|
+
# Selects all elements except the last `n` ones.
|
51
|
+
#
|
52
|
+
# @example
|
53
|
+
# [1, 2, 3].init #=> [1, 2]
|
54
|
+
# [1, 2, 3].init(2) #=> [1]
|
55
|
+
# [].tail #=> []
|
56
|
+
#
|
57
|
+
# @return [Array]
|
58
|
+
def init(n = 1)
|
59
|
+
raise ArgumentError, "n cannot be negative" if n < 0
|
60
|
+
slice(0..-(n + 1)) or []
|
61
|
+
end
|
62
|
+
|
63
|
+
# Select all elements except the first `n` ones.
|
64
|
+
#
|
65
|
+
# @example
|
66
|
+
# [1, 2, 3].drop(1) #=> [2, 3]
|
67
|
+
# [1, 3, 3].drop(2) #=> [3]
|
68
|
+
# [].drop(10) #=> []
|
69
|
+
#
|
70
|
+
# @return [Array]
|
71
|
+
def drop(n)
|
72
|
+
raise ArgumentError, "n cannot be negative" if n < 0
|
73
|
+
slice(n..-1) or []
|
74
|
+
end
|
75
|
+
|
76
|
+
# Select the first `n` elements.
|
77
|
+
#
|
78
|
+
# @example
|
79
|
+
# [1, 2, 3].take(2) #=> [1, 2]
|
80
|
+
# [1, 2, 3].take(0) #=> []
|
81
|
+
#
|
82
|
+
# @return [Array]
|
83
|
+
def take(n)
|
84
|
+
raise ArgumentError, "n cannot be negative" if n < 0
|
85
|
+
slice(0, n) or []
|
86
|
+
end
|
87
|
+
|
88
|
+
# Split the array in two at the given position.
|
89
|
+
#
|
90
|
+
# @example
|
91
|
+
# [1, 2, 3].split_at(2) #=> [[1,2], [3]]
|
92
|
+
# [1, 2, 3].split_at(0) #=> [[], [1,2,3]]
|
93
|
+
#
|
94
|
+
# @return [(Array, Array)]
|
95
|
+
def split_at(n)
|
96
|
+
n = length + n if n < 0
|
97
|
+
return take(n), drop(n)
|
98
|
+
end
|
99
|
+
|
100
|
+
# @endgroup
|
101
|
+
#############################################################################
|
102
|
+
|
103
|
+
# @group Filtering
|
104
|
+
#############################################################################
|
105
|
+
|
106
|
+
# Drops the longest prefix of elements that satisfy the predicate.
|
107
|
+
#
|
108
|
+
# @return [Array]
|
109
|
+
def drop_while(&block)
|
110
|
+
# This is in tail call form
|
111
|
+
if not empty? and yield(head)
|
112
|
+
tail.drop_while(&block)
|
113
|
+
else
|
114
|
+
self
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# Drops the longest prefix of elements that do not satisfy the predicate.
|
119
|
+
#
|
120
|
+
# @return [Array]
|
121
|
+
def drop_until(&block)
|
122
|
+
# This is in tail call form
|
123
|
+
unless empty? or yield(head)
|
124
|
+
tail.drop_until(&block)
|
125
|
+
else
|
126
|
+
self
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
# Takes the longest prefix of elements that satisfy the predicate.
|
131
|
+
#
|
132
|
+
# @return [Array]
|
133
|
+
def take_while(accumulator = [], &block)
|
134
|
+
# This is in tail call form
|
135
|
+
if not empty? and yield(head)
|
136
|
+
tail.take_while(head.snoc(accumulator), &block)
|
137
|
+
else
|
138
|
+
accumulator
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
# Takes the longest prefix of elements that do not satisfy the predicate.
|
143
|
+
#
|
144
|
+
# @return [Array]
|
145
|
+
def take_until(accumulator = [], &block)
|
146
|
+
# This is in tail call form
|
147
|
+
unless empty? or yield(head)
|
148
|
+
tail.take_until(head.snoc(accumulator), &block)
|
149
|
+
else
|
150
|
+
accumulator
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
# Splits the array into prefix/suffix pair according to the predicate.
|
155
|
+
#
|
156
|
+
# @return [(Array, Array)]
|
157
|
+
def split_until(&block)
|
158
|
+
prefix = take_while(&block)
|
159
|
+
suffix = drop(prefix.length)
|
160
|
+
return prefix, suffix
|
161
|
+
end
|
162
|
+
|
163
|
+
# Splits the array into prefix/suffix pair according to the predicate.
|
164
|
+
#
|
165
|
+
# @return [(Array, Array)]
|
166
|
+
def split_when(&block)
|
167
|
+
prefix = take_until(&block)
|
168
|
+
suffix = drop(prefix.length)
|
169
|
+
return prefix, suffix
|
170
|
+
end
|
171
|
+
|
172
|
+
# Returns a list of sublists, where each sublist contains only equal
|
173
|
+
# elements. Equality is determined by a two-argument block parameter.
|
174
|
+
# The concatenation of the result is equal to the original argument.
|
175
|
+
#
|
176
|
+
# @example
|
177
|
+
# "abba".split(//).group_seq(&:==) #=> [["y"], ["a"], ["b", "b"], ["a"]]
|
178
|
+
#
|
179
|
+
# @return [[Array]]
|
180
|
+
def runs(&block)
|
181
|
+
unless empty?
|
182
|
+
as, bs = tail.split_until{|x| block.call(head, x) }
|
183
|
+
head.cons(as).cons(bs.runs(&block))
|
184
|
+
else
|
185
|
+
[]
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
# @endgroup
|
190
|
+
#############################################################################
|
191
|
+
|
192
|
+
# Accumulate elements using the `+` method, optionally
|
193
|
+
# transforming them first using a block
|
194
|
+
#
|
195
|
+
# @example
|
196
|
+
# ["a", "b", "cd"].sum #=> "abcd"
|
197
|
+
# ["a", "b", "cd"].sum(&:length) #=> 4
|
198
|
+
#
|
199
|
+
def sum(&block)
|
200
|
+
if block_given?
|
201
|
+
tail.inject(yield(head)){|sum,e| sum + yield(e) }
|
202
|
+
else
|
203
|
+
tail.inject(head){|sum,e| sum + e }
|
204
|
+
end
|
205
|
+
end
|
206
|
+
|
207
|
+
# Count the number of elements that satisfy the predicate
|
208
|
+
#
|
209
|
+
# @example
|
210
|
+
# ["abc", "de", "fg", "hi"].count{|s| s.length == 2 } #=> 3
|
211
|
+
# ["a", "b", "a", "c", "a"].count("a") #=> 3
|
212
|
+
# [1, 3, 5, 9, 0].count #=> 5
|
213
|
+
#
|
214
|
+
# @return [Integer]
|
215
|
+
def count(*args)
|
216
|
+
if block_given?
|
217
|
+
inject(0){|n, e| yield(e) ? n + 1 : n }
|
218
|
+
elsif args.empty?
|
219
|
+
size
|
220
|
+
else
|
221
|
+
inject(0){|n, e| e == args.first ? n + 1 : n }
|
222
|
+
end
|
223
|
+
end
|
113
224
|
end
|
114
|
-
end
|
115
|
-
|
116
|
-
# Drops the longest prefix of elements that do not satisfy the predicate.
|
117
|
-
#
|
118
|
-
# @return [Array]
|
119
|
-
def drop_until(&block)
|
120
|
-
# This is in tail call form
|
121
|
-
unless empty? or yield(head)
|
122
|
-
tail.drop_until(&block)
|
123
|
-
else
|
124
|
-
self
|
125
|
-
end
|
126
|
-
end
|
127
225
|
|
128
|
-
# Takes the longest prefix of elements that satisfy the predicate.
|
129
|
-
#
|
130
|
-
# @return [Array]
|
131
|
-
def take_while(accumulator = [], &block)
|
132
|
-
# This is in tail call form
|
133
|
-
if not empty? and yield(head)
|
134
|
-
tail.take_while(head.snoc(accumulator), &block)
|
135
|
-
else
|
136
|
-
accumulator
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
# Takes the longest prefix of elements that do not satisfy the predicate.
|
141
|
-
#
|
142
|
-
# @return [Array]
|
143
|
-
def take_until(accumulator = [], &block)
|
144
|
-
# This is in tail call form
|
145
|
-
unless empty? or yield(head)
|
146
|
-
tail.take_until(head.snoc(accumulator), &block)
|
147
|
-
else
|
148
|
-
accumulator
|
149
|
-
end
|
150
226
|
end
|
151
|
-
|
152
|
-
# Splits the array into prefix/suffix pair according to the predicate.
|
153
|
-
#
|
154
|
-
# @return [(Array, Array)]
|
155
|
-
def split_until(&block)
|
156
|
-
prefix = take_while(&block)
|
157
|
-
suffix = drop(prefix.length)
|
158
|
-
return prefix, suffix
|
159
|
-
end
|
160
|
-
|
161
|
-
# Splits the array into prefix/suffix pair according to the predicate.
|
162
|
-
#
|
163
|
-
# @return [(Array, Array)]
|
164
|
-
def split_when(&block)
|
165
|
-
prefix = take_until(&block)
|
166
|
-
suffix = drop(prefix.length)
|
167
|
-
return prefix, suffix
|
168
|
-
end
|
169
|
-
|
170
|
-
# Returns a list of sublists, where each sublist contains only equal
|
171
|
-
# elements. Equality is determined by a two-argument block parameter.
|
172
|
-
# The concatenation of the result is equal to the original argument.
|
173
|
-
#
|
174
|
-
# @example
|
175
|
-
# "abba".split(//).group_seq(&:==) #=> [["y"], ["a"], ["b", "b"], ["a"]]
|
176
|
-
#
|
177
|
-
# @return [[Array]]
|
178
|
-
def runs(&block)
|
179
|
-
unless empty?
|
180
|
-
as, bs = tail.split_until{|x| block.call(head, x) }
|
181
|
-
head.cons(as).cons(bs.runs(&block))
|
182
|
-
else
|
183
|
-
[]
|
184
|
-
end
|
185
|
-
end
|
186
|
-
|
187
|
-
# @endgroup
|
188
|
-
#############################################################################
|
189
227
|
end
|
data/lib/ruby/blank.rb
CHANGED
@@ -1,69 +1,53 @@
|
|
1
|
-
|
1
|
+
module Stupidedi
|
2
|
+
module Refinements
|
3
|
+
|
4
|
+
refine String do
|
5
|
+
# True if the string is `empty?` or contains all whitespace
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# "abc".blank? #=> false
|
9
|
+
# " ".blank? #=> true
|
10
|
+
# "".blank? #=> true
|
11
|
+
#
|
12
|
+
def blank?
|
13
|
+
self !~ /\S/
|
14
|
+
end
|
15
|
+
|
16
|
+
def present?
|
17
|
+
self =~ /\S/
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
refine NilClass do
|
22
|
+
# Always `true`. Note this overrides {Object#blank?} which returns false.
|
23
|
+
#
|
24
|
+
# @example
|
25
|
+
# nil.blank? #=> true
|
26
|
+
#
|
27
|
+
def blank?
|
28
|
+
true
|
29
|
+
end
|
30
|
+
|
31
|
+
def present?
|
32
|
+
false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
refine Object do
|
37
|
+
# Always `false`. Note that {NilClass#blank?} is overridden to return `true`
|
38
|
+
#
|
39
|
+
# @example
|
40
|
+
# false.blank? #=> false
|
41
|
+
# 100.blank? #=> false
|
42
|
+
#
|
43
|
+
def blank?
|
44
|
+
false
|
45
|
+
end
|
46
|
+
|
47
|
+
def present?
|
48
|
+
true
|
49
|
+
end
|
50
|
+
end
|
2
51
|
|
3
|
-
# True if the string is `empty?` or contains all whitespace
|
4
|
-
#
|
5
|
-
# @example
|
6
|
-
# "abc".blank? #=> false
|
7
|
-
# " ".blank? #=> true
|
8
|
-
# "".blank? #=> true
|
9
|
-
#
|
10
|
-
def blank?
|
11
|
-
self !~ /\S/
|
12
|
-
end
|
13
|
-
|
14
|
-
def present?
|
15
|
-
self =~ /\S/
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
# module Enumerable
|
20
|
-
#
|
21
|
-
# # True if the collection is `empty?`
|
22
|
-
# #
|
23
|
-
# # @example
|
24
|
-
# # [1,2].blank? #=> false
|
25
|
-
# # [].blank? #=> false
|
26
|
-
# #
|
27
|
-
# unless respond_to?(:blank?)
|
28
|
-
#
|
29
|
-
# def blank?
|
30
|
-
# empty?
|
31
|
-
# end
|
32
|
-
#
|
33
|
-
# def present?
|
34
|
-
# not empty?
|
35
|
-
# end
|
36
|
-
# end
|
37
|
-
|
38
|
-
class NilClass
|
39
|
-
|
40
|
-
# Always `true`. Note this overrides {Object#blank?} which returns false.
|
41
|
-
#
|
42
|
-
# @example
|
43
|
-
# nil.blank? #=> true
|
44
|
-
#
|
45
|
-
def blank?
|
46
|
-
true
|
47
|
-
end
|
48
|
-
|
49
|
-
def present?
|
50
|
-
false
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
class Object
|
55
|
-
|
56
|
-
# Always `false`. Note that {NilClass#blank?} is overridden to return `true`
|
57
|
-
#
|
58
|
-
# @example
|
59
|
-
# false.blank? #=> false
|
60
|
-
# 100.blank? #=> false
|
61
|
-
#
|
62
|
-
def blank?
|
63
|
-
false
|
64
|
-
end
|
65
|
-
|
66
|
-
def present?
|
67
|
-
true
|
68
52
|
end
|
69
53
|
end
|