rhash 0.0.3 → 0.0.4

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.
Files changed (3) hide show
  1. data/lib/rhash.rb +160 -32
  2. data/test/test.rb +23 -71
  3. metadata +4 -4
@@ -12,7 +12,7 @@ class Info
12
12
  "#{key.inspect} => #{value.inspect}"
13
13
  end
14
14
  end
15
-
15
+
16
16
  class RHash
17
17
  #
18
18
  # Returns a new, empty RHash.
@@ -71,23 +71,24 @@ class RHash
71
71
  end
72
72
  end
73
73
 
74
- #
75
- # Return the contents of this hash as a string.
76
- #
77
- def inspect
78
- msg = '{'
79
- @hash.each_with_index do |info, index|
80
- msg += info.to_s
81
- msg += ", " if @hash.size > 1 and index + 1 < @hash.size
82
- end
83
- msg += '}'
84
- msg
85
- end
86
-
87
74
  #
88
75
  # Returns a RHash orderned by key name or block.
89
76
  # If block is given using Array#sort else sort by name.
90
77
  #
78
+ # my_hash = RHash.new
79
+ #
80
+ # my_hash["cow"] = "mooo..."
81
+ #
82
+ # my_hash["chick"] = "cocó..."
83
+ #
84
+ # my_hash["bee"] = "ziiii..."
85
+ #
86
+ # my_hash.sort #=> Returns RHash object.
87
+ #
88
+ # sort_hash = my_hash.sort
89
+ #
90
+ # sort_hash.inspect #=> {"bee" => "ziiii...", "chick" => "cocó...", "cow" => "mooo..."}
91
+ #
91
92
  def sort(&block)
92
93
  sort_rhash = RHash.new
93
94
  int_sort(&block).each do |info|
@@ -100,6 +101,16 @@ class RHash
100
101
  # Sorts self.
101
102
  # If block is given using Array#sort else sort by name.
102
103
  #
104
+ # my_hash = RHash.new
105
+ #
106
+ # my_hash["cow"] = "mooo..."
107
+ #
108
+ # my_hash["chick"] = "cocó..."
109
+ #
110
+ # my_hash["bee"] = "ziiii..."
111
+ #
112
+ # my_hash.sort!.inspect #=> {"bee" => "ziiii...", "chick" => "cocó...", "cow" => "mooo..."}
113
+ #
103
114
  def sort!(&block)
104
115
  sort_hash = int_sort(&block)
105
116
  clear
@@ -109,7 +120,7 @@ class RHash
109
120
  end
110
121
 
111
122
  #
112
- # Orderned RHash and calls block once for each key in RHash,
123
+ # Orders RHash and calls block once for each key in RHash,
113
124
  # passing the key and value to the block as a two-element array
114
125
  #
115
126
  def sort_each(&block)
@@ -119,6 +130,17 @@ class RHash
119
130
  end
120
131
  end
121
132
 
133
+ #
134
+ # Orders RHash and calls block once for each key in RHash,
135
+ # passing the key and value to the block.
136
+ #
137
+ def sort_each_pair(&block)
138
+ new_hash = int_sort
139
+ new_hash.each do |info|
140
+ yield info.key, info.value if block_given?
141
+ end
142
+ end
143
+
122
144
  #
123
145
  # See Hash::each
124
146
  #
@@ -244,13 +266,6 @@ class RHash
244
266
  new_hash
245
267
  end
246
268
 
247
- #
248
- # See RHash::inspect
249
- #
250
- def to_s
251
- inspect
252
- end
253
-
254
269
  #
255
270
  # See Hash::merge
256
271
  #
@@ -292,6 +307,13 @@ class RHash
292
307
  end
293
308
  end
294
309
 
310
+ #
311
+ # See Hash::store
312
+ #
313
+ def store(key, value)
314
+ self[key] = value
315
+ end
316
+
295
317
  #
296
318
  # Returns an array with first key and value found in RHash.
297
319
  #
@@ -304,7 +326,8 @@ class RHash
304
326
  # Returns an array with last key and value found in RHash.
305
327
  #
306
328
  def last
307
- @hash.last
329
+ last = @hash.last
330
+ [last.key, last.value]
308
331
  end
309
332
 
310
333
  #
@@ -367,10 +390,68 @@ class RHash
367
390
  end
368
391
 
369
392
  #
370
- # See Hash::store
393
+ # See Hash::values_at
371
394
  #
372
- def store(key, value)
373
- self[key] = value
395
+ def values_at(*keys)
396
+ selected = []
397
+ @hash.each do |info|
398
+ selected << info.value if keys.include? info.key
399
+ end
400
+ selected
401
+ end
402
+
403
+ #
404
+ # See Hash::==
405
+ #
406
+ def ==(other)
407
+ if other.is_a? Hash
408
+ return equal(other)
409
+ end
410
+
411
+ if other.is_a? RHash
412
+ return equal(other)
413
+ end
414
+ false
415
+ end
416
+
417
+ #
418
+ # Returns two arrays with difference between RHash and Hash/RHash.
419
+ # Each array contains different keys and values have found.
420
+ # The first array is related to whom calls the method
421
+ # and the second array referring to those who want to diff.
422
+ #
423
+ # n = RHash.new
424
+ #
425
+ # n["r"] = 5
426
+ #
427
+ # n["s"] = 6
428
+ #
429
+ # n["d"] = 5
430
+ #
431
+ # n[:h] = "ola"
432
+ #
433
+ # n[:m] = 5
434
+ #
435
+ # x= RHash.new
436
+ #
437
+ # x["r"] = 5
438
+ #
439
+ # x["s"] = 6
440
+ #
441
+ # x["d"] = 5
442
+ #
443
+ # x["t"] = 5
444
+ #
445
+ # n.diff x #=> [[:h, "ola"], [:m, 5]], [["t", 5]]
446
+ #
447
+ def diff(other)
448
+ if other.is_a? Hash
449
+ return int_diff(other)
450
+ end
451
+
452
+ if other.is_a? RHash
453
+ return int_diff(other)
454
+ end
374
455
  end
375
456
 
376
457
  #
@@ -385,15 +466,24 @@ class RHash
385
466
  end
386
467
 
387
468
  #
388
- # See Hash::values_at
469
+ # Return the contents of this hash as a string.
389
470
  #
390
- def values_at(*keys)
391
- selected = []
392
- @hash.each do |info|
393
- selected << info.value if keys.include? info.key
471
+ def inspect
472
+ msg = '{'
473
+ @hash.each_with_index do |info, index|
474
+ msg += info.to_s
475
+ msg += ", " if @hash.size > 1 and index + 1 < @hash.size
394
476
  end
395
- selected
477
+ msg += '}'
478
+ msg
396
479
  end
480
+
481
+ #
482
+ # See RHash::inspect
483
+ #
484
+ def to_s
485
+ inspect
486
+ end
397
487
 
398
488
  #
399
489
  # Converts to a Hash.
@@ -408,6 +498,44 @@ class RHash
408
498
 
409
499
  private
410
500
 
501
+ def equal(other)
502
+ if other.size == self.size
503
+ hits = other.size
504
+ self.each_pair do |key, value|
505
+ other.each_pair do |k,v|
506
+ hits = hits - 1 if (key == k) and (value == v)
507
+ end
508
+ end
509
+ return (hits == 0)? true : false
510
+ else
511
+ return false
512
+ end
513
+ end
514
+
515
+ def int_diff(other)
516
+ my_diff = []
517
+ other_diff = []
518
+ is_member = false
519
+ self.each_pair do |key, value|
520
+ other.each_pair do |k,v|
521
+ is_member = true if (key == k) and (value == v)
522
+ end
523
+ my_diff << [key, value] unless is_member
524
+ is_member = false
525
+ end
526
+
527
+ is_member = false
528
+ other.each_pair do |key, value|
529
+ self.each_pair do |k,v|
530
+ is_member = true if (key == k) and (value == v)
531
+ end
532
+ other_diff << [key, value] unless is_member
533
+ is_member = false
534
+ end
535
+
536
+ return my_diff, other_diff
537
+ end
538
+
411
539
  def int_sort(&block)
412
540
  new_hash = []
413
541
  if !block_given?
@@ -1,75 +1,27 @@
1
1
  require 'lib/rhash'
2
-
2
+ require 'rubygems'
3
+ #require 'test/unit'
3
4
  n = RHash.new
4
- n['b'] = 400
5
- n['g'] = 5
6
- n["a"] = 8
7
- n["x"] = 105
8
- n["xx"] = 1054
5
+ n["r"] = 5
6
+ n["s"] = 6
7
+ n["d"] = 5
8
+ n[:h] = "ola"
9
+ n[:m] = 5
10
+
11
+ #x= {}
12
+ #x["s"] = 5
13
+ #x["r"] = 6
14
+
15
+ x= RHash.new
16
+ x["r"] = 5
17
+ x["s"] = 6
18
+ x["d"] = 5
19
+ x["t"] = 5
20
+
21
+ #puts n == x
22
+ #puts n == 5
9
23
 
10
- #puts n.inspect
11
- #n.sort!{|i,j| i[0] <=> j[0]}
12
- #puts n.inspect
13
- #x = n.sort{|i,j| i[1] <=> j[1]}
14
- #puts x.class
15
- #puts x.inspect
16
- #puts n.inspect
17
- #puts n[:s]
18
- #n.sort_each{|i| puts i}
19
- #n.each{|i| puts i}
20
- #n.each_pair{|i, j| puts i; puts j+1}
21
- #n.each_value{|i| puts i+10}
22
- #n.each_key{|i| puts i.inspect}
23
- puts n.select{|i| i.value > 100}
24
- #puts n.keys.inspect
25
- #puts n.values.inspect
26
- #puts n.has_key?("a")
27
- #puts n.has_key?(:a)
28
- #puts n.has_value?(50)
29
- #puts n.has_value?(105)
30
- #n.delete_if{|i, j| i == :g}
31
- #puts n.inspect
32
- #puts n.delete(:gh){|i| puts "Key #{i} not found"}
33
- #puts n.inspect
34
- #puts n.invert
35
- #puts n.length
36
- #puts n.size
37
- #m = RHash.new
38
- #m[:h] = :garrafa
39
- #m[:b] = "a"
40
- #m = {:h => "garrafas", :b => :a}
41
- #n.merge! m
42
- #x = n.merge m
43
- #puts "Hash pós merge"
44
- #puts x.inspect
45
- #puts "Hash original"
46
- #puts n.inspect
47
- #puts n.inspect
48
- #puts n.first
49
- #puts n.last
50
- #puts n.fetch(:hhh){"hahahahaha"}
51
- #n.clear
52
- #puts n.inspect
53
- #h = RHash.new
54
- #h.default = "5"
55
- #h.default(5)
56
- #puts h.inspect
57
- #h.default= Proc.new {|h, k| h[k] = k.to_i*10}
58
- #h.default(5)
59
- #h.default(10)
60
- #puts h.inspect
61
- #h = RHash.new{|h, k| h[k] = k.to_i*10}
62
- #h.default(5)
63
- #h.default(10)
64
- #puts h.inspect
65
- #puts n.inspect
66
- #n.shift
67
- #puts n.inspect
68
- #n.store(666, 0)
69
- #puts n.inspect
70
- #puts n.to_a.inspect
71
- #puts n.empty?
72
- #m = RHash.new
73
- #puts m.empty?
74
- #puts n.values_at(:a, :xxx).inspect
24
+ a,b = n.diff x
75
25
 
26
+ puts a.inspect
27
+ puts b.inspect
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rhash
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rodrigo Mello Nardi
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-14 00:00:00 -03:00
18
+ date: 2010-07-15 00:00:00 -03:00
19
19
  default_executable:
20
20
  dependencies: []
21
21