acts-as-messageable 0.4.11 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.dockerignore +1 -0
- data/.rubocop.yml +19 -0
- data/.rubocop_todo.yml +33 -0
- data/.travis.yml +40 -4
- data/Appraisals +24 -11
- data/Dockerfile +13 -0
- data/Gemfile +11 -4
- data/Gemfile.lock +94 -63
- data/README.md +30 -12
- data/Rakefile +4 -0
- data/VERSION +1 -1
- data/acts-as-messageable.gemspec +62 -49
- data/docker-compose.yml +73 -0
- data/gemfiles/rails_3.2.gemfile +17 -10
- data/gemfiles/rails_4.2.gemfile +24 -0
- data/gemfiles/rails_5.2.gemfile +17 -10
- data/gemfiles/rails_6.0.gemfile +17 -10
- data/gemfiles/rails_master.gemfile +23 -0
- data/lib/acts-as-messageable.rb +2 -17
- data/lib/acts_as_messageable.rb +23 -0
- data/lib/{acts-as-messageable → acts_as_messageable}/message.rb +25 -8
- data/lib/{acts-as-messageable → acts_as_messageable}/model.rb +27 -30
- data/lib/{acts-as-messageable → acts_as_messageable}/rails3.rb +7 -5
- data/lib/{acts-as-messageable → acts_as_messageable}/rails4.rb +8 -4
- data/lib/acts_as_messageable/rails6.rb +31 -0
- data/lib/acts_as_messageable/railtie.rb +11 -0
- data/lib/{acts-as-messageable → acts_as_messageable}/relation.rb +4 -2
- data/lib/{acts-as-messageable → acts_as_messageable}/scopes.rb +16 -12
- data/lib/generators/{acts-as-messageable → acts_as_messageable}/migration/migration_generator.rb +16 -2
- data/lib/generators/{acts-as-messageable → acts_as_messageable}/migration/templates/migration.rb +3 -3
- data/lib/generators/acts_as_messageable/migration/templates/migration_indexes.rb +11 -0
- data/lib/generators/acts_as_messageable/migration/templates/migration_opened_as_datetime.rb +15 -0
- data/lib/generators/{acts-as-messageable → acts_as_messageable}/migration/templates/migration_permanent.rb +1 -1
- data/spec/{acts-as-messageable_spec.rb → acts_as_messageable_spec.rb} +77 -5
- data/spec/{custom-class_spec.rb → custom_class_spec.rb} +14 -5
- data/spec/{custom-required_spec.rb → custom_required_spec.rb} +3 -1
- data/spec/{group-messages_spec.rb → group_messages_spec.rb} +4 -2
- data/spec/migrations_spec.rb +75 -0
- data/spec/spec_helper.rb +30 -37
- data/spec/support/admin.rb +2 -0
- data/spec/support/custom_message.rb +5 -0
- data/spec/support/custom_message_uuid.rb +5 -0
- data/spec/support/custom_search_user.rb +5 -0
- data/spec/support/men.rb +6 -0
- data/spec/support/send_message.rb +2 -0
- data/spec/support/table_schema.rb +35 -0
- data/spec/support/user.rb +2 -3
- data/spec/support/uuid_user.rb +6 -0
- metadata +113 -31
- data/gemfiles/rails_3.2.gemfile.lock +0 -153
- data/gemfiles/rails_4.2.11.gemfile +0 -16
- data/gemfiles/rails_4.2.11.gemfile.lock +0 -157
- data/gemfiles/rails_5.2.gemfile.lock +0 -155
- data/gemfiles/rails_6.0.gemfile.lock +0 -155
- data/lib/acts-as-messageable/railtie.rb +0 -13
data/lib/generators/{acts-as-messageable → acts_as_messageable}/migration/templates/migration.rb
RENAMED
@@ -1,10 +1,10 @@
|
|
1
|
-
class CreateMessagesTable < ActiveRecord::Migration
|
1
|
+
class CreateMessagesTable < ActiveRecord::Migration[4.2]
|
2
2
|
def self.up
|
3
3
|
create_table :<%= table_name %> do |t|
|
4
4
|
t.string :topic
|
5
5
|
t.text :body
|
6
|
-
t.references :received_messageable, :polymorphic => true
|
7
|
-
t.references :sent_messageable, :polymorphic => true
|
6
|
+
t.references :received_messageable, :polymorphic => true, :type => :<%= options[:uuid] ? 'uuid' : 'bigint' %>
|
7
|
+
t.references :sent_messageable, :polymorphic => true, :type => :<%= options[:uuid] ? 'uuid' : 'bigint' %>
|
8
8
|
t.boolean :opened, :default => false
|
9
9
|
t.boolean :recipient_delete, :default => false
|
10
10
|
t.boolean :sender_delete, :default => false
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class AddIndexesToMessages < ActiveRecord::Migration[4.2]
|
2
|
+
def self.up
|
3
|
+
add_index :<%= table_name %>, [:sent_messageable_id, :sent_messageable_type], :name => "acts_as_messageable_sent"
|
4
|
+
add_index :<%= table_name %>, [:received_messageable_id, :received_messageable_type], :name => "acts_as_messageable_received"
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.down
|
8
|
+
remove_index :<%= table_name %>, :name => "acts_as_messageable_sent"
|
9
|
+
remove_index :<%= table_name %>, :name => "acts_as_messageable_received"
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class AddOpenedAtToMessages < ActiveRecord::Migration[4.2]
|
2
|
+
class MigrationMessage < ActiveRecord::Base
|
3
|
+
self.table_name = :<%= table_name %>
|
4
|
+
end
|
5
|
+
|
6
|
+
def self.up
|
7
|
+
add_column :<%= table_name %>, :opened_at, :datetime
|
8
|
+
MigrationMessage.where(opened: true).update_all(opened_at: DateTime.now)
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.down
|
12
|
+
MigrationMessage.where('opened_at is not null').update_all(opened: true)
|
13
|
+
remove_column :<%= table_name %>, :opened_at
|
14
|
+
end
|
15
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class AddRecipientPermanentDeleteAndSenderPermanentDeleteToMessages < ActiveRecord::Migration
|
1
|
+
class AddRecipientPermanentDeleteAndSenderPermanentDeleteToMessages < ActiveRecord::Migration[4.2]
|
2
2
|
def self.up
|
3
3
|
add_column :<%= table_name %>, :recipient_permanent_delete, :boolean, :default => false
|
4
4
|
add_column :<%= table_name %>, :sender_permanent_delete, :boolean, :default => false
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe 'ActsAsMessageable' do
|
@@ -70,14 +72,14 @@ describe 'ActsAsMessageable' do
|
|
70
72
|
end
|
71
73
|
|
72
74
|
it 'alice should be able to reply to a message from bob to alice' do
|
73
|
-
@reply_message =
|
75
|
+
@reply_message = @alice.reply_to(@message, 'Re: Topic', 'Body')
|
74
76
|
expect(@reply_message).not_to be_nil
|
75
77
|
expect(@bob.messages.are_from(@alice).count).to eq(1)
|
76
78
|
expect(@alice.sent_messages.are_to(@bob).count).to eq(1)
|
77
79
|
end
|
78
80
|
|
79
81
|
it 'alice should be able to reply to a message using the message object' do
|
80
|
-
@reply_message =
|
82
|
+
@reply_message = @message.reply('Re: Topic', 'Body')
|
81
83
|
expect(@reply_message).not_to be_nil
|
82
84
|
expect(@bob.messages.are_from(@alice).count).to eq(1)
|
83
85
|
expect(@alice.sent_messages.are_to(@bob).count).to eq(1)
|
@@ -85,13 +87,13 @@ describe 'ActsAsMessageable' do
|
|
85
87
|
|
86
88
|
it 'bob try to add something to conversation' do
|
87
89
|
@reply_message = @bob.reply_to(@message, 'Oh, I Forget', '1+1=2')
|
88
|
-
expect(@reply_message.from).to
|
89
|
-
expect(@reply_message.to).to
|
90
|
+
expect(@reply_message.from).to eq(@message.from)
|
91
|
+
expect(@reply_message.to).to eq(@message.to)
|
90
92
|
end
|
91
93
|
|
92
94
|
it 'bob try to add something to conversation and should receive proper order' do
|
93
95
|
@reply_message = @bob.reply_to(@message, 'Oh, I Forget', '1+1=2')
|
94
|
-
@sec_message
|
96
|
+
@sec_message = @alice.reply_to(@message, 'Yeah, right', '1+1=3!')
|
95
97
|
|
96
98
|
expect(@message.conversation).to eq([@sec_message, @reply_message, @message])
|
97
99
|
end
|
@@ -148,6 +150,12 @@ describe 'ActsAsMessageable' do
|
|
148
150
|
expect(@alice.received_messages.count).to eq(1)
|
149
151
|
end
|
150
152
|
|
153
|
+
it 'bob should be able to restore message' do
|
154
|
+
@bob.sent_messages.process(&:delete)
|
155
|
+
@bob.restore_message(@message.reload)
|
156
|
+
expect(@bob.sent_messages.count).to eq(1)
|
157
|
+
end
|
158
|
+
|
151
159
|
it 'should works with relation' do
|
152
160
|
@alice.received_messages.process(&:delete)
|
153
161
|
expect(@alice.received_messages.count).to eq(0)
|
@@ -164,6 +172,7 @@ describe 'ActsAsMessageable' do
|
|
164
172
|
it 'alice should have one unread message from bob' do
|
165
173
|
expect(@alice.messages.are_from(@bob).unreaded.count).to eq(1)
|
166
174
|
expect(@alice.messages.are_from(@bob).readed.count).to eq(0)
|
175
|
+
expect(@alice.messages.are_from(@bob).readed.all?(&:open?)).to be_truthy
|
167
176
|
end
|
168
177
|
|
169
178
|
it 'alice should able to read message from bob' do
|
@@ -177,11 +186,33 @@ describe 'ActsAsMessageable' do
|
|
177
186
|
expect(@alice.messages.are_from(@bob).unreaded.count).to eq(1)
|
178
187
|
end
|
179
188
|
|
189
|
+
it 'alice should see the read_at updated' do
|
190
|
+
date_time_when_read = Time.new(2014, 9, 4, 15, 12, 34)
|
191
|
+
Timecop.freeze(date_time_when_read) do
|
192
|
+
@alice.messages.are_from(@bob).first.read
|
193
|
+
first_message = @alice.messages.are_from(@bob).first
|
194
|
+
expect(first_message.opened_at).to eql(date_time_when_read)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
180
198
|
it 'alice should able to get datetime when he read bob message' do
|
181
199
|
@alice.messages.are_from(@bob).first.read
|
182
200
|
read_datetime = @alice.messages.are_from(@bob).first.updated_at
|
183
201
|
expect(@alice.messages.are_from(@bob).reorder('updated_at asc').first.updated_at).to eq(read_datetime)
|
184
202
|
end
|
203
|
+
|
204
|
+
describe '#open?' do
|
205
|
+
let(:message) { @alice.messages.are_from(@bob).first }
|
206
|
+
|
207
|
+
it 'returns false for closed message' do
|
208
|
+
expect(message.open?).to be_falsey
|
209
|
+
end
|
210
|
+
|
211
|
+
it 'returns true for open message' do
|
212
|
+
message.read
|
213
|
+
expect(message.open?).to be_truthy
|
214
|
+
end
|
215
|
+
end
|
185
216
|
end
|
186
217
|
|
187
218
|
it 'finds proper message' do
|
@@ -268,6 +299,10 @@ describe 'ActsAsMessageable' do
|
|
268
299
|
expect(@bob.sent_messages.loaded?).to be_falsey
|
269
300
|
end
|
270
301
|
|
302
|
+
it 'sent_messages should return unloaded messages' do
|
303
|
+
expect(@bob.sent_messages.loaded?).to be_falsey
|
304
|
+
end
|
305
|
+
|
271
306
|
describe 'send messages between two different models (the same id)' do
|
272
307
|
it 'should have the same id' do
|
273
308
|
expect(@alice.id).to be_equal(@admin.id)
|
@@ -285,4 +320,41 @@ describe 'ActsAsMessageable' do
|
|
285
320
|
expect(@bob.messages.are_from(@alice).size).to be_equal(0)
|
286
321
|
end
|
287
322
|
end
|
323
|
+
|
324
|
+
describe 'mass assigment', rails: 4 do
|
325
|
+
it 'allows to mass assign topic and body attributes' do
|
326
|
+
@message = send_message(@bob, @alice, 'Example', 'Example Body')
|
327
|
+
@message.update_attributes!(topic: 'Changed topic', body: 'Changed body')
|
328
|
+
|
329
|
+
expect(@message.topic).to eq('Changed topic')
|
330
|
+
expect(@message.body).to eq('Changed body')
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
334
|
+
describe 'ancestry initialization' do # GH#78
|
335
|
+
let(:message) { ActsAsMessageable::Message.create!(topic: 'topic', body: 'body') }
|
336
|
+
|
337
|
+
before do
|
338
|
+
# Use clean version of Message class
|
339
|
+
ActsAsMessageable.instance_eval { remove_const 'Message' }
|
340
|
+
load 'acts_as_messageable/message.rb'
|
341
|
+
end
|
342
|
+
|
343
|
+
it 'returns root of the conversation' do
|
344
|
+
expect(message.conversation).to include(message)
|
345
|
+
end
|
346
|
+
end
|
347
|
+
|
348
|
+
describe 'user primary key is uuid type', rails: [5, 6] do # GH#107
|
349
|
+
let(:bob) { UuidUser.create(id: SecureRandom.uuid, email: 'bob@example.com') }
|
350
|
+
let(:alice) { UuidUser.create(id: SecureRandom.uuid, email: 'alice@example.com') }
|
351
|
+
|
352
|
+
before do
|
353
|
+
bob.send_message(alice, 'Subject', 'Body')
|
354
|
+
end
|
355
|
+
|
356
|
+
it 'returns messages for alice' do
|
357
|
+
expect(alice.messages).not_to be_empty
|
358
|
+
end
|
359
|
+
end
|
288
360
|
end
|
@@ -1,12 +1,11 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
def custom_method; end
|
5
|
-
end
|
3
|
+
require 'spec_helper'
|
6
4
|
|
7
5
|
describe 'custom class' do
|
8
6
|
let(:alice) { User.find_by_email('alice@example.com') }
|
9
|
-
let(:bob)
|
7
|
+
let(:bob) { User.find_by_email('bob@example.com') }
|
8
|
+
let(:custom_user) { CustomSearchUser.find_by_email('custom@example.com') }
|
10
9
|
|
11
10
|
before do
|
12
11
|
User.acts_as_messageable class_name: 'CustomMessage', table_name: 'custom_messages'
|
@@ -36,4 +35,14 @@ describe 'custom class' do
|
|
36
35
|
expect(@reply_message.root).to eq(@message)
|
37
36
|
expect(@reply_message.root.class).to eq(CustomMessage)
|
38
37
|
end
|
38
|
+
|
39
|
+
context 'with custom search scope' do
|
40
|
+
before do
|
41
|
+
send_message(custom_user, bob, 'Test subject', 'Test body')
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'will use custom search scope' do
|
45
|
+
expect(custom_user.messages.custom_search('Test body').count).to eq(1)
|
46
|
+
end
|
47
|
+
end
|
39
48
|
end
|
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe 'custom require' do
|
4
6
|
before(:each) do
|
5
7
|
# Use clean version of Message class
|
6
8
|
ActsAsMessageable.instance_eval { remove_const 'Message' }
|
7
|
-
load '
|
9
|
+
load 'acts_as_messageable/message.rb'
|
8
10
|
end
|
9
11
|
|
10
12
|
it 'should work with non-array require' do
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
describe 'group messages' do
|
4
6
|
let(:alice) { User.find_by_email('alice@example.com') }
|
5
|
-
let(:bob)
|
6
|
-
let(:pat)
|
7
|
+
let(:bob) { User.find_by_email('bob@example.com') }
|
8
|
+
let(:pat) { User.find_by_email('pat@example.com') }
|
7
9
|
|
8
10
|
before do
|
9
11
|
User.acts_as_messageable group_messages: true
|
@@ -0,0 +1,75 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
def create_dummy_app
|
6
|
+
system <<-COMMAND
|
7
|
+
bundle exec rails new dummy --skip-test-unit --skip-spring --skip-webpack-install --skip-bootsnap \
|
8
|
+
--skip-active-storage --skip-active-job -d sqlite3
|
9
|
+
COMMAND
|
10
|
+
end
|
11
|
+
|
12
|
+
def add_gem_to_gemfile
|
13
|
+
run_in_app("echo gem \"'acts-as-messageable', path: '../'\" >> Gemfile; bundle")
|
14
|
+
end
|
15
|
+
|
16
|
+
def run_bundler
|
17
|
+
run_in_app('bundle update')
|
18
|
+
end
|
19
|
+
|
20
|
+
def run_generators(option = '')
|
21
|
+
run_in_app("bundle exec rails g acts_as_messageable:migration #{option}")
|
22
|
+
end
|
23
|
+
|
24
|
+
def run_migrations
|
25
|
+
run_in_app('bundle exec rake db:migrate')
|
26
|
+
end
|
27
|
+
|
28
|
+
def rollback_migrations
|
29
|
+
run_in_app('bundle exec rake db:migrate VERSION=0')
|
30
|
+
end
|
31
|
+
|
32
|
+
def run_in_app(command)
|
33
|
+
Bundler.clean_system("cd dummy; BUNDLE_GEMFILE=./Gemfile #{command}")
|
34
|
+
end
|
35
|
+
|
36
|
+
def remove_dummy_app
|
37
|
+
system 'rm -rf dummy'
|
38
|
+
end
|
39
|
+
|
40
|
+
def skip_generators?
|
41
|
+
ENV.fetch('RUN_GENERATORS', 'false') == 'false'
|
42
|
+
end
|
43
|
+
|
44
|
+
describe 'migration' do
|
45
|
+
before do
|
46
|
+
create_dummy_app
|
47
|
+
add_gem_to_gemfile
|
48
|
+
run_bundler
|
49
|
+
end
|
50
|
+
|
51
|
+
after do
|
52
|
+
remove_dummy_app
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'runs migrations and revert them', skip: skip_generators? do
|
56
|
+
run_generators
|
57
|
+
|
58
|
+
expect(run_migrations).to be_truthy
|
59
|
+
expect(rollback_migrations).to be_truthy
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'runs migrations and revert them with uuid option', skip: skip_generators? do
|
63
|
+
run_generators('--uuid')
|
64
|
+
|
65
|
+
expect(run_migrations).to be_truthy
|
66
|
+
expect(rollback_migrations).to be_truthy
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'runs migrations and revert them with uuid option and custom table', skip: skip_generators? do
|
70
|
+
run_generators('my_messages --uuid')
|
71
|
+
|
72
|
+
expect(run_migrations).to be_truthy
|
73
|
+
expect(rollback_migrations).to be_truthy
|
74
|
+
end
|
75
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
4
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
5
|
require 'rspec'
|
@@ -8,25 +10,32 @@ ActiveRecord::Base.logger.level = 3
|
|
8
10
|
require 'coveralls'
|
9
11
|
Coveralls.wear!
|
10
12
|
|
13
|
+
require 'timecop'
|
14
|
+
|
11
15
|
require 'bundler/setup'
|
12
16
|
Bundler.require(:default)
|
13
17
|
|
18
|
+
require 'pry'
|
14
19
|
require 'acts-as-messageable'
|
15
20
|
|
16
|
-
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
21
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].sort.each { |f| require f }
|
17
22
|
|
18
23
|
ActiveRecord::Migration.verbose = false
|
19
24
|
|
20
25
|
RSpec.configure do |config|
|
21
26
|
config.before(:all) do
|
22
|
-
ActiveRecord::Base.establish_connection(
|
27
|
+
ActiveRecord::Base.establish_connection(
|
28
|
+
adapter: ENV.fetch('DATABASE_ADAPTER', 'sqlite3'),
|
29
|
+
database: ENV.fetch('DATABASE_NAME', ':memory:')
|
30
|
+
)
|
23
31
|
create_database
|
24
32
|
|
25
|
-
@alice = User.create
|
26
|
-
@bob
|
27
|
-
@pat
|
33
|
+
@alice = User.create email: 'alice@example.com'
|
34
|
+
@bob = User.create email: 'bob@example.com'
|
35
|
+
@pat = User.create email: 'pat@example.com'
|
28
36
|
@admin = Admin.create email: 'admin@example.com'
|
29
|
-
@men
|
37
|
+
@men = Men.create email: 'men@example.com'
|
38
|
+
@custom_search_user = CustomSearchUser.create email: 'custom@example.com'
|
30
39
|
end
|
31
40
|
|
32
41
|
config.after(:all) do
|
@@ -36,44 +45,28 @@ RSpec.configure do |config|
|
|
36
45
|
config.after(:each) do
|
37
46
|
User.messages_class_name.destroy_all
|
38
47
|
end
|
48
|
+
|
49
|
+
config.around(:each) do |example|
|
50
|
+
supported_rails = Array.wrap(example.metadata[:rails]).presence || [3, 4, 5, 6]
|
51
|
+
|
52
|
+
example.run if supported_rails.include?(Rails::VERSION::MAJOR)
|
53
|
+
end
|
39
54
|
end
|
40
55
|
|
41
56
|
def create_database
|
42
57
|
ActiveRecord::Schema.define(version: 1) do
|
43
|
-
|
44
|
-
|
45
|
-
t.text :body
|
46
|
-
t.references :received_messageable, polymorphic: true, index: false
|
47
|
-
t.references :sent_messageable, polymorphic: true, index: false
|
48
|
-
t.boolean :opened, default: false
|
49
|
-
t.boolean :recipient_delete, default: false
|
50
|
-
t.boolean :sender_delete, default: false
|
51
|
-
t.boolean :recipient_permanent_delete, default: false
|
52
|
-
t.boolean :sender_permanent_delete, default: false
|
53
|
-
t.string :ancestry
|
54
|
-
t.timestamps
|
58
|
+
if ENV.fetch('DATABASE_ADAPTER', '') == 'postgresql'
|
59
|
+
enable_extension 'pgcrypto' unless extension_enabled?('pgcrypto')
|
55
60
|
end
|
56
61
|
|
57
|
-
create_table
|
58
|
-
|
59
|
-
|
60
|
-
t.references :received_messageable, polymorphic: true, index: false
|
61
|
-
t.references :sent_messageable, polymorphic: true, index: false
|
62
|
-
t.boolean :opened, default: false
|
63
|
-
t.boolean :recipient_delete, default: false
|
64
|
-
t.boolean :sender_delete, default: false
|
65
|
-
t.boolean :recipient_permanent_delete, default: false
|
66
|
-
t.boolean :sender_permanent_delete, default: false
|
67
|
-
t.string :ancestry
|
68
|
-
t.timestamps
|
69
|
-
end
|
70
|
-
create_table :users do |t|
|
71
|
-
t.string :email
|
72
|
-
end
|
62
|
+
create_table(:messages, &TABLE_SCHEMA)
|
63
|
+
create_table(:custom_messages, &TABLE_SCHEMA)
|
64
|
+
create_table(:custom_messages_uuid, &TABLE_SCHEMA_UUID)
|
73
65
|
|
74
|
-
create_table
|
75
|
-
|
76
|
-
|
66
|
+
create_table(:users, &USER_SCHEMA)
|
67
|
+
create_table(:admins, &USER_SCHEMA)
|
68
|
+
create_table(:custom_search_users, &USER_SCHEMA)
|
69
|
+
create_table(:uuid_users, id: :uuid, &USER_SCHEMA)
|
77
70
|
end
|
78
71
|
end
|
79
72
|
|
data/spec/support/admin.rb
CHANGED