hashery 1.1.0 → 1.2.0

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.
data/HISTORY CHANGED
@@ -1,5 +1,26 @@
1
1
  = RELEASE HISTORY
2
2
 
3
+ == 1.2.0 // 2010-06-04
4
+
5
+ This release makes two signifficant changes to the Hashery.
6
+ First, we have a new shiny library called FuzzyHash by
7
+ Joshua Hull. It's a cool idea that allows hash keys to be
8
+ regular expressions. Secondly, OpenCascade is now a subclass
9
+ of OpenHash rather than OpenObject (to go along with the
10
+ changes of the last release), and it now support cascading
11
+ within Arrays.
12
+
13
+ Changes:
14
+
15
+ * 1 New Library
16
+
17
+ * FuzzyHash by Joshua Hull
18
+
19
+ * 1 Major Enhancement
20
+
21
+ * OpenCascade subclasses OpenHash and handles Array cascading.
22
+
23
+
3
24
  == 1.1.0 // 2010-04-28
4
25
 
5
26
  A follow-up release of Hashery that adds two new libraries:
@@ -34,3 +55,4 @@ diverge to target slightly different use cases.
34
55
  Changes:
35
56
 
36
57
  * Happy Birthday!
58
+
@@ -1,19 +1,21 @@
1
- = Facets Hashery
1
+ = Hashery
2
2
 
3
3
  * home: http://rubyworks.github.com/hashery
4
4
  * work: http://github.com/rubyworks/hashery
5
5
 
6
+
6
7
  == DESCRIPTION
7
8
 
8
9
  Among Ruby Facets most common additions were an assortment
9
- of Hash-like classes. To better support this collection of
10
+ of Hash-like classes. To better support this collection
10
11
  of libraries it was deemed prudent to create a side project
11
- specifically for them. Hence the Facets Hashery.
12
+ specifically for them. Hence the "Facets" Hashery.
12
13
 
13
- Included in this collect are the widely used OrderedHash,
14
+ Included in this collection are the widely used OrderedHash,
14
15
  the related but more featured Dictionary class, a number
15
- of _open_ classes, similiar to the standard OpenStruct,
16
- and variations of the standard Hash.
16
+ of _open_ classes, similar to the standard OpenStruct,
17
+ plus a few variations of the standard Hash and a few
18
+ other yummy morsels.
17
19
 
18
20
 
19
21
  == RELEASE NOTES
@@ -34,14 +36,27 @@ To install with RubyGems simply open a console and type:
34
36
  $ sudo gem install hashery
35
37
 
36
38
  Tarball packages are available for manual site installations
37
- via <a href="http://proutils.github.com/setup">Setup.rb</a>.
39
+ via {Ruby Setup}[http://proutils.github.com/setup].
38
40
 
39
41
 
40
42
  == LICENSE
41
43
 
42
- Copyright (c) 2005,2010 Thomas Sawyer
44
+ Copyright (c) 2005, 2010 Thomas Sawyer
43
45
 
44
- This program is ditributed unser the terms of the MIT license.
46
+ This library is distributed under the terms of the MIT license.
45
47
 
46
48
  See LICENSE file for details.
47
49
 
50
+ Some libraries included in the Hashery have special copyrights
51
+ attributing specific authors. Please see each file for details.
52
+
53
+ Contributing authors include:
54
+
55
+ * Kirk Haines
56
+ * Joshua Hull
57
+ * Robert Klemme
58
+ * Jan Molic
59
+ * George Moschovitis
60
+ * Jeena Paradies
61
+ * Erik Veenstra
62
+
@@ -1,24 +1,3 @@
1
- # = Dictionary.rb
2
- #
3
- # Copyright (c) 2005, 2009 Jan Molic, Thomas Sawyer
4
- #
5
- # Ruby License
6
- #
7
- # This module is free software. You may use, modify, and/or redistribute this
8
- # software under the same terms as Ruby.
9
- #
10
- # This program is distributed in the hope that it will be useful, but WITHOUT
11
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12
- # FOR A PARTICULAR PURPOSE.
13
- #
14
- # == Acknowledgments
15
- #
16
- # * Andrew Johnson (merge, to_a, inspect, shift and Hash[])
17
- # * Jeff Sharpe (reverse and reverse!)
18
- # * Thomas Leitner (has_key? and key?)
19
- #
20
- # Ported from OrderHash 2.0, Copyright (c) 2005 Jan Molic
21
-
22
1
  # = Dictionary
23
2
  #
24
3
  # The Dictionary class is a Hash that preserves order.
@@ -62,6 +41,18 @@
62
41
  # * Use ::auto which creates Dictionay sub-entries as needed.
63
42
  # * And ::alpha which creates a new Dictionary sorted by key.
64
43
  #
44
+ # == Acknowledgments
45
+ #
46
+ # Dictionary is a ported of OrderHash 2.0 Copyright (c) 2005 Jan Molic.
47
+ #
48
+ # People who have contributed to this class since then include:
49
+ #
50
+ # * Andrew Johnson (merge, to_a, inspect, shift and Hash[])
51
+ # * Jeff Sharpe (reverse and reverse!)
52
+ # * Thomas Leitner (has_key? and key?)
53
+ #
54
+ # Copyright (c) 2005, 2009 Jan Molic, Thomas Sawyer
55
+
65
56
  class Dictionary
66
57
 
67
58
  include Enumerable
@@ -1,12 +1,11 @@
1
- # LRU based Hash
2
-
3
1
  require 'enumerator'
4
2
 
5
3
  # Hash with LRU expiry policy. There are at most max_size elements in a
6
4
  # LRUHash. When adding more elements old elements are removed according
7
5
  # to LRU policy.
8
6
  #
9
- # by Robert Klemme
7
+ # http://github.com/rklemme/muppet-laboratories/blob/master/lib/lruhash.rb
8
+ # Copyright (c) 2010 Robert Klemme
10
9
 
11
10
  class LRUHash
12
11
 
@@ -1,7 +1,4 @@
1
- # OpenCascade Copyright (c) 2006 Thomas Sawyer
2
-
3
- require 'hashery/openobject'
4
- #require 'facets/boolean' # bool
1
+ require 'hashery/openhash'
5
2
  #require 'facets/nullclass'
6
3
 
7
4
  # = OpenCascade
@@ -32,6 +29,13 @@ require 'hashery/openobject'
32
29
  #
33
30
  # c.a.z? #=> nil
34
31
  #
32
+ # OpenCascade also transforms Hashes within Arrays.
33
+ #
34
+ # h = { :x=>[ {:a=>1}, {:a=>2} ], :y=>1 }
35
+ # c = OpenCascade[h]
36
+ # c.x.first.a.assert == 1
37
+ # c.x.last.a.assert == 2
38
+ #
35
39
  # Finally, you can set a node and get the reciever back using
36
40
  # the !-mark.
37
41
  #
@@ -54,8 +58,9 @@ require 'hashery/openobject'
54
58
  # So be sure to take that into account.
55
59
  #++
56
60
 
57
- class OpenCascade < OpenObject
61
+ class OpenCascade < OpenHash
58
62
 
63
+ #
59
64
  def method_missing(sym, *args, &blk)
60
65
  type = sym.to_s[-1,1]
61
66
  name = sym.to_s.gsub(/[=!?]$/, '').to_sym
@@ -63,21 +68,32 @@ class OpenCascade < OpenObject
63
68
  when '='
64
69
  self[name] = args.first
65
70
  when '!'
66
- @hash.__send__(key, *args, &blk)
71
+ #@hash.__send__(name, *args, &blk)
72
+ __send__(name, *args, &blk)
67
73
  when '?'
68
74
  self[name]
69
75
  else
70
76
  if key?(name)
71
- val = self[name]
72
- if Hash === val
73
- self[name] = OpenCascade.new(val) #self.class.new(val)
74
- else
75
- self[name]
76
- end
77
+ self[name] = transform_entry(self[name])
77
78
  else
78
79
  self[name] = OpenCascade.new #self.class.new
79
80
  end
80
81
  end
81
82
  end
82
83
 
84
+ private
85
+
86
+ #
87
+ def transform_entry(entry)
88
+ case entry
89
+ when Hash
90
+ OpenCascade.new(entry) #self.class.new(val)
91
+ when Array
92
+ entry.map{ |e| transform_entry(e) }
93
+ else
94
+ entry
95
+ end
96
+ end
97
+
83
98
  end
99
+
@@ -15,6 +15,18 @@ class OpenHash < Hash
15
15
  merge!(data)
16
16
  end
17
17
 
18
+ #
19
+ def <<(x)
20
+ case x
21
+ when Hash
22
+ update(x)
23
+ when Array
24
+ x.each_slice(2) do |(k,v)|
25
+ self[k] = v
26
+ end
27
+ end
28
+ end
29
+
18
30
  #
19
31
  def respond_to?(name)
20
32
  key?(name.to_sym) || super(name)
@@ -1,24 +1,3 @@
1
- #--
2
- # SparseArray
3
- #
4
- # Copyright (c) 2004,2005 Thomas Sawyer
5
- #
6
- # Ruby License
7
- #
8
- # This module is free software. You may use, modify, and/or redistribute this
9
- # software under the same terms as Ruby.
10
- #
11
- # This program is distributed in the hope that it will be useful, but WITHOUT
12
- # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
13
- # FOR A PARTICULAR PURPOSE.
14
- #
15
- # ==========================================================================
16
- # Revision History ::
17
- # --------------------------------------------------------------------------
18
- # 04.09 Trans * 99% Compatible with Array
19
- # ==========================================================================
20
- #++
21
-
22
1
  # = SparseArray
23
2
  #
24
3
  # SparseArray is an implemenation of the Array class using only Hashes.
@@ -28,17 +7,29 @@
28
7
  # Ruby 1.9 that need to be added, and negative indexes are not quite fully
29
8
  # supported yet.
30
9
  #
31
- # SparseArray is slower then the built in Array class, but not as slow
32
- # as one might expect, since a Hash is generally faster than an Array.
33
- # It would interesting to see how this would perform if it were
34
- # written in C.
10
+ # Benchmarks comparing Ruby 1.6 circa 2004 compared to Ruby 1.8.7
11
+ # circa 2010, show that Ruby's Array implementation has improved quite
12
+ # a bit. Where as Array was about 2-4 times faster than SparseArray in 2004,
13
+ # it is now over 10x faster, and able to handle large sparse arrays quite
14
+ # easily. Though surely SparseArray could still be improved, <b>SparseArray
15
+ # is little more than an interesting novelty at this point</b>, as opposed
16
+ # to a useful class, but we will keep her nonetheless for simple interests
17
+ # sake.
18
+ #
19
+ # NOTE: SparseArray is also the first piece of code I used TDD to create.
20
+ #
21
+ # Copyright (c) 2004 Thomas Sawyer
35
22
  #
23
+ #--
24
+ # TODO: Add auto-array features if needed (see work/autoarray).
25
+ #++
26
+
36
27
  class SparseArray < Hash
37
28
 
38
29
  def self.[](*args)
39
- nha = new
40
- args.each { |a| nha << a } #.set(nha.length,a) }
41
- nha
30
+ s = new
31
+ args.each{ |e| s << e }
32
+ s
42
33
  end
43
34
 
44
35
  def self.new_h(hsh)
@@ -267,11 +258,11 @@ class SparseArray < Hash
267
258
  end
268
259
 
269
260
  def each
270
- (0...self.length).each { |i| yield(self.fetch(i)) }
261
+ (0...self.length).each{ |i| yield(get(i)) }
271
262
  end
272
263
 
273
264
  def each_index
274
- (0...self.length).each { |i| yield(i) }
265
+ (0...self.length).each{ |i| yield(i) }
275
266
  end
276
267
 
277
268
  # empty? okay as is
metadata CHANGED
@@ -4,35 +4,34 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 1
7
- - 1
7
+ - 2
8
8
  - 0
9
- version: 1.1.0
9
+ version: 1.2.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - Thomas Sawyer
13
+ - Kirk Haines
14
+ - Robert Klemme
13
15
  - Jan Molic
14
16
  - George Moschovitis
17
+ - Jeena Paradies
18
+ - Erik Veenstra
15
19
  autorequire:
16
20
  bindir: bin
17
21
  cert_chain: []
18
22
 
19
- date: 2010-04-28 00:00:00 -04:00
23
+ date: 2010-06-04 00:00:00 -04:00
20
24
  default_executable:
21
25
  dependencies: []
22
26
 
23
- description: |-
24
- The Facets Hashery is collection of Hash-like classes, spun-off
25
- from the original Ruby Facets library. Included are the widely
26
- used OrderedHash, the related but more featured Dictionary
27
- class, a number of _open_ classes, similiar to the standard
28
- OpenStruct and variations on the standard Hash.
29
- email:
27
+ description: The Hashery is a collection of Hash-like classes, spun-off from the original Ruby Facets library. Included are the widely used OrderedHash, the related but more featured Dictionary class, a number of open classes, similiar to the standard OpenStruct and a few variations on the standard Hash.
28
+ email: transfire@gmail.com
30
29
  executables: []
31
30
 
32
31
  extensions: []
33
32
 
34
- extra_rdoc_files: []
35
-
33
+ extra_rdoc_files:
34
+ - README.rdoc
36
35
  files:
37
36
  - lib/hashery/association.rb
38
37
  - lib/hashery/castinghash.rb
@@ -51,17 +50,6 @@ files:
51
50
  - lib/hashery/stash.rb
52
51
  - lib/hashery/statichash.rb
53
52
  - lib/hashery.rb
54
- - meta/authors
55
- - meta/created
56
- - meta/description
57
- - meta/homepage
58
- - meta/license
59
- - meta/name
60
- - meta/release
61
- - meta/repository
62
- - meta/suite
63
- - meta/summary
64
- - meta/version
65
53
  - test/case_association.rb
66
54
  - test/case_dictionary.rb
67
55
  - test/case_opencascade.rb
@@ -80,6 +68,8 @@ post_install_message:
80
68
  rdoc_options:
81
69
  - --title
82
70
  - Hashery API
71
+ - --main
72
+ - README.rdoc
83
73
  require_paths:
84
74
  - lib
85
75
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -1,3 +0,0 @@
1
- Thomas Sawyer
2
- Jan Molic
3
- George Moschovitis
@@ -1 +0,0 @@
1
- 2010-04-21
@@ -1,5 +0,0 @@
1
- The Facets Hashery is collection of Hash-like classes, spun-off
2
- from the original Ruby Facets library. Included are the widely
3
- used OrderedHash, the related but more featured Dictionary
4
- class, a number of _open_ classes, similiar to the standard
5
- OpenStruct and variations on the standard Hash.
@@ -1 +0,0 @@
1
- http://rubyworks.github.com/hashery
@@ -1 +0,0 @@
1
- MIT
data/meta/name DELETED
@@ -1 +0,0 @@
1
- hashery
@@ -1 +0,0 @@
1
- 2009-06-26
@@ -1 +0,0 @@
1
- git://github.com/rubyworks/hashery.git
data/meta/suite DELETED
@@ -1 +0,0 @@
1
- rubyworks
@@ -1 +0,0 @@
1
- Facets bread collection of Hash-like classes.
@@ -1 +0,0 @@
1
- 1.1.0