@@ -5,23 +5,8 @@ module FactoryBot
55 # Sequence values are generated using next.
66 # @api private
77 class Sequence
8- attr_reader :name , :uri_mgr , :aliases
8+ attr_reader :name , :uri_manager , :aliases
99
10- @sequence_setting_timeout = nil
11-
12- # = Class Methods
13- # ======================================================================
14-
15- ##
16- # Find a sequence by context and name.
17- #
18- # Arguments:
19- # uri_parts: (Array of Strings or Symbols)
20- # comprises the sequence URI parts
21- #
22- # Example:
23- # Sequence.find :my_factory, :my_trait, :my_sequence
24- #
2510 def self . find ( *uri_parts )
2611 if uri_parts . empty?
2712 fail ArgumentError , "wrong number of arguments, expected 1+)"
@@ -30,42 +15,18 @@ def self.find(*uri_parts)
3015 end
3116 end
3217
33- ##
34- # Find a sequence by URI. Searches both Global and inline sequences.
35- #
36- # Arguments:
37- # uri: (Symbol)
38- # The uri name to search for
39- #
4018 def self . find_by_uri ( uri )
4119 uri = uri . to_sym
4220 ( FactoryBot ::Internal . sequences . to_a . find { |seq | seq . has_uri? ( uri ) } ) ||
4321 ( FactoryBot ::Internal . inline_sequences . find { |seq | seq . has_uri? ( uri ) } )
4422 end
4523
46- ##
47- # Returns the number of seconds to allow for setting sequence.
48- # Defaults to 3 seconds, but can be overriden with an
49- # environment variable 'FACTORY_BOT_SET_SEQUENCE_TIMEOUT'
50- #
51- def self . sequence_setting_timeout
52- @sequence_setting_timeout ||= begin
53- user_time = ENV [ "FACTORY_BOT_SET_SEQUENCE_TIMEOUT" ] . to_f
54- ( user_time >= 0.1 ) ? user_time : 3
55- rescue
56- 3
57- end
58- end
59-
60- # = Instance Methods
61- # ======================================================================
62-
6324 def initialize ( name , *args , &proc )
6425 options = args . extract_options!
6526 @name = name
6627 @proc = proc
6728 @aliases = options . fetch ( :aliases , [ ] ) . map ( &:to_sym )
68- @uri_mgr = FactoryBot ::UriManager . new ( names , paths : options [ :uri_paths ] )
29+ @uri_manager = FactoryBot ::UriManager . new ( names , paths : options [ :uri_paths ] )
6930 @value = args . first || 1
7031
7132 unless @value . respond_to? ( :peek )
@@ -94,7 +55,7 @@ def has_name?(test_name)
9455 end
9556
9657 def has_uri? ( uri )
97- uri_mgr . include? ( uri )
58+ uri_manager . include? ( uri )
9859 end
9960
10061 def for_factory? ( test_factory_name )
@@ -109,13 +70,13 @@ def rewind
10970 # If it's an Integer based sequence, set the new value directly,
11071 # else rewind and seek from the beginning until a match is found.
11172 #
112- def set_value ( new_val )
113- if can_set_value_directly? ( new_val )
114- @value . set_value ( new_val )
73+ def set_value ( new_value )
74+ if can_set_value_directly? ( new_value )
75+ @value . set_value ( new_value )
11576 elsif can_set_value_by_index?
116- set_value_by_index ( new_val )
77+ set_value_by_index ( new_value )
11778 else
118- seek_value ( new_val )
79+ seek_value ( new_value )
11980 end
12081 end
12182
@@ -138,10 +99,10 @@ def can_set_value_by_index?
13899 end
139100
140101 ##
141- # Set to the given val , or fail if not found
102+ # Set to the given value , or fail if not found
142103 #
143- def set_value_by_index ( val )
144- index = @value . find_index ( val ) || fail_value_not_found ( val )
104+ def set_value_by_index ( value )
105+ index = @value . find_index ( value ) || fail_value_not_found ( value )
145106 @value . rewind
146107 index . times { @value . next }
147108 end
@@ -150,14 +111,14 @@ def set_value_by_index(val)
150111 # Rewind index and seek until the value is found or the max attempts
151112 # have been tried. If not found, the sequence is rewound to its original value
152113 #
153- def seek_value ( val )
114+ def seek_value ( value )
154115 original_value = @value . peek
155116
156117 # rewind and search for the new value
157118 @value . rewind
158- Timeout . timeout ( Sequence . sequence_setting_timeout ) do
119+ Timeout . timeout ( FactoryBot . sequence_setting_timeout ) do
159120 loop do
160- return if @value . peek == val
121+ return if @value . peek == value
161122 increment_value
162123 end
163124
@@ -166,23 +127,26 @@ def seek_value(val)
166127 fail StopIteration
167128 end
168129 rescue Timeout ::Error , StopIteration
169- reset_originl_value ( original_value )
170- fail_value_not_found ( val )
130+ reset_original_value ( original_value )
131+ fail_value_not_found ( value )
171132 end
172133
173- def reset_originl_value ( original_value )
134+ def reset_original_value ( original_value )
174135 @value . rewind
175- until @value . peek == original_value do increment_value end
136+
137+ until @value . peek == original_value
138+ increment_value
139+ end
176140 end
177141
178- def can_set_value_directly? ( val )
179- return false unless val . is_a? ( Integer )
142+ def can_set_value_directly? ( value )
143+ return false unless value . is_a? ( Integer )
180144 return false unless @value . is_a? ( EnumeratorAdapter )
181145 @value . integer_value?
182146 end
183147
184- def fail_value_not_found ( val )
185- fail ArgumentError , "Unable to find '#{ val } ' in the sequence."
148+ def fail_value_not_found ( value )
149+ fail ArgumentError , "Unable to find '#{ value } ' in the sequence."
186150 end
187151
188152 class EnumeratorAdapter
@@ -203,9 +167,9 @@ def rewind
203167 @value = @first_value
204168 end
205169
206- def set_value ( new_val )
207- if new_val >= @first_value
208- @value = new_val
170+ def set_value ( new_value )
171+ if new_value >= @first_value
172+ @value = new_value
209173 else
210174 fail ArgumentError , "Value cannot be less than: #{ @first_value } "
211175 end
0 commit comments