backports 2.7.1 → 2.8.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/CHANGELOG.rdoc +6 -0
 - data/README.rdoc +5 -0
 - data/lib/backports/2.0.0/array.rb +30 -0
 - data/lib/backports/2.0.0/range.rb +49 -0
 - data/lib/backports/version.rb +1 -1
 - metadata +4 -2
 
    
        data/CHANGELOG.rdoc
    CHANGED
    
    | 
         @@ -1,5 +1,11 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            = Backports --- History
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            == Version 2.8.0 - February 3rd, 2013
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            * Added some features of 2.0.0 (must be required explicitly until official release):
         
     | 
| 
      
 6 
     | 
    
         
            +
              * Array#bsearch
         
     | 
| 
      
 7 
     | 
    
         
            +
              * Range#bsearch
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       3 
9 
     | 
    
         
             
            == Version 2.7.0 - January 14th, 2013
         
     | 
| 
       4 
10 
     | 
    
         | 
| 
       5 
11 
     | 
    
         
             
            * Added some features of 2.0.0 (must be required explicitly until official release):
         
     | 
    
        data/README.rdoc
    CHANGED
    
    | 
         @@ -195,9 +195,14 @@ To include all Ruby backports but not those of Rails, <tt>require "backports/1.9 
     | 
|
| 
       195 
195 
     | 
    
         | 
| 
       196 
196 
     | 
    
         
             
            Some features of Ruby 2.0.0 have been backported:
         
     | 
| 
       197 
197 
     | 
    
         | 
| 
      
 198 
     | 
    
         
            +
            * Array
         
     | 
| 
      
 199 
     | 
    
         
            +
              * +bsearch+
         
     | 
| 
       198 
200 
     | 
    
         
             
            * Enumerable
         
     | 
| 
       199 
201 
     | 
    
         
             
              * +lazy+
         
     | 
| 
       200 
202 
     | 
    
         
             
            * Enumerator::Lazy
         
     | 
| 
      
 203 
     | 
    
         
            +
              * all methods
         
     | 
| 
      
 204 
     | 
    
         
            +
            * Range
         
     | 
| 
      
 205 
     | 
    
         
            +
              * +bsearch+
         
     | 
| 
       201 
206 
     | 
    
         | 
| 
       202 
207 
     | 
    
         
             
            *Note*: Ruby 2.0.0 will not included by default until 2.0.0 is released (and specs are thus finalized). To play around with these today, <tt>require "backports/2.0"</tt>.
         
     | 
| 
       203 
208 
     | 
    
         | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Array
         
     | 
| 
      
 2 
     | 
    
         
            +
              def bsearch
         
     | 
| 
      
 3 
     | 
    
         
            +
                return to_enum __method__ unless block_given?
         
     | 
| 
      
 4 
     | 
    
         
            +
                from = 0
         
     | 
| 
      
 5 
     | 
    
         
            +
                to   = size - 1
         
     | 
| 
      
 6 
     | 
    
         
            +
                satisfied = nil
         
     | 
| 
      
 7 
     | 
    
         
            +
                while from <= to do
         
     | 
| 
      
 8 
     | 
    
         
            +
                  midpoint = (from + to).div(2)
         
     | 
| 
      
 9 
     | 
    
         
            +
                  result = yield(cur = self[midpoint])
         
     | 
| 
      
 10 
     | 
    
         
            +
                  case result
         
     | 
| 
      
 11 
     | 
    
         
            +
                  when Numeric
         
     | 
| 
      
 12 
     | 
    
         
            +
                    return cur if result == 0
         
     | 
| 
      
 13 
     | 
    
         
            +
                    result = result < 0
         
     | 
| 
      
 14 
     | 
    
         
            +
                  when true
         
     | 
| 
      
 15 
     | 
    
         
            +
                    satisfied = cur
         
     | 
| 
      
 16 
     | 
    
         
            +
                  when nil, false
         
     | 
| 
      
 17 
     | 
    
         
            +
                    # nothing to do
         
     | 
| 
      
 18 
     | 
    
         
            +
                  else
         
     | 
| 
      
 19 
     | 
    
         
            +
                    raise TypeError, "wrong argument type #{result.class} (must be numeric, true, false or nil)"
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                  if result
         
     | 
| 
      
 23 
     | 
    
         
            +
                    to = midpoint - 1
         
     | 
| 
      
 24 
     | 
    
         
            +
                  else
         
     | 
| 
      
 25 
     | 
    
         
            +
                    from = midpoint + 1
         
     | 
| 
      
 26 
     | 
    
         
            +
                  end
         
     | 
| 
      
 27 
     | 
    
         
            +
                end
         
     | 
| 
      
 28 
     | 
    
         
            +
                satisfied
         
     | 
| 
      
 29 
     | 
    
         
            +
              end unless method_defined? :bsearch
         
     | 
| 
      
 30 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,49 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class Range
         
     | 
| 
      
 2 
     | 
    
         
            +
              def bsearch
         
     | 
| 
      
 3 
     | 
    
         
            +
                return to_enum __method__ unless block_given?
         
     | 
| 
      
 4 
     | 
    
         
            +
                from = self.begin
         
     | 
| 
      
 5 
     | 
    
         
            +
                to   = self.end
         
     | 
| 
      
 6 
     | 
    
         
            +
                unless from.is_a?(Numeric) && to.is_a?(Numeric)
         
     | 
| 
      
 7 
     | 
    
         
            +
                  raise TypeError, "can't do binary search for #{from.class}"
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                midpoint = nil
         
     | 
| 
      
 11 
     | 
    
         
            +
                if from.is_a?(Integer) && to.is_a?(Integer)
         
     | 
| 
      
 12 
     | 
    
         
            +
                  convert = ->{ midpoint }
         
     | 
| 
      
 13 
     | 
    
         
            +
                else
         
     | 
| 
      
 14 
     | 
    
         
            +
                  map = ->(pk, unpk, nb) do
         
     | 
| 
      
 15 
     | 
    
         
            +
                    result, = [nb.abs].pack(pk).unpack(unpk)
         
     | 
| 
      
 16 
     | 
    
         
            +
                    nb < 0 ? -result : result
         
     | 
| 
      
 17 
     | 
    
         
            +
                  end.curry
         
     | 
| 
      
 18 
     | 
    
         
            +
                  i2f = map['q', 'D']
         
     | 
| 
      
 19 
     | 
    
         
            +
                  f2i = map['D', 'q']
         
     | 
| 
      
 20 
     | 
    
         
            +
                  from = f2i[from.to_f]
         
     | 
| 
      
 21 
     | 
    
         
            +
                  to = f2i[to.to_f]
         
     | 
| 
      
 22 
     | 
    
         
            +
                  convert = -> { i2f[midpoint] }
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
                to -= 1 if exclude_end?
         
     | 
| 
      
 25 
     | 
    
         
            +
                satisfied = nil
         
     | 
| 
      
 26 
     | 
    
         
            +
                while from <= to do
         
     | 
| 
      
 27 
     | 
    
         
            +
                  midpoint = (from + to).div(2)
         
     | 
| 
      
 28 
     | 
    
         
            +
                  result = yield(cur = convert.call)
         
     | 
| 
      
 29 
     | 
    
         
            +
                  case result
         
     | 
| 
      
 30 
     | 
    
         
            +
                  when Numeric
         
     | 
| 
      
 31 
     | 
    
         
            +
                    return cur if result == 0
         
     | 
| 
      
 32 
     | 
    
         
            +
                    result = result < 0
         
     | 
| 
      
 33 
     | 
    
         
            +
                  when true
         
     | 
| 
      
 34 
     | 
    
         
            +
                    satisfied = cur
         
     | 
| 
      
 35 
     | 
    
         
            +
                  when nil, false
         
     | 
| 
      
 36 
     | 
    
         
            +
                    # nothing to do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  else
         
     | 
| 
      
 38 
     | 
    
         
            +
                    raise TypeError, "wrong argument type #{result.class} (must be numeric, true, false or nil)"
         
     | 
| 
      
 39 
     | 
    
         
            +
                  end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                  if result
         
     | 
| 
      
 42 
     | 
    
         
            +
                    to = midpoint - 1
         
     | 
| 
      
 43 
     | 
    
         
            +
                  else
         
     | 
| 
      
 44 
     | 
    
         
            +
                    from = midpoint + 1
         
     | 
| 
      
 45 
     | 
    
         
            +
                  end
         
     | 
| 
      
 46 
     | 
    
         
            +
                end
         
     | 
| 
      
 47 
     | 
    
         
            +
                satisfied
         
     | 
| 
      
 48 
     | 
    
         
            +
              end unless method_defined? :bsearch
         
     | 
| 
      
 49 
     | 
    
         
            +
            end
         
     | 
    
        data/lib/backports/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: backports
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 2. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 2.8.0
         
     | 
| 
       5 
5 
     | 
    
         
             
              prerelease: 
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors:
         
     | 
| 
         @@ -9,7 +9,7 @@ authors: 
     | 
|
| 
       9 
9 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2013- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2013-02-03 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies: []
         
     | 
| 
       14 
14 
     | 
    
         
             
            description: Essential backports that enable some of the really nice features of ruby
         
     | 
| 
       15 
15 
     | 
    
         
             
              1.8.7, ruby 1.9 and rails from ruby 1.8.6 and earlier.
         
     | 
| 
         @@ -102,8 +102,10 @@ files: 
     | 
|
| 
       102 
102 
     | 
    
         
             
            - lib/backports/1.9.3/string.rb
         
     | 
| 
       103 
103 
     | 
    
         
             
            - lib/backports/1.9.rb
         
     | 
| 
       104 
104 
     | 
    
         
             
            - lib/backports/2.0.0.rb
         
     | 
| 
      
 105 
     | 
    
         
            +
            - lib/backports/2.0.0/array.rb
         
     | 
| 
       105 
106 
     | 
    
         
             
            - lib/backports/2.0.0/enumerable.rb
         
     | 
| 
       106 
107 
     | 
    
         
             
            - lib/backports/2.0.0/enumerator/lazy.rb
         
     | 
| 
      
 108 
     | 
    
         
            +
            - lib/backports/2.0.0/range.rb
         
     | 
| 
       107 
109 
     | 
    
         
             
            - lib/backports/2.0.rb
         
     | 
| 
       108 
110 
     | 
    
         
             
            - lib/backports/basic_object.rb
         
     | 
| 
       109 
111 
     | 
    
         
             
            - lib/backports/force/array_map.rb
         
     |