lib/faker/twitter.rb in faker-1.7.3 vs lib/faker/twitter.rb in faker-1.8.0
- old
+ new
@@ -1,90 +1,96 @@
module Faker
class Twitter < Base
class << self
- def user(include_status: true)
+ def user(include_status: true, include_email: false)
user_id = id
background_image_url = Faker::LoremPixel.image('600x400') # TODO: Make the dimensions change
profile_image_url = Faker::Avatar.image(user_id, '48x48')
user = {
id: user_id,
id_str: user_id.to_s,
- name: Faker::Name.name,
- screen_name: Faker::Internet.user_name,
- location: "#{Faker::Address.city}, #{Faker::Address.state_abbr}, #{Faker::Address.country_code}",
+ contributors_enabled: Faker::Boolean.boolean(0.1),
+ created_at: created_at,
+ default_profile_image: Faker::Boolean.boolean(0.1),
+ default_profile: Faker::Boolean.boolean(0.1),
description: Faker::Lorem.sentence,
- url: Faker::Internet.url('example.com'),
- entities: nil, # TODO
- protected: Faker::Boolean.boolean(0.1),
+ entities: user_entities,
+ favourites_count: Faker::Number.between(1, 100_000),
+ follow_request_sent: false,
followers_count: Faker::Number.between(1, 10_000_000),
+ following: false,
friends_count: Faker::Number.between(1, 100_000),
- listed_count: Faker::Number.between(1, 1000),
- created_at: created_at,
- favourites_count: Faker::Number.between(1, 100_000),
- utc_offset: utc_offset,
- time_zone: Faker::Address.time_zone,
geo_enabled: Faker::Boolean.boolean(0.1),
- verified: Faker::Boolean.boolean(0.1),
- statuses_count: Faker::Number.between(1, 100_000),
- lang: Faker::Address.country_code,
- contributors_enabled: Faker::Boolean.boolean(0.1),
- is_translator: Faker::Boolean.boolean(0.1),
is_translation_enabled: Faker::Boolean.boolean(0.1),
+ is_translator: Faker::Boolean.boolean(0.1),
+ lang: Faker::Address.country_code,
+ listed_count: Faker::Number.between(1, 1000),
+ location: "#{Faker::Address.city}, #{Faker::Address.state_abbr}, #{Faker::Address.country_code}",
+ name: Faker::Name.name,
+ notifications: false,
profile_background_color: Faker::Color.hex_color,
- profile_background_image_url: background_image_url.sub('https://', 'http://'),
profile_background_image_url_https: background_image_url,
+ profile_background_image_url: background_image_url.sub('https://', 'http://'),
profile_background_tile: Faker::Boolean.boolean(0.1),
- profile_image_url: profile_image_url.sub('https://', 'http://'),
- profile_image_url_https: profile_image_url,
profile_banner_url: Faker::LoremPixel.image('1500x500'),
+ profile_image_url_https: profile_image_url,
+ profile_image_url: profile_image_url.sub('https://', 'http://'),
profile_link_color: Faker::Color.hex_color,
profile_sidebar_border_color: Faker::Color.hex_color,
profile_sidebar_fill_color: Faker::Color.hex_color,
profile_text_color: Faker::Color.hex_color,
profile_use_background_image: Faker::Boolean.boolean(0.4),
- default_profile: Faker::Boolean.boolean(0.1),
- default_profile_image: Faker::Boolean.boolean(0.1),
- following: false,
- follow_request_sent: false,
- notifications: false
+ protected: Faker::Boolean.boolean(0.1),
+ screen_name: screen_name,
+ statuses_count: Faker::Number.between(1, 100_000),
+ time_zone: Faker::Address.time_zone,
+ url: Faker::Internet.url('example.com'),
+ utc_offset: utc_offset,
+ verified: Faker::Boolean.boolean(0.1)
}
user[:status] = Faker::Twitter.status(include_user: false) if include_status
+ user[:email] = Faker::Internet.safe_email if include_email
user
end
- def status(include_user: true)
+ def status(include_user: true, include_photo: false)
status_id = id
status = {
- created_at: created_at,
id: status_id,
id_str: status_id.to_s,
- text: Faker::Lorem.sentence,
- truncated: false,
- entities: nil, # TODO
- source: "<a href=\"#{Faker::Internet.url('example.com')}\" rel=\"nofollow\">#{Faker::Company.name}</a>",
+ contributors: nil,
+ coordinates: nil,
+ created_at: created_at,
+ entities: status_entities(include_photo: include_photo),
+ favorite_count: Faker::Number.between(1, 10_000),
+ favorited: false,
+ geo: nil,
+ in_reply_to_screen_name: nil,
in_reply_to_status_id: nil,
- nil: nil,
- in_reply_to_user_id: nil,
in_reply_to_user_id_str: nil,
- in_reply_to_screen_name: nil,
- geo: nil,
- coordinates: nil,
- place: nil,
- contributors: nil,
- retweeted_status: nil,
+ in_reply_to_user_id: nil,
is_quote_status: false,
+ lang: Faker::Address.country_code,
+ nil: nil,
+ place: nil,
+ possibly_sensitive: Faker::Boolean.boolean(0.1),
retweet_count: Faker::Number.between(1, 10_000),
- favorite_count: Faker::Number.between(1, 10_000),
- favorited: false,
+ retweeted_status: nil,
retweeted: false,
- possibly_sensitive: Faker::Boolean.boolean(0.1),
- lang: Faker::Address.country_code
+ source: "<a href=\"#{Faker::Internet.url('example.com')}\" rel=\"nofollow\">#{Faker::Company.name}</a>",
+ text: Faker::Lorem.sentence,
+ truncated: false
}
status[:user] = Faker::Twitter.user(include_status: false) if include_user
+ status[:text] = "#{status[:text]} #{status[:entities][:media].first[:url]}" if include_photo
status
end
+ def screen_name
+ Faker::Internet.user_name(nil, ['_'])[0...20]
+ end
+
private
def id
Faker::Number.between(1, 9_223_372_036_854_775_807)
end
@@ -93,9 +99,74 @@
Faker::Date.between('2006-03-21', ::Date.today).strftime('%a %b %d %H:%M:%S %z %Y')
end
def utc_offset
Faker::Number.between(-43_200, 50_400)
+ end
+
+ def user_entities
+ {
+ url: {
+ urls: []
+ },
+ description: {
+ urls: []
+ }
+ }
+ end
+
+ def status_entities(include_photo: false)
+ entities = {
+ hashtags: [],
+ symbols: [],
+ user_mentions: [],
+ urls: []
+ }
+ entities[:media] = [photo_entity] if include_photo
+ entities
+ end
+
+ def photo_entity
+ # TODO: Dynamic image sizes
+ # TODO: Return accurate indices
+ media_url = Faker::LoremPixel.image('1064x600')
+ media_id = id
+ {
+ id: media_id,
+ id_str: media_id.to_s,
+ indices: [
+ 103,
+ 126
+ ],
+ media_url: media_url.sub('https://', 'http://'),
+ media_url_https: media_url,
+ url: Faker::Internet.url('example.com'),
+ display_url: 'example.com',
+ expanded_url: Faker::Internet.url('example.com'),
+ type: 'photo',
+ sizes: {
+ medium: {
+ w: 1064,
+ h: 600,
+ resize: 'fit'
+ },
+ large: {
+ w: 1064,
+ h: 600,
+ resize: 'fit'
+ },
+ small: {
+ w: 680,
+ h: 383,
+ resize: 'fit'
+ },
+ thumb: {
+ w: 150,
+ h: 150,
+ resize: 'crop'
+ }
+ }
+ }
end
end
end
end