prime_iterator 1.0.0 → 1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/prime_iterator.rb +31 -11
  2. metadata +2 -2
@@ -2,25 +2,45 @@
2
2
  # Provides API to get next and previous prime number
3
3
  #
4
4
  # USAGE:
5
- # iterator = PrimeIterator.new
6
- # iterator.next # get next prime number, starting from 2
7
- # iterator.previous # get previous prime number, or nil if previous is called on prime number 2
8
- # iterator.reset # resets, next will start at 2
9
- # iterator.batch_size= # sets the number of prime numbers gotten per fetch (which occurs when previous is called at top of list or next is called at end of list)
5
+ # iterator = PrimeIterator.new <starting_prime>
6
+ # iterator.next # get next prime number, starting from <starting_prime>; defaults to 2 if <starting_prime> is not given
7
+ # iterator.previous # get previous prime number, or nil if previous is called on prime number 2
8
+ # iterator.reset # resets, next will start at <starting_prime>
9
+ # iterator.batch_size= # sets the number of prime numbers gotten per fetch (which occurs when previous is called at top of list or next is called at end of list)
10
+ # iterator.starting_prime= # sets the starting prime. Must call PrimeIterator.reset to take effect.
11
+ #
10
12
  #
11
13
  require 'prime_finder'
12
14
 
13
15
  class PrimeIterator
14
16
 
15
- attr_accessor :batch_size
17
+ DEFAULT_LOWER_BOUND = 2 # 2 is first prime number
18
+ DEFAULT_BATCH_SIZE = 10
19
+
20
+ attr_accessor :batch_size, :starting_prime
16
21
 
17
22
  #
18
23
  # Init
19
24
  #
20
- def initialize
21
- @batch_size = 10 # default size is 10
22
- @current_lower_bound = 2 # 2 is first prime number
23
- @current_upper_bound = 2 #
25
+ def initialize *args
26
+
27
+ @starting_prime = DEFAULT_LOWER_BOUND
28
+ if args.size > 1
29
+ raise "Invalid number of parameter. Specify a starting prime number or do not specify to start at 2."
30
+ elsif args.size == 1
31
+ @starting_prime = args[0]
32
+ end
33
+
34
+ # is given lower bound a valid prime number?
35
+ finder = PrimeFinder.new
36
+ prime_arr = finder.find_primes @starting_prime, @starting_prime
37
+ if prime_arr.size==0
38
+ raise "#{@starting_prime} is an invalid starting prime number."
39
+ end
40
+
41
+ @batch_size = DEFAULT_BATCH_SIZE
42
+ @current_lower_bound = @starting_prime
43
+ @current_upper_bound = @starting_prime
24
44
  @current_prime_list = Array.new
25
45
  @current_prime_list_idx = -1
26
46
  end
@@ -59,7 +79,7 @@ class PrimeIterator
59
79
  # Reset
60
80
  #
61
81
  def reset
62
- initialize
82
+ initialize @starting_prime
63
83
  end
64
84
 
65
85
  private #####
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: prime_iterator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: '1.1'
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: 2012-05-30 00:00:00.000000000 Z
12
+ date: 2012-06-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: prime_finder