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.
- data/lib/rhash.rb +160 -32
- data/test/test.rb +23 -71
- metadata +4 -4
    
        data/lib/rhash.rb
    CHANGED
    
    | @@ -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 | 
            -
            	#  | 
| 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:: | 
| 393 | 
            +
            	# See Hash::values_at
         | 
| 371 394 | 
             
            	#
         | 
| 372 | 
            -
            	def  | 
| 373 | 
            -
            		 | 
| 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 | 
            -
            	#  | 
| 469 | 
            +
            	# Return the contents of this hash as a string.
         | 
| 389 470 | 
             
            	#
         | 
| 390 | 
            -
            	def  | 
| 391 | 
            -
            		 | 
| 392 | 
            -
            		@hash. | 
| 393 | 
            -
            			 | 
| 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 | 
            -
            		 | 
| 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?
         | 
    
        data/test/test.rb
    CHANGED
    
    | @@ -1,75 +1,27 @@ | |
| 1 1 | 
             
            require 'lib/rhash'
         | 
| 2 | 
            -
             | 
| 2 | 
            +
            require 'rubygems'
         | 
| 3 | 
            +
            #require 'test/unit'
         | 
| 3 4 | 
             
            n = RHash.new
         | 
| 4 | 
            -
            n[ | 
| 5 | 
            -
            n[ | 
| 6 | 
            -
            n[" | 
| 7 | 
            -
            n[ | 
| 8 | 
            -
            n[ | 
| 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 | 
            -
             | 
| 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:  | 
| 4 | 
            +
              hash: 23
         | 
| 5 5 | 
             
              prerelease: false
         | 
| 6 6 | 
             
              segments: 
         | 
| 7 7 | 
             
              - 0
         | 
| 8 8 | 
             
              - 0
         | 
| 9 | 
            -
              -  | 
| 10 | 
            -
              version: 0.0. | 
| 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- | 
| 18 | 
            +
            date: 2010-07-15 00:00:00 -03:00
         | 
| 19 19 | 
             
            default_executable: 
         | 
| 20 20 | 
             
            dependencies: []
         | 
| 21 21 |  |