andrewmcveigh / cljs-time

A clj-time inspired date library for clojurescript.
341 stars 57 forks source link

setYear is not a function when parsing dates #35

Closed iwsmith closed 9 years ago

iwsmith commented 9 years ago

I am pretty sure this is a case of me being dumb, but I am getting an error whenever I try to parse a date:

iwsmith-site.core=> (format/parse (:basic-date format/formatters) "20150501")
#<TypeError: p1__22659_SHARP_.setYear is not a function>
         cljs.core.merge_with.call.cljs_time.internal.core.valid_date_QMARK_.call.cljs.core.reduce.call.vec__22697 (jar:file:/Users/iwsmith/.m2/repository/com/andrewmcveigh/cljs-time/0.3.7/cljs-time-0.3.7.jar!/cljs_time/format.cljs:395:29)
         cljs.core.merge_with.cljs$core$IFn$_invoke$arity$variadic.merge_entry (jar:file:/Users/iwsmith/.m2/repository/org/clojure/clojurescript/0.0-3211/clojurescript-0.0-3211.jar!/cljs/core.cljs:25513:3)
         Function.cljs.core.seq_reduce.cljs$core$IFn$_invoke$arity$3 (jar:file:/Users/iwsmith/.m2/repository/org/clojure/clojurescript/0.0-3211/clojurescript-0.0-3211.jar!/cljs/core.cljs:8244:3)
         cljs.core.PersistentArrayMapSeq.cljs$core$IReduce$_reduce$arity$3 (jar:file:/Users/iwsmith/.m2/repository/org/clojure/clojurescript/0.0-3211/clojurescript-0.0-3211.jar!/cljs/core.cljs:5618:28)
         Function.cljs.core.reduce.cljs$core$IFn$_invoke$arity$3 (jar:file:/Users/iwsmith/.m2/repository/org/clojure/clojurescript/0.0-3211/clojurescript-0.0-3211.jar!/cljs/core.cljs:2042:29)

My namespace is configured as follows:

(ns ^:figwheel-always iwsmith-site.core
    (:require [om.core :as om :include-macros true]
              [om.dom :as dom :include-macros true]
              [cljs-time.core :as time]
              [cljs-time.format :as format]
              [sablono.core :as html :refer-macros [html]]))

And project.clj:

[com.andrewmcveigh/cljs-time "0.3.7"]

Thanks for taking a look!

andrewmcveigh commented 9 years ago

Hey,

I've not seen this before, but I think it's got something to do with figwheel, and/or the compilation settings. I've managed to reproduce something similar so I'll take a look.

iwsmith commented 9 years ago

Awesome! Let me know if I can help out in anyway.

Just incase I've included my project.clj below.

(defproject iwsmith-site "0.1.0-SNAPSHOT"
  :description "FIXME: write this!"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}

  :dependencies [[org.clojure/clojure "1.6.0"]
                 [org.clojure/clojurescript "0.0-3211"]
                 [org.clojure/core.async "0.1.346.0-17112a-alpha"]
                 [sablono "0.3.4"]
                 [com.andrewmcveigh/cljs-time "0.3.7"]
                 [org.omcljs/om "0.8.8"]]

  :plugins [[lein-cljsbuild "1.0.5"]
            [lein-figwheel "0.3.3"]]

  :source-paths ["src"]

  :clean-targets ^{:protect false} ["resources/public/js/compiled" "target"]

  :cljsbuild {
    :builds [{:id "dev"
              :source-paths ["src"]

              :figwheel { :on-jsload "iwsmith-site.core/on-js-reload" }

              :compiler {:main iwsmith-site.core
                         :asset-path "js/compiled/out"
                         :output-to "resources/public/js/compiled/iwsmith_site.js"
                         :output-dir "resources/public/js/compiled/out"
                         :source-map-timestamp true }}
             {:id "min"
              :source-paths ["src"]
              :compiler {:output-to "resources/public/js/compiled/iwsmith_site.js"
                         :main iwsmith-site.core                         
                         :optimizations :advanced
                         :pretty-print false}}]}

  :figwheel {
             ;; :http-server-root "public" ;; default and assumes "resources" 
             ;; :server-port 3449 ;; default
             :css-dirs ["resources/public/css"] ;; watch and update CSS

             ;; Start an nREPL server into the running figwheel process
             ;; :nrepl-port 7888

             ;; Server Ring Handler (optional)
             ;; if you want to embed a ring handler into the figwheel http-kit
             ;; server, this is for simple ring servers, if this
             ;; doesn't work for you just run your own server :)
             ;; :ring-handler hello_world.server/handler

             ;; To be able to open files in your editor from the heads up display
             ;; you will need to put a script on your path.
             ;; that script will have to take a file path and a line number
             ;; ie. in  ~/bin/myfile-opener
             ;; #! /bin/sh
             ;; emacsclient -n +$2 $1
             ;;
             ;; :open-file-command "myfile-opener"

             ;; if you want to disable the REPL
             ;; :repl false

             ;; to configure a different figwheel logfile path
             ;; :server-logfile "tmp/logs/figwheel-logfile.log" 
             })
andrewmcveigh commented 9 years ago

So the problem at my end is that if you start figwheel before you've done:

(ns ...
  (:require [cljs-time.format :as format]))

(format/parse (:basic-date format/formatters) "20150101")

...

... then the namespace doesn't get properly compiled in (or maybe at all?). I've not used figwheel enough to know if this is a trait of figwheel, or something to do with the library, though I'd lean toward it being a problem with the default compilation options of clojurescript clashing with the live-reloading of figwheel.

Could you check if the above is true your end? (first write the code, then restart figwheel)

iwsmith commented 9 years ago

Interesting, that does seem to fix it. I guess we can chalk this up to user error or strange figwheel magics.

Thanks!