From 7db03548aeb864a6747b5745dbe65af19fc1569e Mon Sep 17 00:00:00 2001 From: Gabriel Omar Cotelli Date: Thu, 16 Mar 2017 15:40:28 -0300 Subject: [PATCH] Added Optional --- .../OptionalTest.class/README.md | 1 + .../testForEveryInjectIntoWhenEmpty.st | 8 ++++++ .../testForEveryInjectIntoWhenFirstUnused.st | 17 ++++++++++++ .../testForEveryInjectIntoWhenSomeUnused.st | 17 ++++++++++++ .../testForEveryUsedOptionalInjectInto.st | 26 +++++++++++++++++++ .../instance/testWithAllReturn.st | 25 ++++++++++++++++++ .../instance/testWithAllReturnWhenEmpty.st | 8 ++++++ .../testWithAllReturnWhenFirstIsUnused.st | 25 ++++++++++++++++++ .../testWithAllReturnWhenSomeAreUnused.st | 25 ++++++++++++++++++ .../instance/testWithContentDo.st | 13 ++++++++++ .../instance/testWithContentDoIfUnused.st | 12 +++++++++ .../testWithContentDoIfUnusedWhenUnused.st | 16 ++++++++++++ .../instance/testWithContentDoWhenUnused.st | 10 +++++++ .../instance/testWithReturn.st | 11 ++++++++ .../testWithReturnWhenBothAreUnused.st | 17 ++++++++++++ .../testWithReturnWhenFirstIsUnused.st | 11 ++++++++ .../testWithReturnWhenSecondIsUnused.st | 11 ++++++++ .../OptionalTest.class/methodProperties.json | 21 +++++++++++++++ .../OptionalTest.class/properties.json | 11 ++++++++ .../monticello.meta/version | 2 +- .../Optional.class/README.md | 1 + .../Optional.class/class/containing..st | 4 +++ .../class/forEvery.injectInto..st | 4 +++ .../Optional.class/class/unused.st | 4 +++ .../Optional.class/class/unusedBecause..st | 4 +++ .../Optional.class/class/unusedBecauseAll..st | 4 +++ .../Optional.class/class/withAll.return..st | 4 +++ .../Optional.class/instance/with.return..st | 4 +++ .../instance/withAll.injectInto..st | 4 +++ .../instance/withAll.return..st | 4 +++ .../Optional.class/instance/withContentDo..st | 4 +++ .../instance/withContentDo.ifUnused..st | 4 +++ .../Optional.class/methodProperties.json | 17 ++++++++++++ .../Optional.class/properties.json | 11 ++++++++ .../UnusedOptional.class/README.md | 1 + .../class/explainedByAll..st | 4 +++ .../instance/initializeExplainedByAll..st | 4 +++ .../instance/with.return..st | 6 +++++ .../instance/withAll.return..st | 4 +++ .../instance/withContentDo.ifUnused..st | 4 +++ .../methodProperties.json | 11 ++++++++ .../UnusedOptional.class/properties.json | 13 ++++++++++ .../UsedOptional.class/README.md | 1 + .../UsedOptional.class/class/containing..st | 4 +++ .../instance/initializeContaining..st | 4 +++ .../instance/with.return..st | 6 +++++ .../instance/withAll.return..st | 13 ++++++++++ .../instance/withContentDo.ifUnused..st | 4 +++ .../UsedOptional.class/methodProperties.json | 11 ++++++++ .../UsedOptional.class/properties.json | 13 ++++++++++ .../monticello.meta/version | 2 +- 51 files changed, 463 insertions(+), 2 deletions(-) create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/README.md create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenEmpty.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenFirstUnused.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenSomeUnused.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryUsedOptionalInjectInto.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturn.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenEmpty.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenFirstIsUnused.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenSomeAreUnused.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDo.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoIfUnused.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoIfUnusedWhenUnused.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoWhenUnused.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturn.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenBothAreUnused.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenFirstIsUnused.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenSecondIsUnused.st create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/methodProperties.json create mode 100644 source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/properties.json create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/README.md create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/class/containing..st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/class/forEvery.injectInto..st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/class/unused.st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/class/unusedBecause..st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/class/unusedBecauseAll..st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/class/withAll.return..st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/instance/with.return..st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/instance/withAll.injectInto..st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/instance/withAll.return..st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/instance/withContentDo..st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/instance/withContentDo.ifUnused..st create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/methodProperties.json create mode 100644 source/Buoy-Dynamic-Binding.package/Optional.class/properties.json create mode 100644 source/Buoy-Dynamic-Binding.package/UnusedOptional.class/README.md create mode 100644 source/Buoy-Dynamic-Binding.package/UnusedOptional.class/class/explainedByAll..st create mode 100644 source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/initializeExplainedByAll..st create mode 100644 source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/with.return..st create mode 100644 source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/withAll.return..st create mode 100644 source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/withContentDo.ifUnused..st create mode 100644 source/Buoy-Dynamic-Binding.package/UnusedOptional.class/methodProperties.json create mode 100644 source/Buoy-Dynamic-Binding.package/UnusedOptional.class/properties.json create mode 100644 source/Buoy-Dynamic-Binding.package/UsedOptional.class/README.md create mode 100644 source/Buoy-Dynamic-Binding.package/UsedOptional.class/class/containing..st create mode 100644 source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/initializeContaining..st create mode 100644 source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/with.return..st create mode 100644 source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/withAll.return..st create mode 100644 source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/withContentDo.ifUnused..st create mode 100644 source/Buoy-Dynamic-Binding.package/UsedOptional.class/methodProperties.json create mode 100644 source/Buoy-Dynamic-Binding.package/UsedOptional.class/properties.json diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/README.md b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/README.md new file mode 100644 index 0000000..dbb08e9 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/README.md @@ -0,0 +1 @@ +An OptionalTest is a test class for testing the behavior of Optional \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenEmpty.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenEmpty.st new file mode 100644 index 0000000..bb4fafd --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenEmpty.st @@ -0,0 +1,8 @@ +tests-Combining +testForEveryInjectIntoWhenEmpty + + | combinedOptional | + + combinedOptional := Optional forEvery: #() injectInto: [ :min :current | self fail ]. + + self assert: (combinedOptional withContentDo: [ :x | self fail ] ifUnused: [ 0 ]) isZero \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenFirstUnused.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenFirstUnused.st new file mode 100644 index 0000000..5d0b2c9 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenFirstUnused.st @@ -0,0 +1,17 @@ +tests-Combining +testForEveryInjectIntoWhenFirstUnused + + | firstOptional secondOptional thirdOptional combinedOptional | + + firstOptional := Optional unused. + secondOptional := Optional containing: 1. + thirdOptional := Optional containing: 3. + + combinedOptional := Optional + forEvery: + {firstOptional. + secondOptional. + thirdOptional} + injectInto: [ :min :current | min min: current ]. + + self assert: (combinedOptional withContentDo: [ :min | self fail ] ifUnused: [ 0 ]) isZero \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenSomeUnused.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenSomeUnused.st new file mode 100644 index 0000000..fb9a8da --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryInjectIntoWhenSomeUnused.st @@ -0,0 +1,17 @@ +tests-Combining +testForEveryInjectIntoWhenSomeUnused + + | firstOptional secondOptional thirdOptional combinedOptional | + + firstOptional := Optional containing: 1. + secondOptional := Optional unused. + thirdOptional := Optional containing: 3. + + combinedOptional := Optional + forEvery: + {firstOptional. + secondOptional. + thirdOptional} + injectInto: [ :min :current | min min: current ]. + + self assert: (combinedOptional withContentDo: [ :min | self fail ] ifUnused: [ 0 ]) isZero \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryUsedOptionalInjectInto.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryUsedOptionalInjectInto.st new file mode 100644 index 0000000..17c10f7 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testForEveryUsedOptionalInjectInto.st @@ -0,0 +1,26 @@ +tests-Combining +testForEveryUsedOptionalInjectInto + + | firstOptional secondOptional thirdOptional combinedOptional | + + firstOptional := Optional containing: 1. + secondOptional := Optional containing: 0. + thirdOptional := Optional containing: 3. + + combinedOptional := Optional + forEvery: + {firstOptional. + secondOptional. + thirdOptional} + injectInto: [ :min :current | min min: current ]. + + combinedOptional withContentDo: [ :min | self assert: min equals: 0 ] ifUnused: [ self fail ]. + + combinedOptional := Optional + forEvery: + {firstOptional. + secondOptional. + thirdOptional} + injectInto: [ :sum :current | sum + current ]. + + combinedOptional withContentDo: [ :sum | self assert: sum equals: 4 ] ifUnused: [ self fail ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturn.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturn.st new file mode 100644 index 0000000..64e8377 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturn.st @@ -0,0 +1,25 @@ +tests-Combining +testWithAllReturn + + | firstOptional secondOptional thirdOptional combinedOptional | + + firstOptional := Optional containing: 0. + secondOptional := Optional containing: 2. + thirdOptional := Optional containing: 3. + + combinedOptional := firstOptional + withAll: + {secondOptional. + thirdOptional} + return: [ :addends | addends sum ]. + + combinedOptional withContentDo: [ :sum | self assert: sum equals: 5 ] ifUnused: [ self fail ]. + + combinedOptional := Optional + withAll: + {firstOptional. + secondOptional. + thirdOptional} + return: [ :addends | addends sum ]. + + combinedOptional withContentDo: [ :sum | self assert: sum equals: 5 ] ifUnused: [ self fail ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenEmpty.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenEmpty.st new file mode 100644 index 0000000..ad444d4 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenEmpty.st @@ -0,0 +1,8 @@ +tests-Combining +testWithAllReturnWhenEmpty + + | combinedOptional | + + combinedOptional := Optional withAll: #() return: [ :addends | addends sum ]. + + combinedOptional withContentDo: [ :sum | self fail ] ifUnused: [ :explanations | self assert: explanations isEmpty ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenFirstIsUnused.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenFirstIsUnused.st new file mode 100644 index 0000000..db5aca8 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenFirstIsUnused.st @@ -0,0 +1,25 @@ +tests-Combining +testWithAllReturnWhenFirstIsUnused + + | firstOptional secondOptional thirdOptional combinedOptional | + + firstOptional := Optional unusedBecause: 'This is expected.'. + secondOptional := Optional unusedBecause: 'This is also expected.'. + thirdOptional := Optional containing: 3. + + combinedOptional := firstOptional + withAll: + {secondOptional. + thirdOptional} + return: [ :addends | addends sum ]. + + combinedOptional withContentDo: [ :sum | self fail ] ifUnused: [ :explanations | self assert: explanations equals: #('This is expected.' 'This is also expected.') ]. + + combinedOptional := Optional + withAll: + {firstOptional. + secondOptional. + thirdOptional} + return: [ :addends | addends sum ]. + + combinedOptional withContentDo: [ :sum | self fail ] ifUnused: [ :explanations | self assert: explanations equals: #('This is expected.' 'This is also expected.') ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenSomeAreUnused.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenSomeAreUnused.st new file mode 100644 index 0000000..0708651 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithAllReturnWhenSomeAreUnused.st @@ -0,0 +1,25 @@ +tests-Combining +testWithAllReturnWhenSomeAreUnused + + | firstOptional secondOptional thirdOptional combinedOptional | + + firstOptional := Optional containing: 0. + secondOptional := Optional unused. + thirdOptional := Optional containing: 3. + + combinedOptional := firstOptional + withAll: + {secondOptional. + thirdOptional} + return: [ :addends | addends sum ]. + + combinedOptional withContentDo: [ :sum | self fail ] ifUnused: [ :explanations | self assert: explanations isEmpty ]. + + combinedOptional := Optional + withAll: + {firstOptional. + secondOptional. + thirdOptional} + return: [ :addends | addends sum ]. + + combinedOptional withContentDo: [ :sum | self fail ] ifUnused: [ :explanations | self assert: explanations isEmpty ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDo.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDo.st new file mode 100644 index 0000000..c133b92 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDo.st @@ -0,0 +1,13 @@ +tests-Accessing +testWithContentDo + + | optional expectedContent content | + + expectedContent := 2. + content := 1. + + optional := Optional containing: expectedContent. + + optional withContentDo: [ :theContent | content := theContent ]. + + self assert: content equals: expectedContent \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoIfUnused.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoIfUnused.st new file mode 100644 index 0000000..9ae5d0c --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoIfUnused.st @@ -0,0 +1,12 @@ +tests-Accessing +testWithContentDoIfUnused + + | optional expectedContent content | + + expectedContent := 2. + + optional := Optional containing: expectedContent. + + content := optional withContentDo: [ :theContent | theContent ] ifUnused: [ self fail ]. + + self assert: content equals: expectedContent \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoIfUnusedWhenUnused.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoIfUnusedWhenUnused.st new file mode 100644 index 0000000..85b3cb7 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoIfUnusedWhenUnused.st @@ -0,0 +1,16 @@ +tests-Accessing +testWithContentDoIfUnusedWhenUnused + + | optional defaultContent content expectedExplanation | + + defaultContent := 2. + expectedExplanation := 'The identifier is not configured.'. + optional := Optional unusedBecause: expectedExplanation. + + content := optional + withContentDo: [ :theContent | self fail ] + ifUnused: [ :explanations | + self assertCollection: explanations hasSameElements: {expectedExplanation}. + defaultContent ]. + + self assert: content equals: defaultContent \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoWhenUnused.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoWhenUnused.st new file mode 100644 index 0000000..340a4a6 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithContentDoWhenUnused.st @@ -0,0 +1,10 @@ +tests-Accessing +testWithContentDoWhenUnused + + | optional expectedExplanation | + + expectedExplanation := 'The identifier is unassigned'. + + optional := Optional unusedBecause: expectedExplanation. + + optional withContentDo: [ :theContent | self fail ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturn.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturn.st new file mode 100644 index 0000000..a74f3d8 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturn.st @@ -0,0 +1,11 @@ +tests-Combining +testWithReturn + + | firstOptional secondOptional combinedOptional | + + firstOptional := Optional containing: 1. + secondOptional := Optional containing: 2. + + combinedOptional := firstOptional with: secondOptional return: [ :x :y | x + y ]. + + combinedOptional withContentDo: [ :sum | self assert: sum equals: 3 ] ifUnused: [ self fail ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenBothAreUnused.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenBothAreUnused.st new file mode 100644 index 0000000..2b3c447 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenBothAreUnused.st @@ -0,0 +1,17 @@ +tests-Combining +testWithReturnWhenBothAreUnused + + | firstOptional secondOptional combinedOptional | + + firstOptional := Optional unused. + secondOptional := Optional unused. + + combinedOptional := firstOptional with: secondOptional return: [ :x :y | self fail ]. + + self + assert: + (combinedOptional + withContentDo: [ :sum | self fail ] + ifUnused: [ :explanations | + self assert: explanations isEmpty. + 0 ]) isZero \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenFirstIsUnused.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenFirstIsUnused.st new file mode 100644 index 0000000..4eb9e73 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenFirstIsUnused.st @@ -0,0 +1,11 @@ +tests-Combining +testWithReturnWhenFirstIsUnused + + | firstOptional secondOptional combinedOptional | + + firstOptional := Optional unused. + secondOptional := Optional containing: 2. + + combinedOptional := firstOptional with: secondOptional return: [ :x :y | self fail ]. + + self assert: (combinedOptional withContentDo: [ :sum | self fail ] ifUnused: [ 0 ]) isZero \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenSecondIsUnused.st b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenSecondIsUnused.st new file mode 100644 index 0000000..1c9a357 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/instance/testWithReturnWhenSecondIsUnused.st @@ -0,0 +1,11 @@ +tests-Combining +testWithReturnWhenSecondIsUnused + + | firstOptional secondOptional combinedOptional | + + firstOptional := Optional containing: 2. + secondOptional := Optional unused. + + combinedOptional := firstOptional with: secondOptional return: [ :x :y | self fail ]. + + self assert: (combinedOptional withContentDo: [ :sum | self fail ] ifUnused: [ 0 ]) isZero \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/methodProperties.json b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/methodProperties.json new file mode 100644 index 0000000..a426131 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/methodProperties.json @@ -0,0 +1,21 @@ +{ + "instance" : { + "testWithContentDoIfUnused" : "GabrielOmarCotelli 3/16/2017 12:18", + "testForEveryInjectIntoWhenSomeUnused" : "GabrielOmarCotelli 3/16/2017 15:14", + "testWithAllReturnWhenEmpty" : "GabrielOmarCotelli 3/16/2017 15:24", + "testForEveryUsedOptionalInjectInto" : "GabrielOmarCotelli 3/16/2017 15:09", + "testWithReturnWhenBothAreUnused" : "GabrielOmarCotelli 3/16/2017 12:29", + "testWithReturnWhenFirstIsUnused" : "GabrielOmarCotelli 3/16/2017 12:31", + "testWithAllReturnWhenSomeAreUnused" : "GabrielOmarCotelli 3/16/2017 15:22", + "testForEveryInjectIntoWhenFirstUnused" : "GabrielOmarCotelli 3/16/2017 15:16", + "testWithContentDoIfUnusedWhenUnused" : "GabrielOmarCotelli 3/16/2017 12:20", + "testWithAllReturn" : "GabrielOmarCotelli 3/16/2017 15:21", + "testWithReturnWhenSecondIsUnused" : "GabrielOmarCotelli 3/16/2017 12:31", + "testForEveryInjectIntoWhenEmpty" : "GabrielOmarCotelli 3/16/2017 15:13", + "testWithContentDo" : "GabrielOmarCotelli 3/16/2017 11:04", + "testWithContentDoWhenUnused" : "GabrielOmarCotelli 3/16/2017 12:20", + "testWithReturn" : "GabrielOmarCotelli 3/16/2017 12:18", + "testWithAllReturnWhenFirstIsUnused" : "GabrielOmarCotelli 3/16/2017 15:22" + }, + "class" : { } +} \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/properties.json b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/properties.json new file mode 100644 index 0000000..34c5063 --- /dev/null +++ b/source/Buoy-Dynamic-Binding-Tests.package/OptionalTest.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "", + "super" : "TestCase", + "category" : "Buoy-Dynamic-Binding-Tests", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "OptionalTest", + "type" : "normal" +} \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding-Tests.package/monticello.meta/version b/source/Buoy-Dynamic-Binding-Tests.package/monticello.meta/version index 732c56b..0761aec 100644 --- a/source/Buoy-Dynamic-Binding-Tests.package/monticello.meta/version +++ b/source/Buoy-Dynamic-Binding-Tests.package/monticello.meta/version @@ -1 +1 @@ -(name 'Buoy-Dynamic-Binding-Tests-GabrielOmarCotelli.1' message 'Add Binding' id 'c3216def-2b07-0d00-9c08-b1180dc74540' date '15 March 2017' time '4:46:19.133575 pm' author 'GabrielOmarCotelli' ancestors () stepChildren ()) \ No newline at end of file +(name 'Buoy-Dynamic-Binding-Tests-GabrielOmarCotelli.2' message 'Added Optional' id '8c944d20-3f07-0d00-9a97-f70402bbd58a' date '16 March 2017' time '3:40:03.528093 pm' author 'GabrielOmarCotelli' ancestors ((name 'Buoy-Dynamic-Binding-Tests-GabrielOmarCotelli.1' message 'Add Binding' id 'c3216def-2b07-0d00-9c08-b1180dc74540' date '15 March 2017' time '4:46:19.133575 pm' author 'GabrielOmarCotelli' ancestors () stepChildren ())) stepChildren ()) \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/README.md b/source/Buoy-Dynamic-Binding.package/Optional.class/README.md new file mode 100644 index 0000000..45cb96b --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/README.md @@ -0,0 +1 @@ +I'm an abstract class representing the fact that some object can be optional. I provide protocol to be combined with other optionals. \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/class/containing..st b/source/Buoy-Dynamic-Binding.package/Optional.class/class/containing..st new file mode 100644 index 0000000..696570c --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/class/containing..st @@ -0,0 +1,4 @@ +Instance Creation +containing: anObject + + ^UsedOptional containing: anObject \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/class/forEvery.injectInto..st b/source/Buoy-Dynamic-Binding.package/Optional.class/class/forEvery.injectInto..st new file mode 100644 index 0000000..2165a92 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/class/forEvery.injectInto..st @@ -0,0 +1,4 @@ +Instance Creation +forEvery: optionals injectInto: aDyadicBlock + + ^ optionals ifNotEmpty: [ optionals first withAll: optionals allButFirst injectInto: aDyadicBlock ] ifEmpty: [ self unused ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/class/unused.st b/source/Buoy-Dynamic-Binding.package/Optional.class/class/unused.st new file mode 100644 index 0000000..2564f8d --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/class/unused.st @@ -0,0 +1,4 @@ +Instance Creation +unused + + ^self unusedBecauseAll: #() \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/class/unusedBecause..st b/source/Buoy-Dynamic-Binding.package/Optional.class/class/unusedBecause..st new file mode 100644 index 0000000..6c559c8 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/class/unusedBecause..st @@ -0,0 +1,4 @@ +Instance Creation +unusedBecause: anExplanation + + ^self unusedBecauseAll: { anExplanation } \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/class/unusedBecauseAll..st b/source/Buoy-Dynamic-Binding.package/Optional.class/class/unusedBecauseAll..st new file mode 100644 index 0000000..6b79ed0 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/class/unusedBecauseAll..st @@ -0,0 +1,4 @@ +Instance Creation +unusedBecauseAll: anExplanationCollection + + ^UnusedOptional explainedByAll: anExplanationCollection \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/class/withAll.return..st b/source/Buoy-Dynamic-Binding.package/Optional.class/class/withAll.return..st new file mode 100644 index 0000000..402f41b --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/class/withAll.return..st @@ -0,0 +1,4 @@ +Instance Creation +withAll: optionals return: aMonadycBlock + + ^ optionals ifNotEmpty: [ optionals first withAll: optionals allButFirst return: aMonadycBlock ] ifEmpty: [ self unused ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/instance/with.return..st b/source/Buoy-Dynamic-Binding.package/Optional.class/instance/with.return..st new file mode 100644 index 0000000..77cc8c2 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/instance/with.return..st @@ -0,0 +1,4 @@ +Combining +with: anOptional return: aDyadicBlock + + ^self subclassResponsibility \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withAll.injectInto..st b/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withAll.injectInto..st new file mode 100644 index 0000000..a77ec26 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withAll.injectInto..st @@ -0,0 +1,4 @@ +Combining +withAll: optionals injectInto: aDyadicBlock + + ^ optionals inject: self into: [ :combinedOptional :currentOptional | combinedOptional with: currentOptional return: aDyadicBlock ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withAll.return..st b/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withAll.return..st new file mode 100644 index 0000000..8497e78 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withAll.return..st @@ -0,0 +1,4 @@ +Combining +withAll: optionals return: aMonadycBlock + + ^self subclassResponsibility \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withContentDo..st b/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withContentDo..st new file mode 100644 index 0000000..b119dd9 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withContentDo..st @@ -0,0 +1,4 @@ +Accessing +withContentDo: aMonadycBlock + + self withContentDo: aMonadycBlock ifUnused: [ ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withContentDo.ifUnused..st b/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withContentDo.ifUnused..st new file mode 100644 index 0000000..77cb925 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/instance/withContentDo.ifUnused..st @@ -0,0 +1,4 @@ +Accessing +withContentDo: aMonadycBlock ifUnused: aNothingBlock + + ^self subclassResponsibility \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/methodProperties.json b/source/Buoy-Dynamic-Binding.package/Optional.class/methodProperties.json new file mode 100644 index 0000000..c45ef56 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/methodProperties.json @@ -0,0 +1,17 @@ +{ + "instance" : { + "withContentDo:" : "GabrielOmarCotelli 3/16/2017 12:18", + "withAll:injectInto:" : "GabrielOmarCotelli 3/16/2017 15:15", + "withAll:return:" : "GabrielOmarCotelli 3/16/2017 12:00", + "with:return:" : "GabrielOmarCotelli 3/16/2017 11:41", + "withContentDo:ifUnused:" : "GabrielOmarCotelli 3/16/2017 12:18" + }, + "class" : { + "forEvery:injectInto:" : "GabrielOmarCotelli 3/16/2017 15:10", + "unused" : "GabrielOmarCotelli 3/16/2017 12:21", + "unusedBecauseAll:" : "GabrielOmarCotelli 3/16/2017 12:21", + "unusedBecause:" : "GabrielOmarCotelli 3/16/2017 12:21", + "withAll:return:" : "GabrielOmarCotelli 3/16/2017 15:19", + "containing:" : "GabrielOmarCotelli 3/16/2017 12:17" + } +} \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/Optional.class/properties.json b/source/Buoy-Dynamic-Binding.package/Optional.class/properties.json new file mode 100644 index 0000000..e7fc65e --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/Optional.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "GabrielOmarCotelli 3/16/2017 10:58", + "super" : "Object", + "category" : "Buoy-Dynamic-Binding", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "Optional", + "type" : "normal" +} \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/README.md b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/README.md new file mode 100644 index 0000000..24aa9f3 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/README.md @@ -0,0 +1 @@ +I'm an optional representing the missing objects. I provide a list of explanations to aid the users. \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/class/explainedByAll..st b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/class/explainedByAll..st new file mode 100644 index 0000000..e02cec1 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/class/explainedByAll..st @@ -0,0 +1,4 @@ +Instance Creation +explainedByAll: anExplanationCollection + + ^ self new initializeExplainedByAll: anExplanationCollection \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/initializeExplainedByAll..st b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/initializeExplainedByAll..st new file mode 100644 index 0000000..c43bff4 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/initializeExplainedByAll..st @@ -0,0 +1,4 @@ +initialization +initializeExplainedByAll: anExplanationCollection + + explanations := anExplanationCollection \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/with.return..st b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/with.return..st new file mode 100644 index 0000000..a0b1925 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/with.return..st @@ -0,0 +1,6 @@ +Combining +with: anOptional return: aBlockClosure + + ^ anOptional + withContentDo: [ :foreignContent | self ] + ifUnused: [ :foreignExplanations | self class explainedByAll: explanations , foreignExplanations ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/withAll.return..st b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/withAll.return..st new file mode 100644 index 0000000..306c0a9 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/withAll.return..st @@ -0,0 +1,4 @@ +Combining +withAll: optionals return: aMonadycBlock + + ^ self withAll: optionals injectInto: [ :x :y | ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/withContentDo.ifUnused..st b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/withContentDo.ifUnused..st new file mode 100644 index 0000000..224af41 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/instance/withContentDo.ifUnused..st @@ -0,0 +1,4 @@ +Accessing +withContentDo: aBlockClosure ifUnused: aNothingBlock + + ^aNothingBlock cull: explanations \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/methodProperties.json b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/methodProperties.json new file mode 100644 index 0000000..00400de --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/methodProperties.json @@ -0,0 +1,11 @@ +{ + "instance" : { + "initializeExplainedByAll:" : "GabrielOmarCotelli 3/16/2017 11:36", + "with:return:" : "GabrielOmarCotelli 3/16/2017 12:18", + "withAll:return:" : "GabrielOmarCotelli 3/16/2017 15:26", + "withContentDo:ifUnused:" : "GabrielOmarCotelli 3/16/2017 12:18" + }, + "class" : { + "explainedByAll:" : "GabrielOmarCotelli 3/16/2017 11:35" + } +} \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/properties.json b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/properties.json new file mode 100644 index 0000000..9bcffeb --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UnusedOptional.class/properties.json @@ -0,0 +1,13 @@ +{ + "commentStamp" : "GabrielOmarCotelli 3/16/2017 11:27", + "super" : "Optional", + "category" : "Buoy-Dynamic-Binding", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "explanations" + ], + "name" : "UnusedOptional", + "type" : "normal" +} \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UsedOptional.class/README.md b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/README.md new file mode 100644 index 0000000..e8d90db --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/README.md @@ -0,0 +1 @@ +I'm an optional containing some object \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UsedOptional.class/class/containing..st b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/class/containing..st new file mode 100644 index 0000000..5622664 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/class/containing..st @@ -0,0 +1,4 @@ +Instance Creation +containing: anObject + + ^self new initializeContaining: anObject \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/initializeContaining..st b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/initializeContaining..st new file mode 100644 index 0000000..81a12cb --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/initializeContaining..st @@ -0,0 +1,4 @@ +initialization +initializeContaining: anObject + + content := anObject \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/with.return..st b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/with.return..st new file mode 100644 index 0000000..2a8d721 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/with.return..st @@ -0,0 +1,6 @@ +Combining +with: anOptional return: aDyadicBlock + + ^ anOptional + withContentDo: [ :foreignContent | self class containing: (aDyadicBlock value: content value: foreignContent) ] + ifUnused: [ anOptional ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/withAll.return..st b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/withAll.return..st new file mode 100644 index 0000000..7f95dec --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/withAll.return..st @@ -0,0 +1,13 @@ +Combining +withAll: optionals return: aMonadycBlock + + | combined | + + combined := (self class containing: (OrderedCollection with: content)) + withAll: optionals + injectInto: [ :contents :currentContent | + contents + add: currentContent; + yourself ]. + + ^ combined withContentDo: [ :contents | self class containing: (aMonadycBlock value: contents) ] ifUnused: [ combined ] \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/withContentDo.ifUnused..st b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/withContentDo.ifUnused..st new file mode 100644 index 0000000..f09ad9d --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/instance/withContentDo.ifUnused..st @@ -0,0 +1,4 @@ +Accessing +withContentDo: aBlockClosure ifUnused: aNothingBlock + + ^aBlockClosure value: content \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UsedOptional.class/methodProperties.json b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/methodProperties.json new file mode 100644 index 0000000..8c211c3 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/methodProperties.json @@ -0,0 +1,11 @@ +{ + "instance" : { + "initializeContaining:" : "GabrielOmarCotelli 3/16/2017 11:29", + "with:return:" : "GabrielOmarCotelli 3/16/2017 12:18", + "withAll:return:" : "GabrielOmarCotelli 3/16/2017 15:32", + "withContentDo:ifUnused:" : "GabrielOmarCotelli 3/16/2017 12:18" + }, + "class" : { + "containing:" : "GabrielOmarCotelli 3/16/2017 11:29" + } +} \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/UsedOptional.class/properties.json b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/properties.json new file mode 100644 index 0000000..098e3e7 --- /dev/null +++ b/source/Buoy-Dynamic-Binding.package/UsedOptional.class/properties.json @@ -0,0 +1,13 @@ +{ + "commentStamp" : "GabrielOmarCotelli 3/16/2017 11:28", + "super" : "Optional", + "category" : "Buoy-Dynamic-Binding", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "content" + ], + "name" : "UsedOptional", + "type" : "normal" +} \ No newline at end of file diff --git a/source/Buoy-Dynamic-Binding.package/monticello.meta/version b/source/Buoy-Dynamic-Binding.package/monticello.meta/version index d6add4c..b28564e 100644 --- a/source/Buoy-Dynamic-Binding.package/monticello.meta/version +++ b/source/Buoy-Dynamic-Binding.package/monticello.meta/version @@ -1 +1 @@ -(name 'Buoy-Dynamic-Binding-GabrielOmarCotelli.1' message 'Add Binding' id '1d891bee-2b07-0d00-9c07-90ae0dc74540' date '15 March 2017' time '4:45:57.00884 pm' author 'GabrielOmarCotelli' ancestors () stepChildren ()) \ No newline at end of file +(name 'Buoy-Dynamic-Binding-GabrielOmarCotelli.2' message 'Added Optional' id '0b414d1f-3f07-0d00-9a96-9b6002bbd58a' date '16 March 2017' time '3:39:46.729426 pm' author 'GabrielOmarCotelli' ancestors ((name 'Buoy-Dynamic-Binding-GabrielOmarCotelli.1' message 'Add Binding' id '1d891bee-2b07-0d00-9c07-90ae0dc74540' date '15 March 2017' time '4:45:57.00884 pm' author 'GabrielOmarCotelli' ancestors () stepChildren ())) stepChildren ()) \ No newline at end of file