/
fixtures.rb
162 lines (128 loc) · 3.59 KB
/
fixtures.rb
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
require 'active_record'
ActiveRecord::Migration.verbose = false
ActiveRecord::Base.logger = Logger.new(nil)
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
ActiveRecord::Schema.define do
create_table :countries do |t|
t.string :name
end
create_table :studios do |t|
t.integer :country_id
t.string :status
t.string :name
t.string :description
end
create_table :producers do |t|
t.string :name
end
create_table :actors do |t|
t.string :name
end
create_table :writers do |t|
t.string :name
end
create_table :genres do |t|
t.string :name
end
create_table :movies do |t|
t.integer :studio_id
t.integer :year
t.string :title
t.float :price
end
create_table :actors_movies do |t|
t.integer :movie_id
t.integer :actor_id
end
create_table :movies_writers do |t|
t.integer :movie_id
t.integer :writer_id
end
create_table :genres_movies do |t|
t.integer :movie_id
t.integer :genre_id
end
create_table :producers_studios do |t|
t.integer :producer_id
t.integer :studio_id
end
end
class Producer < ActiveRecord::Base
end
class Actor < ActiveRecord::Base
end
class Writer < ActiveRecord::Base
end
class Genre < ActiveRecord::Base
end
class Country < ActiveRecord::Base
end
class Studio < ActiveRecord::Base
belongs_to :country
has_and_belongs_to_many :producers
end
class Movie < ActiveRecord::Base
belongs_to :studio
has_and_belongs_to_many :genres
has_and_belongs_to_many :actors
has_and_belongs_to_many :writers
scope :classics, -> { where("year <= ?", 1980) }
scope :non_classics, -> { where("year > ?", 1980) }
scope :year_lte, -> (year) { where("year > ?", year) }
end
LOREM = %w{Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren}
countries = []
%w{US UK}.each do |code|
countries << Country.create!(name: code)
end
producers = []
%w(Smith Logan Kelly Anderson Hendricks Bush).each do |name|
producers << Producer.create!(name: name)
end
studios = []
%w{A B C D}.each_with_index do |suffix, index|
studio = Studio.create!(name: "Studio #{suffix}", status: %w(active inactive)[index % 2],
country: countries[index % countries.length], description: LOREM.shuffle.take(5).join(' '))
3.times do
producer = producers[rand(producers.length)]
unless studio.producers.include? producer
studio.producers << producer
end
end
studios << studio
end
genres = []
%w{horror thriller drama comedy family action documentery}.each do |genre_name|
genres << Genre.create!(name: genre_name)
end
actors = []
%w{Matt Julie Tom Brad Tony Dustin Lucy Jenny}.each do |actor_name|
actors << Actor.create!(name: actor_name)
end
writers = []
%w{Matt Julie Tom Brad Tony Dustin Lucy Jenny}.each do |writer_name|
writers << Writer.create!(name: writer_name)
end
rand = Random.new
LOREM.each_with_index do |title, index|
m = Movie.create!(title: title, studio: studios[index % studios.length],
price: rand.rand(20.0), year: (index + 1975))
3.times do
actor = actors[rand(actors.length)]
unless m.actors.include? actor
m.actors << actor
end
end
3.times do
writer = writers[rand(writers.length)]
unless m.writers.include? writer
m.writers << writer
end
end
rand(6).to_i.times do
genre = genres[rand(genres.length)]
unless m.genres.include? genre
m.genres << genre
end
end
end