Added variable "paths" to templates, like {person.age}.
This commit is contained in:
parent
dd2c646e3f
commit
567cf8a4f9
@ -2,7 +2,10 @@
|
|||||||
(:require
|
(:require
|
||||||
[clojure.math.combinatorics :as combo]
|
[clojure.math.combinatorics :as combo]
|
||||||
[clojure.string :as string]
|
[clojure.string :as string]
|
||||||
[instaparse.core :as insta]))
|
[instaparse.core :as insta]
|
||||||
|
[lemondronor.circlebot.logging :as logging]))
|
||||||
|
|
||||||
|
(logging/deflog "generation" logger)
|
||||||
|
|
||||||
|
|
||||||
(def ^:private %parse-template
|
(def ^:private %parse-template
|
||||||
@ -47,14 +50,6 @@
|
|||||||
|
|
||||||
(defmulti expand% (fn [template data] (first template)))
|
(defmulti expand% (fn [template data] (first template)))
|
||||||
|
|
||||||
;; (defmethod expand% :varref [template data]
|
|
||||||
;; (let [var (keyword (second template))
|
|
||||||
;; var-path (string/split var #"\.")
|
|
||||||
;; val (get-in data var-path)]
|
|
||||||
;; (if (or (nil? val) (= val ""))
|
|
||||||
;; '()
|
|
||||||
;; (list {:varrefs [var] :text (str (data var))}))))
|
|
||||||
|
|
||||||
(def vowels #{"a" "e" "i" "o" "u"})
|
(def vowels #{"a" "e" "i" "o" "u"})
|
||||||
|
|
||||||
(defn is-consonant? [c]
|
(defn is-consonant? [c]
|
||||||
@ -80,7 +75,9 @@
|
|||||||
(let [filter (filters (keyword filter-name))]
|
(let [filter (filters (keyword filter-name))]
|
||||||
(when-not filter
|
(when-not filter
|
||||||
(throw (js/Error. (str "Unknown filter: " filter-name))))
|
(throw (js/Error. (str "Unknown filter: " filter-name))))
|
||||||
(filter s))))
|
(let [fv (filter s)]
|
||||||
|
;;(log-info "Applied filter %s to %s: %s" filter-name s fv)
|
||||||
|
fv))))
|
||||||
|
|
||||||
|
|
||||||
(defn parse-varref [s]
|
(defn parse-varref [s]
|
||||||
@ -88,13 +85,25 @@
|
|||||||
{:var (keyword var) :filter filter}))
|
{:var (keyword var) :filter filter}))
|
||||||
|
|
||||||
|
|
||||||
|
;; (defmethod expand% :varref [template data]
|
||||||
|
;; (let [varref (second template)
|
||||||
|
;; {:keys [var filter]} (parse-varref varref)
|
||||||
|
;; val (data var)]
|
||||||
|
;; (if (or (nil? val) (= val ""))
|
||||||
|
;; '()
|
||||||
|
;; (list {:varrefs [var] :text (apply-filter (str (data var)) filter)}))))
|
||||||
|
|
||||||
(defmethod expand% :varref [template data]
|
(defmethod expand% :varref [template data]
|
||||||
(let [varref (second template)
|
(let [varref (second template)
|
||||||
{:keys [var filter]} (parse-varref varref)
|
{:keys [var filter]} (parse-varref varref)
|
||||||
val (data var)]
|
var-path (map keyword (string/split (name var) #"\."))
|
||||||
|
val (get-in data var-path)
|
||||||
|
;;_ (println "WOO template:" template "var:" var "var-path:" var-path "data:" data "val:" val)
|
||||||
|
]
|
||||||
(if (or (nil? val) (= val ""))
|
(if (or (nil? val) (= val ""))
|
||||||
'()
|
'()
|
||||||
(list {:varrefs [var] :text (apply-filter (str (data var)) filter)}))))
|
(list {:varrefs [var] :text (apply-filter (str val) filter)}))))
|
||||||
|
|
||||||
|
|
||||||
(defmethod expand% :text [template data]
|
(defmethod expand% :text [template data]
|
||||||
(list {:varrefs [] :text (second template)}))
|
(list {:varrefs [] :text (second template)}))
|
||||||
|
@ -95,12 +95,13 @@
|
|||||||
|
|
||||||
)))
|
)))
|
||||||
|
|
||||||
;; (deftest var-paths
|
(deftest var-paths
|
||||||
;; (is (= "Hello, John"
|
(testing "var-paths"
|
||||||
;; (generation/generate
|
(is (= "Hello, John"
|
||||||
;; [(generation/parse-template "Hello, {person.name}")]
|
(generation/generate
|
||||||
;; {:person {:name "John"}})))
|
[(generation/parse-template "Hello, {person.name}")]
|
||||||
;; (is (= 9
|
{:person {:name "John"}})))
|
||||||
;; (generation/generate
|
(is (= "I am 49"
|
||||||
;; [(generation/parse-template "Hello, {person.name}")]
|
(generation/generate
|
||||||
;; {:person {:age 49}}))))
|
[(generation/parse-template "I am {person.age}")]
|
||||||
|
{:person {:age 49}})))))
|
||||||
|
@ -2,11 +2,18 @@
|
|||||||
(:require [cljs.test :refer (deftest is testing)]
|
(:require [cljs.test :refer (deftest is testing)]
|
||||||
[lemondronor.circlebot :as circlebot]))
|
[lemondronor.circlebot :as circlebot]))
|
||||||
|
|
||||||
|
|
||||||
(def epsilon 0.0000001)
|
(def epsilon 0.0000001)
|
||||||
|
|
||||||
(defn a= [a b]
|
(defn a= [a b]
|
||||||
(< (Math/abs (- a b)) epsilon))
|
(< (Math/abs (- a b)) epsilon))
|
||||||
|
|
||||||
|
(defn strmatch [pattern text]
|
||||||
|
(if (string? text)
|
||||||
|
(re-find pattern text)
|
||||||
|
false))
|
||||||
|
|
||||||
|
|
||||||
;; (deftest bearing->angle
|
;; (deftest bearing->angle
|
||||||
;; (is (angles= (cooleradar/bearing->angle 0) (/ Math/PI 2)))
|
;; (is (angles= (cooleradar/bearing->angle 0) (/ Math/PI 2)))
|
||||||
;; (is (angles= (cooleradar/bearing->angle (/ Math/PI 2)) 0))
|
;; (is (angles= (cooleradar/bearing->angle (/ Math/PI 2)) 0))
|
||||||
@ -96,14 +103,14 @@
|
|||||||
|
|
||||||
(deftest expand-template
|
(deftest expand-template
|
||||||
(let [data {:locality "Palmdale", :continent "North America", :military? true, :alt 3850, :speed "209", :normalized-curviness 14.768651250300287, :accuracy "centroid", :country_a "USA", :continent_gid "whosonfirst:continent:102191575", :name "Palmdale", :squawk "5330", :icao "AE1482", :county_a "LO", :county "Los Angeles County", :source "whosonfirst", :gid "whosonfirst:locality:85923493", :curviness 1269.8089810739468, :locality_gid "whosonfirst:locality:85923493", :region "California", :militaryicao "AE1482", :region_a "CA", :nearbydistance 8.167, :callsign "RAIDR49", :layer "locality", :mlat? false, :country_gid "whosonfirst:country:85633793", :label "Palmdale, CA, USA", :id "85923493", :lon -118.00375, :region_gid "whosonfirst:region:85688637", :lat 34.661074, :militaryregistration "166765", :county_gid "whosonfirst:county:102086957", :started-circling-time 1576266715691, :distance 6.855, :source_id "85923493", :registration "166765", :confidence 0.5, :country "United States", :postime 1576266689756, :nearbylandmark "Living Faith Foursquare Church"}]
|
(let [data {:locality "Palmdale", :continent "North America", :military? true, :alt 3850, :speed "209", :normalized-curviness 14.768651250300287, :accuracy "centroid", :country_a "USA", :continent_gid "whosonfirst:continent:102191575", :name "Palmdale", :squawk "5330", :icao "AE1482", :county_a "LO", :county "Los Angeles County", :source "whosonfirst", :gid "whosonfirst:locality:85923493", :curviness 1269.8089810739468, :locality_gid "whosonfirst:locality:85923493", :region "California", :militaryicao "AE1482", :region_a "CA", :nearbydistance 8.167, :callsign "RAIDR49", :layer "locality", :mlat? false, :country_gid "whosonfirst:country:85633793", :label "Palmdale, CA, USA", :id "85923493", :lon -118.00375, :region_gid "whosonfirst:region:85688637", :lat 34.661074, :militaryregistration "166765", :county_gid "whosonfirst:county:102086957", :started-circling-time 1576266715691, :distance 6.855, :source_id "85923493", :registration "166765", :confidence 0.5, :country "United States", :postime 1576266689756, :nearbylandmark "Living Faith Foursquare Church"}]
|
||||||
(is (re-find #"military" (-> (circlebot/expand-template data) :text))))
|
(is (strmatch #"military" (-> (circlebot/expand-template data) :text))))
|
||||||
(let [data {:locality "Palmdale", :continent "North America", :military? true, :alt 3200, :speed "161", :normalized-curviness 15.783422690487765, :accuracy "centroid", :country_a "USA", :continent_gid "whosonfirst:continent:102191575", :name "Palmdale", :squawk "5330", :icao "AE1482", :county_a "LO", :county "Los Angeles County", :source "whosonfirst", :gid "whosonfirst:locality:85923493", :curviness 1098.803548060181, :locality_gid "whosonfirst:locality:85923493", :region "California", :militaryicao "AE1482", :region_a "CA", :nearbydistance 7.828, :callsign "RAIDR49", :layer "locality", :mlat? false, :country_gid "whosonfirst:country:85633793", :label "Palmdale, CA, USA", :id "85923493", :lon -118.049183, :region_gid "whosonfirst:region:85688637", :lat 34.649808, :militaryregistration "166765", :county_gid "whosonfirst:county:102086957", :started-circling-time 1576267564959, :distance 6.336, :source_id "85923493", :registration "166765", :confidence 0.5, :country "United States", :postime 1576267555709, :nearbylandmark "Living Faith Foursquare Church"}]
|
(let [data {:locality "Palmdale", :continent "North America", :military? true, :alt 3200, :speed "161", :normalized-curviness 15.783422690487765, :accuracy "centroid", :country_a "USA", :continent_gid "whosonfirst:continent:102191575", :name "Palmdale", :squawk "5330", :icao "AE1482", :county_a "LO", :county "Los Angeles County", :source "whosonfirst", :gid "whosonfirst:locality:85923493", :curviness 1098.803548060181, :locality_gid "whosonfirst:locality:85923493", :region "California", :militaryicao "AE1482", :region_a "CA", :nearbydistance 7.828, :callsign "RAIDR49", :layer "locality", :mlat? false, :country_gid "whosonfirst:country:85633793", :label "Palmdale, CA, USA", :id "85923493", :lon -118.049183, :region_gid "whosonfirst:region:85688637", :lat 34.649808, :militaryregistration "166765", :county_gid "whosonfirst:county:102086957", :started-circling-time 1576267564959, :distance 6.336, :source_id "85923493", :registration "166765", :confidence 0.5, :country "United States", :postime 1576267555709, :nearbylandmark "Living Faith Foursquare Church"}]
|
||||||
(is (re-find #"military" (-> (circlebot/expand-template data) :text))))
|
(is (strmatch #"military" (-> (circlebot/expand-template data) :text))))
|
||||||
(testing "a vs. an for type"
|
(testing "a vs. an for type"
|
||||||
(let [data {:registration "TEST" :icao "123" :type "Airbus 380" :locality "Test City"}]
|
(let [data {:registration "TEST" :icao "123" :type "Airbus 380" :locality "Test City"}]
|
||||||
(is (re-find #"an Airbus" (:text (circlebot/expand-template data)))))
|
(is (strmatch #"an Airbus" (:text (circlebot/expand-template data)))))
|
||||||
(let [data {:registration "TEST" :icao "123" :type "Yoyo 380" :locality "Test City"}]
|
(let [data {:registration "TEST" :icao "123" :type "Yoyo 380" :locality "Test City"}]
|
||||||
(is (re-find #"a Yoyo" (:text (circlebot/expand-template data)))))))
|
(is (strmatch #"a Yoyo" (:text (circlebot/expand-template data)))))))
|
||||||
|
|
||||||
|
|
||||||
(deftest merge-adsbx-sqb
|
(deftest merge-adsbx-sqb
|
||||||
@ -127,10 +134,10 @@
|
|||||||
reverse {:properties {:neighbourhood "Silver Lake" :locality "Los Angeles"}}
|
reverse {:properties {:neighbourhood "Silver Lake" :locality "Los Angeles"}}
|
||||||
nearby nil
|
nearby nil
|
||||||
desc (circlebot/generate-description ac sqb reverse nearby)]
|
desc (circlebot/generate-description ac sqb reverse nearby)]
|
||||||
(is (re-find #"NBADB0Y" desc))
|
(is (strmatch #"NBADB0Y" desc))
|
||||||
(is (re-find #"a B52" desc))
|
(is (strmatch #"a B52" desc))
|
||||||
(is (re-find #"Silver Lake.*Los Angeles" desc))
|
(is (strmatch #"Silver Lake.*Los Angeles" desc))
|
||||||
(is (re-find #"#NBADB0Y" desc))))
|
(is (strmatch #"#NBADB0Y" desc))))
|
||||||
(testing "Missing ADSBX registration"
|
(testing "Missing ADSBX registration"
|
||||||
(let [ac {:icao "B00B00"}
|
(let [ac {:icao "B00B00"}
|
||||||
sqb {:registration "NGOODB0Y"
|
sqb {:registration "NGOODB0Y"
|
||||||
@ -138,10 +145,10 @@
|
|||||||
reverse {:properties {:neighbourhood "Silver Lake" :locality "Los Angeles"}}
|
reverse {:properties {:neighbourhood "Silver Lake" :locality "Los Angeles"}}
|
||||||
nearby {:name "Disneyland" :distance 2}
|
nearby {:name "Disneyland" :distance 2}
|
||||||
desc (circlebot/generate-description ac sqb reverse nearby)]
|
desc (circlebot/generate-description ac sqb reverse nearby)]
|
||||||
(is (re-find #"NGOODB0Y" desc))
|
(is (strmatch #"NGOODB0Y" desc))
|
||||||
(is (re-find #"a B52" desc))
|
(is (strmatch #"a B52" desc))
|
||||||
(is (re-find #"Silver Lake.*Los Angeles" desc))
|
(is (strmatch #"Silver Lake.*Los Angeles" desc))
|
||||||
(is (re-find #"#NGOODB0Y" desc))))
|
(is (strmatch #"#NGOODB0Y" desc))))
|
||||||
(testing "foo"
|
(testing "foo"
|
||||||
(let [ac {:military? false :alt 1300 :speed 72.1 :squawk "1200"
|
(let [ac {:military? false :alt 1300 :speed 72.1 :squawk "1200"
|
||||||
:icao "AAE0C2" :type nil, :callsign "N80NT", :registration nil}
|
:icao "AAE0C2" :type nil, :callsign "N80NT", :registration nil}
|
||||||
@ -149,14 +156,14 @@
|
|||||||
reverse {:properties {:neighbourhood "Silver Lake" :locality "Los Angeles"}}
|
reverse {:properties {:neighbourhood "Silver Lake" :locality "Los Angeles"}}
|
||||||
nearby {:name "Disneyland" :distance 2}
|
nearby {:name "Disneyland" :distance 2}
|
||||||
desc (circlebot/generate-description ac sqb reverse nearby)]
|
desc (circlebot/generate-description ac sqb reverse nearby)]
|
||||||
(is (re-find #"N80NT" desc))
|
(is (strmatch #"N80NT" desc))
|
||||||
(is (re-find #"a Eurocopter Squirrel AS 350 B2" desc))
|
(is (strmatch #"a Eurocopter Squirrel AS 350 B2" desc))
|
||||||
(is (re-find #"callsign N80NT" desc))
|
(is (strmatch #"callsign N80NT" desc))
|
||||||
(is (re-find #"Silver Lake.*Los Angeles" desc))
|
(is (strmatch #"Silver Lake.*Los Angeles" desc))
|
||||||
(is (re-find #"1300 feet" desc))
|
(is (strmatch #"1300 feet" desc))
|
||||||
(is (re-find #"speed 83 MPH" desc))
|
(is (strmatch #"speed 83 MPH" desc))
|
||||||
(is (re-find #"squawking 1200" desc))
|
(is (strmatch #"squawking 1200" desc))
|
||||||
(is (re-find #"#N80NT" desc)))))
|
(is (strmatch #"#N80NT" desc)))))
|
||||||
|
|
||||||
|
|
||||||
(deftest filter-landmarks
|
(deftest filter-landmarks
|
||||||
|
Loading…
Reference in New Issue
Block a user