hashery 2.1.0 → 2.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/hashery.png)](http://badge.fury.io/rb/hashery)
|
10
|
+
[![Build Status](https://secure.travis-ci.org/rubyworks/hashery.png)](http://travis-ci.org/rubyworks/hashery)
|
11
|
+
[![Flattr Me](http://api.flattr.com/button/flattr-badge-large.png)](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
|
+
|