diff --git a/CHANGELOG.md b/CHANGELOG.md index a224247..efa61d8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # toml4j Changelog +## 0.6.0 / 2016-05-09 + +## Added + +* Toml#toMap() convenience method (thanks to __[andytill](https://github.com/andytill)__ and __[Gyscos](https://github.com/Gyscos)) + ## 0.5.1 / 2016-01-24 ### Fixed diff --git a/README.md b/README.md index f9c085a..0426750 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,14 @@ An exception is thrown if the source is not valid TOML. The data can then be accessed either by converting the Toml instance to your own class or by accessing tables and keys by name. +### Maps + +`Toml#toMap()` is a quick way to turn a Toml instance into a `Map`. + +```java +Map map = new Toml().read("a=1").toMap(); +``` + ### Custom classes `Toml#to(Class)` maps a Toml instance to the given class. @@ -214,13 +222,6 @@ for (Map.Entry entry : myToml.entrySet()) { } ``` -You can also convert a Toml instance to a `Map`: - -```java -Toml toml = new Toml().read("a = 1"); -Map map = toml.to(Map.class); -``` - `Toml#contains(String)` verifies that the instance contains a key of any type (primitive, table or array of tables) of the given name. `Toml#containsPrimitive(String)`, `Toml#containsTable(String)` and `Toml#containsTableArray(String)` return true only if a key exists and is a primitive, table or array of tables, respectively. Compound keys can be used to check existence at any depth. @@ -245,7 +246,15 @@ class AClass { TomlWriter tomlWriter = new TomlWriter(); AClass obj = new AClass(); + +Map map = new HashMap(); +int[] intArray = { 2, 3 }; +map.put("anInt", 1); +map.put("anArray", intArray); + String tomlString = tomlWriter.write(obj); +tomlString = tomlWriter.write(map); + tomlWriter.write(obj, new File("path/to/file")); tomlWriter.write(obj, new ByteArrayOutputStream()); tomlWriter.write(obj, new OutputStreamWriter(anOutputStream)); diff --git a/src/main/java/com/moandjiezana/toml/Toml.java b/src/main/java/com/moandjiezana/toml/Toml.java index 27a66d3..4babb93 100644 --- a/src/main/java/com/moandjiezana/toml/Toml.java +++ b/src/main/java/com/moandjiezana/toml/Toml.java @@ -302,6 +302,16 @@ public class Toml { * @return A new instance of targetClass. */ public T to(Class targetClass) { + JsonElement json = DEFAULT_GSON.toJsonTree(toMap()); + + if (targetClass == JsonElement.class) { + return targetClass.cast(json); + } + + return DEFAULT_GSON.fromJson(json, targetClass); + } + + public Map toMap() { HashMap valuesCopy = new HashMap(values); if (defaults != null) { @@ -311,14 +321,8 @@ public class Toml { } } } - - JsonElement json = DEFAULT_GSON.toJsonTree(valuesCopy); - - if (targetClass == JsonElement.class) { - return targetClass.cast(json); - } - - return DEFAULT_GSON.fromJson(json, targetClass); + + return valuesCopy; } /** diff --git a/src/test/java/com/moandjiezana/toml/TomlWriterTest.java b/src/test/java/com/moandjiezana/toml/TomlWriterTest.java index f8e3773..8794a18 100644 --- a/src/test/java/com/moandjiezana/toml/TomlWriterTest.java +++ b/src/test/java/com/moandjiezana/toml/TomlWriterTest.java @@ -267,6 +267,11 @@ public class TomlWriterTest { assertEquals("[b.c]\nanInt = 1\n", new TomlWriter().write(new A())); } + + @Test + public void should_write_map() throws Exception { + assertEquals("a = 1\n", new TomlWriter().write(new Toml().read("a = 1").toMap())); + } class Base { protected int anInt = 2; diff --git a/src/test/java/com/moandjiezana/toml/Toml_ToMapTest.java b/src/test/java/com/moandjiezana/toml/Toml_ToMapTest.java new file mode 100644 index 0000000..84e6515 --- /dev/null +++ b/src/test/java/com/moandjiezana/toml/Toml_ToMapTest.java @@ -0,0 +1,26 @@ +package com.moandjiezana.toml; + +import java.util.HashMap; +import java.util.Map; + +import org.junit.Assert; +import org.junit.Test; + +public class Toml_ToMapTest { + + @Test + public void should_convert_simple_values() { + Map toml = new Toml().read("a = 1").toMap(); + + Assert.assertEquals(Long.valueOf(1), toml.get("a")); + } + + @Test + @SuppressWarnings("unchecked") + public void should_covert_table() throws Exception { + Map toml = new Toml().read("c = 2\n [a]\n b = 1").toMap(); + + Assert.assertEquals(Long.valueOf(1), ((Map) toml.get("a")).get("b")); + Assert.assertEquals(Long.valueOf(2), toml.get("c")); + } +}