rogerluan / arkana

Use dotenv files for Android and iOS projects.
BSD 2-Clause "Simplified" License
362 stars 18 forks source link

Number string is converted to int #50

Closed brabanod closed 7 months ago

brabanod commented 8 months ago

When I define a variable in my .env file like this:

MyVar = "0001"

This will be translated by arkana into an integer with the trailing zeros being removed.

@inline(__always)
public let myVar: Int = {
    let encoded: [UInt8] = [
        0xa8, 0x5, 0x7, 0xf1
    ]
    return ArkanaKeys.decode(encoded: encoded, cipher: ArkanaKeys.salt)
}()

What I need however is to have the exact same string "0001" when I access myVar in the code. Is this a bug or is there a way to force parsing as string?

brabanod commented 8 months ago

Seems like the code that is causing this is the regular expression in lib/arkana/models/type.rb

when /^\d+$/
    INTEGER

Is there any way to prevent arcana from doing this? I could of course add a character in front of my value like a0001 so that arkana will handle it like a string, however then I have to remove that character again in the code. It's not a very nice solution. Are there any solutions known to this problems, which can be configured directly in arkana?

rogerluan commented 8 months ago

Hi @brabanod 👋

It seems like you're the first person to request this type of behavior. Aside from the solution you proposed of adding an extra character, I see two other solutions that could be built into Arkana itself:

What do you think of these solutions? I lean towards less configurations (thus, less env vars), but not sure if the 2nd solution has any pitfalls I'm not seeing, that could potentially break people's code if they're using it 🤔 perhaps thinking of edge cases like massive numbers (larger than 64-bit) could break this unintentionally? What about negative numbers? I suppose these are already not supported anyway.

Let me know what you think :)

rogerluan commented 8 months ago

I opened a PR with the 2nd implementation above, and added extensive tests to cover the scenarios I could think of. Let me know if that works for you @brabanod 😃

brabanod commented 6 months ago

Hey @rogerluan, sorry for the late response! The second solution looks perfect. Thank you very much for taking the time to implement it, really appreciate it! Just tested it with the latest version and everything works perfectly fine 🎉

rogerluan commented 6 months ago

Amazing, I'm glad it helped you! Thank you for your feedback @brabanod 🤗 really appreciate it!