@Override public Document increment(CharSequence name, Value increment) { if (!increment.isNumber()) throw new IllegalArgumentException("The increment must be a number but is " + increment); if (fields.containsKey(name)) { Number current = getNumber(name); if (current != null) { Value updated = Value.create(MathOps.add(current, increment.asNumber())); setValue(name, Value.create(updated)); } } else { setValue(name, increment); } return this; }
@Test public void testAsSetAction() throws Exception { final Value<String> value = Value.create("1"); assertEquals(value.get(), "1"); TestSubscriber<String> testSubscriber = new TestSubscriber<>(); Subscription subscribe = value.asObservable().subscribe(testSubscriber); value.asSetAction().call("2"); testSubscriber.assertValueCount(2); testSubscriber.assertValues("1", "2"); }
@Override public Value remove(CharSequence name) { if (!fields.containsKey(name)) return null; Comparable<?> removedValue = fields.remove(name); return Value.create(removedValue); }
@Override public Value get(CharSequence fieldName, Comparable<?> defaultValue) { Value value = fields.get(fieldName); return value != null ? value : Value.create(defaultValue); }