diff --git a/src/main/java/org/eolang/jeo/representation/License.java b/src/main/java/org/eolang/jeo/representation/License.java new file mode 100644 index 000000000..95facc980 --- /dev/null +++ b/src/main/java/org/eolang/jeo/representation/License.java @@ -0,0 +1,67 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2024 Objectionary.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.eolang.jeo.representation; + +import org.cactoos.Scalar; +import org.cactoos.io.ResourceOf; +import org.cactoos.text.TextOf; + +/** + * Representation of project license. + * + * @since 0.6.27 + */ +public final class License implements Scalar { + + /** + * The name of file with license. + */ + private final String name; + + /** + * Ctor with default value. + */ + public License() { + this("LICENSE.txt"); + } + + /** + * Primary ctor. + * + * @param name The name of file with license. + */ + public License(final String name) { + this.name = name; + } + + @Override + public String value() { + return new TextOf(new ResourceOf(this.name)).toString(); + } + + @Override + public String toString() { + return this.value(); + } +} diff --git a/src/main/java/org/eolang/jeo/representation/directives/DirectivesProgram.java b/src/main/java/org/eolang/jeo/representation/directives/DirectivesProgram.java index 806871814..93d803315 100644 --- a/src/main/java/org/eolang/jeo/representation/directives/DirectivesProgram.java +++ b/src/main/java/org/eolang/jeo/representation/directives/DirectivesProgram.java @@ -28,6 +28,7 @@ import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.util.Iterator; +import org.eolang.jeo.representation.License; import org.xembly.Directive; import org.xembly.Directives; @@ -117,7 +118,7 @@ public Iterator iterator() { .add("listing") .set(this.listing) .up() - .add("license").set(DirectivesProgram.license()).up() + .add("license").set(new License()).up() .append(this.metas) .attr("ms", this.milliseconds) .add("objects"); @@ -125,40 +126,4 @@ public Iterator iterator() { directives.up(); return directives.iterator(); } - - /** - * Text of the license. - * @return License text. - * @todo #850 Retrieve License From The File. - * We use license as a file in the project root. - * See LICENSE.txt file. - * It's better to read this file and return its content. - * Otherwise, we have to maintain the license in two places. - */ - private static String license() { - return String.join( - "\n", - "The MIT License (MIT)", - "", - "Copyright (c) 2016-2024 Objectionary.com", - "", - "Permission is hereby granted, free of charge, to any person obtaining a copy", - "of this software and associated documentation files (the \"Software\"), to deal", - "in the Software without restriction, including without limitation the rights", - "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell", - "copies of the Software, and to permit persons to whom the Software is", - "furnished to do so, subject to the following conditions:", - "", - "The above copyright notice and this permission notice shall be included", - "in all copies or substantial portions of the Software.", - "", - "THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR", - "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,", - "FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE", - "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER", - "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,", - "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE", - "SOFTWARE." - ); - } } diff --git a/src/main/resources/LICENSE.txt b/src/main/resources/LICENSE.txt new file mode 100644 index 000000000..879402bb7 --- /dev/null +++ b/src/main/resources/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016-2024 Objectionary.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/src/test/java/org/eolang/jeo/representation/LicenseTest.java b/src/test/java/org/eolang/jeo/representation/LicenseTest.java new file mode 100644 index 000000000..89d1940de --- /dev/null +++ b/src/test/java/org/eolang/jeo/representation/LicenseTest.java @@ -0,0 +1,50 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2016-2024 Objectionary.com + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package org.eolang.jeo.representation; + +import org.cactoos.text.FormattedText; +import org.hamcrest.MatcherAssert; +import org.hamcrest.Matchers; +import org.junit.jupiter.api.Test; + +/** + * Test suite for {@link License}. + * + * @since 0.6.27 + */ +final class LicenseTest { + + @Test + void readsLicenseFileCorrectly() throws Exception { + final String name = "LICENSE.txt"; + MatcherAssert.assertThat( + new FormattedText( + "Unexpected file:'%s' content", + name + ).asString(), + new License(name).value(), + Matchers.containsString("MIT") + ); + } +}