Coder Social home page Coder Social logo

clj-inplus's Introduction

in+ Build Status

A clojure microlibrary to help with using deep nested objects.

Clojars Project

Using

(def obj
  {:foo {:bar [
    {:id "one"
     :baz 123}
    {:id "two"
     :baz 456}
    {:id "three"
     :baz 789}]}})

(require '[inplus.core :refer [get-in+ update-in+ assoc-in+ dissoc-in+]])

;; They work like regular *-in
(get-in+ obj [:foo :bar]) ; => [{:id "one" :baz 123} ...]
(update-in+ obj [:foo] assoc :bar :buzz) ; => {:foo {:bar :buzz}}
(assoc-in+ obj [:foo :bar] 88) ; => {:foo {:bar 88}}

;; A "new" function is dissoc-in+, which dissoc's the last key in the array
(dissoc-in+ obj [:foo :bar]) ; => {:foo {}}

;; They also can go deeply into collections via a "spec"
(get-in+ obj [:foo :bar {:id "one"}]) ; => {:id "one" :baz 123}
(get-in+ obj [:foo :bar {:id "one"} :baz]) ; => 123

;; update-in+ works the same, but will also create new structures if necessary
(update-in+ obj [:foo :bar {:id "two"} :baz] inc)
  ; => {... {:id "two" :baz 457} ...}
(update-in+ obj [:foo :bomb {:type "yarn"} :baz] inc)
  ; => {:foo {:bomb [{:type "yarn" :baz 1}] ...}}

;; assoc-in+ uses update-in+, so they support similar features
(assoc-in+ [:foo :bar {:id "four"} :baz] 1000)
  ; => {:foo {:bar [... {:id "four" :baz 1000}]}}
(assoc-in+ [:foo :bar {:id "five"}])
  ; => {:foo {:bar [... {:id "five"}]}}

;; dissoc-in+ supports removing from a collection as well as keys
(dissoc-in+ obj [:foo :bar {:id "one"} :baz])
  ; => {:foo {:bar [{:id "one"} ...]}}
(dissoc-in+ obj [:foo :bar {:id "one"}])
  ; => {:foo {:bar [{:id "two" :baz 456} ...]}}

License

MIT license in LICENSE file.

clj-inplus's People

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.