Sha256: 74a4ae0c6644acacc05df5078181630a2fd45ef2fcfab83321e69247d0c5719a

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

require 'discourse_dev/record'
require 'faker'

module DiscourseDev
  class Topic < Record

    def initialize(count = DEFAULT_COUNT)
      super(::Topic, count)
    end

    def data
      {
        title: title[0, SiteSetting.max_topic_title_length],
        raw: Faker::Markdown.sandwich(sentences: 5),
        category: @category.id,
        tags: tags,
        topic_opts: { custom_fields: { dev_sample: true } },
        skip_validations: true
      }
    end

    def title
      if index <= I18n.t("faker.discourse.topics").count
        Faker::Discourse.unique.topic
      else
        Faker::Lorem.unique.sentence(word_count: 3, supplemental: true, random_words_to_add: 4).chomp(".")
      end
    end

    def tags
      @tags = []

      Faker::Number.between(from: 0, to: 3).times do
        @tags << Faker::Discourse.tag
      end

      @tags.uniq
    end

    def create!
      @category = Category.random
      PostCreator.new(user, data).create!
    end

    def user
      return User.random if @category.groups.blank?
      
      group_ids = @category.groups.pluck(:id)
      user_ids = ::GroupUser.where(group_id: group_ids).pluck(:user_id)
      user_count = user_ids.count
      position = Faker::Number.between(from: 0, to: user_count - 1)
      ::User.find(user_ids[position] || Discourse::SYSTEM_USER_ID)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
discourse_dev-0.0.4 lib/discourse_dev/topic.rb