Skip to content

Commit

Permalink
Merge pull request #9 from ldjebran/refcator_gen_strings
Browse files Browse the repository at this point in the history
Refactor gen_strings
  • Loading branch information
ldjebran authored Mar 2, 2018
2 parents 8864619 + 86a740e commit d74a7d0
Show file tree
Hide file tree
Showing 4 changed files with 140 additions and 28 deletions.
75 changes: 75 additions & 0 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,81 @@ allowed string types are:
RFauxFactory.gen_string :alpha, 20 => "TuxtvmNwrfbuGaaQSEnM"
Generate Strings of all the supported types
+++++++++++++++++++++++++++++++++++++++++++

- With default fixed length 10:

.. code-block:: ruby
RFauxFactory.gen_strings
=> {:alpha=>"RoRHnHUkPO",
:alphanumeric=>"nr6SVx2up1",
:cjk=>"勷笃儽痖跂飣煾籄綔庋",
:cyrillic=>"ҕФҒқьѾљһІЏ",
:html=>"<big>YhtxODnoFs</big>",
:latin1=>"ÝäÈØÓÌãÝÙÌ",
:numeric=>"6684366145",
:utf8=>"㓆녵냔𫣾𝝙𦚾쬠𗧛䰢쭱",
:punctuation=>"{<;%-:\\<_]"}
- With custom fixed length:

.. code-block:: ruby
RFauxFactory.gen_strings 20
=> {:alpha=>"tXuyblxhHVvxSStxHRqe",
:alphanumeric=>"EbBUUPl7xZP7OC1uZi5B",
:cjk=>"圠黄炵鍁寥礟瓢丽粐遵暋歞乽匨霜謟姈迴楩螯",
:cyrillic=>"ѻҢӍҩӷѣӼ҈ңФфѡӮЖѽҧѴџӋҎ",
:html=>"<span>YMDuJumImvDvxKocHUwE</span>",
:latin1=>"ïõêáÃÁÄÃõäêúÈÀÛÃúýïå",
:numeric=>"66662825266228221074",
:utf8=>"𠲹橝𨖟𐌿𬩱𡁲𤅽㺷𪯠𨨮𢡙𪵾獄𦩸𑈂𤉪𗔋妶ꯡಖ",
:punctuation=>"\\,&{($|>`@_^!_{&$=]>"}
- With custom range length:

.. code-block:: ruby
RFauxFactory.gen_strings (3..30)
=> {:alpha=>"humyNICJnf",
:alphanumeric=>"hWraGEsBPrELdKI0x0CVpRMak",
:cjk=>"烩稟醎渍葼釃枆鄴锐窫角菧妻慗饏镂鮺镬嬦",
:cyrillic=>"хђѫӬӷӮюЕѸ",
:html=>"<blink>yweAKvPxpTQAzRWCDAmxiyJ</blink>",
:latin1=>"ÁóÁ",
:numeric=>"626134543753572648033525",
:utf8=>"ⱴ嫆𡋹𡗸",
:punctuation=>"&@;??}:|\\@\"`[.+\\+|"}
- With excluding some string types:

.. code-block:: ruby
RFauxFactory.gen_strings exclude: [:html, :punctuation]
=> {:alpha=>"IBlbvJkYQP",
:alphanumeric=>"3KZHRSgbcB",
:cjk=>"儫魹咳崙訔船鲓撊郸猡",
:cyrillic=>"ӡҁӇѯӇӫэЗыѳ",
:latin1=>"ìÜóÌáÓÛéÀâ",
:numeric=>"8140474314",
:utf8=>"𫐖𦷘𣒣瑩竰誎請𠼎粢裤"}
- We can also combine length and exclude options:

.. code-block:: ruby
RFauxFactory.gen_strings (3..30), exclude: [:html, :punctuation]
=> {:alpha=>"aLc",
:alphanumeric=>"wbfFxoQrL4TOpd8r5",
:cjk=>"灢汍袌姩饇狶肌胃穨煍灔舨纡訴鷂彜窟趫",
:cyrillic=>"ҥӤѪѦҫОПӿ",
:latin1=>"ÌÙÕðñúÚõáÌÉ",
:numeric=>"01526437887562321",
:utf8=>"柚ᖹ𪮅捰Ʋ"}
Generate bool values:
+++++++++++++++++++++
Expand Down
30 changes: 20 additions & 10 deletions lib/rfauxfactory.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,20 @@ def gen_string_from_cp_range(length, max_or_range)
end.join
end

def positive_int!(length)
raise TypeError, 'length is not of type Integer' unless length.is_a? Integer
raise ArgumentError, 'length must be a positive integer' if length <= 0
def positive_int!(length, name: 'length')
raise TypeError, "#{name} is not of type Integer" unless length.is_a?(Integer)
raise ArgumentError, "#{name} must be a positive integer" unless length > 0
end

def positive_int_or_range!(length)
raise TypeError, "length must be Integer or Range" unless length.is_a?(Integer) || length.is_a?(Range)
if length.is_a?(Integer)
positive_int! length
else
raise ArgumentError, "Bad length range" if length.size.nil? || length.size.zero?
positive_int! length.first, name: 'length.first'
positive_int! length.last, name: 'length.last'
end
end

public
Expand Down Expand Up @@ -100,13 +111,12 @@ def gen_string(str_type, length = 10)
end

# Generates a list of different input strings.
def gen_strings(length = nil, exclude: [], min_length: 3, max_length: 30)
raise ArgumentError, "exclude must be an Array" unless exclude.is_a?(Array)
positive_int! min_length
positive_int! max_length
raise ArgumentError, "max_length must be greater than min_length" unless max_length > min_length
RFauxFactory::STRING_TYPES.keys.reject { |str_type| exclude.include?(str_type) }.map do |str_type|
str_length = length.nil? ? rand((min_length..max_length)) : length
def gen_strings(length = 10, exclude: [])
positive_int_or_range! length
raise TypeError, "exclude must be an Array" unless exclude.is_a?(Array)
str_types = RFauxFactory::STRING_TYPES.keys.reject { |str_type| exclude.include?(str_type) }
str_types.map do |str_type|
str_length = length.is_a?(Range) ? rand(length) : length
[str_type, gen_string(str_type, str_length)]
end.to_h
end
Expand Down
2 changes: 1 addition & 1 deletion lib/rfauxfactory/version.rb
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
module RFauxFactory
VERSION = "0.1.3".freeze
VERSION = "0.1.4".freeze
end
61 changes: 44 additions & 17 deletions test/rfauxfactory_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -163,13 +163,12 @@ def test_gen_strings_exclude
end
end

# use 'gen_strings' to generate supported strings with min max length.
# use 'gen_strings' to generate supported strings with length as an Integer range.
def test_gen_strings_with_min_max_length
min_length = 10
max_length = 100
RFauxFactory.gen_strings(min_length: min_length, max_length: max_length).each do |str_type, value|
min_length = 10
max_length = 100
length = (10..100)
RFauxFactory.gen_strings(length).each do |str_type, value|
min_length = length.min
max_length = length.max
if str_type == :html
# html is an exception as tags added
min_length += HTML_TAG_MIN_LENGTH
Expand All @@ -179,30 +178,58 @@ def test_gen_strings_with_min_max_length
end
end

def test_gen_strings_bad_min_length
['', ' ', 'a'].each do |min_length|
# Cannot generate strings with length not integer
def test_gen_strings_length_type
['', ' ', 'a'].each do |length|
assert_raises TypeError do
RFauxFactory.gen_strings(min_length: min_length)
RFauxFactory.gen_strings(length)
end
end
end

def test_gen_strings_bad_max_length
['', ' ', 'a', nil].each do |max_length|
assert_raises TypeError do
RFauxFactory.gen_strings(max_length: max_length)
end
# Cannot generate strings with negative length of characters.
def test_gen_strings_negative_length
assert_raises ArgumentError do
RFauxFactory.gen_strings(-1)
end
end

def test_gen_strings_min_length_greater_than_max
# Cannot generate strings with zero length of characters.
def test_gen_strings_zero_length
assert_raises ArgumentError do
RFauxFactory.gen_strings(min_length: 30, max_length: 10)
RFauxFactory.gen_strings(0)
end
end

def test_gen_strings_bad_exclude_type
# Should not be able to generate strings with a bad length range
def test_gen_strings_bad_length_range
['', ' ', 'a'].each do |name|
assert_raises ArgumentError do
RFauxFactory.gen_strings(name..name)
end
end
assert_raises ArgumentError do
RFauxFactory.gen_strings(30..3)
end
assert_raises ArgumentError do
RFauxFactory.gen_strings(-1..10)
end
assert_raises ArgumentError do
RFauxFactory.gen_strings(-10..-1)
end
assert_raises ArgumentError do
RFauxFactory.gen_strings(0..10)
end
end

# Should be able to generate strings with excluding all types without error
def test_gen_strings_exclude_all
assert RFauxFactory.gen_strings(exclude: STRING_TYPES).empty?
end

# Generate strings with bad exclude type
def test_gen_strings_bad_exclude_type
assert_raises TypeError do
RFauxFactory.gen_strings(exclude: 'string as exclude')
end
end
Expand Down

0 comments on commit d74a7d0

Please sign in to comment.