prime_iterator 1.0.0 → 1.1

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.
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