Skip to content

Commit

Permalink
Merge pull request #4 from olenagerasimova/1-init
Browse files Browse the repository at this point in the history
feat: initialise podspec
  • Loading branch information
olenagerasimova authored Nov 3, 2022
2 parents f7733fd + 3412eef commit b74b7ad
Show file tree
Hide file tree
Showing 5 changed files with 82 additions and 0 deletions.
File renamed without changes.
File renamed without changes.
File renamed without changes.
48 changes: 48 additions & 0 deletions src/main/java/com/artipie/cocoa/metadata/Podspec.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,19 @@
*/
package com.artipie.cocoa.metadata;

import com.artipie.asto.misc.UncheckedIOScalar;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringReader;
import java.net.URI;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
import javax.json.JsonException;
import javax.json.JsonObject;
import javax.json.JsonValue;
import org.testng.reporters.Files;

/**
* Cocoa PODSPEC metadata.
Expand Down Expand Up @@ -65,6 +71,24 @@ public interface Podspec {
*/
String summary();

/**
* Create {@link Podspec} instance from podspec file input stream.
* @param input Podspec file input stream
* @return Instance of {@link Podspec}
* @throws IOException On error
*/
@SuppressWarnings("PMD.ProhibitPublicStaticMethods")
static Podspec initiate(final InputStream input) throws IOException {
final String data = Files.readFile(input);
Podspec res;
try {
res = new Json(javax.json.Json.createReader(new StringReader(data)).readObject());
} catch (final JsonException err) {
res = new Ruby(data);
}
return res;
}

/**
* Podspec in ruby format.
* @since 0.1
Expand All @@ -84,6 +108,14 @@ public Ruby(final String data) {
this.data = data;
}

/**
* Ctor.
* @param input Input stream with ruby podspec
*/
public Ruby(final InputStream input) {
this(new UncheckedIOScalar<>(() -> Files.readFile(input)).value());
}

@Override
public String name() {
return this.getStringValue(".name");
Expand Down Expand Up @@ -188,6 +220,22 @@ public Json(final JsonObject data) {
this.data = data;
}

/**
* Ctor from spec string.
* @param data Json podspec string data
*/
public Json(final String data) {
this(javax.json.Json.createReader(new StringReader(data)).readObject());
}

/**
* Ctor from spec input stream.
* @param data Json podspec input stream
*/
public Json(final InputStream data) {
this(javax.json.Json.createReader(data).readObject());
}

@Override
public String name() {
return this.data.getString("name");
Expand Down
34 changes: 34 additions & 0 deletions src/test/java/com/artipie/cocoa/metadata/PodspecTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/*
* The MIT License (MIT) Copyright (c) 2020-2022 artipie.com
* https://github.com/cocoa-adapter/artipie/LICENSE.txt
*/
package com.artipie.cocoa.metadata;

import com.artipie.asto.test.TestResource;
import java.io.IOException;
import org.hamcrest.MatcherAssert;
import org.hamcrest.core.IsInstanceOf;
import org.junit.jupiter.api.Test;

/**
* Test for {@link Podspec}.
* @since 0.1
*/
class PodspecTest {

@Test
void initializesRuby() throws IOException {
MatcherAssert.assertThat(
Podspec.initiate(new TestResource("example.spec").asInputStream()),
new IsInstanceOf(Podspec.Ruby.class)
);
}

@Test
void initializesJson() throws IOException {
MatcherAssert.assertThat(
Podspec.initiate(new TestResource("example.spec.json").asInputStream()),
new IsInstanceOf(Podspec.Json.class)
);
}
}

0 comments on commit b74b7ad

Please sign in to comment.