stupidedi 1.2.5 → 1.2.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
data/lib/ruby/hash.rb
CHANGED
data/lib/ruby/instance_exec.rb
CHANGED
@@ -1,26 +1,29 @@
|
|
1
|
-
|
1
|
+
module Stupidedi
|
2
|
+
module Refinements
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
4
|
+
refine Object do
|
5
|
+
if RUBY_VERSION < "1.9"
|
6
|
+
module InstanceExecHelper; end
|
7
|
+
include InstanceExecHelper
|
6
8
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
9
|
+
# @see http://eigenclass.org/hiki/instance_exec
|
10
|
+
def instance_exec(*args, &block)
|
11
|
+
thread = Thread.current.object_id.abs
|
12
|
+
object = object_id.abs
|
13
|
+
mname = "__instance_exec_#{thread}_#{object}"
|
14
|
+
InstanceExecHelper.module_eval { define_method(mname, &block) }
|
13
15
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
begin
|
17
|
+
__send__(mname, *args)
|
18
|
+
ensure
|
19
|
+
begin
|
20
|
+
InstanceExecHelper.module_eval { remove_method(mname) }
|
21
|
+
rescue
|
22
|
+
end
|
23
|
+
end
|
20
24
|
end
|
21
25
|
end
|
22
26
|
end
|
23
27
|
|
24
28
|
end
|
25
|
-
|
26
29
|
end
|
data/lib/ruby/module.rb
CHANGED
@@ -1,51 +1,61 @@
|
|
1
|
-
|
1
|
+
module Stupidedi
|
2
|
+
module Refinements
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
4
|
+
refine Module do
|
5
|
+
# Creates an abstract method
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# class Collection
|
9
|
+
# abstract :size
|
10
|
+
# abstract :add, :args => %w(item)
|
11
|
+
# end
|
12
|
+
#
|
13
|
+
# @return [void]
|
14
|
+
def abstract(name, *params)
|
15
|
+
if params.last.is_a?(Hash)
|
16
|
+
# abstract :method, :args => %w(a b c)
|
17
|
+
params = params.last[:args]
|
18
|
+
end
|
17
19
|
|
18
|
-
|
20
|
+
file, line, = Stupidedi.caller
|
19
21
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
if params.empty?
|
23
|
+
class_eval(<<-RUBY, file, line.to_i - 1)
|
24
|
+
def #{name}(*args)
|
25
|
+
raise NoMethodError,
|
26
|
+
"method \#{self.class.name}.#{name} is abstract"
|
27
|
+
end
|
28
|
+
RUBY
|
29
|
+
else
|
30
|
+
class_eval(<<-RUBY, file, line.to_i - 1)
|
31
|
+
def #{name}(*args)
|
32
|
+
raise NoMethodError,
|
33
|
+
"method \#{self.class.name}.#{name}(#{params.join(', ')}) is abstract"
|
34
|
+
end
|
35
|
+
RUBY
|
25
36
|
end
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
37
|
+
end
|
38
|
+
|
39
|
+
def def_delegators(target, *methods)
|
40
|
+
file, line, = Stupidedi.caller
|
41
|
+
|
42
|
+
for m in methods
|
43
|
+
if m.to_s =~ /=$/
|
44
|
+
class_eval(<<-RUBY, file, line.to_i - 1)
|
45
|
+
def #{m}(value)
|
46
|
+
#{target}.#{m}(value)
|
47
|
+
end
|
48
|
+
RUBY
|
49
|
+
else
|
50
|
+
class_eval(<<-RUBY, file, line.to_i - 1)
|
51
|
+
def #{m}(*args, &block)
|
52
|
+
#{target}.#{m}(*args, &block)
|
53
|
+
end
|
54
|
+
RUBY
|
55
|
+
end
|
32
56
|
end
|
33
|
-
|
57
|
+
end
|
34
58
|
end
|
35
|
-
end
|
36
|
-
|
37
|
-
# Creates a method (or methods) that delegates messages to an instance
|
38
|
-
# variable or another instance method.
|
39
|
-
#
|
40
|
-
# @example
|
41
|
-
# class WrappedCollection
|
42
|
-
# delegate :size, :add, :to => :@wrapped
|
43
|
-
#
|
44
|
-
# def initialize(wrapped)
|
45
|
-
# @wrapped = wrapped
|
46
|
-
# end
|
47
|
-
# end
|
48
|
-
#
|
49
|
-
# @return [void]
|
50
59
|
|
60
|
+
end
|
51
61
|
end
|
data/lib/ruby/object.rb
CHANGED
@@ -1,63 +1,68 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
# @group List Constructors
|
4
|
-
#############################################################################
|
5
|
-
|
6
|
-
# Prepend the item to the front of a new list
|
7
|
-
#
|
8
|
-
# @example
|
9
|
-
# 1.cons #=> [1]
|
10
|
-
# 1.cons(2.cons) #=> [1, 2]
|
11
|
-
# 1.cons([0, 0, 0]) #=> [1, 0, 0, 0]
|
12
|
-
#
|
13
|
-
# @return [Array]
|
14
|
-
def cons(array = [])
|
15
|
-
[self] + array
|
16
|
-
end
|
1
|
+
module Stupidedi
|
2
|
+
module Refinements
|
17
3
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
# 1.snoc #=> [1]
|
22
|
-
# 1.snoc(2.snoc) #=> [2, 1]
|
23
|
-
# 1.snoc([0, 0, 0]) #=> [0, 0, 0, 1]
|
24
|
-
#
|
25
|
-
# @return [Array]
|
26
|
-
def snoc(array = [])
|
27
|
-
array + [self]
|
28
|
-
end
|
4
|
+
refine Object do
|
5
|
+
# @group List Constructors
|
6
|
+
#############################################################################
|
29
7
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
end
|
8
|
+
# Prepend the item to the front of a new list
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# 1.cons #=> [1]
|
12
|
+
# 1.cons(2.cons) #=> [1, 2]
|
13
|
+
# 1.cons([0, 0, 0]) #=> [1, 0, 0, 0]
|
14
|
+
#
|
15
|
+
# @return [Array]
|
16
|
+
def cons(array = [])
|
17
|
+
[self] + array
|
18
|
+
end
|
42
19
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
20
|
+
# Append the item to rear of a new list
|
21
|
+
#
|
22
|
+
# @example
|
23
|
+
# 1.snoc #=> [1]
|
24
|
+
# 1.snoc(2.snoc) #=> [2, 1]
|
25
|
+
# 1.snoc([0, 0, 0]) #=> [0, 0, 0, 1]
|
26
|
+
#
|
27
|
+
# @return [Array]
|
28
|
+
def snoc(array = [])
|
29
|
+
array + [self]
|
30
|
+
end
|
31
|
+
|
32
|
+
# @group Combinators
|
33
|
+
#############################################################################
|
34
|
+
|
35
|
+
# Yields `self` to a block argument
|
36
|
+
#
|
37
|
+
# @example
|
38
|
+
# nil.bind{|a| a.nil? } #=> true
|
39
|
+
# 100.bind{|a| a.nil? } #=> false
|
40
|
+
#
|
41
|
+
def bind
|
42
|
+
yield self
|
43
|
+
end
|
44
|
+
|
45
|
+
# Yields `self` to a side-effect block argument and return `self`
|
46
|
+
#
|
47
|
+
# @example:
|
48
|
+
# 100.tap{|a| puts "debug: #{a}" } #=> 100
|
49
|
+
#
|
50
|
+
# @return self
|
51
|
+
def tap
|
52
|
+
yield self
|
53
|
+
self
|
54
|
+
end unless nil.respond_to?(:tap)
|
55
|
+
|
56
|
+
# @endgroup
|
57
|
+
#############################################################################
|
53
58
|
|
54
|
-
|
55
|
-
|
59
|
+
# Return the "eigenclass" where singleton methods reside
|
60
|
+
#
|
61
|
+
# @return [Class]
|
62
|
+
def eigenclass
|
63
|
+
class << self; self; end
|
64
|
+
end
|
65
|
+
end
|
56
66
|
|
57
|
-
# Return the "eigenclass" where singleton methods reside
|
58
|
-
#
|
59
|
-
# @return [Class]
|
60
|
-
def eigenclass
|
61
|
-
class << self; self; end
|
62
67
|
end
|
63
68
|
end
|
data/lib/ruby/string.rb
CHANGED
@@ -1,73 +1,78 @@
|
|
1
|
-
|
1
|
+
module Stupidedi
|
2
|
+
module Refinements
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
4
|
+
refine String do
|
5
|
+
# Return the one-character string at the given index
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# "abc".at(0) #=> "a"
|
9
|
+
# "abc".at(2) #=> "c"
|
10
|
+
#
|
11
|
+
# @param [Integer] n zero-based index of the character to read
|
12
|
+
#
|
13
|
+
# @return [String]
|
14
|
+
def at(n)
|
15
|
+
raise ArgumentError, "n must be positive" if n < 0
|
16
|
+
self[n, 1] unless n >= length
|
17
|
+
end
|
16
18
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
19
|
+
# Return the string with `n` characters removed from the front
|
20
|
+
#
|
21
|
+
# @example
|
22
|
+
# "abc".drop(0) #=> "abc"
|
23
|
+
# "abc".drop(2) #=> "c"
|
24
|
+
#
|
25
|
+
# @param [Integer] n number of characters to drop (`n > 0`)
|
26
|
+
#
|
27
|
+
# @return [String]
|
28
|
+
def drop(n)
|
29
|
+
raise ArgumentError, "n must be positive" if n < 0
|
30
|
+
(length >= n) ? self[n..-1] : ""
|
31
|
+
end
|
30
32
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
33
|
+
# Return the first `n` characters from the front
|
34
|
+
#
|
35
|
+
# @example
|
36
|
+
# "abc".take(0) #=> ""
|
37
|
+
# "abc".take(2) #=> "ab"
|
38
|
+
#
|
39
|
+
# @param [Integer] n number of characters to select (`n > 0`)
|
40
|
+
#
|
41
|
+
# @return [String]
|
42
|
+
def take(n)
|
43
|
+
raise ArgumentError, "n must be positive" if n < 0
|
44
|
+
self[0, n]
|
45
|
+
end
|
44
46
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
47
|
+
# Split the string in two at the given position
|
48
|
+
#
|
49
|
+
# @example
|
50
|
+
# "abc".split_at(0) #=> ["", "abc"]
|
51
|
+
# "abc".split_at(2) #=> ["ab", "c"]
|
52
|
+
#
|
53
|
+
# @param [Integer] n number of characters at which to split (`n > 0`)
|
54
|
+
#
|
55
|
+
# @return [Array(String, String)]
|
56
|
+
def split_at(n)
|
57
|
+
[take(n), drop(n)]
|
58
|
+
end
|
57
59
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
60
|
+
# True if the string is long enough such that {#at} is defined for the
|
61
|
+
# given `n`
|
62
|
+
#
|
63
|
+
# @example
|
64
|
+
# "abc".defined_at?(0) #=> true
|
65
|
+
# "abc".defined_at?(3) #=> false
|
66
|
+
def defined_at?(n)
|
67
|
+
n < length
|
68
|
+
end
|
69
|
+
|
70
|
+
# To make String compatible with the {Stupidedi::Reader::Input} interface,
|
71
|
+
# we have to define `#position`... shameful!
|
72
|
+
def position
|
73
|
+
nil
|
74
|
+
end
|
75
|
+
end
|
67
76
|
|
68
|
-
# To make String compatible with the {Stupidedi::Reader::Input} interface,
|
69
|
-
# we have to define `#position`... shameful!
|
70
|
-
def position
|
71
|
-
nil
|
72
77
|
end
|
73
78
|
end
|
data/lib/ruby/symbol.rb
CHANGED
@@ -1,24 +1,27 @@
|
|
1
|
-
|
1
|
+
module Stupidedi
|
2
|
+
module Refinements
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
refine Symbol do
|
5
|
+
# Returns a proc that calls self on the proc's parameter
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# [1, 2, 3].map(&:-@) #=> [-1, -2, -3]
|
9
|
+
# [-1, -2, -3].map(&:abs) #=> [1, 2, 3]
|
10
|
+
#
|
11
|
+
def to_proc
|
12
|
+
lambda{|*args| args.head.__send__(self, *args.tail) }
|
13
|
+
end
|
14
|
+
|
15
|
+
# Calls self on the given receiver
|
16
|
+
#
|
17
|
+
# @example
|
18
|
+
# :to_s.call(100) #=> "100"
|
19
|
+
# :join.call([1,2,3], "-") #=> "1-2-3"
|
20
|
+
#
|
21
|
+
def call(receiver, *args)
|
22
|
+
receiver.__send__(self, *args)
|
23
|
+
end
|
12
24
|
end
|
13
|
-
end
|
14
25
|
|
15
|
-
# Calls self on the given receiver
|
16
|
-
#
|
17
|
-
# @example
|
18
|
-
# :to_s.call(100) #=> "100"
|
19
|
-
# :join.call([1,2,3], "-") #=> "1-2-3"
|
20
|
-
#
|
21
|
-
def call(receiver, *args)
|
22
|
-
receiver.__send__(self, *args)
|
23
26
|
end
|
24
27
|
end
|