iterable 0.0.10.pre → 0.0.11.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ class Array
2
+ def to_iter
3
+ IterableArray.new self
4
+ end
5
+ end
@@ -1,2 +1 @@
1
- require_relative './iterable_array.rb'
2
-
1
+ require "#{File.expand_path File.dirname(__FILE__)}/iterable_array"
@@ -5,16 +5,23 @@
5
5
  # Or the remix gem, maybe.
6
6
  require 'forwardable'
7
7
 
8
- require_relative './iterable_array/version.rb'
8
+ base_path = File.expand_path File.dirname __FILE__
9
+
10
+ require "#{base_path}/iterable_array/version.rb"
11
+
12
+ require "#{base_path}/swapable.rb"
13
+ require "#{base_path}/array.rb"
14
+ # Required for ruby 1.8 compatibility by IterableArray#shuffle! during iteration
15
+ require "#{base_path}/sampler.rb" unless [].respond_to? :sample
16
+
17
+ require "#{base_path}/iterable_array/special_accessors.rb"
18
+ require "#{base_path}/iterable_array/iterators.rb"
19
+ require "#{base_path}/iterable_array/iterator_specials.rb"
20
+ require "#{base_path}/iterable_array/special_modifiers_noniterating.rb"
9
21
 
10
- require_relative './swapable.rb'
11
- require_relative './iterable_array/special_accessors.rb'
12
- require_relative './iterable_array/iterators.rb'
13
- require_relative './iterable_array/iterator_specials.rb'
14
- require_relative './iterable_array/special_modifiers_noniterating.rb'
15
22
  # The following are not yet modules.
16
- require_relative './iterable_array/special_modifiers_iterating.rb'
17
- require_relative './iterable_array/plain_modifiers.rb'
23
+ require "#{base_path}/iterable_array/special_modifiers_iterating.rb"
24
+ require "#{base_path}/iterable_array/plain_modifiers.rb"
18
25
 
19
26
  class IterableArray
20
27
  extend Forwardable
@@ -32,7 +39,10 @@ class IterableArray
32
39
  @@iterator_specials = [ :tracking, :tracking=, :invert_tracking, ]
33
40
 
34
41
  @@plain_accessors = [ :frozen?, :==, :[]=, :size, :length, :to_a, :to_s, :to_json, :to_enum, :include?, :hash, :to_ary, :fetch, :inspect, :at, :join, :empty?, :member?, :pack, :shelljoin, ]
35
- @@special_accessors = [ :<<, :concat, :&, :|, :*, :+, :-, :[], :drop, :dup, :compact, :sample, :slice, :<=>, :eql?, :indices, :indexes, :values_at, :assoc, :rassoc, :first, :sort, :last, :flatten, :reverse, :shuffle, :push, :replace, :rotate, :swap, :swap_indices, :take, :transpose, :uniq, ]
42
+ @@plain_accessors.push :choice if Array.new.respond_to? :choice
43
+ @@plain_accessors.push :nitems if Array.new.respond_to? :nitems
44
+ @@special_accessors = [ :<<, :concat, :&, :|, :*, :+, :-, :[], :drop, :dup, :compact, :slice, :<=>, :eql?, :indices, :indexes, :values_at, :assoc, :rassoc, :first, :sort, :last, :flatten, :reverse, :shuffle, :push, :replace, :rotate, :swap, :swap_indices, :take, :transpose, :uniq, ]
45
+ @@special_accessors.push :sample if Array.new.respond_to? :sample
36
46
 
37
47
  @@plain_modifiers = [ :delete, :delete_at, ]
38
48
  @@special_modifiers = [ :clear, :compact!, :flatten!, :insert, :move, :move_from, :shift, :shuffle!, :sort!, :sort_by!, :unshift, :pop, :reverse!, :rotate!, :slice!, :swap!, :swap_indices!, :uniq!, ]
@@ -72,9 +82,20 @@ class IterableArray
72
82
  remove_methods *@@special_modifiers
73
83
  end
74
84
 
75
- def remove_methods *ary
76
- ary.each do |meth|
77
- singleton_class.class_exec { remove_method meth }
85
+ if Class.respond_to? :class_exec and Object.respond_to? :singleton_class
86
+ def remove_methods *ary
87
+ ary.each do |meth|
88
+ singleton_class.class_exec { remove_method meth }
89
+ end
90
+ end
91
+ else
92
+ # Object#singleton_class isn't available in Ruby 1.8
93
+ # The following Ruby 1.8-compatible version is appreciably
94
+ # slower in Ruby 1.9 than the version using Object#singleton_class
95
+ def remove_methods *ary
96
+ ary.each do |methd|
97
+ eval "class << self; remove_method :'#{methd}'; end"
98
+ end
78
99
  end
79
100
  end
80
101
 
@@ -96,5 +117,11 @@ class IterableArray
96
117
  @progenitor = progenitor
97
118
  class << self; undef_method :take_progenitor; end
98
119
  end
120
+
121
+ public
122
+
123
+ def to_iter
124
+ self
125
+ end
99
126
  end
100
127
 
@@ -44,7 +44,7 @@ class IterableArray
44
44
  ##################################################
45
45
  starter = args.first
46
46
  the_final = args.at 1
47
- ender = -> { the_final or length }
47
+ ender = lambda { the_final or length }
48
48
 
49
49
  #############
50
50
  # Iteration #
@@ -404,9 +404,7 @@ class IterableArray
404
404
 
405
405
  def comb_perm_generator methd, ary, n
406
406
  out = []
407
- ary.method(methd)[ n, &(->(item) {
408
- out << item
409
- }) ]
407
+ ary.send(methd, n) { |item| out << item }
410
408
  out
411
409
  end
412
410
 
@@ -174,6 +174,9 @@ class IterableArray
174
174
  @array.shuffle!
175
175
 
176
176
  locations = []
177
+ # For Ruby 1.8, where Array#sample does not exist
178
+ locations = Sampler.new [] unless locations.respond_to? :sample
179
+
177
180
  @array.to_a.each_with_index { |item, location| locations << location if item == current_item }
178
181
 
179
182
  center_indices_at locations.sample
@@ -1,4 +1,4 @@
1
1
  class IterableArray
2
2
  # The version of IterableArray you are using
3
- VERSION = '0.0.10.pre'
3
+ VERSION = '0.0.11.pre'
4
4
  end
@@ -0,0 +1,11 @@
1
+ class Sampler < Array
2
+ if Array.new.respond_to? :choice
3
+ alias_method :sample, :choice
4
+ else
5
+ # Don't need to allow args if this is just being
6
+ # used in the implementation of IterableArray#shuffle!
7
+ def sample
8
+ at rand size
9
+ end
10
+ end
11
+ end
@@ -7,15 +7,13 @@ module Swapable
7
7
  def to_a
8
8
  self
9
9
  end
10
-
10
+
11
11
  def dup
12
12
  (super).extend Swapable
13
13
  end
14
14
 
15
- def swap_2_indices! arg1, arg2
16
- temper = at arg1
17
- self[arg1] = at arg2
18
- self[arg2] = temper
15
+ def swap_2_indices! i1, i2
16
+ self[i1], self[i2] = self[i2], self[i1]
19
17
  self
20
18
  end
21
19
  protected :swap_2_indices!
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iterable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10.pre
4
+ version: 0.0.11.pre
5
5
  prerelease: 7
6
6
  platform: ruby
7
7
  authors:
@@ -9,8 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-06-24 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2013-07-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
14
30
  description: ! 'Provides the class IterableArray, which implements all of the methods
15
31
  of Array
16
32
 
@@ -40,7 +56,9 @@ files:
40
56
  - lib/iterable_array/iterator_specials.rb
41
57
  - lib/iterable_array/special_modifiers_iterating.rb
42
58
  - lib/iterable_array.rb
59
+ - lib/array.rb
43
60
  - lib/swapable.rb
61
+ - lib/sampler.rb
44
62
  - lib/iterable.rb
45
63
  homepage: https://github.com/scooter-dangle/iterable
46
64
  licenses:
@@ -68,3 +86,4 @@ signing_key:
68
86
  specification_version: 3
69
87
  summary: Provides a fully iterable array object
70
88
  test_files: []
89
+ has_rdoc: