array_enumerator 0.0.2 → 0.0.3
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/VERSION +1 -1
- data/array_enumerator.gemspec +1 -1
- data/lib/array_enumerator.rb +43 -0
- data/spec/array_enumerator_spec.rb +13 -0
- metadata +2 -2
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            0.0. | 
| 1 | 
            +
            0.0.3
         | 
    
        data/array_enumerator.gemspec
    CHANGED
    
    
    
        data/lib/array_enumerator.rb
    CHANGED
    
    | @@ -47,6 +47,49 @@ class Array_enumerator | |
| 47 47 | 
             
                end
         | 
| 48 48 | 
             
              end
         | 
| 49 49 |  | 
| 50 | 
            +
              #This method should only be used with 'each_index'.
         | 
| 51 | 
            +
              def [](key)
         | 
| 52 | 
            +
                if @each_index and @each_index.key?(key)
         | 
| 53 | 
            +
                  ret = @each_index[key]
         | 
| 54 | 
            +
                  @each_index.delete(key)
         | 
| 55 | 
            +
                  return ret
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
                
         | 
| 58 | 
            +
                raise "This only works when also using 'each_index'. Invalid key: '#{key}'."
         | 
| 59 | 
            +
              end
         | 
| 60 | 
            +
              
         | 
| 61 | 
            +
              #Yields each count-key and caches element for returning it by using the []-method.
         | 
| 62 | 
            +
              def each_index(&block)
         | 
| 63 | 
            +
                enum = Enumerator.new do |yielder|
         | 
| 64 | 
            +
                  begin
         | 
| 65 | 
            +
                    @each_index = {}
         | 
| 66 | 
            +
                    
         | 
| 67 | 
            +
                    count = 0
         | 
| 68 | 
            +
                    self.each do |ele|
         | 
| 69 | 
            +
                      #Remove previous element to not take up memory.
         | 
| 70 | 
            +
                      count_before = count - 1
         | 
| 71 | 
            +
                      @each_index.delete(count_before) if @each_index.key?(count_before)
         | 
| 72 | 
            +
                      
         | 
| 73 | 
            +
                      #Add current element to cache.
         | 
| 74 | 
            +
                      @each_index[count] = ele
         | 
| 75 | 
            +
                      yield(count)
         | 
| 76 | 
            +
                      
         | 
| 77 | 
            +
                      #Increase count for next run.
         | 
| 78 | 
            +
                      count += 1
         | 
| 79 | 
            +
                    end
         | 
| 80 | 
            +
                  ensure
         | 
| 81 | 
            +
                    @each_index = nil
         | 
| 82 | 
            +
                  end
         | 
| 83 | 
            +
                end
         | 
| 84 | 
            +
                
         | 
| 85 | 
            +
                if block
         | 
| 86 | 
            +
                  enum.each(&block)
         | 
| 87 | 
            +
                  return nil
         | 
| 88 | 
            +
                else
         | 
| 89 | 
            +
                  return enum
         | 
| 90 | 
            +
                end
         | 
| 91 | 
            +
              end
         | 
| 92 | 
            +
              
         | 
| 50 93 | 
             
              #Returns a enumerator that can yield the all the lements (both cached and future un-cached ones).
         | 
| 51 94 | 
             
              def to_enum
         | 
| 52 95 | 
             
                check_corrupted
         | 
| @@ -128,4 +128,17 @@ describe "ArrayEnumerator" do | |
| 128 128 | 
             
                  end
         | 
| 129 129 | 
             
                end
         | 
| 130 130 | 
             
              end
         | 
| 131 | 
            +
              
         | 
| 132 | 
            +
              it "each_index" do
         | 
| 133 | 
            +
                arr = %w[a b c d e f g]
         | 
| 134 | 
            +
                ae = Array_enumerator.new(arr.to_enum)
         | 
| 135 | 
            +
                
         | 
| 136 | 
            +
                expect = 0
         | 
| 137 | 
            +
                ae.each_index do |num|
         | 
| 138 | 
            +
                  raise "Expected #{expect} but got: #{num}" if num != expect
         | 
| 139 | 
            +
                  ele = ae[num]
         | 
| 140 | 
            +
                  raise "Expected #{arr[num]} but got: #{ele}" if ele != arr[num]
         | 
| 141 | 
            +
                  expect += 1
         | 
| 142 | 
            +
                end
         | 
| 143 | 
            +
              end
         | 
| 131 144 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -2,7 +2,7 @@ | |
| 2 2 | 
             
            name: array_enumerator
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 4 4 | 
             
              prerelease: 
         | 
| 5 | 
            -
              version: 0.0. | 
| 5 | 
            +
              version: 0.0.3
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors: 
         | 
| 8 8 | 
             
            - Kasper Johansen
         | 
| @@ -104,7 +104,7 @@ required_ruby_version: !ruby/object:Gem::Requirement | |
| 104 104 | 
             
              requirements: 
         | 
| 105 105 | 
             
              - - ">="
         | 
| 106 106 | 
             
                - !ruby/object:Gem::Version 
         | 
| 107 | 
            -
                  hash:  | 
| 107 | 
            +
                  hash: -947760670988037179
         | 
| 108 108 | 
             
                  segments: 
         | 
| 109 109 | 
             
                  - 0
         | 
| 110 110 | 
             
                  version: "0"
         |