iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0
Software Development

Rails 開發,每日一套件介紹! 系列 第 9

Day 9 : 把時間花在更有意義的地方吧!專業的假資料達人 - Faker

  • 分享至 

  • xImage
  •  

Hello, 我是 Weber,一位工程師,斜槓鼓手與行銷顧問。
Rails 開發,每日一套件第 9 天,讓我們一起認識 Rails 開發好用的 30 個套件,建立出自己的常用套件庫吧!

Day 9: Faker

開發專案時,為了測試及Demo,常常需要創造假的資料來寫入。好比註冊會員,會需要 email、姓名、電話、地址、護照ID等,或是商品資訊、標題、內容文字、類別等等。在測試時的種子資料及模擬上線後的環境,一定會需要做大量的資料寫入。

你當然可以一個一個創,甚至你要卯起來去申請大量 email 帳戶,也不是不行。那名字呢?地址呢?品名呢?類別呢?就算你都掰的出來好了,那你要怎麼紀錄呢?或者如果需要 10000 筆資料呢?請工讀生建嗎?

身為開發者的各位,應該心中早就浮現 ”用程式跑呀“ 等想法,看是要 loop、for、while、.times,都好。
不過如同標題陳述的,把時間花在更有意義的地方吧!
除非是特殊的資料欄位,有特殊的邏輯規則加解密,可能還是要自己寫之外。
其他的一般欄位,就讓套件費心吧!

我個人很常身兼多職,有幾個 Work Smarter 的中心思想。
不把時間花在高重複性、無意義的雜務上,這種事情能不要親自做,我一定不親自做,絕對是第一步的第一步!
(有興趣討論 Work Smarter 這檔事,可能我部落格再寫?XD)

言歸正傳,安裝與使用方式:

Faker 嚴格說起來是一個 library。文本開宗明義第一句話:

Faker is a port of Perl's Data::Faker library. It's a library for generating fake data such as names, addresses, and phone numbers.

所以我的理解,其實只是安裝一個 gem 然後抓取 library 中的資料(有錯請大力鞭我)
老招先上:

bundle add faker

通常會放在 group development 底下,看情況自己調整吧!
然後在你要使用的檔案中加入:

require 'faker'

接著,用法如下:

Faker::Name.name      #=> "Christophe Bartell"

Faker::Address.full_address #=> "5479 William Way, East Sonnyhaven, LA 63637"

Faker::Markdown.emphasis #=> "Quo qui aperiam. Amet corrupti distinctio. Sit quia *dolor.*"

Faker::TvShows::RuPaul.queen #=> "Violet Chachki"

Faker::Alphanumeric.alpha(number: 10) #=> "zlvubkrwga"

Faker::ProgrammingLanguage.name #=> "Ruby"

有幾個常用方法可以用 .unique, .random, .new
好,結束!
是不是簡單又好用,絕對值得蒐藏!
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
什麼?還要細講嗎?
好吧,其他真的也沒什麼好說的,我當時讀文件時,花最多時間的都是找有哪些有趣的 library 內容而已。

附上一段我測試用的 seed 範例供參考:

fakewords = [
  "萬物於我皆為春秋,而吾將與時俱舞。",
  "塵世煙雲,皆是虛幻之事,莫過於心靈之清明。",
  "大道之行也,天下為公,吾其獨樂樂乎?",
  "人生如夢,一切皆虛。悟己者智,悟道者明。",
  "天地萬物,與我何干?內觀自心,得天地之間。",
  "虛無即是真實,真實亦可化為虛無。",
  "逍遙於自然之間,心隨物動,物隨心生。",
  "欲去一切,方得無所不在。",
  "萬物皆妄,吾亦妄言之。妄言既妄,妄言誰妄?",
  "安得為紅顏,不負春風?吾有心而忘形。"
]

500.times do |i|
  fakername = Faker::Name.unique.name
  fakeremail = Faker::Internet.unique.email
  fakerpassword = '12345678'
  fakerphone = Faker::PhoneNumber.phone_number
  fakerlocation = Faker::Address.state
  fakercontent = fakewords.sample

  user = User.create!(
    name: fakername,
    email: fakeremail,
    password: fakerpassword,
    confirmed_at: Time.now
  )

  demo_profile = user.create_profile(
    phone: fakerphone,
    location: fakerlocation,
    content: fakercontent
  )

  puts "已建立使用者 #{i + 1}: #{fakername} - #{fakeremail}"
end

補充說明一下 fakewords 那段,是因為我要生成中文的內文,又不想生一些無意義的 giblish,就用了莊子語錄。
然後最後 puts 是你塞 seed 的時候,你就知道要幹嘛了!
以上!我們明天見吧!


上一篇
Day 8: 那一夜,我對自己的 code 開了一槍 - Bullet
下一篇
Day 10: 靈活輕便的數位載波 - CarrierWave
系列文
Rails 開發,每日一套件介紹! 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言