Merge branch 'master' of git://factorcode.org/git/factor
commit
444fa7668c
|
@ -7,7 +7,7 @@ IN: bootstrap.image.download
|
|||
CONSTANT: url URL" http://factorcode.org/images/latest/"
|
||||
|
||||
: download-checksums ( -- alist )
|
||||
url "checksums.txt" >url derive-url http-data
|
||||
url "checksums.txt" >url derive-url http-get nip
|
||||
string-lines [ " " split1 ] { } map>assoc ;
|
||||
|
||||
: need-new-image? ( image -- ? )
|
||||
|
|
|
@ -170,18 +170,6 @@ M: timestamp easter ( timestamp -- timestamp )
|
|||
: microseconds ( x -- duration ) 1000000 / seconds ;
|
||||
: nanoseconds ( x -- duration ) 1000000000 / seconds ;
|
||||
|
||||
GENERIC: year ( obj -- n )
|
||||
M: integer year ;
|
||||
M: timestamp year year>> ;
|
||||
|
||||
GENERIC: month ( obj -- n )
|
||||
M: integer month ;
|
||||
M: timestamp month month>> ;
|
||||
|
||||
GENERIC: day ( obj -- n )
|
||||
M: integer day ;
|
||||
M: timestamp day day>> ;
|
||||
|
||||
GENERIC: leap-year? ( obj -- ? )
|
||||
|
||||
M: integer leap-year? ( year -- ? )
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
! Copyright (C) 2008, 2010 Slava Pestov, Doug Coleman.
|
||||
! See http://factorcode.org/license.txt for BSD license.
|
||||
USING: math math.order math.parser math.functions kernel
|
||||
sequences io accessors arrays io.streams.string splitting
|
||||
combinators calendar calendar.format.macros present ;
|
||||
USING: accessors arrays calendar calendar.format.macros
|
||||
combinators io io.streams.string kernel math math.functions
|
||||
math.order math.parser present sequences typed ;
|
||||
IN: calendar.format
|
||||
|
||||
: pad-00 ( n -- str ) number>string 2 CHAR: 0 pad-head ;
|
||||
|
@ -272,16 +272,16 @@ ERROR: invalid-timestamp-format ;
|
|||
: (timestamp>ymd) ( timestamp -- )
|
||||
{ YYYY "-" MM "-" DD } formatted ;
|
||||
|
||||
: timestamp>ymd ( timestamp -- str )
|
||||
TYPED: timestamp>ymd ( timestamp: timestamp -- str )
|
||||
[ (timestamp>ymd) ] with-string-writer ;
|
||||
|
||||
: (timestamp>hms) ( timestamp -- )
|
||||
{ hh ":" mm ":" ss } formatted ;
|
||||
|
||||
: timestamp>hms ( timestamp -- str )
|
||||
TYPED: timestamp>hms ( timestamp: timestamp -- str )
|
||||
[ (timestamp>hms) ] with-string-writer ;
|
||||
|
||||
: timestamp>ymdhms ( timestamp -- str )
|
||||
TYPED: timestamp>ymdhms ( timestamp: timestamp -- str )
|
||||
[
|
||||
>gmt
|
||||
{ (timestamp>ymd) " " (timestamp>hms) } formatted
|
||||
|
|
|
@ -35,11 +35,6 @@ HELP: http-get
|
|||
{ $description "Downloads the contents of a URL." }
|
||||
{ $errors "Throws an error if the HTTP request fails." } ;
|
||||
|
||||
HELP: http-data
|
||||
{ $values { "url" "a " { $link url } " or " { $link string } } { "data" sequence } }
|
||||
{ $description "Downloads the contents of a URL. To view the HTTP response, use " { $link http-get } "." }
|
||||
{ $errors "Throws an error if the HTTP request fails." } ;
|
||||
|
||||
HELP: http-post
|
||||
{ $values { "post-data" object } { "url" "a " { $link url } " or " { $link string } } { "response" response } { "data" sequence } }
|
||||
{ $description "Submits an HTTP POST request." }
|
||||
|
@ -66,7 +61,7 @@ HELP: with-http-request
|
|||
|
||||
ARTICLE: "http.client.get" "GET requests with the HTTP client"
|
||||
"Basic usage involves passing a " { $link url } " and getting a " { $link response } " and data back:"
|
||||
{ $subsections http-get http-data }
|
||||
{ $subsections http-get }
|
||||
"Utilities to retrieve a " { $link url } " and save the contents to a file:"
|
||||
{ $subsections
|
||||
download
|
||||
|
|
|
@ -157,9 +157,6 @@ ERROR: download-failed response ;
|
|||
: http-get ( url -- response data )
|
||||
<get-request> http-request ;
|
||||
|
||||
: http-data ( url -- data )
|
||||
http-get nip ;
|
||||
|
||||
: with-http-get ( url quot -- response )
|
||||
[ <get-request> ] dip with-http-request ; inline
|
||||
|
||||
|
|
|
@ -226,14 +226,14 @@ test-db [
|
|||
|
||||
[ t ] [
|
||||
"vocab:http/test/foo.html" ascii file-contents
|
||||
"http://localhost/nested/foo.html" add-port http-data =
|
||||
"http://localhost/nested/foo.html" add-port http-get nip =
|
||||
] unit-test
|
||||
|
||||
[ "http://localhost/redirect-loop" add-port http-data ]
|
||||
[ "http://localhost/redirect-loop" add-port http-get nip ]
|
||||
[ too-many-redirects? ] must-fail-with
|
||||
|
||||
[ "Goodbye" ] [
|
||||
"http://localhost/quit" add-port http-data
|
||||
"http://localhost/quit" add-port http-get nip
|
||||
] unit-test
|
||||
|
||||
! HTTP client redirect bug
|
||||
|
@ -247,7 +247,7 @@ test-db [
|
|||
] unit-test
|
||||
|
||||
[ "Goodbye" ] [
|
||||
"http://localhost/redirect" add-port http-data
|
||||
"http://localhost/redirect" add-port http-get nip
|
||||
] unit-test
|
||||
|
||||
|
||||
|
@ -274,12 +274,12 @@ test-db [
|
|||
: 404? ( response -- ? ) [ download-failed? ] [ response>> code>> 404 = ] bi and ;
|
||||
|
||||
! This should give a 404 not an infinite redirect loop
|
||||
[ "http://localhost/d/blah" add-port http-data ] [ 404? ] must-fail-with
|
||||
[ "http://localhost/d/blah" add-port http-get nip ] [ 404? ] must-fail-with
|
||||
|
||||
! This should give a 404 not an infinite redirect loop
|
||||
[ "http://localhost/blah/" add-port http-data ] [ 404? ] must-fail-with
|
||||
[ "http://localhost/blah/" add-port http-get nip ] [ 404? ] must-fail-with
|
||||
|
||||
[ "Goodbye" ] [ "http://localhost/quit" add-port http-data ] unit-test
|
||||
[ "Goodbye" ] [ "http://localhost/quit" add-port http-get nip ] unit-test
|
||||
|
||||
[ ] [
|
||||
<dispatcher>
|
||||
|
@ -293,9 +293,9 @@ test-db [
|
|||
test-httpd
|
||||
] unit-test
|
||||
|
||||
[ "Hi" ] [ "http://localhost/" add-port http-data ] unit-test
|
||||
[ "Hi" ] [ "http://localhost/" add-port http-get nip ] unit-test
|
||||
|
||||
[ "Goodbye" ] [ "http://localhost/quit" add-port http-data ] unit-test
|
||||
[ "Goodbye" ] [ "http://localhost/quit" add-port http-get nip ] unit-test
|
||||
|
||||
USING: html.components html.forms
|
||||
xml xml.traversal validators
|
||||
|
@ -353,7 +353,7 @@ SYMBOL: a
|
|||
|
||||
[ 4 ] [ a get-global ] unit-test
|
||||
|
||||
[ "Goodbye" ] [ "http://localhost/quit" add-port http-data ] unit-test
|
||||
[ "Goodbye" ] [ "http://localhost/quit" add-port http-get nip ] unit-test
|
||||
|
||||
! Test cloning
|
||||
[ f ] [ <404> dup clone "b" "a" set-header drop "a" header ] unit-test
|
||||
|
@ -371,7 +371,7 @@ SYMBOL: a
|
|||
] unit-test
|
||||
|
||||
[ t ] [
|
||||
"http://localhost/" add-port http-data
|
||||
"http://localhost/" add-port http-get nip
|
||||
"vocab:http/test/foo.html" ascii file-contents =
|
||||
] unit-test
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ M: byte-array parse-feed [ bytes>xml xml>feed ] with-html-entities ;
|
|||
|
||||
: download-feed ( url -- feed )
|
||||
#! Retrieve an news syndication file, return as a feed tuple.
|
||||
http-data parse-feed ;
|
||||
http-get nip parse-feed ;
|
||||
|
||||
! Atom generation
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ HOLIDAY-NAME: new-years-day us-federal "New Year's Day"
|
|||
HOLIDAY: martin-luther-king-day january 3 monday-of-month ;
|
||||
HOLIDAY-NAME: martin-luther-king-day us-federal "Martin Luther King Day"
|
||||
|
||||
HOLIDAY: inauguration-day year dup 4 neg rem + january 20 >>day ;
|
||||
HOLIDAY: inauguration-day january 20 >>day [ dup 4 neg rem + ] change-year ;
|
||||
HOLIDAY-NAME: inauguration-day us "Inauguration Day"
|
||||
|
||||
HOLIDAY: washingtons-birthday february 3 monday-of-month ;
|
||||
|
|
|
@ -5,7 +5,7 @@ images.viewer ;
|
|||
IN: images.http
|
||||
|
||||
: load-http-image ( path -- image )
|
||||
[ http-data ] [ image-class ] bi load-image* ;
|
||||
[ http-get nip ] [ image-class ] bi load-image* ;
|
||||
|
||||
: http-image. ( path -- )
|
||||
load-http-image image. ;
|
||||
|
|
|
@ -3,6 +3,16 @@
|
|||
USING: help.markup help.syntax ;
|
||||
IN: slots.syntax
|
||||
|
||||
HELP: slots[
|
||||
{ $description "Outputs several slot values to the stack." }
|
||||
{ $example "USING: kernel prettyprint slots.syntax ;"
|
||||
"IN: slots.syntax.example"
|
||||
"TUPLE: rectangle width height ;"
|
||||
"T{ rectangle { width 3 } { height 5 } } slots[ width height ] [ . ] bi@"
|
||||
"""3
|
||||
5"""
|
||||
} ;
|
||||
|
||||
HELP: slots{
|
||||
{ $description "Outputs an array of slot values from a tuple." }
|
||||
{ $example "USING: prettyprint slots.syntax ;"
|
||||
|
@ -14,6 +24,8 @@ HELP: slots{
|
|||
|
||||
ARTICLE: "slots.syntax" "Slots syntax sugar"
|
||||
"The " { $vocab-link "slots.syntax" } " vocabulary provides an alternative syntax for taking a sequence of slots from a tuple." $nl
|
||||
"Syntax sugar for cleaving slots to the stack:"
|
||||
{ $subsections POSTPONE: slots[ }
|
||||
"Syntax sugar for cleaving slots to an array:"
|
||||
{ $subsections POSTPONE: slots{ } ;
|
||||
|
||||
|
|
|
@ -5,6 +5,10 @@ IN: slots.syntax.tests
|
|||
|
||||
TUPLE: slot-test a b c ;
|
||||
|
||||
[ 1 2 3 ] [ T{ slot-test f 1 2 3 } slots[ a b c ] ] unit-test
|
||||
[ 3 ] [ T{ slot-test f 1 2 3 } slots[ c ] ] unit-test
|
||||
[ ] [ T{ slot-test f 1 2 3 } slots[ ] ] unit-test
|
||||
|
||||
[ { 1 2 3 } ] [ T{ slot-test f 1 2 3 } slots{ a b c } ] unit-test
|
||||
[ { 3 } ] [ T{ slot-test f 1 2 3 } slots{ c } ] unit-test
|
||||
[ { } ] [ T{ slot-test f 1 2 3 } slots{ } ] unit-test
|
|
@ -4,6 +4,10 @@ USING: combinators combinators.smart fry lexer quotations
|
|||
sequences slots ;
|
||||
IN: slots.syntax
|
||||
|
||||
SYNTAX: slots[
|
||||
"]" [ reader-word 1quotation ] map-tokens
|
||||
'[ _ cleave ] append! ;
|
||||
|
||||
SYNTAX: slots{
|
||||
"}" [ reader-word 1quotation ] map-tokens
|
||||
'[ [ _ cleave ] output>array ] append! ;
|
||||
|
|
|
@ -35,7 +35,7 @@ TUPLE: fjsc < dispatcher ;
|
|||
|
||||
: do-compile-url ( url -- response )
|
||||
[
|
||||
absolute-url http-data 'expression' parse fjsc-compile write "();" write
|
||||
absolute-url http-get nip 'expression' parse fjsc-compile write "();" write
|
||||
] with-string-writer
|
||||
"application/javascript" <content> ;
|
||||
|
||||
|
|
|
@ -57,4 +57,4 @@ CONSTANT: factor-id "fRrVAKzV34GDyeRw6bUHDhEWHRedwfOC7e61wwXZLgGF80E67spxdQXuugB
|
|||
swap >>query ;
|
||||
|
||||
: search-yahoo ( search -- seq )
|
||||
query http-data string>xml parse-yahoo ;
|
||||
query http-get nip string>xml parse-yahoo ;
|
||||
|
|
Loading…
Reference in New Issue