RX14 changed the topic of #crystal-lang to: The Crystal programming language | http://crystal-lang.org | Crystal 0.27.1 | Fund Crystal's development: http://is.gd/X7PRtI | GH: https://github.com/crystal-lang/crystal | Docs: http://crystal-lang.org/docs/ | API: http://crystal-lang.org/api/ | Gitter: https://gitter.im/crystal-lang/crystal
<FromGitter> <dscottboggs_gitlab> why is `@type.instance_vars` an empty array?
<FromGitter> <dscottboggs_gitlab> playground link https://carc.in/#/r/6pw4
<FromGitter> <dscottboggs_gitlab> > is invoked after instance variable types for all classes are known.
<FromGitter> <bew> Because it's run just before typing
<FromGitter> <bew> It's used to add more types for example
<FromGitter> <bew> I was thinking about suggesting more macro hooks for this kind of case, I should probably do it one day..
<FromGitter> <dscottboggs_gitlab> So I will need to implement this in some other way then?
tsundsted has quit [Ping timeout: 256 seconds]
_whitelogger has joined #crystal-lang
alexherbo2 has quit [Remote host closed the connection]
Vexatos has quit [Read error: Connection reset by peer]
<FromGitter> <kvirani> Folks... Is there an idiomatic way to DRY this up? ⏎ ⏎ ```code paste, see link``` ⏎ ⏎ Also, I'm struggling making `@constraints` a NamedTuple with default value (is it even possible?) [https://gitter.im/crystal-lang/crystal?at=5cb2a2fc93fb4a7dc22628b5]
Vexatos has joined #crystal-lang
<FromGitter> <kvirani> Also 👋 I'm new to Crystal and hoping to get good fast and contribute to Amber in the process.
<FromGitter> <dscottboggs_gitlab> The initialize methods could be defined inside macros which iterate over `@t ype.instance_vars`
<FromGitter> <kvirani> Interesting... didn't think of that. Before I go there, since that adds a bit more complexity for the sake of DRYing it up, any non-meta-programming way?
<FromGitter> <dscottboggs_gitlab> Are there specific constraints that can be specified at *compile* time or are they based on a config file or something
<FromGitter> <kvirani> The goal is that constraints can be passed in to this object as Hash or NamedTuple with any symbol/string based args
<FromGitter> <kvirani> More context: I'm working on https://github.com/amberframework/amber/pull/1090
<FromGitter> <dscottboggs_gitlab> no. I've heard that having so many function arguments can be bad for performance but other than that I don't think
<FromGitter> <dscottboggs_gitlab> Symbols in crystal are like variants of a global enum, and must be known at *compile* time. If that's ok, then you can work with a `Hash(Symbol, Regex)` but if it's not then you need to use Strings.
<FromGitter> <kvirani> Ah I understand your question now, since ultimately these are known at compile time, it's okay
DmitryBochkarev has joined #crystal-lang
<FromGitter> <dscottboggs_gitlab> You could have a case..when statement in a function to create a hacky `Hash(String, Regex)` which accepts a symbol to match but really if you're going to go with a `Hash(Symbol, Regex)` then I feel like maybe a struct would be more appropriate?
<FromGitter> <kvirani> The app dev defines them in their amber project's `routes.cr`file. The macro there would eventially pass it off to the object shown above ☝️
<FromGitter> <dscottboggs_gitlab> ah you kinda lost me and I'm about to go to bed, sorry ✌️
<FromGitter> <kvirani> np, i'll dig into what you said.
<FromGitter> <kvirani> thx and gnight
_whitelogger has joined #crystal-lang
_whitelogger has joined #crystal-lang
<FromGitter> <Blacksmoke16> @kvirani what do you need to do that for?
<FromGitter> <Blacksmoke16> what if you did like
<FromGitter> <Blacksmoke16> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb2ab99759abc043cba6614]
teardown has joined #crystal-lang
<FromGitter> <Blacksmoke16> or just have constraints be like typed to `Hash | NamedTuple | Nil = nil`?
<FromGitter> <Blacksmoke16> naw that doesnt work
<FromGitter> <Blacksmoke16> might be easier to just have `constraints` be typed to like `@constraints = NamedTuple | Hash(String | Symbol, Regex?)? = nil`
<FromGitter> <Blacksmoke16> then in each macro could do like `%verb, {{resource}}, %handler, {{action}}, valve, scope, "{{controller.id}}"{% if constraints %}, {{constraints}} {% end %}`
<FromGitter> <Blacksmoke16> i.e. just default it to nil, since they arent required on the router's end. Router would be happy if that param is just excluded
<FromGitter> <Blacksmoke16> ah crap, `NamedTuple` restriction doesnt work for ivars
<FromGitter> <Blacksmoke16> yea afaik NamedTuples wouldn't be doable since we dont know the keys/types of each key
<FromGitter> <Blacksmoke16> but imma get to bed as well o/
DmitryBochkarev has quit [Ping timeout: 240 seconds]
_whitelogger has joined #crystal-lang
DmitryBochkarev has joined #crystal-lang
olbat has quit [Ping timeout: 246 seconds]
teardown has quit [Ping timeout: 250 seconds]
olbat has joined #crystal-lang
olbat has quit [Ping timeout: 264 seconds]
return0e has quit [Read error: Connection reset by peer]
return0e has joined #crystal-lang
olbat has joined #crystal-lang
_whitelogger has joined #crystal-lang
teardown has joined #crystal-lang
DmitryBochkarev has quit [Ping timeout: 255 seconds]
<FromGitter> <r00ster91> How do I remove a non-empty directory?
_whitelogger has joined #crystal-lang
DmitryBochkarev has joined #crystal-lang
<FromGitter> <r00ster91> My solution now is to delete each file in the directory and then delete the directory
ua has quit [Ping timeout: 246 seconds]
ashirase has quit [Ping timeout: 255 seconds]
ua has joined #crystal-lang
ashirase has joined #crystal-lang
teardown has quit [Ping timeout: 250 seconds]
laaron has joined #crystal-lang
DmitryBochkarev has quit [Remote host closed the connection]
DmitryBochkarev has joined #crystal-lang
DmitryBochkarev has quit [Ping timeout: 264 seconds]
laaron has quit [Remote host closed the connection]
laaron has joined #crystal-lang
DmitryBochkarev has joined #crystal-lang
teardown has joined #crystal-lang
laaron has quit [Quit: ZNC 1.7.1 - https://znc.in]
laaron has joined #crystal-lang
alexherbo2 has joined #crystal-lang
DTZUZO has joined #crystal-lang
teardown has quit [Ping timeout: 252 seconds]
DmitryBochkarev has quit [Ping timeout: 255 seconds]
<FromGitter> <drum445> Anyone know if https://github.com/icyleaf/markd/issues/4 is being worked on?
laaron has quit [Quit: ZNC 1.7.1 - https://znc.in]
laaron has joined #crystal-lang
DmitryBochkarev has joined #crystal-lang
DmitryBochkarev has quit [Remote host closed the connection]
DmitryBochkarev has joined #crystal-lang
DmitryBochkarev has quit [Ping timeout: 246 seconds]
<FromGitter> <Blacksmoke16> @r00ster91 could you run a like `Process.run` or something to do an `rm -rf`?
<FromGitter> <Blacksmoke16> er but that wouldnt be a os agnostic way of doing it
alexherbo2 has quit [Ping timeout: 245 seconds]
return0e has quit [Ping timeout: 250 seconds]
return0e has joined #crystal-lang
alexherbo2 has joined #crystal-lang
alexherbo2 has quit [Remote host closed the connection]
return0e has quit [Read error: Connection reset by peer]
return0e has joined #crystal-lang
alexherbo2 has joined #crystal-lang
DmitryBochkarev has joined #crystal-lang
DmitryBochkarev has quit [Ping timeout: 240 seconds]
DmitryBochkarev has joined #crystal-lang
Jenz has joined #crystal-lang
fifr has left #crystal-lang ["IRC for Sailfish 0.9"]
<Jenz> https://crystal-ann.com down for anyone else?
<Jenz> "ERR_SSL_PROTOCOL_ERROR" maybe not "down," but I can't view the site
DmitryBochkarev has quit [Remote host closed the connection]
DmitryBochkarev has joined #crystal-lang
sp3ncer has joined #crystal-lang
fifr has joined #crystal-lang
<sp3ncer> Hi, are there any thoughts on building a more robust package system?
<sp3ncer> I have some old code that doesn't actually build any more because some people deleted the github repos for some dependencies
fifr has left #crystal-lang ["Leaving"]
<sp3ncer> Fortunately, I still have local copies of those dependencies, but this seems like a really bad issue nonetheless
DmitryBochkarev has quit [Ping timeout: 250 seconds]
bazaar has quit [Quit: leaving]
bazaar has joined #crystal-lang
<FromGitter> <r00ster91> @Blacksmoke16 oh I didn't even know of `-rf` but yeah I'd like to avoid system commands
<FromGitter> <tenebrousedge> Does this work? https://crystal-lang.org/api/0.27.2/FileUtils.html#rm_r%28path%3AString%29%3ANil-instance-method
<FromGitter> <tenebrousedge> @r00ster91
ua has quit [Ping timeout: 250 seconds]
<FromGitter> <r00ster91> ah yep that'd work. thanks
<FromGitter> <Blacksmoke16> neat
<FromGitter> <Blacksmoke16> @sp3ncer you can do like
<FromGitter> <Blacksmoke16> ```deleted-shard: ⏎ path: /path/to/shard/dir``` [https://gitter.im/crystal-lang/crystal?at=5cb39a728148e555b2a59aaf]
<FromGitter> <Blacksmoke16> which symlinks that directory under `lib/` to that path
rohitpaulk has joined #crystal-lang
<FromGitter> <0x2C6> Which ORM do you prefer?
<FromGitter> <Blacksmoke16> i use Granite
<FromGitter> <Blacksmoke16> Clear is also quite nice if you use PG
<FromGitter> <Blacksmoke16> cant speak for any others
<FromGitter> <0x2C6> I was wondering why jennifer's has more stars than granite ? hmm :/
<FromGitter> <0x2C6> :D Actually crecto is mo
<FromGitter> <zbaylin> crecto is unfortunately a dead project :/
<FromGitter> <Blacksmoke16> crecto isnt maintained anymore
<FromGitter> <Blacksmoke16> ^
<FromGitter> <zbaylin> in fact im currently migrating thousands of queries from Crecto to jennifer
<FromGitter> <0x2C6> @zbaylin why jennifer? Why don't you use granite?
<FromGitter> <zbaylin> Jennifer is more robust it seems
<FromGitter> <zbaylin> I looked at granite
<FromGitter> <zbaylin> but Jennifer has really nice documentation and supports all the postgres features I need
<FromGitter> <Blacksmoke16> should look at `Clear` if you use PG then
<FromGitter> <zbaylin> I did look at clear. It seems nice.
<FromGitter> <Blacksmoke16> was pretty nice while i used it
<FromGitter> <Blacksmoke16> i missed the serializable features Granite has
<FromGitter> <Blacksmoke16> makes it super easy to do JSON APIs
<FromGitter> <zbaylin> yeah same with Crecto
<FromGitter> <Blacksmoke16> `Model.import(Array(Model).from_json(str))`
<FromGitter> <zbaylin> I just have to define mappings for my models manually
<FromGitter> <0x2C6> Hmm I should try those both. I am working on a project which has written in rails I want to rewrite it in crystal
<FromGitter> <0x2C6> So jennifer doesn't have a serializer?
rohitpaulk has quit [Remote host closed the connection]
<FromGitter> <0x2C6> Or which serializers are available to use with jennifer?
<FromGitter> <Blacksmoke16> oh idk if it does or not
<FromGitter> <Blacksmoke16> would have to look at the docs
<FromGitter> <0x2C6> https://github.com/blacksmoke16/CrSerializer is that yours? :D
<FromGitter> <Blacksmoke16> yes
<FromGitter> <Blacksmoke16> also been working on my own ORM, but more annotation based
<FromGitter> <0x2C6> So does it act like normal serializer? Like ActiveModelSerailzer or is this something different?
<FromGitter> <Blacksmoke16> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb39f6020fbe911eeb69423]
<FromGitter> <Blacksmoke16> it just expands upon the stdlib `JSON/YAML::Serializable`
ua has joined #crystal-lang
<FromGitter> <Blacksmoke16> to like allow excluding fields on deserialize, but show them on serialize etc
<FromGitter> <0x2C6> :O
<FromGitter> <Blacksmoke16> also validations that get ran on deserialize
<FromGitter> <0x2C6> Starred. I hope one day I'll need this :D
<FromGitter> <Blacksmoke16> 👍
<FromGitter> <Blacksmoke16> is pretty slick
<FromGitter> <Blacksmoke16> esp for JSON APIs as you can define your model, with the validation annotations, then catch the exception on deserialize, and return `ex.to_json`
<FromGitter> <Blacksmoke16> *magic* :P
Jenz has quit [Ping timeout: 246 seconds]
<sp3ncer> [15:39:14] <FromGitter><Blacksmoke16> ```deleted-shard: ⏎ path: /path/to/shard/dir``` [https://gitter.im/crystal-lang/crystal?at=5cb39a728148e555b2a59aaf]
<sp3ncer> ^ but that only works if I distribute my dependencies with my project
<sp3ncer> which many people do not do
sp3ncer has quit [Quit: My MacBook has gone to sleep. ZZZzzz…]
sp3ncer has joined #crystal-lang
<FromGitter> <dscottboggs_gitlab> which docker image is the best to use with crystal?
<FromGitter> <j8r> Depends of your need @dscottboggs_gitlab ?
<FromGitter> <j8r> I'd say Alpine
<FromGitter> <j8r> You can use `jrei/crystal-alpine` :P
moei has quit [Quit: Leaving...]
<FromGitter> <Blacksmoke16> @sp3ncer then republish them to github?
<FromGitter> <nsuchy> ```code paste, see link``` ⏎ ⏎ Am I able to use @site like this or do I need to use self.@site? [https://gitter.im/crystal-lang/crystal?at=5cb3b8de25686a7dc3301d1b]
<FromGitter> <Blacksmoke16> both would prob work
<FromGitter> <Blacksmoke16> the former would be the more common syntax
<FromGitter> <nsuchy> awesome
<FromGitter> <Blacksmoke16> the other option is `site` or `self.site` which would be calling that properties getter while `@site` accesses the value directly
<FromGitter> <nsuchy> Proxmox's API is painful to work with so this is to abstract away the hard parts
<FromGitter> <nsuchy> There's not a crystal shard that does promos yet
<FromGitter> <nsuchy> (that I'm aware of)
<FromGitter> <Blacksmoke16> well there you go, new shard is born ;0
<sp3ncer> Blacksmoke16 I fully plan to, but it seems very silly that that's something I should even need to do
<sp3ncer> and of course doesn't solve the problem for everyone still trying to reference the original repo
<FromGitter> <Blacksmoke16> true
<FromGitter> <nsuchy> ```token = 'PVEAuthCookie=' + ticket.gsub!(/:/, '%3A').gsub!(/=/, '%3D')```
<FromGitter> <nsuchy> Am I escaping this wrong or does crystal not have gsub for strings?
<FromGitter> <dscottboggs_gitlab> I'll try that @j8r thanks
<FromGitter> <Blacksmoke16> whats the error @nsuchy ?
<FromGitter> <nsuchy> just syntax highlighting atm
<FromGitter> <Blacksmoke16> its just `gsub`
<FromGitter> <nsuchy> is there anything wrong with it?
<FromGitter> <nsuchy> it's copied from ruby
<FromGitter> <nsuchy> verbatium
<FromGitter> <Blacksmoke16> well crystal doesnt have `gsub!`
<FromGitter> <Blacksmoke16> also `'` are used for chars, need double quotes for strings
<FromGitter> <Blacksmoke16> https://crystal-lang.org/api/0.27.2/String.html#gsub%28pattern%3ARegex%2Creplacement%2Cbackreferences%3Dtrue%29-instance-method
<FromGitter> <nsuchy> So it looks like the second sub needs a change
<FromGitter> <Blacksmoke16> well your `PVEAuthCookie` is still using `'`
<FromGitter> <Blacksmoke16> also compiler should error on these things when you go to run it
<FromGitter> <Blacksmoke16> so that can help as well
sp3ncer has quit [Quit: Textual IRC Client: www.textualapp.com]
<FromGitter> <nsuchy> going through errors now
<FromGitter> <Blacksmoke16> 👍
<FromGitter> <nsuchy> in lib/crest/src/crest/resource.cr:167: no overload matches 'Hash(String | Symbol, Int32 | String)#merge' with type NamedTuple(username: String, password: String, realm: String) ⏎ Overloads are: ⏎ ⏎ 1) Hash(K, V)#merge(other : Hash(L, W)) ⏎ 2) Hash(K, V)#merge(other : Hash(L, W), &block) [https://gitter.im/crystal-lang/crystal?at=5cb3bf5da84e0c501a30f5c7]
<FromGitter> <nsuchy> Am I including params wrong?
<FromGitter> <Blacksmoke16> ah welcome the difference between hash and named tuple
<FromGitter> <dscottboggs_gitlab> I haven't looked at your code but it looks like you're confusing Hash(String, ...) with NamedTuple
<FromGitter> <Blacksmoke16> `{"key" => "value"}` is a hash of type `Hash(String, String)`
<FromGitter> <Blacksmoke16> `{key: "value"}` is a namedTuple of type `NamedTuple(key: String)`
<FromGitter> <Blacksmoke16> not the same thing
<FromGitter> <dscottboggs_gitlab> The primary difference is that NamedTuples are immutable, and all the keys are known at compile-time
<FromGitter> <dscottboggs_gitlab> o/
<FromGitter> <Blacksmoke16> and types ^
<FromGitter> <Blacksmoke16> o/
<FromGitter> <nsuchy> this is my current source and the error
<FromGitter> <nsuchy> switching to hashes fixed me
<FromGitter> <nsuchy> except for new error
<FromGitter> <Blacksmoke16> ah, working with json becomes a bit more troublesome as you have to type stuff now
<FromGitter> <Blacksmoke16> vs everything being dynamic
<FromGitter> <dscottboggs_gitlab> yes, you have to tell Crystal what data types to expect to find in the JSON text
<FromGitter> <Blacksmoke16> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb3c0721f6e900d5e33bbeb]
<FromGitter> <Blacksmoke16> in this code the type of data is `JSON::Any` which is a union of all types
<FromGitter> <Blacksmoke16> thus there is no `gsub` method on `JSON::Any`
<FromGitter> <Blacksmoke16> so would have to specify the type of `ticket` to be a string
<FromGitter> <Blacksmoke16> `ticket.as_s.gsub(/:/, "%3A").xxx`
<FromGitter> <Blacksmoke16> OR look into https://crystal-lang.org/api/0.27.2/JSON/Serializable.html
<FromGitter> <Blacksmoke16> then could do like `data = Klass.from_json response.body`
<FromGitter> <dscottboggs_gitlab> This might seem tedious at first but it helps you to have code that more reliably does what you *think* it will do
<FromGitter> <nsuchy> that's okay
<FromGitter> <dscottboggs_gitlab> :)
<FromGitter> <Blacksmoke16> yea this helps protect against say somewhere `ticket` is a Int32 in the json, ruby wouldnt find that till runtime
<FromGitter> <nsuchy> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb3c16220fbe911eeb76e26]
<FromGitter> <Blacksmoke16> hmm
<FromGitter> <Blacksmoke16> try adding type restriction to your methods
<FromGitter> <Blacksmoke16> `def extract_ticket(response : Object) : Hash(String, String)`
<FromGitter> <Blacksmoke16> same thing to `create_ticket`
<FromGitter> <dscottboggs_gitlab> another common issue. add a type restriction (https://crystal-lang.org/reference/syntax_and_semantics/type_restrictions.html) to either the method or the variable assignemnet
<FromGitter> <dscottboggs_gitlab> I use type restrictions *religiously* in Crystal, although that's not really idiomatic.
<FromGitter> <nsuchy> ```code paste, see link```
<FromGitter> <nsuchy> However if I set my type restriction We go back to the can't infer the type of... error
<FromGitter> <Blacksmoke16> right
<FromGitter> <Blacksmoke16> this is because due to your `unless ticket.nil?` `ticket` *could* be `nil`
<FromGitter> <Blacksmoke16> also since you dont cast `csrf_prevention_token` as a string its still a `JSON::Any`
<FromGitter> <Blacksmoke16> if its okay that `ticket` could be `nil` then can add that to the type restriction, otherwise will have to have some logic to error or something if it is nil
<FromGitter> <Blacksmoke16> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb3c292759abc043cc14f95]
<FromGitter> <Blacksmoke16> removes `JSON::Any` by casting csrf token to string using [as_s}(https://crystal-lang.org/api/0.27.2/JSON/Any.html#as_s%3AString-instance-method) and makes the type of the hash contain either a string or nil
<FromGitter> <nsuchy> ticket should never be will though
<FromGitter> <Blacksmoke16> then why the `unless ticket.nil?` ;)
<FromGitter> <nsuchy> ruby version had it from old dev
<FromGitter> <nsuchy> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb3c2eb93fb4a7dc22d813a]
<FromGitter> <Blacksmoke16> cool, looks fine
<FromGitter> <nsuchy> when I do like that we get back to ⏎ ⏎ ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb3c30520fbe911eeb77a52]
<FromGitter> <Blacksmoke16> `@connection_status = "connected"` could prob be an enum, but save that for future
<FromGitter> <Blacksmoke16> did you add same restriction to `create_ticket`?
<FromGitter> <nsuchy> will probably change to true false
<FromGitter> <nsuchy> yes
<FromGitter> <nsuchy> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb3c330016a930a45be4716]
<FromGitter> <Blacksmoke16> moment
<FromGitter> <nsuchy> thanks
<FromGitter> <Blacksmoke16> https://play.crystal-lang.org/#/r/6q17
<FromGitter> <Blacksmoke16> do like that, declare type of the ivar at top outside of initialize
<FromGitter> <Blacksmoke16> then it doesnt have to be inferred from return types, which should worked...
<FromGitter> <Blacksmoke16> but imo, using a `Hash` is prob not the ideal way, maybe look into record (https://crystal-lang.org/api/0.27.2/toplevel.html#record(name,*properties)-macro)
<FromGitter> <nsuchy> that fixed
<FromGitter> <nsuchy> thank you so much
<FromGitter> <Blacksmoke16> then you could do like
<FromGitter> <nsuchy> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb3c48c8148e555b2a6a110]
<FromGitter> <nsuchy> I have this issue now :/
<FromGitter> <nsuchy> and I agree maybe returning a hash isn't great
<FromGitter> <Blacksmoke16> id prob look into some sort of struct you can new up with the values
<FromGitter> <nsuchy> the next option is to use more instance variables and a return type of nil
<FromGitter> <nsuchy> any ideas on the openssl issue
<FromGitter> <Blacksmoke16> prob missing an `end` somewhere ^
<FromGitter> <dscottboggs_gitlab> run `crystal tool format` and see what it says
<FromGitter> <Blacksmoke16> does that fix missing `end`?
<FromGitter> <dscottboggs_gitlab> No, but it will help you narrow down where you're missing an end
<FromGitter> <Blacksmoke16> neat
<FromGitter> <dscottboggs_gitlab> and format your code all neatly when you get it to work
<FromGitter> <nsuchy> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb3c5f425686a7dc330662f]
<FromGitter> <Blacksmoke16> sublime runs it on save, is super nice
<FromGitter> <nsuchy> unfortunately
<FromGitter> <nsuchy> I use TextMate
<FromGitter> <dscottboggs_gitlab> vim too, if you set a variable. Atom does not :(
mps has joined #crystal-lang
<FromGitter> <Blacksmoke16> well shit
<FromGitter> <dscottboggs_gitlab> > I use TextMate ⏎ ⏎ huh, never heard of it
<FromGitter> <nsuchy> it's only for macOS and very small
<FromGitter> <nsuchy> very infrequently update
<FromGitter> <nsuchy> but it's not freaking electron based
<FromGitter> <nsuchy> which is awesome
<FromGitter> <nsuchy> it's written in Objective C
<FromGitter> <nsuchy> so this is where we're at now https://gist.github.com/nsuchy/81cffb50f3d7fa7146f129a28df41d3b
<FromGitter> <nsuchy> I don't see a missing end
<FromGitter> <nsuchy> that leads me to believe it's an issue with Crest or Crystal not my code
<mps> motd of channel says 'Crystal 0.27.1' not 0.27.2
<FromGitter> <Blacksmoke16> of this ch?
<FromGitter> <dscottboggs_gitlab> > but it's not freaking electron based
<FromGitter> <Blacksmoke16> on gitter its `0.27.1`
<mps> Blacksmoke16: yes, irc channel
<FromGitter> <Blacksmoke16> gotcha
<FromGitter> <dscottboggs_gitlab> the web site says 0.27.2 as well, I thought 0.28 was out now?
<FromGitter> <Blacksmoke16> _soon)
<mps> I was offline about week
<FromGitter> <Blacksmoke16> @nsuchy does it happen if you dont require "crest"/use it?
<FromGitter> <nsuchy> ```code paste, see link``` [https://gitter.im/crystal-lang/crystal?at=5cb3c721c55bd14d35e6e792]
<FromGitter> <nsuchy> then this hapens
<mps> really, 0.28? oh, again have to build it for Alpine ;)
<FromGitter> <nsuchy> since it's classes don't exist yet
<FromGitter> <nsuchy> does this mean I need to create a bug report with them/
<FromGitter> <dscottboggs_gitlab> > again have to build it for Alpine ⏎ ⏎ and again I have to submit PRs to a bunch of dependencies ;)
<FromGitter> <Blacksmoke16> id first see if you can cut down your code to a reproducible example
<FromGitter> <Blacksmoke16> with minimal code
<FromGitter> <Blacksmoke16> to rule out an issue with your code
<mps> dscottboggs_gitlab: do you have some PRs, I don't follow github
<FromGitter> <Blacksmoke16> was hoping mine would make it into `.28` but guess ill have to wait ha
<mps> (hope that the Alpine will soon move to gitlab)
<FromGitter> <dscottboggs_gitlab> no, but I did update a few libraries from previous versions of crystal to 0.27
<mps> aha, good to know
<FromGitter> <dscottboggs_gitlab> > was hoping mine would make it ⏎ ⏎ which one's that?
<mps> are you involved in Alpine
<FromGitter> <dscottboggs_gitlab> @mps no
<FromGitter> <dscottboggs_gitlab> it is a great distro though :)
<mps> dscottboggs_gitlab: agree :) I upgraded last few versions of Crystal on Alpine aports
<mps> and waiting for 0.28 to include it in new stable release
<mps> will it have threads in 0.28
<FromGitter> <Blacksmoke16> opt in w/o GC iirc?
<FromGitter> <dscottboggs_gitlab> @Blacksmoke16 is there no other way to do it? Like `@type.constants.reject(&.annotations.empty?)`