forked from discourse/discourse
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprofile_db_generator.rb
More file actions
108 lines (89 loc) · 2.3 KB
/
Copy pathprofile_db_generator.rb
File metadata and controls
108 lines (89 loc) · 2.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# can be used to generate a mock db for profiling purposes
# we want our script to generate a consistent output, to do so
# we monkey patch array sample so it always uses the same rng
class Array
RNG = Random.new(1098109928029800)
def sample
self[RNG.rand(size)]
end
end
# based on https://gist.github.com/zaius/2643079
def unbundled_require(gem)
if defined?(::Bundler)
spec_path = Dir.glob("#{Gem.dir}/specifications/#{gem}-*.gemspec").last
if spec_path.nil?
raise LoadError
end
spec = Gem::Specification.load spec_path
spec.activate
end
begin
require gem
end
end
require 'optparse'
begin
unbundled_require 'gabbler'
rescue LoadError
puts "installing gabbler gem"
puts `gem install gabbler`
unbundled_require 'gabbler'
end
user_id = nil
def sentence
@gabbler ||= Gabbler.new.tap do |gabbler|
story = File.read(File.dirname(__FILE__) + "/alice.txt")
gabbler.learn(story)
end
sentence = ""
until sentence.length > 800 do
sentence << @gabbler.sentence
sentence << "\n"
end
sentence
end
def create_admin(seq)
User.new.tap { |admin|
admin.email = "admin@localhost#{seq}"
admin.username = "admin#{seq}"
admin.password = "password"
admin.save
admin.grant_admin!
admin.change_trust_level!(:regular)
admin.email_tokens.update_all(confirmed: true)
}
end
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
unless Rails.env == "profile"
puts "This script should only be used in the profile environment"
exit
end
# by default, Discourse has a "system" account
if User.count > 1
puts "Only run this script against an empty DB"
exit
end
puts "Creating 100 users"
users = 100.times.map do |i|
putc "."
create_admin(i)
end
puts
puts "Creating 10 categories"
categories = 10.times.map do |i|
putc "."
Category.create(name: "category#{i}", text_color: "ffffff", color: "000000", user: users.first)
end
puts
puts "Creating 100 topics"
topic_ids = 100.times.map do
topic = PostCreator.create(users.sample, raw: sentence, title: sentence[0..50].strip, category: categories.sample.name, skip_validations: true)
putc "."
topic.id
end
puts
puts "creating 2000 replies"
2000.times do
putc "."
PostCreator.create(users.sample, raw: sentence, topic_id: topic_ids.sample, skip_validations: true)
end