message_train 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/.rspec +1 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/.travis.yml +7 -0
- data/Gemfile +51 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +83 -0
- data/Rakefile +71 -0
- data/VERSION +1 -0
- data/app/assets/javascripts/message_train.js +138 -0
- data/app/assets/stylesheets/message_train.scss +107 -0
- data/app/controllers/message_train/application_controller.rb +64 -0
- data/app/controllers/message_train/boxes_controller.rb +37 -0
- data/app/controllers/message_train/conversations_controller.rb +38 -0
- data/app/controllers/message_train/messages_controller.rb +74 -0
- data/app/controllers/message_train/participants_controller.rb +36 -0
- data/app/helpers/message_train/application_helper.rb +4 -0
- data/app/helpers/message_train/boxes_helper.rb +30 -0
- data/app/helpers/message_train/conversations_helper.rb +73 -0
- data/app/helpers/message_train/messages_helper.rb +58 -0
- data/app/models/message_train/attachment.rb +17 -0
- data/app/models/message_train/box.rb +268 -0
- data/app/models/message_train/conversation.rb +101 -0
- data/app/models/message_train/ignore.rb +18 -0
- data/app/models/message_train/message.rb +146 -0
- data/app/models/message_train/receipt.rb +70 -0
- data/app/views/application/404.html.haml +3 -0
- data/app/views/message_train/application/results.json.jbuilder +8 -0
- data/app/views/message_train/boxes/_dropdown_list.html.haml +5 -0
- data/app/views/message_train/boxes/_list_item.html.haml +5 -0
- data/app/views/message_train/boxes/_widget.html.haml +6 -0
- data/app/views/message_train/boxes/show.html.haml +47 -0
- data/app/views/message_train/conversations/_conversation.html.haml +9 -0
- data/app/views/message_train/conversations/_deleted_toggle.html.haml +1 -0
- data/app/views/message_train/conversations/_ignored_toggle.html.haml +4 -0
- data/app/views/message_train/conversations/_read_toggle.html.haml +4 -0
- data/app/views/message_train/conversations/_toggle.html.haml +1 -0
- data/app/views/message_train/conversations/_trashed_toggle.html.haml +4 -0
- data/app/views/message_train/conversations/show.html.haml +11 -0
- data/app/views/message_train/conversations/show.json.jbuilder +2 -0
- data/app/views/message_train/messages/_deleted_toggle.html.haml +1 -0
- data/app/views/message_train/messages/_form.html.haml +8 -0
- data/app/views/message_train/messages/_message.html.haml +35 -0
- data/app/views/message_train/messages/_read_toggle.html.haml +4 -0
- data/app/views/message_train/messages/_toggle.html.haml +1 -0
- data/app/views/message_train/messages/_trashed_toggle.html.haml +4 -0
- data/app/views/message_train/messages/edit.html.haml +2 -0
- data/app/views/message_train/messages/new.html.haml +2 -0
- data/app/views/message_train/messages/show.json.jbuilder +2 -0
- data/app/views/message_train/participants/_field.html.haml +4 -0
- data/app/views/message_train/participants/_participant.json.jbuilder +5 -0
- data/app/views/message_train/participants/index.json.jbuilder +3 -0
- data/app/views/message_train/participants/show.json.jbuilder +1 -0
- data/bin/rails +12 -0
- data/config/initializers/bootstrap_pager_config.rb +10 -0
- data/config/initializers/date_time.rb +5 -0
- data/config/locales/en.yml +50 -0
- data/config/routes.rb +11 -0
- data/db/migrate/20150721145319_create_message_train_conversations.rb +9 -0
- data/db/migrate/20150721160322_create_message_train_messages.rb +14 -0
- data/db/migrate/20150721161144_create_message_train_attachments.rb +10 -0
- data/db/migrate/20150721161940_create_message_train_receipts.rb +16 -0
- data/db/migrate/20150721163838_create_message_train_ignores.rb +11 -0
- data/lib/generators/message_train/install/install_generator.rb +30 -0
- data/lib/generators/message_train/install/templates/initializer.rb +10 -0
- data/lib/generators/message_train/utils.rb +16 -0
- data/lib/message_train/configuration.rb +35 -0
- data/lib/message_train/engine.rb +19 -0
- data/lib/message_train/localization.rb +31 -0
- data/lib/message_train/mixin.rb +83 -0
- data/lib/message_train/version.rb +7 -0
- data/lib/message_train.rb +20 -0
- data/lib/tasks/message_train_tasks.rake +0 -0
- data/message_train.gemspec +325 -0
- data/night_train.gemspec +274 -0
- data/spec/controllers/message_train/boxes_controller_spec.rb +82 -0
- data/spec/controllers/message_train/conversations_controller_spec.rb +86 -0
- data/spec/controllers/message_train/messages_controller_spec.rb +210 -0
- data/spec/controllers/message_train/participants_controller_spec.rb +35 -0
- data/spec/dummy/.rspec +2 -0
- data/spec/dummy/Rakefile +6 -0
- data/spec/dummy/app/assets/files/message_train/attachments/1917-Boys_Race_Above-Wiki.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/ACD_Silverbarn's_Mayumi.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/ACD_obedience.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/A_Man_and_His_Dog.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Alaskan_Malamute_agility_a-frame.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/American_water_spaniel_02.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Aport_konkurs_rybnik.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Askerhytta.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Bambisj.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Cattle_dog_skating.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Dog's_Olympics_training_ground_-_geograph.org.uk_-_660324.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/DogShowHierarchy.png +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Dog_weight_pull.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Draghuntpostcard.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Esham_51.JPG +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/FastCourseExample.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Fotos_joel_141.JPG +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Galgo_Spanish_male_brindle.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Golden-retriever-carlos-bei-der-dummyarbeit.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Habavk.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Haie_rci.svg +1714 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Hanging_18.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/Hundewa.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/K9ProSports_AttackOnHandler.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/K9ProSports_heel.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/K9Pro_Civil_agitation.JPG +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/TrainingSchutzhundRetrieveOverWall.jpg +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/example.pdf +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/letterlegal5.doc +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/pdf-sample.pdf +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/sample.pdf +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/tips.doc +0 -0
- data/spec/dummy/app/assets/files/message_train/attachments/wd-spectools-word-sample-04.doc +0 -0
- data/spec/dummy/app/assets/images/logo.svg +140 -0
- data/spec/dummy/app/assets/javascripts/application.js +17 -0
- data/spec/dummy/app/assets/stylesheets/application.css.scss +35 -0
- data/spec/dummy/app/controllers/application_controller.rb +14 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/spec/dummy/app/models/group.rb +19 -0
- data/spec/dummy/app/models/role.rb +10 -0
- data/spec/dummy/app/models/user.rb +23 -0
- data/spec/dummy/app/views/layouts/_top_navigation.html.haml +5 -0
- data/spec/dummy/app/views/layouts/application.html.haml +29 -0
- data/spec/dummy/bin/bundle +3 -0
- data/spec/dummy/bin/rails +4 -0
- data/spec/dummy/bin/rake +4 -0
- data/spec/dummy/bin/setup +29 -0
- data/spec/dummy/config/application.rb +40 -0
- data/spec/dummy/config/boot.rb +5 -0
- data/spec/dummy/config/database.yml +25 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +41 -0
- data/spec/dummy/config/environments/production.rb +79 -0
- data/spec/dummy/config/environments/test.rb +42 -0
- data/spec/dummy/config/initializers/assets.rb +11 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/bootstrap_leather.rb +7 -0
- data/spec/dummy/config/initializers/cookies_serializer.rb +3 -0
- data/spec/dummy/config/initializers/devise.rb +265 -0
- data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
- data/spec/dummy/config/initializers/inflections.rb +16 -0
- data/spec/dummy/config/initializers/message_train.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +4 -0
- data/spec/dummy/config/initializers/paperclip.rb +2 -0
- data/spec/dummy/config/initializers/rolify.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +3 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/devise.en.yml +60 -0
- data/spec/dummy/config/locales/en.yml +23 -0
- data/spec/dummy/config/routes.rb +5 -0
- data/spec/dummy/config/secrets.yml +22 -0
- data/spec/dummy/config/unused/temporary_i18n_debugging.rb +12 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/db/migrate/20150721140013_devise_create_users.rb +42 -0
- data/spec/dummy/db/migrate/20150721141009_rolify_create_roles.rb +19 -0
- data/spec/dummy/db/migrate/20150721141128_create_groups.rb +11 -0
- data/spec/dummy/db/migrate/20150721150307_add_display_name_column_to_users.rb +6 -0
- data/spec/dummy/db/migrate/20150724142846_create_message_train_conversations.night_train.rb +10 -0
- data/spec/dummy/db/migrate/20150724142847_create_message_train_messages.night_train.rb +15 -0
- data/spec/dummy/db/migrate/20150724142848_create_message_train_attachments.night_train.rb +11 -0
- data/spec/dummy/db/migrate/20150724142849_create_message_train_receipts.night_train.rb +17 -0
- data/spec/dummy/db/migrate/20150724142850_create_message_train_ignores.night_train.rb +12 -0
- data/spec/dummy/db/schema.rb +121 -0
- data/spec/dummy/db/seeds/conversations.seeds.rb +86 -0
- data/spec/dummy/db/seeds/development/conversations.seeds.rb +9 -0
- data/spec/dummy/db/seeds/groups.seeds.rb +9 -0
- data/spec/dummy/db/seeds/test/conversations.seeds.rb +9 -0
- data/spec/dummy/db/seeds/users.seeds.rb +15 -0
- data/spec/dummy/db/seeds.rb +0 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/log/.keep +0 -0
- data/spec/dummy/public/404.html +67 -0
- data/spec/dummy/public/422.html +67 -0
- data/spec/dummy/public/500.html +66 -0
- data/spec/dummy/public/capybara.html +193 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/factories/attachment.rb +6 -0
- data/spec/factories/group.rb +20 -0
- data/spec/factories/message.rb +68 -0
- data/spec/factories/user.rb +8 -0
- data/spec/features/boxes_spec.rb +50 -0
- data/spec/features/conversations_spec.rb +36 -0
- data/spec/features/messages_spec.rb +53 -0
- data/spec/helpers/message_train/boxes_helper_spec.rb +44 -0
- data/spec/message_train_spec.rb +7 -0
- data/spec/models/group_spec.rb +23 -0
- data/spec/models/message_train/attachment_spec.rb +12 -0
- data/spec/models/message_train/box_spec.rb +195 -0
- data/spec/models/message_train/conversation_spec.rb +98 -0
- data/spec/models/message_train/ignore_spec.rb +27 -0
- data/spec/models/message_train/message_spec.rb +83 -0
- data/spec/models/message_train/receipt_spec.rb +73 -0
- data/spec/models/user_spec.rb +68 -0
- data/spec/rails_helper.rb +83 -0
- data/spec/spec_helper.rb +92 -0
- data/spec/support/controller_behaviors.rb +88 -0
- data/spec/support/controller_macros.rb +13 -0
- data/spec/support/conversations.rb +10 -0
- data/spec/support/factory_girl.rb +3 -0
- data/spec/support/feature_behaviors.rb +62 -0
- data/spec/support/groups.rb +3 -0
- data/spec/support/loaded_site.rb +5 -0
- data/spec/support/shared_connection.rb +13 -0
- data/spec/support/users.rb +6 -0
- data/spec/support/utilities.rb +8 -0
- data/vendor/assets/javascripts/bootstrap-tags.js +623 -0
- data/vendor/assets/stylesheets/bootstrap-tags.css +78 -0
- metadata +608 -0
@@ -0,0 +1,121 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
# This file is auto-generated from the current state of the database. Instead
|
3
|
+
# of editing this file, please use the migrations feature of Active Record to
|
4
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
5
|
+
#
|
6
|
+
# Note that this schema.rb definition is the authoritative source for your
|
7
|
+
# database schema. If you need to create the application database on another
|
8
|
+
# system, you should be using db:schema:load, not running all the migrations
|
9
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
10
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
11
|
+
#
|
12
|
+
# It's strongly recommended that you check this file into your version control system.
|
13
|
+
|
14
|
+
ActiveRecord::Schema.define(version: 20150724142850) do
|
15
|
+
|
16
|
+
create_table "groups", force: :cascade do |t|
|
17
|
+
t.string "title"
|
18
|
+
t.string "slug"
|
19
|
+
t.text "description"
|
20
|
+
t.datetime "created_at", null: false
|
21
|
+
t.datetime "updated_at", null: false
|
22
|
+
end
|
23
|
+
|
24
|
+
create_table "message_train_attachments", force: :cascade do |t|
|
25
|
+
t.integer "message_id"
|
26
|
+
t.string "attachment_file_name"
|
27
|
+
t.string "attachment_content_type"
|
28
|
+
t.integer "attachment_file_size"
|
29
|
+
t.datetime "attachment_updated_at"
|
30
|
+
t.datetime "created_at", null: false
|
31
|
+
t.datetime "updated_at", null: false
|
32
|
+
end
|
33
|
+
|
34
|
+
add_index "message_train_attachments", ["message_id"], name: "index_message_train_attachments_on_message_id"
|
35
|
+
|
36
|
+
create_table "message_train_conversations", force: :cascade do |t|
|
37
|
+
t.string "subject"
|
38
|
+
t.datetime "created_at", null: false
|
39
|
+
t.datetime "updated_at", null: false
|
40
|
+
end
|
41
|
+
|
42
|
+
create_table "message_train_ignores", force: :cascade do |t|
|
43
|
+
t.integer "participant_id"
|
44
|
+
t.string "participant_type"
|
45
|
+
t.integer "conversation_id"
|
46
|
+
t.datetime "created_at", null: false
|
47
|
+
t.datetime "updated_at", null: false
|
48
|
+
end
|
49
|
+
|
50
|
+
add_index "message_train_ignores", ["conversation_id"], name: "index_message_train_ignores_on_conversation_id"
|
51
|
+
add_index "message_train_ignores", ["participant_type", "participant_id"], name: "participant_index"
|
52
|
+
|
53
|
+
create_table "message_train_messages", force: :cascade do |t|
|
54
|
+
t.integer "conversation_id"
|
55
|
+
t.integer "sender_id"
|
56
|
+
t.string "sender_type"
|
57
|
+
t.text "recipients_to_save"
|
58
|
+
t.string "subject"
|
59
|
+
t.text "body"
|
60
|
+
t.boolean "draft", default: false
|
61
|
+
t.datetime "created_at", null: false
|
62
|
+
t.datetime "updated_at", null: false
|
63
|
+
end
|
64
|
+
|
65
|
+
add_index "message_train_messages", ["conversation_id"], name: "index_message_train_messages_on_conversation_id"
|
66
|
+
add_index "message_train_messages", ["sender_type", "sender_id"], name: "index_message_train_messages_on_sender_type_and_sender_id"
|
67
|
+
|
68
|
+
create_table "message_train_receipts", force: :cascade do |t|
|
69
|
+
t.integer "recipient_id"
|
70
|
+
t.string "recipient_type"
|
71
|
+
t.integer "message_id"
|
72
|
+
t.boolean "marked_read", default: false
|
73
|
+
t.boolean "marked_trash", default: false
|
74
|
+
t.boolean "marked_deleted", default: false
|
75
|
+
t.boolean "sender", default: false
|
76
|
+
t.datetime "created_at", null: false
|
77
|
+
t.datetime "updated_at", null: false
|
78
|
+
end
|
79
|
+
|
80
|
+
add_index "message_train_receipts", ["message_id"], name: "index_message_train_receipts_on_message_id"
|
81
|
+
add_index "message_train_receipts", ["recipient_type", "recipient_id"], name: "index_message_train_receipts_on_recipient"
|
82
|
+
|
83
|
+
create_table "roles", force: :cascade do |t|
|
84
|
+
t.string "name"
|
85
|
+
t.integer "resource_id"
|
86
|
+
t.string "resource_type"
|
87
|
+
t.datetime "created_at"
|
88
|
+
t.datetime "updated_at"
|
89
|
+
end
|
90
|
+
|
91
|
+
add_index "roles", ["name", "resource_type", "resource_id"], name: "index_roles_on_name_and_resource_type_and_resource_id"
|
92
|
+
add_index "roles", ["name"], name: "index_roles_on_name"
|
93
|
+
|
94
|
+
create_table "users", force: :cascade do |t|
|
95
|
+
t.string "email", default: "", null: false
|
96
|
+
t.string "encrypted_password", default: "", null: false
|
97
|
+
t.string "reset_password_token"
|
98
|
+
t.datetime "reset_password_sent_at"
|
99
|
+
t.datetime "remember_created_at"
|
100
|
+
t.integer "sign_in_count", default: 0, null: false
|
101
|
+
t.datetime "current_sign_in_at"
|
102
|
+
t.datetime "last_sign_in_at"
|
103
|
+
t.string "current_sign_in_ip"
|
104
|
+
t.string "last_sign_in_ip"
|
105
|
+
t.datetime "created_at", null: false
|
106
|
+
t.datetime "updated_at", null: false
|
107
|
+
t.string "display_name"
|
108
|
+
t.string "slug"
|
109
|
+
end
|
110
|
+
|
111
|
+
add_index "users", ["email"], name: "index_users_on_email", unique: true
|
112
|
+
add_index "users", ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
|
113
|
+
|
114
|
+
create_table "users_roles", id: false, force: :cascade do |t|
|
115
|
+
t.integer "user_id"
|
116
|
+
t.integer "role_id"
|
117
|
+
end
|
118
|
+
|
119
|
+
add_index "users_roles", ["user_id", "role_id"], name: "index_users_roles_on_user_id_and_role_id"
|
120
|
+
|
121
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
after :users, :groups do
|
2
|
+
first_user = User.friendly.find('first-user')
|
3
|
+
second_user = User.friendly.find('second-user')
|
4
|
+
third_user = User.friendly.find('third-user')
|
5
|
+
|
6
|
+
first_group = Group.find_by_slug('first-group')
|
7
|
+
|
8
|
+
sent_message = FactoryGirl.create(
|
9
|
+
:simple_message,
|
10
|
+
sender: first_user,
|
11
|
+
recipients_to_save: { 'users' => second_user.slug },
|
12
|
+
subject: 'Sent Conversation'
|
13
|
+
)
|
14
|
+
|
15
|
+
unread_message = FactoryGirl.create(
|
16
|
+
:simple_message,
|
17
|
+
sender: second_user,
|
18
|
+
recipients_to_save: { 'users' => first_user.slug },
|
19
|
+
subject: 'Unread Conversation'
|
20
|
+
)
|
21
|
+
|
22
|
+
ignored_message = FactoryGirl.create(
|
23
|
+
:simple_message,
|
24
|
+
sender: second_user,
|
25
|
+
recipients_to_save: { 'users' => first_user.slug },
|
26
|
+
subject: 'Ignored Conversation'
|
27
|
+
)
|
28
|
+
ignored_message.conversation.set_ignored(first_user)
|
29
|
+
|
30
|
+
trashed_message = FactoryGirl.create(
|
31
|
+
:simple_message,
|
32
|
+
sender: second_user,
|
33
|
+
recipients_to_save: { 'users' => first_user.slug },
|
34
|
+
subject: 'Trashed Conversation'
|
35
|
+
)
|
36
|
+
trashed_message.mark_trash_for(first_user)
|
37
|
+
|
38
|
+
read_message = FactoryGirl.create(
|
39
|
+
:simple_message,
|
40
|
+
sender: second_user,
|
41
|
+
recipients_to_save: { 'users' => first_user.slug },
|
42
|
+
subject: 'Read Conversation'
|
43
|
+
)
|
44
|
+
read_message.mark_read_for(first_user)
|
45
|
+
|
46
|
+
deleted_message = FactoryGirl.create(
|
47
|
+
:simple_message,
|
48
|
+
sender: second_user,
|
49
|
+
recipients_to_save: { 'users' => first_user.slug },
|
50
|
+
subject: 'Deleted Conversation'
|
51
|
+
)
|
52
|
+
deleted_message.mark_deleted_for(first_user)
|
53
|
+
|
54
|
+
group_message = FactoryGirl.create(
|
55
|
+
:simple_message,
|
56
|
+
sender: first_user,
|
57
|
+
recipients_to_save: { 'groups' => first_group.slug },
|
58
|
+
subject: 'Group Message'
|
59
|
+
)
|
60
|
+
|
61
|
+
draft_message = FactoryGirl.create(
|
62
|
+
:simple_message,
|
63
|
+
subject: 'This should turn into a draft',
|
64
|
+
sender: first_user,
|
65
|
+
recipients_to_save: {}
|
66
|
+
)
|
67
|
+
|
68
|
+
someone_elses_message = FactoryGirl.create(
|
69
|
+
:simple_message,
|
70
|
+
subject: "Someone Else's Conversation",
|
71
|
+
sender: User.order(:id).last,
|
72
|
+
recipients_to_save: { 'users' => second_user.slug }
|
73
|
+
)
|
74
|
+
|
75
|
+
long_message = FactoryGirl.create(
|
76
|
+
:simple_message,
|
77
|
+
subject: "Long Conversation",
|
78
|
+
sender: second_user,
|
79
|
+
recipients_to_save: { 'users' => first_user.slug }
|
80
|
+
)
|
81
|
+
FactoryGirl.create_list(:simple_message, 11,
|
82
|
+
conversation: long_message.conversation,
|
83
|
+
sender: second_user,
|
84
|
+
recipients_to_save: { 'users' => first_user.slug }
|
85
|
+
)
|
86
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
after :users, :groups do
|
2
|
+
User.find_each do |user|
|
3
|
+
# Create some conversations that this user has received
|
4
|
+
FactoryGirl.create_list(:message_from_random_sender, [*5..10].sample, recipients_to_save: { 'users' => user.slug })
|
5
|
+
|
6
|
+
# Create some conversations that this user has sent
|
7
|
+
FactoryGirl.create_list(:message, [*5..10].sample, sender: user)
|
8
|
+
end
|
9
|
+
end
|
@@ -0,0 +1,9 @@
|
|
1
|
+
after :users, :groups do
|
2
|
+
first_user = User.friendly.find('first-user')
|
3
|
+
|
4
|
+
# Create some conversations that first user has received
|
5
|
+
FactoryGirl.create_list(:message_from_random_sender, 10, recipients_to_save: { 'users' => first_user.slug })
|
6
|
+
|
7
|
+
# Create some conversations that first user has sent
|
8
|
+
FactoryGirl.create_list(:message, 10, sender: first_user)
|
9
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
first_user = FactoryGirl.create(
|
2
|
+
:user,
|
3
|
+
display_name: 'First User',
|
4
|
+
email: 'first.user@example.com'
|
5
|
+
)
|
6
|
+
second_user = FactoryGirl.create(
|
7
|
+
:user,
|
8
|
+
display_name: 'Second User',
|
9
|
+
email: 'second.user@example.com'
|
10
|
+
)
|
11
|
+
third_user = FactoryGirl.create(
|
12
|
+
:user,
|
13
|
+
display_name: 'Third User',
|
14
|
+
email: 'third.user@example.com'
|
15
|
+
)
|
File without changes
|
Binary file
|
File without changes
|
File without changes
|
@@ -0,0 +1,67 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The page you were looking for doesn't exist (404)</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
<style>
|
7
|
+
body {
|
8
|
+
background-color: #EFEFEF;
|
9
|
+
color: #2E2F30;
|
10
|
+
text-align: center;
|
11
|
+
font-family: arial, sans-serif;
|
12
|
+
margin: 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
div.dialog {
|
16
|
+
width: 95%;
|
17
|
+
max-width: 33em;
|
18
|
+
margin: 4em auto 0;
|
19
|
+
}
|
20
|
+
|
21
|
+
div.dialog > div {
|
22
|
+
border: 1px solid #CCC;
|
23
|
+
border-right-color: #999;
|
24
|
+
border-left-color: #999;
|
25
|
+
border-bottom-color: #BBB;
|
26
|
+
border-top: #B00100 solid 4px;
|
27
|
+
border-top-left-radius: 9px;
|
28
|
+
border-top-right-radius: 9px;
|
29
|
+
background-color: white;
|
30
|
+
padding: 7px 12% 0;
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
32
|
+
}
|
33
|
+
|
34
|
+
h1 {
|
35
|
+
font-size: 100%;
|
36
|
+
color: #730E15;
|
37
|
+
line-height: 1.5em;
|
38
|
+
}
|
39
|
+
|
40
|
+
div.dialog > p {
|
41
|
+
margin: 0 0 1em;
|
42
|
+
padding: 1em;
|
43
|
+
background-color: #F7F7F7;
|
44
|
+
border: 1px solid #CCC;
|
45
|
+
border-right-color: #999;
|
46
|
+
border-left-color: #999;
|
47
|
+
border-bottom-color: #999;
|
48
|
+
border-bottom-left-radius: 4px;
|
49
|
+
border-bottom-right-radius: 4px;
|
50
|
+
border-top-color: #DADADA;
|
51
|
+
color: #666;
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
53
|
+
}
|
54
|
+
</style>
|
55
|
+
</head>
|
56
|
+
|
57
|
+
<body>
|
58
|
+
<!-- This file lives in public/404.html -->
|
59
|
+
<div class="dialog">
|
60
|
+
<div>
|
61
|
+
<h1>The page you were looking for doesn't exist.</h1>
|
62
|
+
<p>You may have mistyped the address or the page may have moved.</p>
|
63
|
+
</div>
|
64
|
+
<p>If you are the application owner check the logs for more information.</p>
|
65
|
+
</div>
|
66
|
+
</body>
|
67
|
+
</html>
|
@@ -0,0 +1,67 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>The change you wanted was rejected (422)</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
<style>
|
7
|
+
body {
|
8
|
+
background-color: #EFEFEF;
|
9
|
+
color: #2E2F30;
|
10
|
+
text-align: center;
|
11
|
+
font-family: arial, sans-serif;
|
12
|
+
margin: 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
div.dialog {
|
16
|
+
width: 95%;
|
17
|
+
max-width: 33em;
|
18
|
+
margin: 4em auto 0;
|
19
|
+
}
|
20
|
+
|
21
|
+
div.dialog > div {
|
22
|
+
border: 1px solid #CCC;
|
23
|
+
border-right-color: #999;
|
24
|
+
border-left-color: #999;
|
25
|
+
border-bottom-color: #BBB;
|
26
|
+
border-top: #B00100 solid 4px;
|
27
|
+
border-top-left-radius: 9px;
|
28
|
+
border-top-right-radius: 9px;
|
29
|
+
background-color: white;
|
30
|
+
padding: 7px 12% 0;
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
32
|
+
}
|
33
|
+
|
34
|
+
h1 {
|
35
|
+
font-size: 100%;
|
36
|
+
color: #730E15;
|
37
|
+
line-height: 1.5em;
|
38
|
+
}
|
39
|
+
|
40
|
+
div.dialog > p {
|
41
|
+
margin: 0 0 1em;
|
42
|
+
padding: 1em;
|
43
|
+
background-color: #F7F7F7;
|
44
|
+
border: 1px solid #CCC;
|
45
|
+
border-right-color: #999;
|
46
|
+
border-left-color: #999;
|
47
|
+
border-bottom-color: #999;
|
48
|
+
border-bottom-left-radius: 4px;
|
49
|
+
border-bottom-right-radius: 4px;
|
50
|
+
border-top-color: #DADADA;
|
51
|
+
color: #666;
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
53
|
+
}
|
54
|
+
</style>
|
55
|
+
</head>
|
56
|
+
|
57
|
+
<body>
|
58
|
+
<!-- This file lives in public/422.html -->
|
59
|
+
<div class="dialog">
|
60
|
+
<div>
|
61
|
+
<h1>The change you wanted was rejected.</h1>
|
62
|
+
<p>Maybe you tried to change something you didn't have access to.</p>
|
63
|
+
</div>
|
64
|
+
<p>If you are the application owner check the logs for more information.</p>
|
65
|
+
</div>
|
66
|
+
</body>
|
67
|
+
</html>
|
@@ -0,0 +1,66 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>We're sorry, but something went wrong (500)</title>
|
5
|
+
<meta name="viewport" content="width=device-width,initial-scale=1">
|
6
|
+
<style>
|
7
|
+
body {
|
8
|
+
background-color: #EFEFEF;
|
9
|
+
color: #2E2F30;
|
10
|
+
text-align: center;
|
11
|
+
font-family: arial, sans-serif;
|
12
|
+
margin: 0;
|
13
|
+
}
|
14
|
+
|
15
|
+
div.dialog {
|
16
|
+
width: 95%;
|
17
|
+
max-width: 33em;
|
18
|
+
margin: 4em auto 0;
|
19
|
+
}
|
20
|
+
|
21
|
+
div.dialog > div {
|
22
|
+
border: 1px solid #CCC;
|
23
|
+
border-right-color: #999;
|
24
|
+
border-left-color: #999;
|
25
|
+
border-bottom-color: #BBB;
|
26
|
+
border-top: #B00100 solid 4px;
|
27
|
+
border-top-left-radius: 9px;
|
28
|
+
border-top-right-radius: 9px;
|
29
|
+
background-color: white;
|
30
|
+
padding: 7px 12% 0;
|
31
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
32
|
+
}
|
33
|
+
|
34
|
+
h1 {
|
35
|
+
font-size: 100%;
|
36
|
+
color: #730E15;
|
37
|
+
line-height: 1.5em;
|
38
|
+
}
|
39
|
+
|
40
|
+
div.dialog > p {
|
41
|
+
margin: 0 0 1em;
|
42
|
+
padding: 1em;
|
43
|
+
background-color: #F7F7F7;
|
44
|
+
border: 1px solid #CCC;
|
45
|
+
border-right-color: #999;
|
46
|
+
border-left-color: #999;
|
47
|
+
border-bottom-color: #999;
|
48
|
+
border-bottom-left-radius: 4px;
|
49
|
+
border-bottom-right-radius: 4px;
|
50
|
+
border-top-color: #DADADA;
|
51
|
+
color: #666;
|
52
|
+
box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
|
53
|
+
}
|
54
|
+
</style>
|
55
|
+
</head>
|
56
|
+
|
57
|
+
<body>
|
58
|
+
<!-- This file lives in public/500.html -->
|
59
|
+
<div class="dialog">
|
60
|
+
<div>
|
61
|
+
<h1>We're sorry, but something went wrong.</h1>
|
62
|
+
</div>
|
63
|
+
<p>If you are the application owner check the logs for more information.</p>
|
64
|
+
</div>
|
65
|
+
</body>
|
66
|
+
</html>
|
@@ -0,0 +1,193 @@
|
|
1
|
+
<html xmlns="http://www.w3.org/1999/xhtml"><head>
|
2
|
+
<title>New Message: Message Train</title>
|
3
|
+
<meta content="rails-4, private-messaging, messaging, engines" name="keywords" />
|
4
|
+
<meta content="rails-4, private-messaging, messaging, engines" name="description" />
|
5
|
+
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
|
6
|
+
<link href="/assets/application.css" media="screen" rel="stylesheet" />
|
7
|
+
|
8
|
+
|
9
|
+
<script src="/assets/application.js"></script>
|
10
|
+
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
<nav class="navbar navbar-default navbar-static-top">
|
14
|
+
<div class="container">
|
15
|
+
<div class="navbar-header">
|
16
|
+
<button type="button" data-toggle="collapse" data-target="#navbar-to-collapse" class="navbar-toggle collapsed">
|
17
|
+
<span class="sr-only">
|
18
|
+
Toggle navigation
|
19
|
+
</span>
|
20
|
+
<span class="icon-bar"></span>
|
21
|
+
<span class="icon-bar"></span>
|
22
|
+
<span class="icon-bar"></span>
|
23
|
+
</button>
|
24
|
+
<a href="/" class="navbar-brand"><img alt="Logo" src="/assets/logo.svg" class="logo" />
|
25
|
+
Message Train
|
26
|
+
</a>
|
27
|
+
</div>
|
28
|
+
<div id="navbar-to-collapse" class="collapse navbar-collapse">
|
29
|
+
<ul class="nav navbar-nav navbar-right">
|
30
|
+
<li class="dropdown ">
|
31
|
+
<a role="button" id="1440294236.5479236" href="#" data-toggle="dropdown" class="dropdown-toggle">
|
32
|
+
Inbox <span class="badge ">
|
33
|
+
15
|
34
|
+
</span>
|
35
|
+
|
36
|
+
<b class="caret"></b>
|
37
|
+
</a>
|
38
|
+
<ul role="menu" class="dropdown-menu" aria-labelledby="1440294236.5479236">
|
39
|
+
<li class="">
|
40
|
+
<a href="/box/in">Inbox <span class="badge badge-info pull-right">
|
41
|
+
15
|
42
|
+
</span>
|
43
|
+
</a>
|
44
|
+
</li>
|
45
|
+
|
46
|
+
<li class="">
|
47
|
+
<a href="/box/sent">Sent Messages <span class="badge badge-info pull-right">
|
48
|
+
12
|
49
|
+
</span>
|
50
|
+
</a>
|
51
|
+
</li>
|
52
|
+
|
53
|
+
<li class="">
|
54
|
+
<a href="/box/all">All Messages <span class="badge badge-info pull-right">
|
55
|
+
22
|
56
|
+
</span>
|
57
|
+
</a>
|
58
|
+
</li>
|
59
|
+
|
60
|
+
<li class="">
|
61
|
+
<a href="/box/drafts">Drafts <span class="badge badge-info pull-right">
|
62
|
+
1
|
63
|
+
</span>
|
64
|
+
</a>
|
65
|
+
</li>
|
66
|
+
|
67
|
+
<li class="">
|
68
|
+
<a href="/box/trash">Trash <span class="badge badge-info pull-right">
|
69
|
+
1
|
70
|
+
</span>
|
71
|
+
</a>
|
72
|
+
</li>
|
73
|
+
|
74
|
+
<li class="">
|
75
|
+
<a href="/box/ignored">Ignored Conversations <span class="badge badge-info pull-right">
|
76
|
+
3
|
77
|
+
</span>
|
78
|
+
</a>
|
79
|
+
</li>
|
80
|
+
|
81
|
+
|
82
|
+
</ul>
|
83
|
+
</li>
|
84
|
+
<li class="active">
|
85
|
+
<a href="/box/in/messages/new">Compose</a>
|
86
|
+
</li>
|
87
|
+
|
88
|
+
|
89
|
+
<li class="">
|
90
|
+
<a href="/users/sign_out" data-method="delete" rel="nofollow">Sign Out</a>
|
91
|
+
</li>
|
92
|
+
|
93
|
+
|
94
|
+
</ul>
|
95
|
+
|
96
|
+
</div>
|
97
|
+
</div>
|
98
|
+
</nav>
|
99
|
+
|
100
|
+
<div class="container">
|
101
|
+
|
102
|
+
<div class="column col-md-3">
|
103
|
+
<div class="well ">
|
104
|
+
<h3>Messages</h3>
|
105
|
+
<div class="text-center"><a href="/box/in/messages/new" class="btn btn-lg btn-primary btn-compose">Compose</a></div>
|
106
|
+
<ul class="list-group">
|
107
|
+
<li class="list-group-item">
|
108
|
+
<a href="/box/in">Inbox</a>
|
109
|
+
<span class="badge ">
|
110
|
+
15
|
111
|
+
</span>
|
112
|
+
|
113
|
+
</li>
|
114
|
+
|
115
|
+
<li class="list-group-item">
|
116
|
+
<a href="/box/sent">Sent Messages</a>
|
117
|
+
<span class="badge ">
|
118
|
+
12
|
119
|
+
</span>
|
120
|
+
|
121
|
+
</li>
|
122
|
+
|
123
|
+
<li class="list-group-item">
|
124
|
+
<a href="/box/all">All Messages</a>
|
125
|
+
<span class="badge ">
|
126
|
+
22
|
127
|
+
</span>
|
128
|
+
|
129
|
+
</li>
|
130
|
+
|
131
|
+
<li class="list-group-item">
|
132
|
+
<a href="/box/drafts">Drafts</a>
|
133
|
+
<span class="badge ">
|
134
|
+
1
|
135
|
+
</span>
|
136
|
+
|
137
|
+
</li>
|
138
|
+
|
139
|
+
<li class="list-group-item">
|
140
|
+
<a href="/box/trash">Trash</a>
|
141
|
+
<span class="badge ">
|
142
|
+
1
|
143
|
+
</span>
|
144
|
+
|
145
|
+
</li>
|
146
|
+
|
147
|
+
<li class="list-group-item">
|
148
|
+
<a href="/box/ignored">Ignored Conversations</a>
|
149
|
+
<span class="badge ">
|
150
|
+
3
|
151
|
+
</span>
|
152
|
+
|
153
|
+
</li>
|
154
|
+
|
155
|
+
</ul>
|
156
|
+
|
157
|
+
|
158
|
+
</div>
|
159
|
+
</div>
|
160
|
+
|
161
|
+
<div class="col-md-9">
|
162
|
+
<h1>New Message</h1>
|
163
|
+
<div id="alert_area">
|
164
|
+
|
165
|
+
</div>
|
166
|
+
<form method="post" accept-charset="UTF-8" action="/box/in/messages" id="new_message" class="new_message" role="form"><input type="hidden" value="✓" name="utf8" /><div class="form-group">
|
167
|
+
<label class="control-label">User Recipients</label>
|
168
|
+
<div id="message_recipients_to_save_users" data-field-name="message[recipients_to_save][users]" class="recipient-input tag-list bootstrap-tags bootstrap-3" style="padding-bottom: 2.6px;">
|
169
|
+
<div class="tag-data"></div>
|
170
|
+
<div class="tags"></div><input type="text" class="form-control tags-input input-lg" placeholder="Comma separated list" style="padding-left: 12px; padding-top: 0px; width: 663px;" /><ul class="tags-suggestion-list dropdown-menu"></ul></div>
|
171
|
+
</div>
|
172
|
+
|
173
|
+
<div class="form-group">
|
174
|
+
<label class="control-label">Group Recipients</label>
|
175
|
+
<div id="message_recipients_to_save_groups" data-field-name="message[recipients_to_save][groups]" class="recipient-input tag-list bootstrap-tags bootstrap-3" style="padding-bottom: 2.6px;">
|
176
|
+
<div class="tag-data"></div>
|
177
|
+
<div class="tags"></div><input type="text" class="form-control tags-input input-lg" placeholder="Comma separated list" style="padding-left: 12px; padding-top: 0px; width: 663px;" /><ul class="tags-suggestion-list dropdown-menu"></ul></div>
|
178
|
+
</div>
|
179
|
+
|
180
|
+
<div class="form-group"><label for="message_subject" class="control-label required">Subject</label><input type="text" id="message_subject" name="message[subject]" class="form-control" /></div>
|
181
|
+
<div class="form-group"><label for="message_body" class="control-label">Body</label><textarea id="message_body" name="message[body]" class="form-control"></textarea></div>
|
182
|
+
<div class="checkbox"><label for="message_draft"><input type="hidden" value="0" name="message[draft]" /><input type="checkbox" id="message_draft" name="message[draft]" value="1" /> Draft</label></div>
|
183
|
+
<input type="submit" class="btn btn-default" value="Send" name="commit" />
|
184
|
+
</form>
|
185
|
+
|
186
|
+
|
187
|
+
</div>
|
188
|
+
</div>
|
189
|
+
<footer></footer>
|
190
|
+
|
191
|
+
|
192
|
+
|
193
|
+
</body></html>
|
File without changes
|