Skip to content

Commit 689cdff

Browse files
committed
added faker help
1 parent 0d03035 commit 689cdff

36 files changed

+188
-659
lines changed

README.adoc

Lines changed: 71 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ riot import json --url https://raw.githubusercontent.com/rethinkdb/beerthink/mas
187187
==== People
188188
[source,shell]
189189
----
190-
riot import --max 100 gen --field id=sequence --field firstName=faker.name.firstName --field lastName=faker.name.lastName --field address=faker.address.fullAddress hash --keyspace person --keys id
190+
riot import faker --max 100 --field id=sequence --field firstName=name.firstName --field lastName=name.lastName --field address=address.fullAddress hash --keyspace person --keys id
191191
----
192192

193193
[source,plaintext]
@@ -204,7 +204,7 @@ riot import --max 100 gen --field id=sequence --field firstName=faker.name.first
204204
==== Game of Thrones
205205
[source,shell]
206206
----
207-
riot import --max 100 gen --field name=faker.gameOfThrones.character set --keyspace got:characters --fields name
207+
riot import faker --max 100 --field name=gameOfThrones.character set --keyspace got:characters --fields name
208208
----
209209

210210
[source,plaintext]
@@ -220,9 +220,75 @@ riot import --max 100 gen --field name=faker.gameOfThrones.character set --keysp
220220

221221
==== Faker Generators
222222

223-
These are the https://github.com/DiUS/java-faker[Faker generators] available:
224-
225-
`address, ancient, app, artist, avatar, beer, book, bool, business, cat, chuckNorris, code, color, commerce, company, country, crypto, currency, dateAndTime, demographic, dog, dragonBall, educator, esports, file, finance, food, friends, funnyName, gameOfThrones, hacker, harryPotter, hipster, hitchhikersGuideToTheGalaxy, hobbit, howIMetYourMother, idNumber, internet, job, leagueOfLegends, lebowski, lordOfTheRings, lorem, matz, medical, music, name, number, options, overwatch, phoneNumber, pokemon, randomService, rickAndMorty, robin, rockBand, shakespeare, slackEmoji, space, starTrek, stock, superhero, team, twinPeaks, university, weather, witcher, yoda, zelda`
223+
https://github.com/DiUS/java-faker[Faker] generators:
224+
225+
* *address*: state timeZone lastName country latitude longitude firstName streetAddressNumber streetName zipCode streetAddress secondaryAddress stateAbbr streetSuffix streetPrefix citySuffix cityPrefix city cityName countryCode buildingNumber fullAddress
226+
* *ancient*: primordial titan god hero
227+
* *app*: name version author
228+
* *artist*: name
229+
* *avatar*: image
230+
* *beer*: name yeast malt hop style
231+
* *book*: title publisher author genre
232+
* *bool*: bool
233+
* *business*: creditCardNumber creditCardType creditCardExpiry
234+
* *cat*: name registry breed
235+
* *chuckNorris*: fact
236+
* *code*: asin isbnGs1 isbnGroup isbnRegistrant isbn10 isbn13 imei ean8 gtin8 ean13 gtin13
237+
* *color*: name hex
238+
* *commerce*: productName material price promotionCode department color
239+
* *company*: name suffix url industry profession buzzword catchPhrase logo domainName bs domainSuffix
240+
* *country*: flag currencyCode currency countryCode2 countryCode3 capital
241+
* *crypto*: sha1 sha256 md5 sha512
242+
* *currency*: name code
243+
* *date*: birthday
244+
* *demographic*: educationalAttainment demonym race sex maritalStatus
245+
* *dog*: name size memePhrase age sound coatLength gender breed
246+
* *dragonBall*: character
247+
* *educator*: secondarySchool course campus university
248+
* *esports*: event player league game team
249+
* *file*: fileName extension mimeType
250+
* *finance*: creditCard bic iban randomCreditCardType createCountryCodeToBasicBankAccountNumberPatternMap
251+
* *food*: spice ingredient measurement
252+
* *friends*: location character quote
253+
* *funnyName*: name
254+
* *gameOfThrones*: character dragon house quote city
255+
* *hacker*: abbreviation adjective noun verb ingverb
256+
* *harryPotter*: location character quote book
257+
* *hipster*: word
258+
* *hitchhikersGuideToTheGalaxy*: location character specie marvinQuote starship quote planet
259+
* *hobbit*: location character thorinsCompany quote
260+
* *howIMetYourMother*: character catchPhrase highFive quote
261+
* *idNumber*: valid ssnValid validSvSeSsn invalidSvSeSsn invalid
262+
* *internet*: url uuid domainName password image avatar slug emailAddress safeEmailAddress domainWord domainSuffix macAddress ipV4Address privateIpV4Address publicIpV4Address ipV4Cidr ipV6Address ipV6Cidr userAgentAny
263+
* *job*: field position title keySkills seniority
264+
* *leagueOfLegends*: location summonerSpell masteries champion rank quote
265+
* *lebowski*: character actor quote
266+
* *lordOfTheRings*: location character
267+
* *lorem*: character words word characters sentence paragraph
268+
* *matz*: quote
269+
* *medical*: medicineName symptoms diseaseName hospitalName
270+
* *music*: key instrument chord genre
271+
* *name*: name prefix suffix title lastName fullName firstName nameWithMiddle username
272+
* *number*: digit randomDigit randomDigitNotZero randomNumber
273+
* *overwatch*: location quote hero
274+
* *phoneNumber*: phoneNumber cellPhone
275+
* *pokemon*: name location
276+
* *rickAndMorty*: location character quote
277+
* *robin*: quote
278+
* *rockBand*: name
279+
* *shakespeare*: hamletQuote asYouLikeItQuote kingRichardIIIQuote romeoAndJulietQuote
280+
* *slackEmoji*: people nature activity foodAndDrink celebration travelAndPlaces objectsAndSymbols custom emoji
281+
* *space*: company planet moon galaxy nebula starCluster constellation star agency agencyAbbreviation meteorite nasaSpaceCraft distanceMeasurement
282+
* *starTrek*: location character specie villain
283+
* *stock*: nyseSymbol nsdqSymbol
284+
* *superhero*: name prefix suffix descriptor power
285+
* *team*: name state sport creature
286+
* *twinPeaks*: location character quote
287+
* *university*: name prefix suffix
288+
* *weather*: temperatureCelsius temperatureFahrenheit description
289+
* *witcher*: location character school monster quote witcher
290+
* *yoda*: quote
291+
* *zelda*: character game
226292

227293
=== Export to Databases
228294

src/main/java/com/redislabs/riot/cli/CommandsBuilder.java

Lines changed: 0 additions & 32 deletions
This file was deleted.
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.redislabs.riot.cli.in;
2+
3+
import java.lang.reflect.Method;
4+
import java.lang.reflect.Parameter;
5+
import java.util.Arrays;
6+
import java.util.List;
7+
import java.util.stream.Collectors;
8+
9+
import org.springframework.core.convert.Property;
10+
11+
import com.github.javafaker.Faker;
12+
13+
import picocli.CommandLine.Command;
14+
15+
@Command(name = "faker-help", description = "Print all faker entities")
16+
public class GeneratorHelp implements Runnable {
17+
18+
private final static List<String> EXCLUDES = Arrays.asList("instance", "options");
19+
20+
@Override
21+
public void run() {
22+
Arrays.asList(Faker.class.getDeclaredMethods()).stream().filter(this::accept)
23+
.sorted((m1, m2) -> m1.getName().compareTo(m2.getName())).forEach(this::print);
24+
}
25+
26+
public boolean accept(Method method) {
27+
if (EXCLUDES.contains(method.getName())) {
28+
return false;
29+
}
30+
return method.getReturnType().getPackage().equals(Faker.class.getPackage());
31+
}
32+
33+
public void print(Method method) {
34+
System.out.println(method.getName() + ": "
35+
+ String.join(" ",
36+
Arrays.asList(method.getReturnType().getDeclaredMethods()).stream()
37+
.filter(m -> m.getParameters().length == 0).map(m -> describe(m))
38+
.collect(Collectors.toList())));
39+
}
40+
41+
private String describe(Method method) {
42+
String description = method.getName();
43+
if (method.getParameters().length > 0) {
44+
description += "(";
45+
description += String.join(", ",
46+
Arrays.asList(method.getParameters()).stream().map(p -> describe(p)).collect(Collectors.toList()));
47+
description += ")";
48+
}
49+
return description;
50+
}
51+
52+
private String describe(Parameter parameter) {
53+
return parameter.getType().getSimpleName();
54+
}
55+
56+
}

src/main/java/com/redislabs/riot/cli/in/GeneratorImport.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,15 @@
55
import java.util.Locale;
66
import java.util.Map;
77

8+
import org.springframework.expression.Expression;
9+
import org.springframework.expression.spel.standard.SpelExpressionParser;
10+
811
import com.redislabs.riot.generator.GeneratorReader;
9-
import com.redislabs.riot.generator.GeneratorReaderBuilder;
1012

1113
import picocli.CommandLine.Command;
1214
import picocli.CommandLine.Option;
1315

14-
@Command(name = "gen", description = "Import randomly generated data")
16+
@Command(name = "faker", description = "Import randomly generated data")
1517
public class GeneratorImport extends AbstractImportReaderCommand {
1618

1719
@Option(names = "--map", description = "SpEL expression to generate maps.", paramLabel = "<SpEL>")
@@ -23,10 +25,13 @@ public class GeneratorImport extends AbstractImportReaderCommand {
2325

2426
@Override
2527
public GeneratorReader reader() {
26-
GeneratorReaderBuilder builder = new GeneratorReaderBuilder();
27-
builder.setFields(fieldExpressions);
28-
builder.setLocale(locale);
29-
return builder.build();
28+
SpelExpressionParser parser = new SpelExpressionParser();
29+
Map<String, Expression> fieldExpressionMap = new LinkedHashMap<String, Expression>();
30+
fieldExpressions.forEach((k, v) -> fieldExpressionMap.put(k, parser.parseExpression(v)));
31+
GeneratorReader reader = new GeneratorReader();
32+
reader.setFieldExpressions(fieldExpressionMap);
33+
reader.setLocale(locale);
34+
return reader;
3035
}
3136

3237
@Override

src/main/java/com/redislabs/riot/cli/in/Import.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
@Command(name = "import", description = "Import into Redis", subcommands = { DelimitedFileImport.class,
1313
FixedLengthFileImport.class, JsonFileImport.class, DatabaseImport.class, GeneratorImport.class,
14-
SimpleGeneratorImport.class })
14+
GeneratorHelp.class, SimpleGeneratorImport.class })
1515
public class Import extends JobCommand<Map<String, Object>, Map<String, Object>> {
1616

1717
}

src/main/java/com/redislabs/riot/cli/in/SimpleGeneratorImport.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
import picocli.CommandLine.Command;
66

7-
@Command(name = "sgen", description = "Import simple generated data")
7+
@Command(name = "simple", description = "Import simple generated data")
88
public class SimpleGeneratorImport extends AbstractImportReaderCommand {
99

1010
@Override

src/main/java/com/redislabs/riot/cli/in/redis/AbstractRediSearchImport.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
import com.redislabs.riot.cli.in.AbstractImportWriterCommand;
88
import com.redislabs.riot.redis.writer.LettuceWriter;
9-
import com.redislabs.riot.redis.writer.search.AbstractRediSearchItemWriter;
9+
import com.redislabs.riot.redis.writer.search.AbstractLettuSearchItemWriter;
1010

1111
import lombok.Getter;
1212
import picocli.CommandLine.Option;
@@ -35,13 +35,13 @@ protected ItemWriter<Map<String, Object>> writer() {
3535

3636
protected abstract ItemWriter<Map<String, Object>> jedisSearchWriter();
3737

38-
private AbstractRediSearchItemWriter lettuceItemWriter() {
39-
AbstractRediSearchItemWriter writer = rediSearchItemWriter();
38+
private AbstractLettuSearchItemWriter lettuceItemWriter() {
39+
AbstractLettuSearchItemWriter writer = rediSearchItemWriter();
4040
writer.setIndex(index);
4141
writer.setConverter(redisConverter());
4242
return writer;
4343
}
4444

45-
protected abstract AbstractRediSearchItemWriter rediSearchItemWriter();
45+
protected abstract AbstractLettuSearchItemWriter rediSearchItemWriter();
4646

4747
}

src/main/java/com/redislabs/riot/cli/in/redis/SearchImport.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import com.redislabs.lettusearch.search.AddOptions;
88
import com.redislabs.lettusearch.search.Language;
99
import com.redislabs.riot.redis.writer.search.JedisSearchWriter;
10-
import com.redislabs.riot.redis.writer.search.SearchAddWriter;
10+
import com.redislabs.riot.redis.writer.search.LettuSearchAddWriter;
1111

1212
import io.redisearch.client.AddOptions.ReplacementPolicy;
1313
import io.redisearch.client.Client;
@@ -36,8 +36,8 @@ public class SearchImport extends AbstractRediSearchImport {
3636
private String payload;
3737

3838
@Override
39-
protected SearchAddWriter rediSearchItemWriter() {
40-
SearchAddWriter writer = new SearchAddWriter();
39+
protected LettuSearchAddWriter rediSearchItemWriter() {
40+
LettuSearchAddWriter writer = new LettuSearchAddWriter();
4141
writer.setDefaultScore(defaultScore);
4242
writer.setOptions(AddOptions.builder().ifCondition(ifCondition).language(language).noSave(noSave)
4343
.replace(replace).replacePartial(partial).build());

src/main/java/com/redislabs/riot/cli/in/redis/SuggestImport.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44

55
import org.springframework.batch.item.ItemWriter;
66

7-
import com.redislabs.riot.redis.writer.search.AbstractRediSearchItemWriter;
8-
import com.redislabs.riot.redis.writer.search.SuggestWriter;
7+
import com.redislabs.riot.redis.writer.search.AbstractLettuSearchItemWriter;
8+
import com.redislabs.riot.redis.writer.search.LettuSearchSuggestWriter;
99

1010
import picocli.CommandLine.Command;
1111
import picocli.CommandLine.Option;
@@ -25,8 +25,8 @@ public class SuggestImport extends AbstractRediSearchImport {
2525
private String payload;
2626

2727
@Override
28-
protected AbstractRediSearchItemWriter rediSearchItemWriter() {
29-
SuggestWriter writer = new SuggestWriter();
28+
protected AbstractLettuSearchItemWriter rediSearchItemWriter() {
29+
LettuSearchSuggestWriter writer = new LettuSearchSuggestWriter();
3030
writer.setDefaultScore(defaultScore);
3131
writer.setField(suggest);
3232
writer.setIncrement(increment);
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.redislabs.riot.generator;
2+
3+
import java.util.Locale;
4+
5+
import com.github.javafaker.Faker;
6+
7+
public class GeneratorFaker extends Faker {
8+
9+
private GeneratorReader reader;
10+
11+
public GeneratorFaker(Locale locale, GeneratorReader reader) {
12+
super(locale);
13+
this.reader = reader;
14+
}
15+
16+
public long sequence() {
17+
return reader.getSequence();
18+
}
19+
20+
public int partitions() {
21+
return reader.getPartitions();
22+
}
23+
24+
public int partitionIndex() {
25+
return reader.getPartitionIndex();
26+
}
27+
28+
}

0 commit comments

Comments
 (0)