README.md in hash_dot-1.0.0 vs README.md in hash_dot-2.0.0
- old
+ new
@@ -1,18 +1,30 @@
# HashDot
-HashDot allows you to call your Ruby hash properties with a dot syntax. Simply include the gem in your project and starting using the dot syntax.
+HashDot allows you to call your Ruby hash properties with a dot syntax.
```ruby
- user = {name: 'Anna', job: {title: 'Programmer'}}
+ require 'hash_dot'
+ user = {name: 'Anna', job: {title: 'Programmer'}}.to_dot
+
user.job.title #=> 'Programmer'
user.job.title = 'Senior Programmer'
user.job.title #=> 'Senior Programmer'
+ user.job.delete(:title)
+ user.job.title #=> NoMethodError
```
+You can also allow dot syntax for all hashes via the class setting.
+```ruby
+Hash.use_dot_syntax = true
+
+{name: 'Pat'}.name #=> 'Pat'
+```
+
+
## Installation
Add this line to your application's Gemfile:
```ruby
@@ -26,12 +38,58 @@
Or install it yourself as:
$ gem install hash_dot
+## Benchmarks
+Benchmarks should be taken with a grain of salt, as always. For example, OpenStruct is much slower to initialize, but calls its methods faster once initialized. The OpenStruct solution also can't traverse more than a single dot without recursively instantiating all sub-hashes into OpenStructs.
+
+```Ruby
+require 'ostruct'
+require 'benchmark'
+require 'hash_dot'
+
+user = { address: { category: { desc: 'Urban'}}}.to_dot
+
+iterations = 50000
+
+Benchmark.bm(8) do |bm|
+ bm.report("Default Notation :") {
+ iterations.times do; user[:address][:category][:desc]; end
+ }
+
+ bm.report("Dot Notation :") {
+ iterations.times do; user.address.category.desc; end
+ }
+
+ bm.report("OpenStruct :") {
+ iterations.times do; OpenStruct.new(user); end
+ }
+
+ # Minus OpenStruct instantiation cost
+ os_user = OpenStruct.new(user)
+ bm.report("OpenStruct Single :") {
+ iterations.times do; os_user.address; end
+ }
+
+ bm.report("Dot Notation Single:") {
+ iterations.times do; user.address; end
+ }
+end
+
+# Benchmark Example
+# user system total real
+Default Notation : 0.010000 0.000000 0.010000 ( 0.008807)
+Dot Notation : 0.190000 0.000000 0.190000 ( 0.195819)
+OpenStruct : 0.400000 0.010000 0.410000 ( 0.399542)
+OpenStruct Single : 0.010000 0.000000 0.010000 ( 0.011259)
+Dot Notation Single: 0.080000 0.000000 0.080000 ( 0.082606)
+```
+
+
## Contributing
-Bug reports and pull requests are welcome on GitHub at https://github.com/adsteel/hash_dot. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](contributor-covenant.org) code of conduct.
+Bug reports and pull requests are welcome on GitHub at https://github.com/adsteel/hash_dot. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](CODE_OF_CONDUCT.md) code of conduct.
## License
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).