class GenerateData

Attributes

data[RW]

Public Class Methods

new() click to toggle source
# File lib/fake_csv/g_data.rb, line 5
def initialize
    @data = []
end

Public Instance Methods

append_result(result, string) click to toggle source
# File lib/fake_csv/g_data.rb, line 60
def append_result(result, string)
    if result.nil?
        result = string
    else
        result = result + "," + string
    end
    result
end
generate(format) click to toggle source
# File lib/fake_csv/g_data.rb, line 8
def generate(format)
    global_id = 0
    format.each do |seq, index|
        count = index[:format].scan(/\(([^\)]+)\)/).last.first.to_i
        (1..count).each do |id|
            result = nil
            form = index[:content].split(',').map(&:strip) # remove surrounding whitespace
            form.each do |value|
                case value
                when 'id'
                    global_id += 1
                    result = append_result(result, global_id.to_s)
                when 'name'
                    result = append_result(result, Faker::Name.first_name)
                when 'email'
                    result = append_result(result, Faker::Internet.email)
                else
                    split = value.split('')
                    if split.include?("$") or split.include?("#")
                        string = ""
                        split.each do |value|
                            if value == "#"
                                string += ('a'..'z').to_a.shuffle[0, 1].join
                            elsif value == "$"
                                string += (0..9).to_a.shuffle[0, 1].join
                            else
                                string += value
                            end
                        end
                        result = append_result(result, string)
                    elsif split.include?("~")
                        # number range
                        first = value.split("~")[0].to_i
                        second = value.split("~")[1].to_i
                        number =  (first..second).to_a.shuffle[0,1].join
                        result = append_result(result, number.to_s)
                    elsif split.include?("[")
                        # with require string
                        value_ary = value.scan(/\[([^\)]+)\]/).last.first # get value in array
                        value_ary = value_ary.split(/\s(?=(?:[^"]|"[^"]*")*$)/)

                        suffle_value = value_ary.shuffle[0, 1].join.gsub /"/, ''
                        result = append_result(result, suffle_value)
                    else # if the value is default
                        result = append_result(result, value)
                    end
                end
            end
            @data.push(result)
        end
    end
end