|
46 | 46 |
|
47 | 47 | (def ^{:const true :tag String :added "1.0.0"}
|
48 | 48 | default-reader-filenames
|
49 |
| - "Default data reader filenames." |
| 49 | + "Default data reader filenames (Clojure code)." |
50 | 50 | ["data_readers.clj" "data_readers.cljc"])
|
51 | 51 |
|
52 |
| -(def ^{:const true :tag String :added "1.2.3"} |
53 |
| - default-reader-filename-res |
54 |
| - "Data reader filename in resources subdirectory." |
55 |
| - "bankster_data_readers.clj") |
| 52 | +(def ^{:const true :tag String :added "1.2.4"} |
| 53 | + default-data-reader-filename |
| 54 | + "Default data reader filename (pure data)." |
| 55 | + "data_readers_edn.clj") |
56 | 56 |
|
57 | 57 | (def ^{:const true :tag String :added "1.0.0"}
|
58 | 58 | default-handlers-pathname
|
|
248 | 248 | (let [nsp (symbol (str "'" handlers-namespace))]
|
249 | 249 | (list 'in-ns nsp))))
|
250 | 250 |
|
251 |
| -(defn handler-gen |
252 |
| - "Generates handler functions for tagged literals for each namespaced currency." |
253 |
| - {:no-doc true :added "1.0.0"} |
254 |
| - [names] |
| 251 | +(defn handler-gen-for-prefix |
| 252 | + {:private true :added "1.0.0"} |
| 253 | + [prefix names] |
255 | 254 | (map
|
256 |
| - (fn [n] (list 'defn (symbol (str "lit-" n)) |
257 |
| - '{:no-doc true} |
258 |
| - '[arg] (list 'ns-lit (str n) 'arg))) |
| 255 | + (fn [n] |
| 256 | + (list 'defn (symbol (str prefix "-" n)) |
| 257 | + '{:no-doc true} |
| 258 | + '[arg] (list (symbol (str "ns-" prefix)) (str n) 'arg))) |
259 | 259 | names))
|
260 | 260 |
|
| 261 | +(defn handler-gen |
| 262 | + "Generates handler functions for tagged literals for each namespaced currency. Each |
| 263 | + function will have a prefixed name." |
| 264 | + [names] |
| 265 | + (concat (handler-gen-for-prefix "code-literal" names) |
| 266 | + (handler-gen-for-prefix "data-literal" names))) |
| 267 | + |
261 | 268 | (defn readers-export
|
262 | 269 | "Creates clojure source code files with reader functions for tagged literals handling
|
263 | 270 | on a basis of registry information and data reader map files referring to the
|
|
290 | 297 | ([]
|
291 | 298 | (readers-export (registry/state)
|
292 | 299 | default-reader-filenames
|
293 |
| - default-reader-filename-res |
| 300 | + default-data-reader-filename |
294 | 301 | default-handlers-pathname
|
295 | 302 | default-handlers-namespace))
|
296 | 303 | ([^Registry registry]
|
297 | 304 | (readers-export registry
|
298 | 305 | default-reader-filenames
|
299 |
| - default-reader-filename-res |
| 306 | + default-data-reader-filename |
300 | 307 | default-handlers-pathname
|
301 | 308 | default-handlers-namespace))
|
302 | 309 | ([^Registry registry filenames]
|
303 | 310 | (readers-export registry
|
304 | 311 | filenames
|
305 |
| - default-reader-filename-res |
| 312 | + default-data-reader-filename |
306 | 313 | default-handlers-pathname
|
307 | 314 | default-handlers-namespace))
|
308 |
| - ([^Registry registry filenames res-filename] |
| 315 | + ([^Registry registry filenames data-filename] |
309 | 316 | (readers-export registry
|
310 | 317 | filenames
|
311 |
| - res-filename |
| 318 | + data-filename |
312 | 319 | default-handlers-pathname
|
313 | 320 | default-handlers-namespace))
|
314 |
| - ([^Registry registry filenames res-filename handlers-pathname handlers-namespace] |
| 321 | + ([^Registry registry filenames data-filename handlers-pathname handlers-namespace] |
315 | 322 | (when-some [nsses (->> (.cur-id->cur ^Registry registry)
|
316 | 323 | (map (comp namespace first))
|
317 | 324 | (filter identity)
|
318 | 325 | set seq)]
|
319 |
| - (let [m (->> nsses |
320 |
| - (map #(vector (symbol "money" %) (symbol handlers-namespace (str "lit-" %)))) |
321 |
| - (into {'money 'io.randomseed.bankster.money/lit |
322 |
| - 'currency 'io.randomseed.bankster.currency/lit}))] |
| 326 | + (let [m (->> nsses |
| 327 | + (map #(vector (symbol "money" %) (symbol handlers-namespace (str "code-literal-" %)))) |
| 328 | + (into {'money 'io.randomseed.bankster.money/code-literal |
| 329 | + 'currency 'io.randomseed.bankster.currency/code-literal})) |
| 330 | + dm (->> nsses |
| 331 | + (map #(vector (symbol "money" %) (symbol handlers-namespace (str "data-literal-" %)))) |
| 332 | + (into {'money 'io.randomseed.bankster.money/data-literal |
| 333 | + 'currency 'io.randomseed.bankster.currency/data-literal}))] |
323 | 334 | (when-some [fdir (io/resource (first filenames))]
|
324 | 335 | (when-some [pdir (.getParent (io/file fdir))]
|
325 | 336 | (when-some [hfile (io/file pdir handlers-pathname)]
|
326 | 337 | (println)
|
327 |
| - (println "------------------- readers map:") |
| 338 | + (println "------------- data readers map (for handling Clojure code):") |
328 | 339 | (println)
|
329 | 340 | (puget/cprint m)
|
330 | 341 | (println)
|
| 342 | + (println "------------- data readers map (for handling EDN data):") |
| 343 | + (println) |
| 344 | + (puget/cprint dm) |
| 345 | + (println) |
331 | 346 | (doseq [f filenames]
|
332 | 347 | (let [fname (io/file pdir f)]
|
333 | 348 | (println "Exporting to:" (str fname))
|
334 | 349 | (spit fname (puget/pprint-str m))))
|
335 |
| - (when-some [rdir (fs/resource-pathname default-resource-name |
336 |
| - default-resource-must-exist-file)] |
337 |
| - (let [fname (io/file (.getParent ^java.io.File (io/file rdir)) res-filename)] |
| 350 | + (when (some? (seq data-filename)) |
| 351 | + (when-some [fname (io/file pdir data-filename)] |
338 | 352 | (println "Exporting to:" (str fname))
|
339 |
| - (spit fname (puget/pprint-str m)))) |
| 353 | + (spit fname (puget/pprint-str dm)))) |
| 354 | + (println) |
340 | 355 | (println "Generating handlers code to:" (str hfile))
|
341 | 356 | (some->> nsses
|
342 |
| - handler-gen |
| 357 | + (handler-gen) |
343 | 358 | (cons (handler-preamble handlers-namespace))
|
344 | 359 | (map puget/pprint-str)
|
345 | 360 | (str/join (str \newline \newline))
|
|
0 commit comments