-
Notifications
You must be signed in to change notification settings - Fork 50
Configurable Separator #35
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Thanks @mattsah for the well-prepared feature request 👍 As the library is specifically called Specifically, your first suggestion with an optional separator on each method is something I would rather avoid. But adding an optional separator to the constructor params is something we could implement, that would be simple and effective. I would leave the separate setter out though and instead use another instance with a different separator. This way there wouldn't be any confusion about the current separator per instance. I'm happy to implement my suggestion above. |
While I understand the name, it does seem to me at least (maybe this is just how we use it) that This creates some oddities with a few internal operations and how we merge, which are currently worked around by simply flattening a collection and then setting from the flattened keys. This works well... until you have a key with a dot in it. Our goal was some kind of functionality that would allow us to flatten it with a much more explicit separator/token that's less likely to be used and then set with a similar separator. Setting this at constructor time only is a no go because we still rely on the . for other INI-style parsed dot names in other areas. This is why we either need per method or a way to set a default separator but change it effectively on demand. We need to flatten with something other than dot, then set with something other than dot. I appreciate your response and willingness, but given that this is also in the 2.X branch, we'll probably just do some more overloading. We're already overloading some of these methods anyway for specialty functionality (https://github.com/dotink/jin/blob/master/src/Collection.php) and I'm guessing we can't expect too many more changes in 2.X now that 3.X is out. Appreciate the response and willingness to implement anyhow. |
Actually, come to think of it. I think we can reach a compromise. If it's added to the constructor, we can just modify our class to add a setSeparator, assuming the property is protected and we can still overload. That said, if it's something you want for 3.X I'd leave that up to you, but if it's something you'll accept for a 2.5 I can do the pull request. Let me know if that makes sense. |
Thanks @mattsah for your comments, well reasoned feedback and suggestions are always much appreciated. I'll play around with this a bit and will get back to you soon. Likely will implement the optional construction param first as a separate task and will go from there. I'd like to keep the library junior developer-friendly as well while keeping the main focus on the actual dot notation. Give me a moment, I'll keep you up to date. |
I did a quick pull request anyway which I think is in line with constructor only option. |
Thanks mate, much appreciated. Added a couple of comments there for you but looks good. |
@mattsah 2.5.0 is now released with your updates. |
I'm wondering if you'd be open to a configurable separator. I'd offer a pull request on 2.X non-BC breaking, which is what we're currently using, for a 2.5 version. While we don't have a preference I could see this working two different ways or both:
Idea # 1:
Given I can
flatten('_')
it seems I should also be able to do something likeset($key, $value, '_')
... adding an optional $separator parameter to effectively any method interface that allows you to do notation parsing.Idea # 2:
At least creating an internal
$separator
property, and having a generalsetSeparator()
property which would allow for changing it and/or temporarily changing it and changing it back as needed.Idea # 3:
A combination of both where instead of
setSeparator()
it'ssetDefaultSeparator()
and you're still able to overload on a per method call basis.If this is something you're open to, let me know and I'll get in a pull request. Again, our concern is on the 2.X version, but if you want to make the equivalent change on 3.X it should be pretty easy based on the pull request.
The text was updated successfully, but these errors were encountered: