Welcome the channel on the development of Cro, a set of libraries for building reactive distributed systems, lovingly crafted to take advantage of all the Raku Programming Language has to offer (cro.services). This channel is being logged for historical purposes. Set by lizmat on 24 May 2021. |
|||
06:40
patrickb joined
07:00
patrickb left
09:43
Xliff joined
|
|||
Xliff | Hello. | 09:43 | |
Once again I am dusting off my work with Cro::WebApp. | 09:44 | ||
This time I'd like to look into the possibility of making the route{} block pluggable. | |||
Has someone experimented with a way to make the route block accept input from different locations (ala Route:: modules) | 09:45 | ||
If so, is there a blog post or write-up describing how this can be done? | |||
Thanks. | |||
Is there a mechanism for assigning a prefix for a set of routes? | 09:47 | ||
Something like "route { prefix 'prefix' { get -> 'endpoint' { ... }; }; }; | 09:48 | ||
Would then have one endpoint served by GET request to 'prefix/endpoint' | 09:49 | ||
Will this work as expected if the object attributes match the form field names? | 10:27 | ||
... | |||
gist.github.com/Xliff/ceb6f6a50935...82173eef21 | 10:30 | ||
jnthnwrthngtn | Xliff: The prefix is just `include 'prefix' => route { get -> 'endpoint' { } }` | 10:41 | |
If you have a method on Instance to coerce it from a Hash, then probably `get -> Instance() $i { }` would do the job. | 10:43 | ||
I'd wondered about having some object unpacking stuff in Cro but nowadays figure it's probably better to just leave it to coercions. | 10:44 | ||
Xliff | How would the coercion method on Instance work? | ||
method Instance (%hash) { ... } | |||
jnthnwrthngtn: Thanks for the information on 'include' | 10:45 | ||
Have you thought about making that "Pluggable" | |||
For example, can include take data from a flatted (or unflattened) hash? | |||
10:47
sena_kun joined
|
|||
jnthnwrthngtn | Just write a `method COERCE(%hash) { }` on Instance | 10:47 | |
include is slurpy iirc | |||
There's a further plugin mechanism in HEAD (release planned later this week) that lets you stash and obtain state relating to the current route blcok | 10:48 | ||
Xliff | HAH! Didn't know about COERCE() | ||
I've always been handling it from the other direction... | |||
jnthnwrthngtn | Note that since `request` and `response` are dynamically scoped a lot of "plugin" things don't even *need* an explicit mechanism; you just write subs. `web-socket` works that way for example. | ||
But for things like `template` where we wanted to have configuration associated with the route block and find it (accounting for `include`s), there's a new mechanism now | 10:49 | ||
Xliff | Looking forward to your writeup on these new features, then. | 10:50 | |
jnthnwrthngtn | There's already doc comments explaining it in the source; we're working on getting all of those extracted and available online also, for those who don't use Comma and thus can't enjoy the docs view in that. :) | 10:51 | |
So far as plugin-y stuff in general goes: I'm being careful what is introduced, since the longer-term plan is for `route` to become a macro and to analyze/compile the routing at compile time | 10:52 | ||
Along with being able to look at `request-body` and signatures etc. to produce an autoamtic OpenAPI spec from the `route` block, so one can write Raku and get the sepc for free. | |||
Xliff | nice! | 10:53 | |
How long after the release of RakuAST will it be before we get macros? | |||
p6-GLib et all want to play... # :) | 10:54 | ||
Passed 600kloc of that, BTW | |||
jnthnwrthngtn | Probably not long at all for something to play with, as with all these things a bit longer for maturity | ||
11:02
Xliff left
12:05
Xliff joined
|
|||
Xliff | . | 12:05 | |
jnthnwrthngtn: Ouch. You are not logging this channel? | 12:06 | ||
Oh, you are. Is there a web interface? | |||
sena_kun | Xliff, logs.liz.nl/cro/live.html <- ? | 12:08 | |
Xliff | Oh, hey! Powered by Cro. Nice! | 12:40 | |
lizmat | Xliff: just wait when we're done with the styling (in cooperation with sena_kun :-) | 13:27 | |
Xliff | lizmat: Noticed that. Clicking the "scroll down" link results in unstyled output | 13:33 | |
Is there more work to pass around? | |||
lizmat | Xliff: possibly, after I get this first version out according to my liking :-) | 13:53 | |
Xliff | :) | ||
lizmat: If you want to wrap a function with a given argument, would that look something like this: $method.wrap(&wrapper).assuming($always-first-param) | 13:54 | ||
lizmat | tbh, I would have to check :-) | 13:55 | |
never used .assuming myself | |||
if you look at the *current* underlying code, you understand why :-) | |||
Xliff | Me neither. | ||
But then a light bulb started flickering, and I thought... "oh maybe".... | 13:56 | ||
17:16
sena_kun left
20:15
SmokeMachine_ left
20:42
SmokeMachine_ joined
|
|||
Xliff | This is a bit confusing: Method 'resolve' must be implemented by Cro::WebApp::Template::Repository because it is required by roles: Cro::WebApp::Template::Repository | 21:02 | |
Should I bug this? | 21:03 | ||
jnthnwrthngtn | Depends, how did you make it happen? | 21:15 | |
If in normal Cro usage, then it's odd and yes, report it. | 21:16 | ||
If you were trying to make a custom template repository, sounds like you punned the role (perhaps `is` instead of `does`)? | |||
Xliff | Cro::WebApp::Template::Repository.new? | 21:21 | |
That would be a role, wouldn't it? | |||
If I wan to compile a template, should I pass an instance or a type to :$repository when using Cro::WebAp::Template::Compiled.new()? | 21:22 | ||
japhb | Roles can directly instantiate -- so if you .new a role directly, it auto-puns to a class containing just that role. | 21:23 | |
(Apologies if I misunderstood the question, BTW. Can't tell if that's what you were asking.) | 21:24 | ||
jnthnwrthngtn | Yeah, that `.new` is to blame; you can't .new a role with unimplemented methods. | ||
You're not really meant to instantiate Cro::WebApp::Template::Compiled yourself; you implement Cro::WebApp::Template::Repository and then give your instance to set-template-repository | 21:26 | ||
load-template does the creation of the Cro::WebApp::Template::Compiled | 21:27 | ||
Xliff | When you say "Implement Cro::WebApp::Template::Repository" you are taling about implementing a class that does and satisfies the role, correct? | ||
jnthnwrthngtn | Yes | ||
Xliff | Ok, thanks! | ||
I'll have to see what all that entails. | |||
jnthnwrthngtn | Like github.com/croservices/cro-webapp/...ry.pm6#L54 for example | ||
What're you aiming at achieving, btw? | |||
We only just starting pondering which pieces we want to make extensible API here, and we're only so imaginative (we've handled templates from the filesystem and from resources, and figure maybe somebody will want to have them pulled from a database at some point...) | 21:29 | ||
Xliff | Outputting string-based cro templates. I have no need for files. | ||
This a first step from then moving to templates stored in a database.\ | 21:30 | ||
jnthnwrthngtn | oh, then maybe the path of least resistence is IO::String and passing that to `load-template` | ||
Xliff | If you have suggestions as to better implement that, please let me know. | ||
Ah, yes. Um. IO::String? | |||
jnthnwrthngtn | I think that's what the module is called. Make a string be like an IO handle. | 21:31 | |
Xliff | github.com/zostay/raku-io-string | ||
jnthnwrthngtn | oh, maybe I'm confused and it only does the other direction? I thought it did string to IO handle also | 21:32 | |
Sigh, surely somebody did a module for this :) | |||
Though of course maybe Cro::WebApp should just have a function for this, to avoid the workaround | |||
Xliff | Yeah, I think it works by something like $buffer = IO::String; $buffer.print: "This is wat should be in the buffer"; and the using $buffer in the placed where an IO::Handle should go. | 21:33 | |
?? | |||
I always wondered why there was no Str() based load-template | 21:34 | ||
jnthnwrthngtn | I couldn't imagine somebody wanting to have them in the database, I guess. | 21:37 | |
Probably because I can't imagine working on them without highlighting, auto-complete, reference resolution, etc. :D | 21:38 | ||
japhb | jnthnwrthngtn: When you invest heavily in the hammer .... | ||
jnthnwrthngtn | But yeah, just 'cus I wouldn't do something isn't a reason for it to be impossible. :) We should add a candidate taking a Str also. | ||
Can sneak it in ahead of tomorrow's (probably) release, I guess. | 21:39 | ||
Though I've gotta be afk for a bit now | 21:40 | ||
japhb | Yay! | ||
japhb is always happy to hear about new Cro releases. :-) | |||
Xliff | Thank you, jnthnwrthngtn | 22:00 | |
! |