Duly noted, thanks Jonathan.

(defn- extract-url-filename [url]
  (let [filename (.getFile url)]
    (if (or (blank? filename)
            (= filename "/"))
      "index.html"
      (subs filename 1))))


On Apr 24, 1:48 am, JonathanMeeks <jonathanme...@gmail.com> wrote:
> It's not answering your idiomatic clojure question, but extract-url-
> filename will have problems because of this:
>
> user> (.getFile (URL. "http://www.foo.com/";))
> "/"
>
> On Apr 21, 1:08 pm, Brent Millare <brent.mill...@gmail.com> wrote:
>
>
>
> > Technically I didn't write my own cause I just copied pasted it ;)
>
> > For the purposes of this review, just consider that library code or a
> > reference so everyone knows what it does. :)
>
> > Sean Devlin wrote:
> > > At first glance, you should be requiring c.c.string, and don't write
> > > your own blank? fn.  That's the only low hanging fruit I see.
>
> > > On Apr 21, 1:47 pm, Brent Millare <brent.mill...@gmail.com> wrote:
> > > > Hey all,
>
> > > > I wrote a clojure version of the simplest functionality of wget. I
> > > > basically translated the java version into clojure code, but I'm not
> > > > quite happy with the wget-binary function because I use a loop, and I
> > > > feel like someone else has a more idiomatic solution to iterating
> > > > through a java-array. Also, I don't know if my way of handling the no
> > > > filename case is best. Please tell me how to improve my code,
> > > > especially in the interop sections.
>
> > > > (ns dj
> > > >   (:import [java.io File FileOutputStream BufferedInputStream
> > > > BufferedReader InputStreamReader])
> > > >   (:import [java.net URL])
> > > >   (:require [clojure.contrib [duck-streams :as duck-streams]]))
>
> > > > (defn blank?
> > > >   "True if s is nil, empty, or contains only whitespace."
> > > >   [#^String s]
> > > >   (every? (fn [#^Character c] (Character/isWhitespace c)) s))
>
> > > > (defn- extract-url-filename [url]
> > > >   (let [filename (.getFile url)]
> > > >     (if (blank? filename)
> > > >       "index.html"
> > > >       (subs filename 1))))
>
> > > > (defn- wget-binary [con content-length]
> > > >   (with-open [stream (BufferedInputStream. (.getInputStream con))]
> > > >     (let [data (make-array Byte/TYPE content-length)]
> > > >       (loop [offset 0]
> > > >         (if (< offset content-length)
> > > >           (let [bytesRead (.read stream
> > > >                                  data
> > > >                                  offset
> > > >                                  (- content-length
> > > >                                     offset))]
> > > >             (if (= bytesRead -1)
> > > >               data
> > > >               (recur (+ offset bytesRead))))
> > > >           data)))))
>
> > > > (defn- wget-text [url-obj]
> > > >   (with-open [buf (-> url-obj
> > > >                       (.openStream)
> > > >                       (InputStreamReader.)
> > > >                       (BufferedReader.))]
> > > >     (apply str (line-seq buf))))
>
> > > > (defn wget [url-address]
> > > >   (let [url (URL. url-address)
> > > >         filename (extract-url-filename url)
> > > >         con (.openConnection url)
> > > >         content-length (.getContentLength con)]
> > > >     (if (or (= -1 content-length)
> > > >             (.startsWith (.getContentType con) "text/"))
> > > >       (duck-streams/spit filename (wget-text url))
> > > >       (with-open [out-file (FileOutputStream. filename)]
> > > >         (.write out-file (wget-binary con content-length))))))
>
> > > > --
> > > > You received this message because you are subscribed to the Google
> > > > Groups "Clojure" group.
> > > > To post to this group, send email to clojure@googlegroups.com
> > > > Note that posts from new members are moderated - please be patient with 
> > > > your first post.
> > > > To unsubscribe from this group, send email to
> > > > clojure+unsubscr...@googlegroups.com
> > > > For more options, visit this group 
> > > > athttp://groups.google.com/group/clojure?hl=en
>
> > > --
> > > You received this message because you are subscribed to the Google
> > > Groups "Clojure" group.
> > > To post to this group, send email to clojure@googlegroups.com
> > > Note that posts from new members are moderated - please be patient with 
> > > your first post.
> > > To unsubscribe from this group, send email to
> > > clojure+unsubscr...@googlegroups.com
> > > For more options, visit this group at
> > >http://groups.google.com/group/clojure?hl=en
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Clojure" group.
> > To post to this group, send email to clojure@googlegroups.com
> > Note that posts from new members are moderated - please be patient with 
> > your first post.
> > To unsubscribe from this group, send email to
> > clojure+unsubscr...@googlegroups.com
> > For more options, visit this group 
> > athttp://groups.google.com/group/clojure?hl=en
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with your 
> first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group 
> athttp://groups.google.com/group/clojure?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to