diff --git a/faker.gemspec b/faker.gemspec new file mode 100644 index 0000000..d9a91e6 --- /dev/null +++ b/faker.gemspec @@ -0,0 +1,21 @@ +# -*- encoding: utf-8 -*- + +Gem::Specification.new do |s| + s.name = "faker" + s.version = "0.3.2" + s.platform = Gem::Platform::RUBY + s.authors = [] + s.email = [] + s.homepage = "http://rubygems.org/gems/faker" + s.summary = "TODO: Write a gem summary" + s.description = "TODO: Write a gem description" + + s.required_rubygems_version = ">= 1.3.6" + s.rubyforge_project = "faker" + + s.add_development_dependency "bundler", ">= 1.0.0" + + s.files = `git ls-files`.split("\n") + s.executables = `git ls-files`.split("\n").map{|f| f =~ /^bin\/(.*)/ ? $1 : nil}.compact + s.require_path = 'lib' +end diff --git a/lib/faker.rb b/lib/faker.rb index a8df2e3..e4ec253 100644 --- a/lib/faker.rb +++ b/lib/faker.rb @@ -7,6 +7,7 @@ require 'faker/name' require 'faker/phone_number' require 'faker/version' +require 'faker/money' require 'extensions/array' require 'extensions/object' @@ -23,4 +24,4 @@ def self.letterify(letter_string) def self.bothify(string) self.letterify(self.numerify(string)) end -end \ No newline at end of file +end diff --git a/lib/faker/internet.rb b/lib/faker/internet.rb index 87a0103..849d4c7 100644 --- a/lib/faker/internet.rb +++ b/lib/faker/internet.rb @@ -1,6 +1,19 @@ +require 'ipaddr' + module Faker class Internet class << self + + def ipv4 + IPAddr.new(rand(2**32),Socket::AF_INET) + end + alias :ip :ipv4 + + def password(size = 10) + chars = ("a".."z").to_a + ("A".."Z").to_a + ("0".."9").to_a + (1..size.to_i).to_a.inject("") { |pass,i| pass << chars[rand(chars.size-1)] } + end + def email(name = nil) [ user_name(name), domain_name ].join('@') end @@ -34,4 +47,4 @@ def domain_suffix end end end -end \ No newline at end of file +end diff --git a/lib/faker/lorem.rb b/lib/faker/lorem.rb index f14477d..f7da0a7 100644 --- a/lib/faker/lorem.rb +++ b/lib/faker/lorem.rb @@ -12,7 +12,7 @@ def self.sentence(word_count = 4) end def self.sentences(sentence_count = 3) - returning([]) do |sentences| + [].tap do |sentences| 1.upto(sentence_count) do sentences << sentence end @@ -24,7 +24,7 @@ def self.paragraph(sentence_count = 3) end def self.paragraphs(paragraph_count = 3) - returning([]) do |paragraphs| + [].tap do |paragraphs| 1.upto(paragraph_count) do paragraphs << paragraph end diff --git a/lib/faker/money.rb b/lib/faker/money.rb new file mode 100644 index 0000000..cefb762 --- /dev/null +++ b/lib/faker/money.rb @@ -0,0 +1,54 @@ +module Faker + class Money + TestCards = { + :american_express => %w( + 378282246310005 + 371449635398431 + 378734493671000 + ), + :discover => %w( + 6011111111111117 + 6011000990139424 + ), + :mastercard => %w( + 5555555555554444 + 5105105105105100 + ), + :visa => %w( + 4111111111111111 + 4012888888881881 + 4222222222222 + ) + } + + class << self + + def number(n) + n.is_a?(Range) ? n.to_a.rand : rand(n) + end + + def currency_string(lim = (50..100)) + sprintf("%.2f", "#{number(lim) - 1}.#{number(0..100)}".to_f) + end + + def test_number(issuer = :all) + return all_cards.sample if issuer && issuer.to_sym == :all + cards_for(issuer).sample + end + + def cards_for(issuer) + issuer = issuer.to_s.downcase.to_sym + TestCards[issuer] rescue [] + end + + def issuers + [:visa, :mastercard, :american_express, :discover] + end + + def all_cards + issuers.collect { |t| cards_for(t) }.flatten.uniq.compact + end + + end + end +end diff --git a/test/test_faker.rb b/test/test_faker.rb index f65134c..d494523 100644 --- a/test/test_faker.rb +++ b/test/test_faker.rb @@ -8,4 +8,14 @@ def setup def test_numerify assert Faker.numerify('###').match(/\d{3}/) end + + + def test_cc + assert Faker::Money::TestCards.values.flatten.include?(Faker::Money.test_number) + end + + def test_money + assert Faker::Money.currency_string(12..25).to_f < 25 + assert Faker::Money.currency_string(12..25).to_f > 12 + end end