hashery 2.1.0 → 2.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.index +73 -0
- data/{HISTORY.rdoc → HISTORY.md} +25 -12
- data/LICENSE.txt +18 -21
- data/NOTICE.txt +6 -6
- data/{README.rdoc → README.md} +29 -32
- data/demo/00_introduction.rdoc +6 -0
- data/demo/01_open_hash.rdoc +63 -0
- data/demo/02_query_hash.rdoc +17 -0
- data/demo/03_casting_hash.rdoc +12 -0
- data/demo/04_static_hash.rdoc +20 -0
- data/demo/05_key_hash.rdoc +17 -0
- data/demo/06_open_cascade.rdoc +64 -0
- data/demo/07_fuzzy_hash.rdoc +137 -0
- data/demo/08_propery_hash.rdoc +34 -0
- data/demo/10_association.rdoc +59 -0
- data/demo/applique/ae.rb +2 -0
- data/demo/applique/hashery.rb +3 -0
- data/lib/hashery.yml +50 -53
- data/lib/hashery/open_cascade.rb +4 -0
- data/test/case_open_cascade.rb +12 -0
- metadata +86 -149
- data/.meta +0 -76
- data/DEMO.rdoc +0 -1
- data/alt/hashery/basicobject.rb +0 -1
- data/alt/hashery/castinghash.rb +0 -1
- data/alt/hashery/fuzzyhash.rb +0 -1
- data/alt/hashery/keyhash.rb +0 -1
- data/alt/hashery/linkedlist.rb +0 -1
- data/alt/hashery/lruhash.rb +0 -1
- data/alt/hashery/opencascade.rb +0 -1
- data/alt/hashery/openhash.rb +0 -1
- data/alt/hashery/orderedhash.rb +0 -1
- data/alt/hashery/propertyhash.rb +0 -1
- data/alt/hashery/queryhash.rb +0 -1
- data/alt/hashery/statichash.rb +0 -1
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8459bb831f3ff14d0b44ff30648c5c6e569de75d
|
4
|
+
data.tar.gz: 55fae7249dd499b25808e4a4e523f2c01057d55e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 9b2fdfded7c965ef34498e94fd0a47bb2aad42255857c754d985bdcc5ebc4e8d440bf5b0faa9f9edd72918eb53bdfa319e5e22ab4f616ec15c20833e284a7775
|
7
|
+
data.tar.gz: c175b2f9590ae9c1e608c556132c3f574d12ac842548823786d8003f7a7d55b83a6845f5c74abc18bd3d620f51a04b595f1687af080952e3405ace2c7e42c73f
|
data/.index
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
---
|
2
|
+
revision: 2013
|
3
|
+
type: ruby
|
4
|
+
sources:
|
5
|
+
- Index.yml
|
6
|
+
- Gemfile
|
7
|
+
authors:
|
8
|
+
- name: Trans
|
9
|
+
email: transfire@gmail.com
|
10
|
+
- name: Kirk Haines
|
11
|
+
- name: Robert Klemme
|
12
|
+
- name: Jan Molic
|
13
|
+
- name: George Moschovitis
|
14
|
+
- name: Jeena Paradies
|
15
|
+
- name: Erik Veenstra
|
16
|
+
organizations:
|
17
|
+
- name: RubyWorks (http://rubyworks.github.com/)
|
18
|
+
requirements:
|
19
|
+
- groups:
|
20
|
+
- development
|
21
|
+
- test
|
22
|
+
version: '>= 0'
|
23
|
+
name: qed
|
24
|
+
- groups:
|
25
|
+
- development
|
26
|
+
- test
|
27
|
+
version: '>= 0'
|
28
|
+
name: lemon
|
29
|
+
conflicts: []
|
30
|
+
alternatives: []
|
31
|
+
resources:
|
32
|
+
- type: home
|
33
|
+
uri: http://rubyworks.github.com/hashery
|
34
|
+
label: Homepage
|
35
|
+
- type: code
|
36
|
+
uri: http://github.com/rubyworks/hashery
|
37
|
+
label: Source Code
|
38
|
+
- type: mail
|
39
|
+
uri: http://groups.google.com/group/rubyworks-mailinglist
|
40
|
+
label: Mailing List
|
41
|
+
- type: docs
|
42
|
+
uri: http://rubydoc.info/github/rubyworks/hashery/master/frames
|
43
|
+
label: Documentation
|
44
|
+
- type: wiki
|
45
|
+
uri: http://wiki.github.com/rubyworks/hashery
|
46
|
+
label: User Guide
|
47
|
+
- type: gems
|
48
|
+
uri: http://rubygems.org/gems/hashery
|
49
|
+
repositories:
|
50
|
+
- name: upstream
|
51
|
+
scm: git
|
52
|
+
uri: git://github.com/rubyworks/hashery.git
|
53
|
+
categories: []
|
54
|
+
copyrights:
|
55
|
+
- holder: Rubyworks
|
56
|
+
year: '2010'
|
57
|
+
license: BSD-2-Clause
|
58
|
+
customs: []
|
59
|
+
paths:
|
60
|
+
lib:
|
61
|
+
- lib
|
62
|
+
- alt
|
63
|
+
name: hashery
|
64
|
+
title: Hashery
|
65
|
+
version: 2.1.1
|
66
|
+
summary: Facets-bread collection of Hash-like classes.
|
67
|
+
description: The Hashery is a tight collection of Hash-like classes. Included among
|
68
|
+
its many offerings are the auto-sorting Dictionary class, the efficient LRUHash,
|
69
|
+
the flexible OpenHash and the convenient KeyHash. Nearly every class is a subclass
|
70
|
+
of the CRUDHash which defines a CRUD model on top of Ruby's standard Hash making
|
71
|
+
it a snap to subclass and augment to fit any specific use case.
|
72
|
+
created: '2010-04-21'
|
73
|
+
date: '2013-08-21'
|
data/{HISTORY.rdoc → HISTORY.md}
RENAMED
@@ -1,9 +1,22 @@
|
|
1
|
-
|
1
|
+
# RELEASE HISTORY
|
2
2
|
|
3
|
-
|
3
|
+
## 2.1.1 / 2013-08-21
|
4
|
+
|
5
|
+
This minor release clarifies the licensing. The entire library is now
|
6
|
+
distributed under the BSD-2-Clause license, also known as the FreeBSD
|
7
|
+
license. In addition this release provides a bug fix for flattening
|
8
|
+
arrays that contain an OpenCascade object.
|
9
|
+
|
10
|
+
Changes:
|
11
|
+
|
12
|
+
* Clarify licensing.
|
13
|
+
* Fix #flatten on Arrays that contain an OpenCascade.
|
14
|
+
|
15
|
+
|
16
|
+
## 2.1.0 / 2012-11-24 (Golden Retriever)
|
4
17
|
|
5
18
|
The major change of the 2.1 release is to switch over to `Hash#fetch`
|
6
|
-
as the fundamental CRUD read method
|
19
|
+
as the fundamental CRUD read method in-place of the previous `#read` core
|
7
20
|
extension (an alias of `#[]`). This is a pretty fundamental change which
|
8
21
|
required modification of a number of classes. So please do extra-diligence
|
9
22
|
and file an issue if you experience any problems.
|
@@ -23,7 +36,7 @@ Changes:
|
|
23
36
|
* Change OpenCascade to auto-create the subclass when inherited.
|
24
37
|
|
25
38
|
|
26
|
-
|
39
|
+
## 2.0.1 / 2012-07-06
|
27
40
|
|
28
41
|
This minor release fixes an issue with OpenCascade (#13).
|
29
42
|
The key_proc procedure wasn't being passed along to sub-cascades.
|
@@ -33,7 +46,7 @@ Changes:
|
|
33
46
|
* OpenCascade passes along key_proc to children.
|
34
47
|
|
35
48
|
|
36
|
-
|
49
|
+
## 2.0.0 / 2012-05-11 (Crud Space)
|
37
50
|
|
38
51
|
This is a big release for Hashery which both culls some of it's
|
39
52
|
less fitting classes and modules while greatly improving the rest.
|
@@ -56,7 +69,7 @@ Changes:
|
|
56
69
|
* Removed open_object.rb, which has long been deprecated.
|
57
70
|
|
58
71
|
|
59
|
-
|
72
|
+
## 1.5.1 / 2012-05-09
|
60
73
|
|
61
74
|
This release adds transformative #each method to OpenCascade, to
|
62
75
|
ensure #each returns an OpenCascade. Also, BasicCascade has been
|
@@ -70,7 +83,7 @@ Changes:
|
|
70
83
|
* Renamed `Ini` class to `IniHash` class.
|
71
84
|
|
72
85
|
|
73
|
-
|
86
|
+
## 1.5.0 / 2011-11-10 (Devil's Core)
|
74
87
|
|
75
88
|
In this release, CoreExt module has been added to encapsulate
|
76
89
|
methods that extend Ruby's core Hash class (there are only a few).
|
@@ -88,7 +101,7 @@ Changes:
|
|
88
101
|
* Switch license to BSD-2-Clause license.
|
89
102
|
|
90
103
|
|
91
|
-
|
104
|
+
## 1.4.0 / 2011-01-19 (Back To Basics)
|
92
105
|
|
93
106
|
This release includes a copy of Ruby Facets' BasicObject class, which
|
94
107
|
fixes the loading bug of the previous version. This release also renames
|
@@ -101,7 +114,7 @@ Changes:
|
|
101
114
|
* Fix basicobject.rb loading issue.
|
102
115
|
|
103
116
|
|
104
|
-
|
117
|
+
## 1.3.0 / 2010-10-01 (Private Property)
|
105
118
|
|
106
119
|
This release fixes a minor bug in CastingHash and adds a new
|
107
120
|
PropertyHash class.
|
@@ -117,7 +130,7 @@ Changes:
|
|
117
130
|
* Fixed CastingHash#new where #to_proc is called against NilClass
|
118
131
|
|
119
132
|
|
120
|
-
|
133
|
+
## 1.2.0 / 2010-06-04 (Fuzzy Wuzzy)
|
121
134
|
|
122
135
|
This release makes two significant changes to the Hashery.
|
123
136
|
First, we have a new shiny library called FuzzyHash by
|
@@ -138,7 +151,7 @@ Changes:
|
|
138
151
|
* OpenCascade subclasses OpenHash and handles Array cascading.
|
139
152
|
|
140
153
|
|
141
|
-
|
154
|
+
## 1.1.0 / 2010-04-28 (Ugly Ducklings)
|
142
155
|
|
143
156
|
A follow-up release of Hashery that adds two new libraries:
|
144
157
|
Association and SparseArray. Both of these may seem like odd
|
@@ -157,7 +170,7 @@ Changes:
|
|
157
170
|
* Added sparsearray.rb
|
158
171
|
|
159
172
|
|
160
|
-
|
173
|
+
## 1.0.0 / 2010-04-21 (Hatching Hashery)
|
161
174
|
|
162
175
|
This is the first release of the Facets Hashery.
|
163
176
|
Most of included classes come directly from Ruby
|
data/LICENSE.txt
CHANGED
@@ -1,26 +1,23 @@
|
|
1
|
-
|
1
|
+
BSD-2-Clause License
|
2
2
|
|
3
|
-
|
3
|
+
Redistribution and use in source and binary forms, with or without
|
4
|
+
modification, are permitted provided that the following conditions are met:
|
4
5
|
|
5
|
-
|
6
|
+
1. Redistributions of source code must retain the above copyright notice,
|
7
|
+
this list of conditions and the following disclaimer.
|
6
8
|
|
7
|
-
|
8
|
-
this
|
9
|
-
|
10
|
-
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
11
|
-
Software, and to permit persons to whom the Software is furnished to do so,
|
12
|
-
subject to the following conditions:
|
9
|
+
2. Redistributions in binary form must reproduce the above copyright
|
10
|
+
notice, this list of conditions and the following disclaimer in the
|
11
|
+
documentation and/or other materials provided with the distribution.
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
Website: http://rubyworks.github.com/hashery
|
25
|
-
License: http://www.spdx.org/licenses/MIT
|
13
|
+
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
14
|
+
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
|
15
|
+
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
16
|
+
COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
17
|
+
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
18
|
+
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
19
|
+
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
20
|
+
OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
21
|
+
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
22
|
+
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
26
23
|
|
data/NOTICE.txt
CHANGED
@@ -2,12 +2,6 @@ All copyright holders have released their wares with a compatible
|
|
2
2
|
license or have given permission for their work to be distributed
|
3
3
|
under the same license as Hashery.
|
4
4
|
|
5
|
-
BasicObject is based on Jim Weirich's BlankSlate class.
|
6
|
-
|
7
|
-
BlankSlate
|
8
|
-
Copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
9
|
-
All rights reserved.
|
10
|
-
|
11
5
|
Dictionary is based on OrderedHash by Jan Molic.
|
12
6
|
|
13
7
|
OrderHash 2.0 Copyright (c) 2005 Jan Molic.
|
@@ -44,3 +38,9 @@ PathHash is based on SlashedHash by Daniel Parker
|
|
44
38
|
Copyright (c) 2006 BehindLogic
|
45
39
|
http://hash_magic.rubyforge.org
|
46
40
|
|
41
|
+
BasicObject is based on Jim Weirich's BlankSlate class.
|
42
|
+
|
43
|
+
BlankSlate
|
44
|
+
Copyright 2004 by Jim Weirich (jim@weirichhouse.org).
|
45
|
+
All rights reserved.
|
46
|
+
|
data/{README.rdoc → README.md}
RENAMED
@@ -1,15 +1,17 @@
|
|
1
|
-
|
1
|
+
# Hashery
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
[Homepage](http://rubyworks.github.com/hashery) ·
|
4
|
+
[Development](http://github.com/rubyworks/hashery) ·
|
5
|
+
[Report Issue](http://github.com/rubyworks/hashery/issues] ·
|
6
|
+
[Mailing List](http://googlegroups.com/group.rubyworks-mailinglist] ·
|
7
|
+
[IRC](irc://irc.freenode.net/rubyworks)
|
8
8
|
|
9
|
-
|
9
|
+
[](http://badge.fury.io/rb/hashery)
|
10
|
+
[](http://travis-ci.org/rubyworks/hashery)
|
11
|
+
[](http://flattr.com/thing/324911/Rubyworks-Ruby-Development-Fund)
|
10
12
|
|
11
13
|
|
12
|
-
|
14
|
+
## Description
|
13
15
|
|
14
16
|
Among Ruby Facets most common additions were an assortment
|
15
17
|
of Hash-like classes. To better support this collection
|
@@ -23,14 +25,14 @@ some variations of the standard Hash class and a few
|
|
23
25
|
other yummy morsels.
|
24
26
|
|
25
27
|
|
26
|
-
|
28
|
+
## Usage
|
27
29
|
|
28
|
-
For usage
|
29
|
-
in this collection and read the demo documents which give
|
30
|
+
For instruction on usage, please see the individual library files
|
31
|
+
included in this collection and read the demo documents which give
|
30
32
|
examples of almost all features.
|
31
33
|
|
32
34
|
|
33
|
-
|
35
|
+
## Core Extensions
|
34
36
|
|
35
37
|
Hashery adds four core extensions of Ruby's Hash class: `#retrieve`,
|
36
38
|
`#rekey`, `#rekey!` and `Hash.create`. The first is simply an alias
|
@@ -40,17 +42,17 @@ a new hash with another hash upon initialization. All of these are
|
|
40
42
|
sorely missing for Ruby itself, which is why they are provided here.
|
41
43
|
|
42
44
|
|
43
|
-
|
45
|
+
## Installation
|
44
46
|
|
45
47
|
To install with RubyGems simply open a console and type:
|
46
48
|
|
47
49
|
$ sudo gem install hashery
|
48
50
|
|
49
51
|
Tarball packages are available for manual site installations
|
50
|
-
via
|
52
|
+
via [Ruby Setup](http://proutils.github.com/setup).
|
51
53
|
|
52
54
|
|
53
|
-
|
55
|
+
## Authors
|
54
56
|
|
55
57
|
Developers who have contributed code to the project include:
|
56
58
|
|
@@ -63,15 +65,15 @@ Developers who have contributed code to the project include:
|
|
63
65
|
* Erik Veenstra
|
64
66
|
|
65
67
|
|
66
|
-
|
68
|
+
## Contributing
|
67
69
|
|
68
70
|
Don't be a lump on a log. See an issue? Have a suggestion? Want to help?
|
69
71
|
Well git in there!
|
70
72
|
|
71
|
-
|
73
|
+
### Testing
|
72
74
|
|
73
|
-
Hashery uses QED
|
74
|
-
Lemon
|
75
|
+
Hashery uses [QED](http://rubyworks.github.com/qed) and
|
76
|
+
[Lemon](http://rubyworks.github.com/lemon) test frameworks.
|
75
77
|
The QED framework to create well tested high-level documentation.
|
76
78
|
Run the QED specs via:
|
77
79
|
|
@@ -83,34 +85,29 @@ RubyTest universal test harness.
|
|
83
85
|
$ rubytest -Ilib test/
|
84
86
|
|
85
87
|
|
86
|
-
|
88
|
+
### Patches
|
87
89
|
|
88
|
-
Hashery's repository is hosted on GitHub
|
90
|
+
Hashery's repository is hosted on [GitHub](http://github.com/rubyworks/hashery).
|
89
91
|
If you'd like to offer up a fix or feature, fork the repo and submit a pull
|
90
92
|
request (preferably in a topic branch). I assume you have heard
|
91
|
-
all the talk about proper
|
93
|
+
all the talk about proper [practices](http://learn.github.com/p/intro.html),
|
92
94
|
so I won't bug you with it yet again.
|
93
95
|
|
94
|
-
|
96
|
+
### Donations
|
95
97
|
|
96
98
|
Yes, we FOSS programmers need to eat too! ;-) No seriously, any help you can
|
97
99
|
offer goes a long way toward continued development of Rubyworks projects,
|
98
100
|
including Hashery. See the upper right-hand corner on the
|
99
|
-
Rubyworks
|
101
|
+
[Rubyworks](http://rubyworks.github.com) homepage. Thanks.
|
100
102
|
|
101
103
|
|
102
|
-
|
103
|
-
|
104
|
-
Please see the HISTORY file.
|
105
|
-
|
106
|
-
|
107
|
-
== COPYRIGHTS
|
104
|
+
## Copyrights
|
108
105
|
|
109
106
|
Copyright (c) 2010 Rubyworks
|
110
107
|
|
111
|
-
Licensed under the *BSD-2-
|
108
|
+
Licensed under the *BSD-2-Clause* license.
|
112
109
|
|
113
|
-
See COPYING.
|
110
|
+
See COPYING.md file for further details.
|
114
111
|
|
115
112
|
Some libraries included in the Hashery have special copyrights
|
116
113
|
attributing specific authors. Please see each library script for
|
@@ -0,0 +1,63 @@
|
|
1
|
+
= OpenHash
|
2
|
+
|
3
|
+
An OpenHash is a Hash that provides +open+ access to its entries via method
|
4
|
+
calls. Writers (methods ending in =-marks) assign entries. Methods without
|
5
|
+
special puncuation will retrieve entries.
|
6
|
+
|
7
|
+
o = OpenHash.new
|
8
|
+
o.a = 1
|
9
|
+
o.b = 2
|
10
|
+
o.a.assert == 1
|
11
|
+
o.b.assert == 2
|
12
|
+
|
13
|
+
Writers always use a Symbol for keys in the underlying Hash.
|
14
|
+
|
15
|
+
o.to_h.assert == { :a=>1, :b=>2 }
|
16
|
+
|
17
|
+
All the usual Hash methods are still available in an OpenHash.
|
18
|
+
|
19
|
+
c = o.map{ |k,v| [k,v] }
|
20
|
+
c.assert.include?([:a,1])
|
21
|
+
c.assert.include?([:b,2])
|
22
|
+
|
23
|
+
And they are protected from being overridden by writers.
|
24
|
+
|
25
|
+
o.map = 3
|
26
|
+
o.map.refute == 3
|
27
|
+
|
28
|
+
Even so, the underlying Hash object does contain the entry even
|
29
|
+
when it cannot be accessed via a reader method.
|
30
|
+
|
31
|
+
o.to_h.assert == { :a=>1, :b=>2, :map=>3 }
|
32
|
+
|
33
|
+
We can see if a method is open or not via the `#open?` method.
|
34
|
+
|
35
|
+
o.open?(:a).assert == true
|
36
|
+
o.open?(:map).assert == false
|
37
|
+
|
38
|
+
For some usecases it may be necessary to give up access to one or
|
39
|
+
more Hash methods in favor of access to the hash entries. This can
|
40
|
+
be done using the `#open!` method.
|
41
|
+
|
42
|
+
o.open!(:map, :merge)
|
43
|
+
o.map.assert == 3
|
44
|
+
o.merge = 4
|
45
|
+
o.merge.assert == 4
|
46
|
+
|
47
|
+
Becuase of nature of a writer, a certain set of Hash methods are always
|
48
|
+
protected, in particluar all methods buffered by underscore (e.g. `__id__`).
|
49
|
+
So these cannot be opened.
|
50
|
+
|
51
|
+
expect ArgumentError do
|
52
|
+
o.open!(:__id__)
|
53
|
+
end
|
54
|
+
|
55
|
+
Even though writers alwasy use Symbols as keys, because an OpenHash
|
56
|
+
is a true Hash object, any object can be used as a key internally.
|
57
|
+
|
58
|
+
o = OpenHash.new
|
59
|
+
o[nil] = "Nothing"
|
60
|
+
o.to_h.assert == { nil=>"Nothing" }
|
61
|
+
|
62
|
+
It simply cannot be accessible via a reader method.
|
63
|
+
|