dummy 0.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,33 @@
1
+ ## 0.1 (July 13, 2010)
2
+
3
+ Features:
4
+ - added generation of dummy data based on a Rails 3 application
5
+
6
+
7
+ ## 0.2 (July 17, 2010)
8
+
9
+ Features:
10
+ - moved data generation into a generator
11
+ - added growth-ratio and base-amount options
12
+
13
+
14
+ ## 0.3 (July 21, 2010)
15
+
16
+ Features:
17
+ - added rake task to import the generated dummy data in the target application
18
+
19
+
20
+ ## 0.4 (July 24, 2010)
21
+
22
+ Features:
23
+ - improved data generation (which tries to be smart, RIP lorem ipsum)
24
+
25
+
26
+ ## 0.5 (July 24, 2010)
27
+
28
+ Features:
29
+ - added tests for the data generators and rails generator
30
+ - fixed multiple bugs and added small improvements
31
+ - added documentation
32
+
33
+
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Gonçalo Silva
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,79 @@
1
+ # Dummy
2
+
3
+ Dummy generates dummy data for your Rails 3 application and allows you to import it.
4
+
5
+ ## Description
6
+
7
+ Dummy generates data for your application by inspecting your models and their associations. It tries to generate the correct type of data for each column by guessing what it is from its name. Finally, it allows you to import the generated data into the database.
8
+
9
+ ## Installation
10
+
11
+ $ gem install dummy
12
+
13
+ ## Usage
14
+
15
+ Add the following to the Gemfile of your Rails 3 application:
16
+ gem "dummy"
17
+
18
+ Now you have access to the generator:
19
+ rails generate dummy:data
20
+
21
+ You can also change the base amount of records and the growth ratio (what these mean exactly is explained latter on):
22
+ rails generate dummy:data --base-amount=5 --growth-ratio=1.5
23
+
24
+ The fixtures are stored in _test/dummy/_ while a rake file is placed in _lib/tasks/dummy.rake_. It allows you to import the generated data into the database:
25
+ RAILS_ENV="dummy" rake dummy:data:import
26
+
27
+ Don't forget to change RAILS_ENV to whatever is appropriate for you (and is configured under databases.yml). Your database doesn't need to be empty.
28
+
29
+ Another less conventional way of using dummy is to directly use its magic data generation:
30
+ Dummy.magic_data(field, type)
31
+
32
+ Example:
33
+ require "dummy"
34
+
35
+ Dummy.magic_data("mail", :string) => "nyasia@hotmail.com"
36
+ Dummy.magic_data("company_motto", :string) => "engineer intuitive functionalities"
37
+ Dummy.magic_data("state", :string) => "Louisiana"
38
+ Dummy.magic_data("lat", :float) => -86.718683637
39
+ Dummy.magic_data("phone", :integer) => "9462876293"
40
+
41
+
42
+ ## More information
43
+
44
+ ### Smart data
45
+
46
+ Dummy tries to understand your database columns and generates data accordingly, instead of dumping "Lorem ipsum" all over the place.
47
+
48
+ For instance, if you have a field called _company\_name_, it will generate a company name. If you have a field called _awesome\_postal\_code_, it will generate a valid ZIP Code. If you have a field called _longitude_, it will generate a valid longitude. And so on. You get the picture.
49
+
50
+ Dummy cares about associations. It will create random associations between the automatically generated records.
51
+
52
+ ### Smart amounts of data
53
+
54
+ Dummy is aware that the amount of records that each model has in real world applications is different. For this reason, it will analyze your model associations to try to make a somewhat accurate estimation of the expected amount of records.
55
+
56
+ To illustrate this, consider an application with models for _Child_, _Parent_ and _GrandParent_. If the base amount is 10, the growth ratio is 2.0, and the models look like the following:
57
+
58
+ class GrandParent < ActiveRecord::Base
59
+ has_many :parents
60
+ end
61
+
62
+ class Parent < ActiveRecord::Base
63
+ belongs_to :grand_parent
64
+ has_many :children
65
+ end
66
+
67
+ class Child < ActiveRecord::Base
68
+ belongs_to :parent
69
+ end`
70
+
71
+ The generator will create dummy data for 10 _GrandParents_, 20 _Parents_ and 40 _Children_.
72
+
73
+ ### Caveats
74
+
75
+ Dummy has a few caveats which are on the TODO list. Those are:
76
+ * It is an English speaking gem. It will not be smart at all if your column is named _telefone_ (Portuguese for _phone_) or if you want a zip code from outside the US.
77
+ * It will generate valid emails, latitudes, street addresses, etc, but it doesn't care about your model validations.
78
+
79
+ Copyright (c) 2010 Gonçalo Silva
@@ -0,0 +1,161 @@
1
+ require "rubygems"
2
+ require "dummy/address"
3
+ require "dummy/company"
4
+ require "dummy/internet"
5
+ require "dummy/lorem"
6
+ require "dummy/name"
7
+ require "dummy/phone_number"
8
+ require "dummy/geolocation"
9
+ require "generators/dummy_generator"
10
+
11
+ module Dummy
12
+ class << self
13
+
14
+ def numerify(number_string)
15
+ number_string.gsub(/#/) { rand(10).to_s }
16
+ end
17
+
18
+ def letterify(letter_string)
19
+ letter_string.gsub(/\?/) { ("a".."z").to_a.rand }
20
+ end
21
+
22
+ def bothify(string)
23
+ letterify(numerify(string))
24
+ end
25
+
26
+ def magic_data(field, type)
27
+ case type
28
+ when :string, :text then magic_string(field, type)
29
+ when :integer then magic_integer(field)
30
+ when :date, :datetime then magic_date(field)
31
+ when :decimal, :float then magic_float(field)
32
+ when :boolean then rand(2)
33
+ else false
34
+ end
35
+ end
36
+
37
+ private
38
+
39
+ def magic_string(field, type = :string)
40
+ case field
41
+ when /neighbou?rhood|neighbou?rship|district|vicinity/ then
42
+ Dummy::Address.neighborhood
43
+ when /phone/ then
44
+ case field
45
+ when /short|abbreviation|abbr|small/ then
46
+ Dummy::PhoneNumber.phone_number_short
47
+ else
48
+ Dummy::PhoneNumber.phone_number
49
+ end
50
+ when /state/ then
51
+ case field
52
+ when /short|abbreviation|abbr|small/ then
53
+ Dummy::Address.us_state_short
54
+ else
55
+ Dummy::Address.us_state
56
+ end
57
+ when /zip|postal/ then
58
+ Dummy::Address.zip_code
59
+ when /city|town/ then
60
+ Dummy::Address.city
61
+ when /mail/ then
62
+ Dummy::Internet.email
63
+ when /password|pass|pwd/ then
64
+ Dummy::Internet.password
65
+ when /url|uri|href|link|page|site/ then
66
+ Dummy::Internet.url
67
+ when /address|residence|residency/ then
68
+ Dummy::Address.street_address
69
+ when /road|street/ then
70
+ Dummy::Address.street_name
71
+ when /user|usr|login/ then
72
+ Dummy::Internet.username
73
+ when /name/ then
74
+ case field
75
+ when /company|enterprise|business|firm|school|college/ then
76
+ Dummy::Company.name
77
+ when /first|initial|primary/ then
78
+ Dummy::Name.first_name
79
+ when /last|latter|family|sur/ then
80
+ Dummy::Name.last_name
81
+ else
82
+ Dummy::Name.name
83
+ end
84
+ when /company|enterprise|business|firm|school|college/ then
85
+ case field
86
+ when /motto|description|slogan|lemma|punch|line/ then
87
+ case rand(2)
88
+ when 0 then Dummy::Company.catch_phrase
89
+ when 1 then Dummy::Company.bs
90
+ end
91
+ else
92
+ Dummy::Company.name
93
+ end
94
+ when /^(.*[-_:+ ])*lat/ then
95
+ Dummy::Geolocation.lat.to_s
96
+ when /^(.*[-_:+ ])*(lon|lng)/ then
97
+ Dummy::Geolocation.lng.to_s
98
+ else
99
+ case type
100
+ when :string then
101
+ case rand(2)
102
+ when 0 then Dummy::Lorem.sentence
103
+ when 1 then Dummy::Lorem.sentences
104
+ end
105
+ when :text then
106
+ case rand(2)
107
+ when 0 then Dummy::Lorem.paragraph
108
+ when 1 then Dummy::Lorem.paragraphs
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ def magic_integer(field)
115
+ case field
116
+ when /phone/
117
+ p = Dummy::PhoneNumber.phone_number_short.gsub("-", "")
118
+ (p = p.to_i + 1000000000) if p[0] == "0"
119
+ p
120
+ when /zip|postal/
121
+ z = Dummy::Address.zip_code
122
+ (z = z.to_i + 10000) if z[0] == "0"
123
+ z
124
+ when /street|road|address|residence|residency/
125
+ Dummy.numerify(("#" * rand(3)) << "###").to_i
126
+ else
127
+ rand(1000)
128
+ end
129
+ end
130
+
131
+ def magic_date(field)
132
+ difference = case field
133
+ when /_on$/
134
+ rand(365*2)
135
+ when /birth/
136
+ 365 + rand(365 * 50)
137
+ else
138
+ 0
139
+ end
140
+ (Date.today - difference).to_s
141
+ end
142
+
143
+ def magic_float(field)
144
+ case field
145
+ when /^(.*[-_:+ ])*lat/ then
146
+ Dummy::Geolocation.lat
147
+ when /^(.*[-_:+ ])*(lon|lng)/ then
148
+ Dummy::Geolocation.lng
149
+ else
150
+ Dummy.numerify(("#" * rand(4)) << "#.#" << ("#" * rand(8))).to_f
151
+ end
152
+ end
153
+ end
154
+ end
155
+
156
+ class Array
157
+ def rand
158
+ self[super(self.length)]
159
+ end
160
+ end
161
+
@@ -0,0 +1,144 @@
1
+ module Dummy
2
+ module Address
3
+ extend self
4
+
5
+ def zip_code
6
+ Dummy.numerify ZIP_FORMATS.rand
7
+ end
8
+
9
+ def us_state
10
+ STATE.rand
11
+ end
12
+
13
+ def us_state_short
14
+ STATE_ABBR.rand
15
+ end
16
+
17
+ def city
18
+ CITIES.rand
19
+ end
20
+
21
+ def street_name
22
+ case rand(2)
23
+ when 0 then "#{Name.last_name} #{street_suffix}"
24
+ when 1 then "#{Name.first_name} #{street_suffix}"
25
+ end
26
+ end
27
+
28
+ def street_address
29
+ str = ("#" * rand(3)) << "### #{street_name}"
30
+
31
+ Dummy.numerify(str)
32
+ end
33
+
34
+ def neighborhood
35
+ NEIGHBORHOOD.rand
36
+ end
37
+
38
+ private
39
+
40
+ def street_suffix
41
+ STREET_SUFFIX.rand
42
+ end
43
+
44
+ ZIP_FORMATS = ["#####", "#####-####"]
45
+
46
+ STATE = ["Alabama", "Alaska", "Arizona", "Arkansas",
47
+ "California", "Colorado", "Connecticut", "Delaware", "Florida",
48
+ "Georgia", "Hawaii", "Idaho", "Illinois", "Indiana", "Iowa", "Kansas",
49
+ "Kentucky", "Louisiana", "Maine", "Maryland", "Massachusetts",
50
+ "Michigan", "Minnesota", "Mississippi", "Missouri", "Montana",
51
+ "Nebraska", "Nevada", "New Hampshire", "New Jersey", "New Mexico", "New York",
52
+ "North Carolina", "North Dakota", "Ohio", "Oklahoma", "Oregon",
53
+ "Pennsylvania", "Rhode Island", "South Carolina", "South Dakota",
54
+ "Tennessee", "Texas", "Utah", "Vermont", "Virginia", "Washington",
55
+ "West Virginia", "Wisconsin", "Wyoming"]
56
+
57
+ STATE_ABBR = %w(AL AK AS AZ AR CA CO CT DE DC FM FL GA GU HI ID IL IN IA
58
+ KS KY LA ME MH MD MA MI MN MS MO MT NE NV NH NJ NM NY NC
59
+ ND MP OH OK OR PW PA PR RI SC SD TN TX UT VT VI VA WA WV
60
+ WI WY AE AA AP)
61
+
62
+ CITIES = ["New York", "Los Angeles", "Chicago", "Houston", "Phoenix", "Philadelphia",
63
+ "San Antonio", "San Diego", "Dallas", "San Jose", "Detroit", "San Francisco",
64
+ "Jacksonville", "Indianapolis", "Austin", "Columbus", "Fort Worth",
65
+ "Charlotte", "Memphis", "Boston", "Baltimore", "El Paso", "Seattle", "Denver",
66
+ "Nashville", "Milwaukee", "Washington", "Las Vegas", "Louisville", "Portland",
67
+ "Oklahoma City", "Tucson", "Atlanta", "Albuquerque", "Kansas City", "Fresno",
68
+ "Sacramento", "Long Beach", "Mesa", "Omaha", "Virginia Beach", "Miami",
69
+ "Cleveland", "Oakland", "Raleigh", "Colorado Springs", "Tulsa", "Minneapolis",
70
+ "Arlington", "Honolulu", "Wichita", "St. Louis", "New Orleans", "Tampa", "Santa Ana",
71
+ "Anaheim", "Cincinnati", "Aurora", "Bakersfield", "Toledo", "Pittsburgh",
72
+ "Riverside", "Lexington", "Stockton", "Corpus Christi", "Anchorage", "St. Paul",
73
+ "Newark", "Plano", "Buffalo", "Henderson", "Fort Wayne", "Chandler",
74
+ "Greensboro", "Lincoln", "Glendale", "St. Petersburg", "Jersey City",
75
+ "Scottsdale", "Orlando", "Madison", "Norfolk", "Birmingham", "Winston-Salem",
76
+ "Durham", "Laredo", "Lubbock", "Baton Rouge", "North Las Vegas", "Chula Vista",
77
+ "Chesapeake", "Garland", "Reno", "Hialeah", "Arlington", "Gilbert", "Irvine",
78
+ "Rochester", "Akron", "Boise", "Irving", "Fremont", "Richmond", "Spokane",
79
+ "Modesto", "Montgomery", "Yonkers", "Tacoma", "Shreveport", "Des Moines", "San Bernardino",
80
+ "Fayetteville", "Glendale", "Augusta", "Grand Rapids", "Huntington Beach",
81
+ "Newport News", "Mobile", "Little Rock", "Moreno Valley", "Columbus",
82
+ "Amarillo", "Fontana", "Oxnard", "Knoxville", "Fort Lauderdale", "Salt Lake City",
83
+ "Worcester", "Huntsville", "Brownsville", "Jackson", "Overland Park",
84
+ "Tempe", "Aurora", "Oceanside", "Tallahassee", "Providence", "Rancho Cucamonga",
85
+ "Ontario", "Chattanooga", "Santa Clarita", "Garden Grove",
86
+ "Vancouver", "Grand Prairie", "Peoria", "Sioux Falls", "Springfield", "Santa Rosa",
87
+ "Rockford", "Salem", "Springfield", "Port St. Lucie", "Cape Coral",
88
+ "Dayton", "Eugene", "Pomona", "Corona", "Alexandria", "Joliet", "Pembroke Pines",
89
+ "Paterson", "Pasadena", "Lancaster", "Hayward", "Salinas", "Hampton",
90
+ "Palmdale", "Pasadena", "Naperville", "Kansas City", "Hollywood", "Lakewood",
91
+ "Torrance", "Escondido", "Fort Collins", "Syracuse", "Bridgeport", "Orange",
92
+ "Cary", "Elk Grove", "Savannah", "Sunnyvale", "Warren", "Mesquite",
93
+ "Fullerton", "McAllen", "Columbia", "Carrollton", "Cedar Rapids", "McKinney",
94
+ "Sterling Heights", "Bellevue", "Coral Springs", "Waco", "Elizabeth", "West Valley City",
95
+ "Clarksville", "Topeka", "Hartford", "Thousand Oaks", "New Haven",
96
+ "Denton", "Concord", "Visalia", "Olathe", "El Monte", "Independence",
97
+ "Stamford", "Simi Valley", "Provo", "Killeen", "Springfield", "Abilene",
98
+ "Thornton", "Gainesville", "Evansville", "Roseville", "Charleston", "Peoria",
99
+ "Athens", "Lafayette", "Vallejo", "Lansing", "Ann Arbor", "Inglewood", "Santa Clara",
100
+ "Flint", "Victorville", "Costa Mesa", "Beaumont", "Manchester", "Miami Gardens",
101
+ "Miramar", "Norman", "Westminster", "Cambridge", "Midland", "Arvada",
102
+ "Allentown", "Elgin", "Waterbury", "Downey", "Clearwater", "Billings", "West Covina",
103
+ "Round Rock", "Murfreesboro", "Lewisville", "West Jordan", "Pueblo",
104
+ "San Buenaventura", "Lowell", "South Bend", "Fairfield", "Erie", "Rochester",
105
+ "High Point", "Richardson", "Richmond", "Burbank", "Berkeley", "Pompano Beach",
106
+ "Norwalk", "Frisco", "Columbia", "Gresham", "Daly City", "Green Bay",
107
+ "Wilmington", "Wichita Falls", "Davenport", "Antioch", "Palm Bay",
108
+ "Centennial", "Odessa", "Boulder"]
109
+
110
+ STREET_SUFFIX = %w(Alley Avenue Branch Bridge Brook Brooks
111
+ Burg Burgs Bypass Camp Canyon Cape Causeway Center Centers Circle Circles
112
+ Cliff Cliffs Club Common Corner Corners Course Court Courts Cove Coves
113
+ Creek Crescent Crest Crossing Crossroad Curve Dale Dam Divide Drive Drives
114
+ Estate Estates Expressway Extension Extensions Fall Falls Ferry
115
+ Field Fields Flat Flats Ford Fords Forest Forge Forges Fork Forks Fort
116
+ Freeway Garden Gardens Gateway Glen Glens Green Greens Grove Groves Harbor
117
+ Harbors Haven Heights Highway Hill Hills Hollow Inlet Island
118
+ Islands Isle Junction Junctions Key Keys Knoll Knolls Lake
119
+ Lakes Land Landing Lane Light Lights Loaf Lock Locks Lodge Loop
120
+ Mall Manor Manors Meadow Meadows Mews Mill Mills Mission Motorway
121
+ Mount Mountain Mountains Neck Orchard Oval Overpass Park
122
+ Parks Parkway Parkways Pass Passage Path Pike Pine Pines Place Plain Plains
123
+ Plaza Point Points Port Ports Prairie
124
+ Radial Ramp Ranch Rapid Rapids Rest Ridge Ridges River Road Roads
125
+ Route Row Rue Run Shoal Shoals Shore Shores Skyway Spring Springs
126
+ Spur Spurs Square Squares Station Stravenue
127
+ Stream Street Streets Summit Terrace
128
+ Throughway Trace Track Trafficway Trail Tunnel
129
+ Turnpike Underpass Union Unions Valley Valleys Via Viaduct View Views
130
+ Village Villages Ville Vista Walk Walks Wall Way Ways Well Wells)
131
+
132
+ NEIGHBORHOOD = ["East of Telegraph Road", "North Norridge", "Northwest Midlothian/Midlothian Country Club",
133
+ "Mott Haven/Port Morris", "Kingsbridge Heights", "Bronxdale", "Pennypack", "Bridesburg",
134
+ "Allegheny West", "Bushwick South", "Dyker Heights", "Ocean Parkway South", "Summerlin North",
135
+ "Seven Hills Area", "Greater Las Vegas National", "Phoenix", "Central Chandler", "South of Bell Road",
136
+ "River Heights", "White Plains Central", "Mount Kisco West", "Pound Ridge East", "Babylon Bayside",
137
+ "Sagaponack Seaside", "South of Lake Ave", "Far Rockaway/Bayswater", "Jamaica Estates/Holliswood",
138
+ "Murray Hill", "East Renton", "Renton West", "Auburn North", "Northwoods West", "Florissant West",
139
+ "Ladue South", "Candlewood Country Club", "West Covina East", "North East Irwindale", "Sunshine-Gardens",
140
+ "Cipriani", "Brentwood Central", "Jupiter South/Abacoa", "Sea Ranch Lakes", "Schall Circle/Lakeside Green",
141
+ "Olmsted Falls Central", "South of Lake Shore Blvd", "Gates Mills North", "White Oak South of Columbia Pike",
142
+ "Rockville East of Hungerford Dr", "Cleveland Park"]
143
+ end
144
+ end
@@ -0,0 +1,139 @@
1
+ module Dummy
2
+ module Company
3
+ extend self
4
+
5
+ def name
6
+ case rand(3)
7
+ when 0 then "#{Name.last_name} #{suffix}"
8
+ when 1 then "#{Name.last_name}-#{Name.last_name}"
9
+ when 2 then "%s, %s and %s" % [ Name.last_name, Name.last_name, Name.last_name ]
10
+ end
11
+ end
12
+
13
+ # Wordlist from http://www.1728.com/buzzword.htm
14
+ def catch_phrase
15
+ "#{CATCH_PRE.rand} #{CATCH_MID.rand} #{CATCH_POS.rand}"
16
+ end
17
+
18
+ # Wordlist from http://dack.com/web/bullshit.html
19
+ def bs
20
+ "#{BS_PRE.rand} #{BS_MID.rand} #{BS_POS.rand}"
21
+ end
22
+
23
+ private
24
+
25
+ def suffix
26
+ SUFFIXES.rand
27
+ end
28
+
29
+ CATCH_PRE = ["Adaptive", "Advanced", "Ameliorated", "Assimilated",
30
+ "Automated", "Balanced", "Business-focused", "Centralized", "Cloned",
31
+ "Compatible", "Configurable", "Cross-group", "Cross-platform",
32
+ "Customer-focused", "Customizable", "Decentralized", "De-engineered",
33
+ "Devolved", "Digitized", "Distributed", "Diverse", "Down-sized",
34
+ "Enhanced", "Enterprise-wide", "Ergonomic", "Exclusive", "Expanded",
35
+ "Extended", "Face to face", "Focused", "Front-line",
36
+ "Fully-configurable", "Function-based", "Fundamental", "Future-proofed",
37
+ "Grass-roots", "Horizontal", "Implemented", "Innovative", "Integrated",
38
+ "Intuitive", "Inverse", "Managed", "Mandatory", "Monitored",
39
+ "Multi-channelled", "Multi-lateral", "Multi-layered", "Multi-tiered",
40
+ "Networked", "Object-based", "Open-architected", "Open-source",
41
+ "Operative", "Optimized", "Optional", "Organic", "Organized",
42
+ "Persevering", "Persistent", "Phased", "Polarised", "Pre-emptive",
43
+ "Proactive", "Profit-focused", "Profound", "Programmable", "Progressive",
44
+ "Public-key", "Quality-focused", "Reactive", "Realigned",
45
+ "Re-contextualized", "Re-engineered", "Reduced", "Reverse-engineered",
46
+ "Right-sized", "Robust", "Seamless", "Secured", "Self-enabling",
47
+ "Sharable", "Stand-alone", "Streamlined", "Switchable", "Synchronised",
48
+ "Synergistic", "Synergized", "Team-oriented", "Total", "Triple-buffered",
49
+ "Universal", "Up-sized", "Upgradable", "User-centric", "User-friendly",
50
+ "Versatile", "Virtual", "Visionary", "Vision-oriented"]
51
+
52
+ CATCH_MID = ["24 hour", "24/7", "3rd generation", "4th generation",
53
+ "5th generation", "6th generation", "actuating", "analyzing", "assymetric",
54
+ "asynchronous", "attitude-oriented", "background", "bandwidth-monitored",
55
+ "bi-directional", "bifurcated", "bottom-line", "clear-thinking",
56
+ "client-driven", "client-server", "coherent", "cohesive", "composite",
57
+ "context-sensitive", "contextually-based", "content-based", "dedicated",
58
+ "demand-driven", "didactic", "directional", "discrete", "disintermediate",
59
+ "dynamic", "eco-centric", "empowering", "encompassing", "even-keeled",
60
+ "executive", "explicit", "exuding", "fault-tolerant", "foreground",
61
+ "fresh-thinking", "full-range", "global", "grid-enabled", "heuristic",
62
+ "high-level", "holistic", "homogeneous", "human-resource", "hybrid",
63
+ "impactful", "incremental", "intangible", "interactive", "intermediate",
64
+ "leading edge", "local", "logistical", "maximized", "methodical",
65
+ "mission-critical", "mobile", "modular", "motivating", "multimedia",
66
+ "multi-state", "multi-tasking", "national", "needs-based", "neutral",
67
+ "next generation", "non-volatile", "object-oriented", "optimal", "optimizing",
68
+ "radical", "real-time", "reciprocal", "regional", "responsive", "scalable",
69
+ "secondary", "solution-oriented", "stable", "static", "systematic",
70
+ "systemic", "system-worthy", "tangible", "tertiary", "transitional",
71
+ "uniform", "upward-trending", "user-facing", "value-added", "web-enabled",
72
+ "well-modulated", "zero administration", "zero defect", "zero tolerance"]
73
+
74
+ CATCH_POS = ["ability", "access", "adapter", "algorithm", "alliance",
75
+ "analyzer", "application", "approach", "architecture", "archive",
76
+ "artificial intelligence", "array", "attitude", "benchmark",
77
+ "budgetary management", "capability", "capacity", "challenge", "circuit",
78
+ "collaboration", "complexity", "concept", "conglomeration",
79
+ "contingency", "core", "customer loyalty", "database",
80
+ "data-warehouse", "definition", "emulation", "encoding", "encryption",
81
+ "extranet", "firmware", "flexibility", "focus group", "forecast",
82
+ "frame", "framework", "function", "functionalities", "Graphic Interface",
83
+ "groupware", "Graphical User Interface", "hardware",
84
+ "help-desk", "hierarchy", "hub", "implementation", "info-mediaries",
85
+ "infrastructure", "initiative", "installation", "instruction set",
86
+ "interface", "internet solution", "intranet", "knowledge user",
87
+ "knowledge base", "local area network", "leverage", "matrices",
88
+ "matrix", "methodology", "middleware", "migration", "model",
89
+ "moderator", "monitoring", "moratorium", "neural-net", "open architecture",
90
+ "open system", "orchestration", "paradigm", "parallelism", "policy",
91
+ "portal", "pricing structure", "process improvement", "product",
92
+ "productivity", "project", "projection", "protocol", "secured line",
93
+ "service-desk", "software", "solution", "standardization",
94
+ "strategy", "structure", "success", "superstructure", "support",
95
+ "synergy", "system engine", "task-force", "throughput",
96
+ "time-frame", "toolset", "utilisation", "website",
97
+ "workforce"]
98
+
99
+ BS_PRE = ["implement", "utilize", "integrate", "streamline", "optimize",
100
+ "evolve", "transform", "embrace", "enable", "orchestrate", "leverage",
101
+ "reinvent", "aggregate", "architect", "enhance", "incentivize",
102
+ "morph", "empower", "envisioneer", "monetize", "harness", "facilitate",
103
+ "seize", "disintermediate", "synergize", "strategize", "deploy",
104
+ "brand", "grow", "target", "syndicate", "synthesize", "deliver",
105
+ "mesh", "incubate", "engage", "maximize", "benchmark", "expedite",
106
+ "reintermediate", "whiteboard", "visualize", "repurpose", "innovate",
107
+ "scale", "unleash", "drive", "extend", "engineer", "revolutionize",
108
+ "generate", "exploit", "transition", "e-enable", "iterate",
109
+ "cultivate", "matrix", "productize", "redefine", "recontextualize"]
110
+
111
+ BS_MID = ["clicks-and-mortar", "value-added", "vertical", "proactive",
112
+ "robust", "revolutionary", "scalable", "leading-edge", "innovative",
113
+ "intuitive", "strategic", "e-business", "mission-critical", "sticky",
114
+ "one-to-one", "24/7", "end-to-end", "global", "B2B", "B2C", "granular",
115
+ "frictionless", "virtual", "viral", "dynamic", "24/365",
116
+ "best-of-breed", "killer", "magnetic", "bleeding-edge", "web-enabled",
117
+ "interactive", "dot-com", "sexy", "back-end", "real-time", "efficient",
118
+ "front-end", "distributed", "seamless", "extensible", "turn-key",
119
+ "world-class", "open-source", "cross-platform", "cross-media",
120
+ "synergistic", "bricks-and-clicks", "out-of-the-box", "enterprise",
121
+ "integrated", "impactful", "wireless", "transparent",
122
+ "next-generation", "cutting-edge", "user-centric", "visionary",
123
+ "customized", "ubiquitous", "plug-and-play", "collaborative",
124
+ "compelling", "holistic", "rich"]
125
+
126
+ BS_POS = ["synergies", "web-readiness", "paradigms", "markets",
127
+ "partnerships", "infrastructures", "platforms", "initiatives",
128
+ "channels", "eyeballs", "communities", "ROI", "solutions", "e-tailers",
129
+ "e-services", "action-items", "portals", "niches", "technologies",
130
+ "content", "vortals", "supply-chains", "convergence", "relationships",
131
+ "architectures", "interfaces", "e-markets", "e-commerce", "systems",
132
+ "bandwidth", "infomediaries", "models", "mindshare", "deliverables",
133
+ "users", "schemas", "networks", "applications", "metrics",
134
+ "e-business", "functionalities", "experiences", "web services",
135
+ "methodologies"]
136
+
137
+ SUFFIXES = %w(Inc and\ Sons LLC Group)
138
+ end
139
+ end