faker 0.9.5 → 1.0.0
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.
- data/History.txt +27 -0
- data/README.md +0 -13
- data/lib/extensions/array.rb +5 -3
- data/lib/faker.rb +55 -9
- data/lib/faker/address.rb +14 -24
- data/lib/faker/company.rb +6 -19
- data/lib/faker/internet.rb +33 -10
- data/lib/faker/lorem.rb +18 -11
- data/lib/faker/name.rb +8 -2
- data/lib/faker/phone_number.rb +9 -1
- data/lib/faker/version.rb +1 -1
- data/lib/locales/de-ch.yml +7 -0
- data/lib/locales/de.yml +47 -0
- data/lib/locales/en-au.yml +21 -0
- data/lib/locales/en-bork.yml +4 -0
- data/lib/locales/en-ca.yml +13 -0
- data/lib/locales/en.yml +42 -22
- data/lib/locales/nl.yml +65 -0
- data/lib/locales/no-nb.yml +51 -0
- data/lib/locales/pt-br.yml +56 -0
- data/test/test_faker.rb +8 -2
- data/test/test_faker_city.rb +45 -0
- data/test/test_faker_internet.rb +9 -1
- data/test/test_faker_lorem.rb +23 -0
- data/test/test_faker_name.rb +1 -1
- data/test/test_faker_street.rb +38 -0
- data/test/test_flexible.rb +56 -0
- data/test/test_helper.rb +1 -1
- data/test/test_locale.rb +35 -0
- metadata +24 -7
data/History.txt
CHANGED
@@ -1,3 +1,30 @@
|
|
1
|
+
== 1.0.0 2011-09-05
|
2
|
+
* 2 major enhancements
|
3
|
+
* Moved all formats to locale files
|
4
|
+
* Stopped interfering with I18n's global settings for fallbacks
|
5
|
+
* 3 minor bug fixes:
|
6
|
+
* Ruby 1.9.2 fixes [eMxyzptlk]
|
7
|
+
* UTF8 fixes [maxmiliano]
|
8
|
+
* Updated IPv4 generator to return valid addresses [Sylvain Desbureaux]
|
9
|
+
* Many minor enhancements:
|
10
|
+
* Added bork locale for bork-ified lorem [johnbentcope]
|
11
|
+
* Added IPv6 address generator [jc00ke]
|
12
|
+
* Removed deprecation warnings for Array#rand [chrismarshall]
|
13
|
+
* Added German translation and I18n improvments [Matthias Kühnert]
|
14
|
+
* Added Dutch translation [moretea]
|
15
|
+
* Added Lat/Long generator [Andy Callaghan]
|
16
|
+
* Added buzzword-laden title generator [supercleanse]
|
17
|
+
* Added optional extended wordlist for lorem [chriskottom]
|
18
|
+
* Updated German translation [Jan Schwenzien]
|
19
|
+
* Locale improvements [suweller]
|
20
|
+
* Added limit to lorem generator [darrenterhune]
|
21
|
+
* Added Brazilian Portuguese translation [maxmiliano]
|
22
|
+
* Added Australian translation [madeindata]
|
23
|
+
* Added Canadian translation [igbanam]
|
24
|
+
* Added Norwegian translation [kytrinyx]
|
25
|
+
* Lots of translation-related cleanup [kytrinyx]
|
26
|
+
|
27
|
+
|
1
28
|
== 0.9.5 2011-01-27
|
2
29
|
* 1 minor bug fix:
|
3
30
|
* Fixed YAML [Aaron Patterson]
|
data/README.md
CHANGED
@@ -13,19 +13,6 @@ Usage
|
|
13
13
|
* Faker::Name.name => "Christophe Bartell"
|
14
14
|
* Faker::Internet.email => "kirsten.greenholt@corkeryfisher.info"
|
15
15
|
|
16
|
-
Usage with Rails
|
17
|
-
----------------
|
18
|
-
|
19
|
-
If you want to change your locale with Rails from the default of :en, change
|
20
|
-
config/application.rb, setting config.i18n.locale to whatever locale you
|
21
|
-
want. Change locale rather than default_locale (as suggested by the comments
|
22
|
-
in that file) so that I18n's fallbacks will work properly and Faker can use
|
23
|
-
the formats and data in en.yml (if there is no Faker localization for your
|
24
|
-
locale). If you'd prefer to set default_locale rather than locale, then
|
25
|
-
you'll also need to add config.i18n.fallbacks.defaults = [:en] to your
|
26
|
-
configuration to make the fallbacks work for Faker.
|
27
|
-
|
28
|
-
|
29
16
|
Customization
|
30
17
|
------------
|
31
18
|
Since you may want to make addresses and other types of data look different
|
data/lib/extensions/array.rb
CHANGED
data/lib/faker.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
mydir = File.dirname(__FILE__)
|
1
|
+
mydir = File.expand_path(File.dirname(__FILE__))
|
2
2
|
|
3
3
|
begin
|
4
4
|
require 'psych'
|
@@ -6,36 +6,82 @@ rescue LoadError
|
|
6
6
|
end
|
7
7
|
|
8
8
|
require 'i18n'
|
9
|
-
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
|
10
9
|
I18n.load_path += Dir[File.join(mydir, 'locales', '*.yml')]
|
10
|
+
I18n.reload!
|
11
11
|
|
12
12
|
|
13
13
|
module Faker
|
14
14
|
class Config
|
15
|
-
|
16
|
-
|
15
|
+
@locale = nil
|
16
|
+
|
17
|
+
class << self
|
18
|
+
attr_writer :locale
|
19
|
+
def locale
|
20
|
+
@locale || I18n.locale
|
21
|
+
end
|
17
22
|
end
|
18
23
|
end
|
19
24
|
|
20
25
|
class Base
|
21
26
|
class << self
|
27
|
+
## make sure numerify results doesn’t start with a zero
|
22
28
|
def numerify(number_string)
|
23
|
-
number_string.gsub(/#/) { rand(10).to_s }
|
29
|
+
number_string.sub(/#/) { (rand(9)+1).to_s }.gsub(/#/) { rand(10).to_s }
|
24
30
|
end
|
25
31
|
|
26
32
|
def letterify(letter_string)
|
27
|
-
letter_string.gsub(/\?/) { ('
|
33
|
+
letter_string.gsub(/\?/) { ('A'..'Z').to_a.sample }
|
28
34
|
end
|
29
35
|
|
30
36
|
def bothify(string)
|
31
37
|
letterify(numerify(string))
|
32
38
|
end
|
33
39
|
|
34
|
-
# Helper for the common approach of grabbing a translation
|
35
|
-
# of values and selecting one of them
|
40
|
+
# Helper for the common approach of grabbing a translation
|
41
|
+
# with an array of values and selecting one of them.
|
36
42
|
def fetch(key)
|
37
|
-
|
43
|
+
translate("faker.#{key}").sample
|
44
|
+
end
|
45
|
+
|
46
|
+
# Load formatted strings from the locale, "parsing" them
|
47
|
+
# into method calls that can be used to generate a
|
48
|
+
# formatted translation: e.g., "#{first_name} #{last_name}".
|
49
|
+
def parse(key)
|
50
|
+
fetch(key).scan(/#\{([A-Za-z]+\.)?([^\}]+)\}([^#]+)?/).map {|kls, meth, etc| (kls ? Faker.const_get(kls.chop) : self).send(meth) + etc.to_s }.join
|
51
|
+
end
|
52
|
+
|
53
|
+
# Call I18n.translate with our configured locale if no
|
54
|
+
# locale is specified
|
55
|
+
def translate(*args)
|
56
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
57
|
+
opts[:locale] ||= Faker::Config.locale
|
58
|
+
opts[:throw] = true
|
59
|
+
I18n.translate(*(args.push(opts)))
|
60
|
+
rescue
|
61
|
+
# Super-simple fallback -- fallback to en if the
|
62
|
+
# translation was missing. If the translation isn't
|
63
|
+
# in en either, then it will raise again.
|
64
|
+
I18n.translate(*(args.push(opts.merge(:locale => :en))))
|
65
|
+
end
|
66
|
+
|
67
|
+
def flexible(key)
|
68
|
+
@flexible_key = key
|
38
69
|
end
|
70
|
+
|
71
|
+
# You can add whatever you want to the locale file, and it will get caught here.
|
72
|
+
# E.g., in your locale file, create a
|
73
|
+
# name:
|
74
|
+
# girls_name: ["Alice", "Cheryl", "Tatiana"]
|
75
|
+
# Then you can call Faker::Name.girls_name and it will act like #first_name
|
76
|
+
def method_missing(m, *args, &block)
|
77
|
+
# Use the alternate form of translate to get a nil rather than a "missing translation" string
|
78
|
+
if translation = translate(:faker)[@flexible_key][m]
|
79
|
+
translation.respond_to?(:sample) ? translation.sample : translation
|
80
|
+
else
|
81
|
+
super
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
39
85
|
end
|
40
86
|
end
|
41
87
|
end
|
data/lib/faker/address.rb
CHANGED
@@ -1,24 +1,18 @@
|
|
1
1
|
module Faker
|
2
2
|
class Address < Base
|
3
|
+
flexible :address
|
4
|
+
|
3
5
|
class << self
|
4
6
|
def city
|
5
|
-
|
6
|
-
'%s %s%s' % [city_prefix, Name.first_name, city_suffix],
|
7
|
-
'%s %s' % [city_prefix, Name.first_name],
|
8
|
-
'%s%s' % [Name.first_name, city_suffix],
|
9
|
-
'%s%s' % [Name.last_name, city_suffix],
|
10
|
-
].rand
|
7
|
+
parse('address.city')
|
11
8
|
end
|
12
9
|
|
13
10
|
def street_name
|
14
|
-
|
15
|
-
Proc.new { [Name.last_name, street_suffix].join(' ') },
|
16
|
-
Proc.new { [Name.first_name, street_suffix].join(' ') }
|
17
|
-
].rand.call
|
11
|
+
parse('address.street_name')
|
18
12
|
end
|
19
13
|
|
20
14
|
def street_address(include_secondary = false)
|
21
|
-
numerify(
|
15
|
+
numerify(parse('address.street_address') + (include_secondary ? ' ' + secondary_address : ''))
|
22
16
|
end
|
23
17
|
|
24
18
|
def secondary_address
|
@@ -26,7 +20,7 @@ module Faker
|
|
26
20
|
end
|
27
21
|
|
28
22
|
def zip_code
|
29
|
-
bothify(fetch('address.postcode'))
|
23
|
+
bothify(fetch('address.postcode'))
|
30
24
|
end
|
31
25
|
alias_method :zip, :zip_code
|
32
26
|
alias_method :postcode, :zip_code
|
@@ -38,18 +32,14 @@ module Faker
|
|
38
32
|
def state; fetch('address.state'); end
|
39
33
|
def country; fetch('address.country'); end
|
40
34
|
|
41
|
-
|
42
|
-
|
43
|
-
# then you can call #country_code and it will act like #country
|
44
|
-
def method_missing(m, *args, &block)
|
45
|
-
# Use the alternate form of translate to get a nil rather than a "missing translation" string
|
46
|
-
if translation = I18n.translate(:faker)[:address][m]
|
47
|
-
translation.respond_to?(:rand) ? translation.rand : translation
|
48
|
-
else
|
49
|
-
super
|
50
|
-
end
|
35
|
+
def latitude
|
36
|
+
((rand * 180) - 90).to_s
|
51
37
|
end
|
52
|
-
|
38
|
+
|
39
|
+
def longitude
|
40
|
+
((rand * 360) - 180).to_s
|
41
|
+
end
|
42
|
+
|
53
43
|
# Deprecated
|
54
44
|
alias_method :earth_country, :country
|
55
45
|
alias_method :us_state, :state
|
@@ -59,4 +49,4 @@ module Faker
|
|
59
49
|
|
60
50
|
end
|
61
51
|
end
|
62
|
-
end
|
52
|
+
end
|
data/lib/faker/company.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
module Faker
|
2
2
|
class Company < Base
|
3
|
+
flexible :company
|
4
|
+
|
3
5
|
class << self
|
4
6
|
def name
|
5
|
-
|
7
|
+
parse('company.name')
|
6
8
|
end
|
7
9
|
|
8
10
|
def suffix
|
@@ -10,30 +12,15 @@ module Faker
|
|
10
12
|
end
|
11
13
|
|
12
14
|
# Generate a buzzword-laden catch phrase.
|
13
|
-
# Wordlist from http://www.1728.com/buzzword.htm
|
14
15
|
def catch_phrase
|
15
|
-
|
16
|
-
["Adaptive", "Advanced", "Ameliorated", "Assimilated", "Automated", "Balanced", "Business-focused", "Centralized", "Cloned", "Compatible", "Configurable", "Cross-group", "Cross-platform", "Customer-focused", "Customizable", "Decentralized", "De-engineered", "Devolved", "Digitized", "Distributed", "Diverse", "Down-sized", "Enhanced", "Enterprise-wide", "Ergonomic", "Exclusive", "Expanded", "Extended", "Face to face", "Focused", "Front-line", "Fully-configurable", "Function-based", "Fundamental", "Future-proofed", "Grass-roots", "Horizontal", "Implemented", "Innovative", "Integrated", "Intuitive", "Inverse", "Managed", "Mandatory", "Monitored", "Multi-channelled", "Multi-lateral", "Multi-layered", "Multi-tiered", "Networked", "Object-based", "Open-architected", "Open-source", "Operative", "Optimized", "Optional", "Organic", "Organized", "Persevering", "Persistent", "Phased", "Polarised", "Pre-emptive", "Proactive", "Profit-focused", "Profound", "Programmable", "Progressive", "Public-key", "Quality-focused", "Reactive", "Realigned", "Re-contextualized", "Re-engineered", "Reduced", "Reverse-engineered", "Right-sized", "Robust", "Seamless", "Secured", "Self-enabling", "Sharable", "Stand-alone", "Streamlined", "Switchable", "Synchronised", "Synergistic", "Synergized", "Team-oriented", "Total", "Triple-buffered", "Universal", "Up-sized", "Upgradable", "User-centric", "User-friendly", "Versatile", "Virtual", "Visionary", "Vision-oriented"].rand,
|
17
|
-
["24 hour", "24/7", "3rd generation", "4th generation", "5th generation", "6th generation", "actuating", "analyzing", "assymetric", "asynchronous", "attitude-oriented", "background", "bandwidth-monitored", "bi-directional", "bifurcated", "bottom-line", "clear-thinking", "client-driven", "client-server", "coherent", "cohesive", "composite", "context-sensitive", "contextually-based", "content-based", "dedicated", "demand-driven", "didactic", "directional", "discrete", "disintermediate", "dynamic", "eco-centric", "empowering", "encompassing", "even-keeled", "executive", "explicit", "exuding", "fault-tolerant", "foreground", "fresh-thinking", "full-range", "global", "grid-enabled", "heuristic", "high-level", "holistic", "homogeneous", "human-resource", "hybrid", "impactful", "incremental", "intangible", "interactive", "intermediate", "leading edge", "local", "logistical", "maximized", "methodical", "mission-critical", "mobile", "modular", "motivating", "multimedia", "multi-state", "multi-tasking", "national", "needs-based", "neutral", "next generation", "non-volatile", "object-oriented", "optimal", "optimizing", "radical", "real-time", "reciprocal", "regional", "responsive", "scalable", "secondary", "solution-oriented", "stable", "static", "systematic", "systemic", "system-worthy", "tangible", "tertiary", "transitional", "uniform", "upward-trending", "user-facing", "value-added", "web-enabled", "well-modulated", "zero administration", "zero defect", "zero tolerance"].rand,
|
18
|
-
["ability", "access", "adapter", "algorithm", "alliance", "analyzer", "application", "approach", "architecture", "archive", "artificial intelligence", "array", "attitude", "benchmark", "budgetary management", "capability", "capacity", "challenge", "circuit", "collaboration", "complexity", "concept", "conglomeration", "contingency", "core", "customer loyalty", "database", "data-warehouse", "definition", "emulation", "encoding", "encryption", "extranet", "firmware", "flexibility", "focus group", "forecast", "frame", "framework", "function", "functionalities", "Graphic Interface", "groupware", "Graphical User Interface", "hardware", "help-desk", "hierarchy", "hub", "implementation", "info-mediaries", "infrastructure", "initiative", "installation", "instruction set", "interface", "internet solution", "intranet", "knowledge user", "knowledge base", "local area network", "leverage", "matrices", "matrix", "methodology", "middleware", "migration", "model", "moderator", "monitoring", "moratorium", "neural-net", "open architecture", "open system", "orchestration", "paradigm", "parallelism", "policy", "portal", "pricing structure", "process improvement", "product", "productivity", "project", "projection", "protocol", "secured line", "service-desk", "software", "solution", "standardization", "strategy", "structure", "success", "superstructure", "support", "synergy", "system engine", "task-force", "throughput", "time-frame", "toolset", "utilisation", "website", "workforce"].rand
|
19
|
-
].join(' ')
|
16
|
+
translate('faker.company.buzzwords').collect {|list| list.sample }.join(' ')
|
20
17
|
end
|
21
18
|
|
22
19
|
# When a straight answer won't do, BS to the rescue!
|
23
|
-
# Wordlist from http://dack.com/web/bullshit.html
|
24
20
|
def bs
|
25
|
-
|
26
|
-
["implement", "utilize", "integrate", "streamline", "optimize", "evolve", "transform", "embrace", "enable", "orchestrate", "leverage", "reinvent", "aggregate", "architect", "enhance", "incentivize", "morph", "empower", "envisioneer", "monetize", "harness", "facilitate", "seize", "disintermediate", "synergize", "strategize", "deploy", "brand", "grow", "target", "syndicate", "synthesize", "deliver", "mesh", "incubate", "engage", "maximize", "benchmark", "expedite", "reintermediate", "whiteboard", "visualize", "repurpose", "innovate", "scale", "unleash", "drive", "extend", "engineer", "revolutionize", "generate", "exploit", "transition", "e-enable", "iterate", "cultivate", "matrix", "productize", "redefine", "recontextualize"].rand,
|
27
|
-
["clicks-and-mortar", "value-added", "vertical", "proactive", "robust", "revolutionary", "scalable", "leading-edge", "innovative", "intuitive", "strategic", "e-business", "mission-critical", "sticky", "one-to-one", "24/7", "end-to-end", "global", "B2B", "B2C", "granular", "frictionless", "virtual", "viral", "dynamic", "24/365", "best-of-breed", "killer", "magnetic", "bleeding-edge", "web-enabled", "interactive", "dot-com", "sexy", "back-end", "real-time", "efficient", "front-end", "distributed", "seamless", "extensible", "turn-key", "world-class", "open-source", "cross-platform", "cross-media", "synergistic", "bricks-and-clicks", "out-of-the-box", "enterprise", "integrated", "impactful", "wireless", "transparent", "next-generation", "cutting-edge", "user-centric", "visionary", "customized", "ubiquitous", "plug-and-play", "collaborative", "compelling", "holistic", "rich"].rand,
|
28
|
-
["synergies", "web-readiness", "paradigms", "markets", "partnerships", "infrastructures", "platforms", "initiatives", "channels", "eyeballs", "communities", "ROI", "solutions", "e-tailers", "e-services", "action-items", "portals", "niches", "technologies", "content", "vortals", "supply-chains", "convergence", "relationships", "architectures", "interfaces", "e-markets", "e-commerce", "systems", "bandwidth", "infomediaries", "models", "mindshare", "deliverables", "users", "schemas", "networks", "applications", "metrics", "e-business", "functionalities", "experiences", "web services", "methodologies"].rand
|
29
|
-
].join(' ')
|
21
|
+
translate('faker.company.bs').collect {|list| list.sample }.join(' ')
|
30
22
|
end
|
31
23
|
end
|
32
24
|
|
33
|
-
Formats = [
|
34
|
-
Proc.new { [ Name.last_name, suffix ].join(' ') },
|
35
|
-
Proc.new { [ Name.last_name, Name.last_name ].join('-') },
|
36
|
-
Proc.new { "%s, %s and %s" % [ Name.last_name, Name.last_name, Name.last_name ] }
|
37
|
-
]
|
38
25
|
end
|
39
|
-
end
|
26
|
+
end
|
data/lib/faker/internet.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# encoding: utf-8
|
1
2
|
module Faker
|
2
3
|
class Internet < Base
|
3
4
|
class << self
|
@@ -10,19 +11,30 @@ module Faker
|
|
10
11
|
end
|
11
12
|
|
12
13
|
def user_name(name = nil)
|
13
|
-
return name.scan(/\w+/).shuffle.join(%w(. _).
|
14
|
+
return name.scan(/\w+/).shuffle.join(%w(. _).sample).downcase if name
|
14
15
|
|
15
|
-
[
|
16
|
+
fix_umlauts([
|
16
17
|
Proc.new { Name.first_name.gsub(/\W/, '').downcase },
|
17
18
|
Proc.new {
|
18
19
|
[ Name.first_name, Name.last_name ].map {|n|
|
19
20
|
n.gsub(/\W/, '')
|
20
|
-
}.join(%w(. _).
|
21
|
-
].
|
21
|
+
}.join(%w(. _).sample).downcase }
|
22
|
+
].sample.call)
|
22
23
|
end
|
23
24
|
|
24
25
|
def domain_name
|
25
|
-
[ domain_word, domain_suffix ].join('.')
|
26
|
+
[ fix_umlauts(domain_word), domain_suffix ].join('.')
|
27
|
+
end
|
28
|
+
|
29
|
+
def fix_umlauts(string)
|
30
|
+
string.gsub(/[äöüß]/i) do |match|
|
31
|
+
case match.downcase
|
32
|
+
when "ä" 'ae'
|
33
|
+
when "ö" 'oe'
|
34
|
+
when "ü" 'ue'
|
35
|
+
when "ß" 'ss'
|
36
|
+
end
|
37
|
+
end
|
26
38
|
end
|
27
39
|
|
28
40
|
def domain_word
|
@@ -34,11 +46,22 @@ module Faker
|
|
34
46
|
end
|
35
47
|
|
36
48
|
def ip_v4_address
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
49
|
+
ary = (2..254).to_a
|
50
|
+
[ary.sample,
|
51
|
+
ary.sample,
|
52
|
+
ary.sample,
|
53
|
+
ary.sample].join('.')
|
54
|
+
end
|
55
|
+
|
56
|
+
def ip_v6_address
|
57
|
+
@@ip_v6_space ||= (0..65535).to_a
|
58
|
+
container = (1..8).map{ |_| @@ip_v6_space.sample }
|
59
|
+
container.map{ |n| n.to_s(16) }.join(':')
|
60
|
+
end
|
61
|
+
|
62
|
+
def url
|
63
|
+
"http://#{domain_name}/#{user_name}"
|
41
64
|
end
|
42
65
|
end
|
43
66
|
end
|
44
|
-
end
|
67
|
+
end
|
data/lib/faker/lorem.rb
CHANGED
@@ -1,32 +1,39 @@
|
|
1
1
|
module Faker
|
2
2
|
# Based on Perl's Text::Lorem
|
3
3
|
class Lorem < Base
|
4
|
-
def self.words(num = 3)
|
5
|
-
|
4
|
+
def self.words(num = 3, supplemental = false)
|
5
|
+
(
|
6
|
+
translate('faker.lorem.words') +
|
7
|
+
(supplemental ? translate('faker.lorem.supplemental') : [])
|
8
|
+
).shuffle[0, num]
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.characters(char_count = 255)
|
12
|
+
rand(36**char_count).to_s(36)
|
6
13
|
end
|
7
14
|
|
8
|
-
def self.sentence(word_count = 4)
|
9
|
-
words(word_count + rand(6)).join(' ').capitalize + '.'
|
15
|
+
def self.sentence(word_count = 4, supplemental = false)
|
16
|
+
words(word_count + rand(6), supplemental).join(' ').capitalize + '.'
|
10
17
|
end
|
11
18
|
|
12
|
-
def self.sentences(sentence_count = 3)
|
19
|
+
def self.sentences(sentence_count = 3, supplemental = false)
|
13
20
|
[].tap do |sentences|
|
14
21
|
1.upto(sentence_count) do
|
15
|
-
sentences << sentence
|
22
|
+
sentences << sentence(3, supplemental)
|
16
23
|
end
|
17
24
|
end
|
18
25
|
end
|
19
26
|
|
20
|
-
def self.paragraph(sentence_count = 3)
|
21
|
-
sentences(sentence_count + rand(3)).join(' ')
|
27
|
+
def self.paragraph(sentence_count = 3, supplemental = false)
|
28
|
+
sentences(sentence_count + rand(3), supplemental).join(' ')
|
22
29
|
end
|
23
30
|
|
24
|
-
def self.paragraphs(paragraph_count = 3)
|
31
|
+
def self.paragraphs(paragraph_count = 3, supplemental = false)
|
25
32
|
[].tap do |paragraphs|
|
26
33
|
1.upto(paragraph_count) do
|
27
|
-
paragraphs << paragraph
|
34
|
+
paragraphs << paragraph(3, supplemental)
|
28
35
|
end
|
29
36
|
end
|
30
37
|
end
|
31
38
|
end
|
32
|
-
end
|
39
|
+
end
|
data/lib/faker/name.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
module Faker
|
2
2
|
class Name < Base
|
3
|
+
flexible :name
|
4
|
+
|
3
5
|
class << self
|
4
6
|
|
5
7
|
def name
|
6
|
-
|
8
|
+
parse('name.name')
|
7
9
|
end
|
8
10
|
|
9
11
|
def first_name; fetch('name.first_name'); end
|
@@ -11,6 +13,10 @@ module Faker
|
|
11
13
|
def prefix; fetch('name.prefix'); end
|
12
14
|
def suffix; fetch('name.suffix'); end
|
13
15
|
|
16
|
+
# Generate a buzzword-laden job title
|
17
|
+
# Wordlist from http://www.bullshitjob.com/title/
|
18
|
+
def title; fetch('name.title.descriptor') + ' ' + fetch('name.title.level') + ' ' + fetch('name.title.job'); end
|
19
|
+
|
14
20
|
end
|
15
21
|
end
|
16
|
-
end
|
22
|
+
end
|
data/lib/faker/phone_number.rb
CHANGED
@@ -4,6 +4,14 @@ module Faker
|
|
4
4
|
def phone_number
|
5
5
|
numerify(fetch('phone_number.formats'))
|
6
6
|
end
|
7
|
+
|
8
|
+
def cell_phone
|
9
|
+
if (translation = translate(:faker)[:cell_phone]).is_a? Hash
|
10
|
+
numerify(translation[:formats].sample)
|
11
|
+
else
|
12
|
+
numerify(fetch('phone_number.formats'))
|
13
|
+
end
|
14
|
+
end
|
7
15
|
end
|
8
16
|
end
|
9
|
-
end
|
17
|
+
end
|
data/lib/faker/version.rb
CHANGED
data/lib/locales/de-ch.yml
CHANGED
@@ -3,9 +3,16 @@ de-ch:
|
|
3
3
|
address:
|
4
4
|
country_code: [CH, CH, CH, DE, AT, US, LI, US, HK, VN]
|
5
5
|
postcode: ['1###', '2###', '3###', '4###', '5###', '6###', '7###', '8###', '9###']
|
6
|
+
|
6
7
|
company:
|
7
8
|
suffix: [AG, GmbH, und Söhne, und Partner, "& Co.", Gruppe, LLC, Inc.]
|
9
|
+
name:
|
10
|
+
- "#{Name.last_name} #{suffix}"
|
11
|
+
- "#{Name.last_name}-#{Name.last_name}"
|
12
|
+
- "#{Name.last_name}, #{Name.last_name} und #{Name.last_name}"
|
13
|
+
|
8
14
|
internet:
|
9
15
|
domain_suffix: [com, net, biz, ch, de, li, at, ch, ch]
|
16
|
+
|
10
17
|
phone_number:
|
11
18
|
formats: ['0800 ### ###', '0800 ## ## ##', '0## ### ## ##', '0## ### ## ##', '+41 ## ### ## ##', '0900 ### ###', '076 ### ## ##', '+4178 ### ## ##', '0041 79 ### ## ##']
|