001  (ns dog-and-duck.scratch.parser
002    (:require [clojure.java.io :refer [file]]
003              [clojure.string :refer [ends-with?]]
004              [clojure.walk :refer [keywordize-keys]]
005              [clojure.data.json :as json]
006              [dog-and-duck.quack.quack :as q]))
007  
008  ;;;     Copyright (C) Simon Brooke, 2022
009  
010  ;;;     This program is free software; you can redistribute it and/or
011  ;;;     modify it under the terms of the GNU General Public License
012  ;;;     as published by the Free Software Foundation; either version 2
013  ;;;     of the License, or (at your option) any later version.
014  
015  ;;;     This program is distributed in the hope that it will be useful,
016  ;;;     but WITHOUT ANY WARRANTY; without even the implied warranty of
017  ;;;     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
018  ;;;     GNU General Public License for more details.
019  
020  ;;;     You should have received a copy of the GNU General Public License
021  ;;;     along with this program; if not, write to the Free Software
022  ;;;     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
023  
024  (defn clean
025    "Take this `json` input, and return a sequence of ActivityPub objects 
026     represented by it."
027    [json]
028    (let [feed (json/read-str json)]
029      (map
030       keywordize-keys
031       (filter
032        q/object?
033        (cond (map? feed) (list (keywordize-keys feed))
034              (coll? feed) (map keywordize-keys feed))))))
035  
036  (clean (slurp "resources/activitystreams-test-documents/core-ex1-jsonld.json"))
037  
038  (map
039   #(when 
040     (ends-with? (str %) ".json") 
041      (let [objects (clean (slurp %))]
042        (list (str %) 
043              (count objects) 
044              (map :type objects))))
045   (file-seq (file "resources/activitystreams-test-documents")))
046  
047  (-> "resources/activitystreams-test-documents/simple0020.json" slurp clean first :actor)