{"id":25776546,"url":"https://github.com/azakordonets/fabricator","last_synced_at":"2026-04-07T07:01:44.744Z","repository":{"id":17083844,"uuid":"19848935","full_name":"azakordonets/fabricator","owner":"azakordonets","description":"Fabricator is a minimalist generator of random strings, numbers, etc. to help reduce some monotony particularly while writing automated tests or anywhere else you need anything random. It's written on scala but fully backward compatible with Java.","archived":false,"fork":false,"pushed_at":"2023-08-22T08:09:52.000Z","size":2188,"stargazers_count":81,"open_issues_count":6,"forks_count":19,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-12-20T10:30:55.707Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://biercoff.com/fabricator/","language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/azakordonets.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-05-16T08:01:09.000Z","updated_at":"2025-10-10T08:12:58.000Z","dependencies_parsed_at":"2022-09-02T12:31:29.945Z","dependency_job_id":null,"html_url":"https://github.com/azakordonets/fabricator","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/azakordonets/fabricator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azakordonets%2Ffabricator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azakordonets%2Ffabricator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azakordonets%2Ffabricator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azakordonets%2Ffabricator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/azakordonets","download_url":"https://codeload.github.com/azakordonets/fabricator/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/azakordonets%2Ffabricator/sbom","scorecard":{"id":220913,"data":{"date":"2025-08-11","repo":{"name":"github.com/azakordonets/fabricator","commit":"2085faba3597e0b791ba81bd4a0adee5a1a727b5"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Code-Review","score":6,"reason":"Found 8/13 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v2.0 not signed: https://api.github.com/repos/azakordonets/fabricator/releases/1711305","Warn: release artifact v2.0 does not have provenance: https://api.github.com/repos/azakordonets/fabricator/releases/1711305"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T02:27:48.180Z","repository_id":17083844,"created_at":"2025-08-17T02:27:48.180Z","updated_at":"2025-08-17T02:27:48.180Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31503394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T03:10:19.677Z","status":"ssl_error","status_checked_at":"2026-04-07T03:10:13.982Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-27T06:01:26.379Z","updated_at":"2026-04-07T07:01:44.724Z","avatar_url":"https://github.com/azakordonets.png","language":"Scala","funding_links":[],"categories":["测试"],"sub_categories":[],"readme":"fabricator\n==========\n\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.github.azakordonets/fabricator_2.10/badge.svg?style=flat)](http://mvnrepository.com/artifact/com.github.azakordonets/fabricator_2.11)\n[![Build Status](https://travis-ci.org/azakordonets/fabricator.svg?branch=master)](https://travis-ci.org/azakordonets/fabricator) \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp;   [![Coverage Status](https://coveralls.io/repos/azakordonets/fabricator/badge.png)](https://coveralls.io/r/azakordonets/fabricator)  \u0026nbsp;\u0026nbsp;\u0026nbsp;\u0026nbsp; [![Get automatic notifications about new \"fabricator\" versions](https://www.bintray.com/docs/images/bintray_badge_color.png)](https://bintray.com/biercoff/Fabricator/fabricator/view?source=watch)\n[ ![Download](https://api.bintray.com/packages/biercoff/Fabricator/fabricator/images/download.svg) ](https://bintray.com/biercoff/Fabricator/fabricator/_latestVersion)\n[![Codacy Badge](https://api.codacy.com/project/badge/grade/72eb01b78a2149f7b7037c608c4e70e7)](https://www.codacy.com/app/biercoff/fabricator)\n\nFabricator is a minimalist generator of random  strings, numbers, etc. to help reduce some monotony particularly while writing automated tests or\nanywhere else you need anything random. It's written on scala but fully backward compatible with Java.\n\n## How to install :\n\nFor maven projects you need to add next dependency in your ```pom.xml``` file :\n\n```java\n\u003cdependency\u003e\n  \u003cgroupId\u003ecom.github.azakordonets\u003c/groupId\u003e\n  \u003cartifactId\u003efabricator_2.13\u003c/artifactId\u003e\n  \u003cversion\u003e2.1.9\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\nIn case you want to use it in your scala project, then just add this lines to your ```build.sbt``` file :\n\n*Note* : since version `2.1.5` scala 2.10 got deprecated. You can get version `2.1.4`, but future fixes and updated \nwill by only for scala versions 2.11.* and higher\n\nFor Scala 2.10.4 you can use this :\n```scala\nresolvers += \"Fabricator\" at \"http://dl.bintray.com/biercoff/Fabricator\"\n\nlibraryDependencies += \"com.github.azakordonets\" % \"fabricator_2.10\" % \"2.1.4\"\n```\n\nFor Scala 2.11 you can use this :\n```scala\nresolvers += \"Fabricator\" at \"http://dl.bintray.com/biercoff/Fabricator\"\n\nlibraryDependencies += \"com.github.azakordonets\" % \"fabricator_2.11\" % \"2.1.5\"\n```\n\nFor Scala 2.12 you can use this :\n```scala\nresolvers += \"Fabricator\" at \"http://dl.bintray.com/biercoff/Fabricator\"\n\nlibraryDependencies += \"com.github.azakordonets\" % \"fabricator_2.12\" % \"2.1.5\"\n```\n\nFor Scala 2.13 you can use this :\n```scala\n// https://mvnrepository.com/artifact/com.github.azakordonets/fabricator\nlibraryDependencies += \"com.github.azakordonets\" %% \"fabricator_2.13\" % \"2.1.9\"\n```\n\nUsage\n------\n\nFabricator consist of 9 specific modules :\n\n* Alphanumeric - generates random numbers and strings:\n* Calendar - generates random time and date:\n* Contact - generates contact and person details information :\n* File - generates random csv files\n* Finance - generates random credit cards, bsn numbers\n* Internet - generates random url's, domains, e-mails, ip's, mac addresses, color codes, social networks id's\n* User Agent - generate any random user agent for mobile and desktop client\n* Location - generates random coordinates, geohash\n* Mobile - generates random mobile platforms push tokens or id's\n* Words - generates random words, sentences and even blocks of text\n\nTo start using it you need to import fabricator.* and then make a call to appropriate module. \n\nLet's look closer what each module can build :\n\nAlphanumeric\n------------\nThis module allows you to generate any random number or string. As for strings, you can generate either fully random string,\nor you can generate string basing on a pattern.\n\n```scala\n\nval alpha = fabricator.Alphanumeric() // initialize alpha numeric module\n\nalpha.numerify(\"###ABC\") // 981ABC\n\nalpha.letterify(\"???123\") // LsQ123\n\nalpha.botify(\"???###\") // AbC329\n\nalpha.randomInteger // random integer in 0 to 1000 range\n\nalpha.randomInteger(100) // random integer in 0 to 100 range\n\nalpha.randomInteger(200, 300) // random integer in 200 to 300 range\n\nalpha.randomIntegerRangeAsScalaList(1,10,1) // will return scala List[1,2,3,4,5,6,7,8,9,10]\n \nalpha.randomIntegerRangeAsJavaList(1,10,1) // will return List\u003cObject\u003e[1,2,3,4,5,6,7,8,9,10] . Each element need to be casted to Integer\n\nalpha.randomHash // d750c843c83a3a980082361e72aa41ac48975eab\n\nalpha.randomGuid // ed7592b7-11e4-5f7f-b83f-488733c8bc56\n```\n\nBesides integer numbers it can generate double, float, gausian, string\n\nCalendar\n--------\n\n This module allows you to generate random time or time.\n\n```scala\n\nval calendar = fabricator.Calendar() // initialize calendar module\n\ncalendar.time12h // 03:15\n\ncalendar.time24h // 15:15\n\ncalendar.month(asNumber = false) // December\n\ncalendar.month(asNumber = true) // 12\n\ncalendar.date.asString // 10-02-2014\n\ncalendar.date.asString(DateFormat.dd_MMM_yyyy_SEMICOLON) // 10:DEC:2014\n\ncalendar.date.asDate // random Date object\n\ncalendar.date.inYear(2014).inDay(10).inMinute(10).asString // random date in 2014 year, that happened in 10th day of random month in 10th minute of random hour\n\ncalendar.relativeDate.years(2).weeks(1).seconds(-20).asDate // get relative date that is 2 years and 1 weeks in the future and 20 seconds behind (since current time)\n\ncalendar.relativeDate(DateTime.now().plusDays(1)).tomorrow().asString // 2 days since now as a string with default formatting\n\ncalendar.relativeDate(DateTimeZone.UTC).tomorrow().asString(DateFormat.dd_MM_yy) // tomorrows date in UTC time zone with custom formatting\n\ncalendar.datesRange\n        .startYear(2010)\n        .startMonth(1)\n        .startDay(1)\n        .stepEvery(1, DateRangeType.DAYS)\n        .endYear(2011)\n        .endMonth(1)\n        .endDay(1)\n        .asList // list of dates between 2010-1-1 and 2011-1-1 with a step of 1 day between each date \n```\n\nContact\n--------\n\n  This module allows you to generate random person data\n\n```scala\n\nval contact = fabricator.Contact()\n\ncontact.fullName // Betty Corwin\n\ncontact.birthday(25) // 26.12.1989 (current year - 25 with default format dd.MM.yyyy)\n\ncontact.bsn // 730550370 (equivalent of a national ID number)\n\ncontact.eMail // Rebecca_Kohler506@yahoo.com\n\ncontact.phoneNumber // (792)273-4251 x012\n\ncontact.postCode //  44274-6580\n\ncontact.state // Alaska\n\ncontact.height(true) // 188 cm\n\ncontact.height(false) // 1.88 m\n\ncontact.weight // 108 kg\n\ncontact.bloodType // A-\n\ncontact.occupation // Craft Artist\n\ncontact.religion // sikhism\n\ncontact.zodiac // Taurus\n\n```\n\nFile\n----\n\nThis module allows you to generate random images and csv files.\nFor images you can specify width and height ( no more then 2560 px) and as a result you will get an image\nthat has text of it's dimensions on it. It's easy as :\n\n```scala\nval file = fabricator.file() // initialize file module\n\nfile.image(200,300, \"drawing.png\") // will create a 200x300 image in the root of the project\n\nfile.fileExtension(FileType.AUDIO) // mp3\n\nfile.fileExtension // randomly selects out of all available Filetypes\n\nfile.fileName(FileType.audio) // swoon.mp3\n\nfile.fileName // random name + random file type\n\nfile.mimeType(MimeType.APPLICATION) // application/ecmascript\n\nfile.mimeType // random mime type \n\n\n```\n\nFor csv there are 2 ways of generating files.\nFirst one is by using specific codes that correspond to the methods that are available withing the lib. Here's the full list of supported codes :\n\n* integer\n* double\n* hash\n* guid\n* time\n* date\n* name\n* first_name\n* last_name\n* birthday\n* email\n* phone\n* address\n* postcode\n* bsn\n* height\n* weight\n* occupation\n* visa\n* master\n* iban\n* bic\n* url\n* ip\n* macaddress\n* uuid\n* color\n* twitter\n* hashtag\n* facebook\n* google_analytics\n* altitude\n* depth\n* latitude\n* longitude\n* coordinates\n* geohash\n* apple_token\n* android\n* windows7Token\n* windows8Token\n* word\n* sentence\n\nTo create csv file using this codes you need to do next :\n\n```scala\n\nfile.csvBuilder.build() // will create default csv file with 10 rows in default location\n\nval file = fabricator.csvBuilder // get csv file builder\n\nval codes = Array(CsvValueCode.FIRST_NAME,\n                                          CsvValueCode.LAST_NAME,\n                                          CsvValueCode.BIRTHDAY,\n                                          CsvValueCode.EMAIL,\n                                          CsvValueCode.PHONE,\n                                          CsvValueCode.ADDRESS,\n                                          CsvValueCode.BSN,\n                                          CsvValueCode.WEIGHT,\n                                          CsvValueCode.HEIGHT)\n\nfile.csvBuilder\n           .withCodes(codes)\n           .withNumberOfRows(10)\n           .saveTo(csvFilePath)\n           .build() // this will create a csv file with 10 rows, each of it has set of data generated by fabricator methods and\n                                          // stored in csvFilePath\n\n```\n\nIn case you want some columsn in your csv file to contain same data, you can specify custom Array with both codes \n and default values and get generated file :\n\n```scala\n\nval file = fabricator.file() // initialize file module\n\nval values = Array(CsvValueCode.LAST_NAME, CsvValueCode.BIRTHDAY,CsvValueCode.EMAIL, alpha.randomDouble())\n\nfile.csvBuilder\n           .withCodes(codes)\n           .withNumberOfRows(10)\n           .saveTo(csvFilePath)\n           .build() // csv file with 10 lines of data from Array will be generated in csvFilePath\n```\n  \nFinance\n--------\n  \nThis module allows you to generate random finance data\n  \n```scala\n\nval finance = fabricator.Finance() // initialize finance module\n\nfinance.iban // GB91ROYC80901351879409\n\nfinance.bic // CLSBUS33XXX\n\nfinance.visacreditCard // 4556623851035641\n\nfinance.visacreditCard(15) // 455662622900006\n\nfinance.pincode // 1234\n```\n\nInternet\n--------\n\nThis module allows you to generate random internet data\n\n```scala\n\nval internet = fabricator.Internet() // initialize internet module\n\ninternet.appleToken // randon apple push token - ze7w6fn0omtkxjuxgw2dx50iux1ijcmkf9rmcvoshj2vnpflajdlli63g5nxwaqy\n\ninternet.urlBuilder.toString() // http://somenewword.com/getEntity?q=test\n\ninternet.urlBuilder\n        .scheme(\"https\")\n        .host(\"google.com\")\n        .port(\"8080\")\n        .path(\"getNewId\")\n        .params(mutable.Map[String, Any](\"id\"-\u003e100, \"name\" -\u003e \"John Lennon\", \"coordinates\" -\u003e 30.03)).toString() // https://google.com/getNewId?id=100\u0026name=John+Lennon\u0026coordinates=30.03\n    \ninternet.urlBuilder.host(\"test.com\").params(mutable.Map(\"q\"-\u003e\"test 123\")).encodeAs(Charset.forName(\"UTF-8\")).toString() // \"http://test.com/getEntity%3Fq%3Dtest%2B123\" \n\n\ninternet.ip // 234.166.254.103\n\ninternet.ipv6 // c7a5:a6C4:F3C0:d4be:c2Fd:A4Dc:daA8:7fd8\n\ninternet.macAddress // F1:D9:16:93:58:C3\n\ninternet.UUID // 543d5f08-acca-426d-b649-a392cc74ce39\n\ninternet.color // #58f946\n\ninternet.color(rgb, false) // rgb(224,0,0)\n\ninternet.color(shorthex, true) // #000 greyscale\n\ninternet.twitter // @adaSchumm\n\ninternet.hashtag // #lowofof\n\ninternet.googleAnalyticsTrackCode // UA-15137-66\n\ninternet.facebookId // 7848157865252882\n\ninternet.avatar // https://s3.amazonaws.com/uifaces/faces/twitter/mgonto/128.jpg\n\n```\n\nUser Agent\n----------\nThis module allows you to generate random user agent \n\n```scala\nval userAgent = Fabricator.UserAgent()\n\nval macProcessor = userAgent.mac_processor // Intel\n\nval linuxProcessor = userAgent.linux_processor // x86_64\n\nval browser_name = userAgent.browser_name // chrome, internet_explorer\n\nval windowsPlatform = userAgent.windows_platform_token // Windows NT 6.2\n\nval linuxPlatform = userAgent.linux_platform_token // X11; Linux x86_64\n\nval macPlatform = userAgent.mac_platform_token // Macintosh; Intel Mac OS X 10_6_4\n\nval chrome = userAgent.chrome // Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/5330 (KHTML, like Gecko) Chrome/14.0.859.0 Safari/5330\n\nval firefox = userAgent.firefox // Mozilla/5.0 (Macintosh; PPC Mac OS X 10_5_3; rv:1.9.3.20) Gecko/13-08-2011 Firefox/3.6.12\n\nval ie = userAgent.internet_explorer // Mozilla/5.0 (compatible; MSIE 5.0; Windows NT 5.2; Trident/3.0)\n\nval opera = userAgent.opera // Opera/8.22.(X11; Linux i686; en-US) Presto/2.9.166 Version/11.00\n\nval browser = userAgent.browser // randomly picks chrome, firefox, ie, opera generated user agents\n\n```\n\nLocation\n--------\n\nThis module allows you to generate random location data - coordinates, etc\n\n```scala\n\nval location = fabricator.Location() // initialize location module\n\nlocation.altitude // 8171.48498 By default maximum altitude is 8848 and accuracy is 5\n\nlocation.altitude(1000, 2) // 581.83\n\nlocation.depth // -2378.77726 by default maximum depth is 2550 and accuracy is 5\n\nlocation.depth(-1000, 2) // -4318.73\n\nlocation.coordinates // 25.54691, -26.64447\n\nlocation.coordinates(2) // 25.54, -26.64\n\nlocation.latitude // -46.99 by default the range is from -90 to 90\n\nlocation.longitude // -171.72569\n\nlocation.geohash // tc23e0uv9fdk\n\nlocation.geohash(-47.44, -150.77) // 0xsf15u9ur59\n```\n\nMobile\n--------\n\nThis module allows you to generate random mobile operating systems push tokens\n\n```scala\n\nval mobile = fabricator.Mobile() // initialize mobile module\n\nmobile.androidGsmId // APA91fCUNiRP-xKj0qBUoJgGWYnN3zFoznbFL61BkWktXCPTYgw4Xe7phJ3zhOEVYJ4ToZvYTp2f0PPHeNSmYHajXr9fwbDarFh8zTGVz3I54ffViW4Nl8s6XLs7i9lIi3oUeRI5bOx49wIC9EF-IwBcuOT-MQ-Nrw1GUW0cJco1Dti4nAtW7Xx\n\nmobile.applePushToken // a6cc474cd81a9697c2a232744dfdb7ec3f8c72977cd91c23e6ac8e8f75c56697\n\nmobile.wp8_anid2 // Windows Phone 8 ANID2 - YjBUN0hmYWV1VVEyZ2xIYnZWOWMwaGFoVUhlYlFq\n\nmobile.wp7_anid // Windows Phone 7 ANID - A=AC59226C42245673ABE85A32A8EBCACE\u0026E=aed\u0026W=3\n```\n\nWords\n--------\n\nThis module allows you to generate random words, sentences and even blocks of text\n\n```scala\n\nval words = fabricator.Words() // initialize word module\n\nwords.word // random word\n\nwords.words(10) // array with 10 words\n\nwords.sentence(20) // sentence out of 20 words\n\nwords.paragraph // 100 chars length block of text\n\nwords.paragraph(2000) // 2000 chars length block of text\n```\n\n## Thanks\n\nMany thanks to these incredible tools that help us creating open-source software:\n\n[![Intellij IDEA](https://cloud.google.com/tools/images/icon_IntelliJIDEA.png)](http://www.jetbrains.com/idea)\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazakordonets%2Ffabricator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fazakordonets%2Ffabricator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fazakordonets%2Ffabricator/lists"}