message_train 0.1.7 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (144) hide show
  1. checksums.yaml +4 -4
  2. data/.simplecov +8 -0
  3. data/.travis.yml +7 -2
  4. data/Gemfile +3 -0
  5. data/README.rdoc +37 -1
  6. data/Rakefile +5 -6
  7. data/VERSION +1 -1
  8. data/app/assets/javascripts/message_train.js +33 -0
  9. data/app/assets/stylesheets/message_train.scss +26 -0
  10. data/app/controllers/concerns/message_train_support.rb +127 -0
  11. data/app/controllers/message_train/application_controller.rb +1 -60
  12. data/app/controllers/message_train/boxes_controller.rb +0 -4
  13. data/app/controllers/message_train/messages_controller.rb +12 -6
  14. data/app/controllers/message_train/participants_controller.rb +1 -1
  15. data/app/controllers/message_train/unsubscribes_controller.rb +59 -0
  16. data/app/helpers/message_train/application_helper.rb +26 -0
  17. data/app/helpers/message_train/attachments_helper.rb +19 -0
  18. data/app/helpers/message_train/boxes_helper.rb +16 -11
  19. data/app/helpers/message_train/collectives_helper.rb +48 -0
  20. data/app/helpers/message_train/conversations_helper.rb +24 -16
  21. data/app/helpers/message_train/messages_helper.rb +14 -12
  22. data/app/mailers/message_train/application_mailer.rb +8 -0
  23. data/app/mailers/message_train/previews/receipt_mailer_preview.rb +10 -0
  24. data/app/mailers/message_train/receipt_mailer.rb +17 -0
  25. data/app/models/message_train/attachment.rb +28 -10
  26. data/app/models/message_train/box.rb +114 -83
  27. data/app/models/message_train/conversation.rb +48 -39
  28. data/app/models/message_train/ignore.rb +2 -6
  29. data/app/models/message_train/message.rb +40 -24
  30. data/app/models/message_train/receipt.rb +20 -10
  31. data/app/models/message_train/unsubscribe.rb +7 -0
  32. data/app/views/layouts/mailer.html.haml +6 -0
  33. data/app/views/message_train/application/_attachment_fields.html.haml +7 -0
  34. data/app/views/message_train/application/_attachment_link.html.haml +4 -0
  35. data/app/views/message_train/application/_widget.html.haml +6 -0
  36. data/app/views/message_train/boxes/_dropdown_list.html.haml +1 -2
  37. data/app/views/message_train/boxes/_list_item.html.haml +2 -2
  38. data/app/views/message_train/boxes/_widget.html.haml +4 -1
  39. data/app/views/message_train/boxes/show.html.haml +12 -4
  40. data/app/views/message_train/collectives/_dropdown_list.html.haml +6 -0
  41. data/app/views/message_train/collectives/_list_item.html.haml +5 -0
  42. data/app/views/message_train/collectives/_widget.html.haml +7 -0
  43. data/app/views/message_train/conversations/_conversation.html.haml +22 -7
  44. data/app/views/message_train/conversations/_deleted_toggle.html.haml +1 -1
  45. data/app/views/message_train/conversations/_ignored_toggle.html.haml +3 -3
  46. data/app/views/message_train/conversations/_read_toggle.html.haml +3 -3
  47. data/app/views/message_train/conversations/_toggle.html.haml +4 -1
  48. data/app/views/message_train/conversations/_trashed_toggle.html.haml +3 -3
  49. data/app/views/message_train/conversations/show.html.haml +4 -3
  50. data/app/views/message_train/messages/_deleted_toggle.html.haml +1 -1
  51. data/app/views/message_train/messages/_form.html.haml +22 -7
  52. data/app/views/message_train/messages/_message.html.haml +14 -4
  53. data/app/views/message_train/messages/_read_toggle.html.haml +1 -1
  54. data/app/views/message_train/messages/_trashed_toggle.html.haml +1 -1
  55. data/app/views/message_train/messages/edit.html.haml +1 -1
  56. data/app/views/message_train/messages/new.html.haml +4 -1
  57. data/app/views/message_train/participants/_field.html.haml +1 -1
  58. data/app/views/message_train/participants/_prefilled_field.html.haml +4 -0
  59. data/app/views/message_train/receipt_mailer/notification_email.html.haml +13 -0
  60. data/app/views/message_train/unsubscribes/index.html.haml +10 -0
  61. data/config/environment.rb +1 -0
  62. data/config/locales/en.yml +49 -7
  63. data/config/routes.rb +10 -2
  64. data/db/migrate/20150901183458_add_received_through_to_message_train_receipts.rb +6 -0
  65. data/db/migrate/20151004184347_add_unique_index_to_receipts.rb +5 -0
  66. data/db/migrate/20151124000820_create_message_train_unsubscribes.rb +14 -0
  67. data/lib/generators/message_train/install/install_generator.rb +8 -2
  68. data/lib/generators/message_train/install/templates/initializer.rb +5 -1
  69. data/lib/message_train/configuration.rb +11 -1
  70. data/lib/message_train/engine.rb +1 -0
  71. data/lib/message_train/mixin.rb +206 -21
  72. data/message_train.gemspec +66 -13
  73. data/spec/controllers/message_train/boxes_controller_spec.rb +10 -3
  74. data/spec/controllers/message_train/concerns_spec.rb +40 -0
  75. data/spec/controllers/message_train/conversations_controller_spec.rb +3 -3
  76. data/spec/controllers/message_train/messages_controller_spec.rb +60 -27
  77. data/spec/controllers/message_train/participants_controller_spec.rb +41 -6
  78. data/spec/controllers/message_train/unsubscribes_controller_spec.rb +56 -0
  79. data/spec/dummy/app/assets/files/message_train/attachments/{1917-Boys_Race_Above-Wiki.jpg → image-sample.jpg} +0 -0
  80. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  81. data/spec/dummy/app/models/group.rb +16 -1
  82. data/spec/dummy/app/models/role.rb +22 -0
  83. data/spec/dummy/app/models/user.rb +1 -1
  84. data/spec/dummy/app/views/layouts/_top_navigation.html.haml +4 -2
  85. data/spec/dummy/app/views/layouts/application.html.haml +2 -3
  86. data/spec/dummy/app/views/pages/index.html.haml +4 -0
  87. data/spec/dummy/config/application.rb +6 -0
  88. data/spec/dummy/config/environments/development.rb +1 -0
  89. data/spec/dummy/config/environments/test.rb +1 -0
  90. data/spec/dummy/config/initializers/high_voltage.rb +3 -0
  91. data/spec/dummy/config/initializers/message_train.rb +6 -1
  92. data/spec/dummy/config/initializers/paperclip.rb +2 -2
  93. data/spec/dummy/config/routes.rb +2 -2
  94. data/spec/dummy/config/settings.yml +9 -0
  95. data/spec/dummy/db/migrate/{20150724142846_create_message_train_conversations.night_train.rb → 20150901183629_create_message_train_conversations.message_train.rb} +0 -0
  96. data/spec/dummy/db/migrate/{20150724142847_create_message_train_messages.night_train.rb → 20150901183630_create_message_train_messages.message_train.rb} +0 -0
  97. data/spec/dummy/db/migrate/{20150724142848_create_message_train_attachments.night_train.rb → 20150901183631_create_message_train_attachments.message_train.rb} +0 -0
  98. data/spec/dummy/db/migrate/{20150724142849_create_message_train_receipts.night_train.rb → 20150901183632_create_message_train_receipts.message_train.rb} +0 -0
  99. data/spec/dummy/db/migrate/{20150724142850_create_message_train_ignores.night_train.rb → 20150901183633_create_message_train_ignores.message_train.rb} +0 -0
  100. data/spec/dummy/db/migrate/20150901183634_add_received_through_to_message_train_receipts.message_train.rb +7 -0
  101. data/spec/dummy/db/migrate/20151004184519_add_unique_index_to_receipts.message_train.rb +6 -0
  102. data/spec/dummy/db/migrate/20151124001417_create_message_train_unsubscribes.message_train.rb +15 -0
  103. data/spec/dummy/db/schema.rb +24 -7
  104. data/spec/dummy/db/seeds/conversations.seeds.rb +92 -3
  105. data/spec/dummy/db/seeds/groups.seeds.rb +27 -0
  106. data/spec/dummy/db/seeds/test/attachments.seeds.rb +4 -0
  107. data/spec/dummy/db/seeds/unsubscribes.seeds.rb +12 -0
  108. data/spec/dummy/db/seeds/users.seeds.rb +27 -0
  109. data/spec/dummy/db/test.sqlite3 +0 -0
  110. data/spec/factories/group.rb +4 -4
  111. data/spec/factories/message.rb +10 -3
  112. data/spec/features/boxes_spec.rb +160 -33
  113. data/spec/features/conversations_spec.rb +11 -4
  114. data/spec/features/messages_spec.rb +20 -6
  115. data/spec/features/unsubscribes_spec.rb +38 -0
  116. data/spec/helpers/message_train/application_helper_spec.rb +60 -0
  117. data/spec/helpers/message_train/attachment_helper_spec.rb +35 -0
  118. data/spec/helpers/message_train/boxes_helper_spec.rb +11 -5
  119. data/spec/helpers/message_train/collectives_helper_spec.rb +76 -0
  120. data/spec/helpers/message_train/conversations_helper_spec.rb +295 -0
  121. data/spec/helpers/message_train/messages_helper_spec.rb +217 -0
  122. data/spec/models/group_spec.rb +112 -2
  123. data/spec/models/message_train/attachment_spec.rb +44 -1
  124. data/spec/models/message_train/box_spec.rb +306 -51
  125. data/spec/models/message_train/conversation_spec.rb +84 -6
  126. data/spec/models/message_train/ignore_spec.rb +0 -4
  127. data/spec/models/message_train/message_spec.rb +49 -12
  128. data/spec/models/message_train/receipt_spec.rb +44 -8
  129. data/spec/models/message_train/unsubscribe_spec.rb +16 -0
  130. data/spec/models/role_spec.rb +125 -0
  131. data/spec/models/user_spec.rb +155 -26
  132. data/spec/rails_helper.rb +8 -1
  133. data/spec/support/attachments.rb +4 -0
  134. data/spec/support/controller_behaviors.rb +28 -0
  135. data/spec/support/conversations.rb +13 -0
  136. data/spec/support/groups.rb +3 -0
  137. data/spec/support/loaded_site.rb +3 -0
  138. data/spec/support/messages.rb +23 -0
  139. data/spec/support/roles.rb +4 -0
  140. data/spec/support/users.rb +6 -0
  141. data/spec/support/wysihtml5_helper.rb +8 -0
  142. metadata +99 -12
  143. data/spec/dummy/app/assets/files/message_train/attachments/Haie_rci.svg +0 -1714
  144. data/spec/dummy/public/capybara.html +0 -193
@@ -2,17 +2,17 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: message_train 0.1.7 ruby lib
5
+ # stub: message_train 0.2.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "message_train"
9
- s.version = "0.1.7"
9
+ s.version = "0.2.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Karen Lundgren"]
14
- s.date = "2015-08-25"
15
- s.description = "Private/public messaging for any object, such as Users or Groups"
14
+ s.date = "2015-11-24"
15
+ s.description = "Rails 4 Engine providing private/public messaging for any object, such as Users or Groups"
16
16
  s.email = "karen.e.lundgren@gmail.com"
17
17
  s.executables = ["rails"]
18
18
  s.extra_rdoc_files = [
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  ".rspec",
25
25
  ".ruby-gemset",
26
26
  ".ruby-version",
27
+ ".simplecov",
27
28
  ".travis.yml",
28
29
  "Gemfile",
29
30
  "LICENSE.txt",
@@ -32,26 +33,42 @@ Gem::Specification.new do |s|
32
33
  "VERSION",
33
34
  "app/assets/javascripts/message_train.js",
34
35
  "app/assets/stylesheets/message_train.scss",
36
+ "app/controllers/concerns/message_train_support.rb",
35
37
  "app/controllers/message_train/application_controller.rb",
36
38
  "app/controllers/message_train/boxes_controller.rb",
37
39
  "app/controllers/message_train/conversations_controller.rb",
38
40
  "app/controllers/message_train/messages_controller.rb",
39
41
  "app/controllers/message_train/participants_controller.rb",
42
+ "app/controllers/message_train/unsubscribes_controller.rb",
43
+ "app/helpers/message_train/application_helper.rb",
44
+ "app/helpers/message_train/attachments_helper.rb",
40
45
  "app/helpers/message_train/boxes_helper.rb",
46
+ "app/helpers/message_train/collectives_helper.rb",
41
47
  "app/helpers/message_train/conversations_helper.rb",
42
48
  "app/helpers/message_train/messages_helper.rb",
49
+ "app/mailers/message_train/application_mailer.rb",
50
+ "app/mailers/message_train/previews/receipt_mailer_preview.rb",
51
+ "app/mailers/message_train/receipt_mailer.rb",
43
52
  "app/models/message_train/attachment.rb",
44
53
  "app/models/message_train/box.rb",
45
54
  "app/models/message_train/conversation.rb",
46
55
  "app/models/message_train/ignore.rb",
47
56
  "app/models/message_train/message.rb",
48
57
  "app/models/message_train/receipt.rb",
58
+ "app/models/message_train/unsubscribe.rb",
49
59
  "app/views/application/404.html.haml",
60
+ "app/views/layouts/mailer.html.haml",
61
+ "app/views/message_train/application/_attachment_fields.html.haml",
62
+ "app/views/message_train/application/_attachment_link.html.haml",
63
+ "app/views/message_train/application/_widget.html.haml",
50
64
  "app/views/message_train/application/results.json.jbuilder",
51
65
  "app/views/message_train/boxes/_dropdown_list.html.haml",
52
66
  "app/views/message_train/boxes/_list_item.html.haml",
53
67
  "app/views/message_train/boxes/_widget.html.haml",
54
68
  "app/views/message_train/boxes/show.html.haml",
69
+ "app/views/message_train/collectives/_dropdown_list.html.haml",
70
+ "app/views/message_train/collectives/_list_item.html.haml",
71
+ "app/views/message_train/collectives/_widget.html.haml",
55
72
  "app/views/message_train/conversations/_conversation.html.haml",
56
73
  "app/views/message_train/conversations/_deleted_toggle.html.haml",
57
74
  "app/views/message_train/conversations/_ignored_toggle.html.haml",
@@ -71,9 +88,13 @@ Gem::Specification.new do |s|
71
88
  "app/views/message_train/messages/show.json.jbuilder",
72
89
  "app/views/message_train/participants/_field.html.haml",
73
90
  "app/views/message_train/participants/_participant.json.jbuilder",
91
+ "app/views/message_train/participants/_prefilled_field.html.haml",
74
92
  "app/views/message_train/participants/index.json.jbuilder",
75
93
  "app/views/message_train/participants/show.json.jbuilder",
94
+ "app/views/message_train/receipt_mailer/notification_email.html.haml",
95
+ "app/views/message_train/unsubscribes/index.html.haml",
76
96
  "bin/rails",
97
+ "config/environment.rb",
77
98
  "config/initializers/bootstrap_pager_config.rb",
78
99
  "config/initializers/date_time.rb",
79
100
  "config/locales/en.yml",
@@ -83,6 +104,9 @@ Gem::Specification.new do |s|
83
104
  "db/migrate/20150721161144_create_message_train_attachments.rb",
84
105
  "db/migrate/20150721161940_create_message_train_receipts.rb",
85
106
  "db/migrate/20150721163838_create_message_train_ignores.rb",
107
+ "db/migrate/20150901183458_add_received_through_to_message_train_receipts.rb",
108
+ "db/migrate/20151004184347_add_unique_index_to_receipts.rb",
109
+ "db/migrate/20151124000820_create_message_train_unsubscribes.rb",
86
110
  "lib/generators/message_train/install/install_generator.rb",
87
111
  "lib/generators/message_train/install/templates/initializer.rb",
88
112
  "lib/generators/message_train/utils.rb",
@@ -95,12 +119,13 @@ Gem::Specification.new do |s|
95
119
  "lib/tasks/message_train_tasks.rake",
96
120
  "message_train.gemspec",
97
121
  "spec/controllers/message_train/boxes_controller_spec.rb",
122
+ "spec/controllers/message_train/concerns_spec.rb",
98
123
  "spec/controllers/message_train/conversations_controller_spec.rb",
99
124
  "spec/controllers/message_train/messages_controller_spec.rb",
100
125
  "spec/controllers/message_train/participants_controller_spec.rb",
126
+ "spec/controllers/message_train/unsubscribes_controller_spec.rb",
101
127
  "spec/dummy/.rspec",
102
128
  "spec/dummy/Rakefile",
103
- "spec/dummy/app/assets/files/message_train/attachments/1917-Boys_Race_Above-Wiki.jpg",
104
129
  "spec/dummy/app/assets/files/message_train/attachments/ACD_Silverbarn's_Mayumi.jpg",
105
130
  "spec/dummy/app/assets/files/message_train/attachments/ACD_obedience.jpg",
106
131
  "spec/dummy/app/assets/files/message_train/attachments/A_Man_and_His_Dog.jpg",
@@ -120,7 +145,6 @@ Gem::Specification.new do |s|
120
145
  "spec/dummy/app/assets/files/message_train/attachments/Galgo_Spanish_male_brindle.jpg",
121
146
  "spec/dummy/app/assets/files/message_train/attachments/Golden-retriever-carlos-bei-der-dummyarbeit.jpg",
122
147
  "spec/dummy/app/assets/files/message_train/attachments/Habavk.jpg",
123
- "spec/dummy/app/assets/files/message_train/attachments/Haie_rci.svg",
124
148
  "spec/dummy/app/assets/files/message_train/attachments/Hanging_18.jpg",
125
149
  "spec/dummy/app/assets/files/message_train/attachments/Hundewa.jpg",
126
150
  "spec/dummy/app/assets/files/message_train/attachments/K9ProSports_AttackOnHandler.jpg",
@@ -128,6 +152,7 @@ Gem::Specification.new do |s|
128
152
  "spec/dummy/app/assets/files/message_train/attachments/K9Pro_Civil_agitation.JPG",
129
153
  "spec/dummy/app/assets/files/message_train/attachments/TrainingSchutzhundRetrieveOverWall.jpg",
130
154
  "spec/dummy/app/assets/files/message_train/attachments/example.pdf",
155
+ "spec/dummy/app/assets/files/message_train/attachments/image-sample.jpg",
131
156
  "spec/dummy/app/assets/files/message_train/attachments/letterlegal5.doc",
132
157
  "spec/dummy/app/assets/files/message_train/attachments/pdf-sample.pdf",
133
158
  "spec/dummy/app/assets/files/message_train/attachments/sample.pdf",
@@ -145,6 +170,7 @@ Gem::Specification.new do |s|
145
170
  "spec/dummy/app/models/user.rb",
146
171
  "spec/dummy/app/views/layouts/_top_navigation.html.haml",
147
172
  "spec/dummy/app/views/layouts/application.html.haml",
173
+ "spec/dummy/app/views/pages/index.html.haml",
148
174
  "spec/dummy/bin/bundle",
149
175
  "spec/dummy/bin/rails",
150
176
  "spec/dummy/bin/rake",
@@ -163,6 +189,7 @@ Gem::Specification.new do |s|
163
189
  "spec/dummy/config/initializers/cookies_serializer.rb",
164
190
  "spec/dummy/config/initializers/devise.rb",
165
191
  "spec/dummy/config/initializers/filter_parameter_logging.rb",
192
+ "spec/dummy/config/initializers/high_voltage.rb",
166
193
  "spec/dummy/config/initializers/inflections.rb",
167
194
  "spec/dummy/config/initializers/message_train.rb",
168
195
  "spec/dummy/config/initializers/mime_types.rb",
@@ -174,22 +201,28 @@ Gem::Specification.new do |s|
174
201
  "spec/dummy/config/locales/en.yml",
175
202
  "spec/dummy/config/routes.rb",
176
203
  "spec/dummy/config/secrets.yml",
204
+ "spec/dummy/config/settings.yml",
177
205
  "spec/dummy/config/unused/temporary_i18n_debugging.rb",
178
206
  "spec/dummy/db/migrate/20150721140013_devise_create_users.rb",
179
207
  "spec/dummy/db/migrate/20150721141009_rolify_create_roles.rb",
180
208
  "spec/dummy/db/migrate/20150721141128_create_groups.rb",
181
209
  "spec/dummy/db/migrate/20150721150307_add_display_name_column_to_users.rb",
182
- "spec/dummy/db/migrate/20150724142846_create_message_train_conversations.night_train.rb",
183
- "spec/dummy/db/migrate/20150724142847_create_message_train_messages.night_train.rb",
184
- "spec/dummy/db/migrate/20150724142848_create_message_train_attachments.night_train.rb",
185
- "spec/dummy/db/migrate/20150724142849_create_message_train_receipts.night_train.rb",
186
- "spec/dummy/db/migrate/20150724142850_create_message_train_ignores.night_train.rb",
210
+ "spec/dummy/db/migrate/20150901183629_create_message_train_conversations.message_train.rb",
211
+ "spec/dummy/db/migrate/20150901183630_create_message_train_messages.message_train.rb",
212
+ "spec/dummy/db/migrate/20150901183631_create_message_train_attachments.message_train.rb",
213
+ "spec/dummy/db/migrate/20150901183632_create_message_train_receipts.message_train.rb",
214
+ "spec/dummy/db/migrate/20150901183633_create_message_train_ignores.message_train.rb",
215
+ "spec/dummy/db/migrate/20150901183634_add_received_through_to_message_train_receipts.message_train.rb",
216
+ "spec/dummy/db/migrate/20151004184519_add_unique_index_to_receipts.message_train.rb",
217
+ "spec/dummy/db/migrate/20151124001417_create_message_train_unsubscribes.message_train.rb",
187
218
  "spec/dummy/db/schema.rb",
188
219
  "spec/dummy/db/seeds.rb",
189
220
  "spec/dummy/db/seeds/conversations.seeds.rb",
190
221
  "spec/dummy/db/seeds/development/conversations.seeds.rb",
191
222
  "spec/dummy/db/seeds/groups.seeds.rb",
223
+ "spec/dummy/db/seeds/test/attachments.seeds.rb",
192
224
  "spec/dummy/db/seeds/test/conversations.seeds.rb",
225
+ "spec/dummy/db/seeds/unsubscribes.seeds.rb",
193
226
  "spec/dummy/db/seeds/users.seeds.rb",
194
227
  "spec/dummy/db/test.sqlite3",
195
228
  "spec/dummy/lib/assets/.keep",
@@ -197,7 +230,6 @@ Gem::Specification.new do |s|
197
230
  "spec/dummy/public/404.html",
198
231
  "spec/dummy/public/422.html",
199
232
  "spec/dummy/public/500.html",
200
- "spec/dummy/public/capybara.html",
201
233
  "spec/dummy/public/favicon.ico",
202
234
  "spec/factories/attachment.rb",
203
235
  "spec/factories/group.rb",
@@ -206,7 +238,13 @@ Gem::Specification.new do |s|
206
238
  "spec/features/boxes_spec.rb",
207
239
  "spec/features/conversations_spec.rb",
208
240
  "spec/features/messages_spec.rb",
241
+ "spec/features/unsubscribes_spec.rb",
242
+ "spec/helpers/message_train/application_helper_spec.rb",
243
+ "spec/helpers/message_train/attachment_helper_spec.rb",
209
244
  "spec/helpers/message_train/boxes_helper_spec.rb",
245
+ "spec/helpers/message_train/collectives_helper_spec.rb",
246
+ "spec/helpers/message_train/conversations_helper_spec.rb",
247
+ "spec/helpers/message_train/messages_helper_spec.rb",
210
248
  "spec/message_train_spec.rb",
211
249
  "spec/models/group_spec.rb",
212
250
  "spec/models/message_train/attachment_spec.rb",
@@ -215,9 +253,12 @@ Gem::Specification.new do |s|
215
253
  "spec/models/message_train/ignore_spec.rb",
216
254
  "spec/models/message_train/message_spec.rb",
217
255
  "spec/models/message_train/receipt_spec.rb",
256
+ "spec/models/message_train/unsubscribe_spec.rb",
257
+ "spec/models/role_spec.rb",
218
258
  "spec/models/user_spec.rb",
219
259
  "spec/rails_helper.rb",
220
260
  "spec/spec_helper.rb",
261
+ "spec/support/attachments.rb",
221
262
  "spec/support/controller_behaviors.rb",
222
263
  "spec/support/controller_macros.rb",
223
264
  "spec/support/conversations.rb",
@@ -225,16 +266,19 @@ Gem::Specification.new do |s|
225
266
  "spec/support/feature_behaviors.rb",
226
267
  "spec/support/groups.rb",
227
268
  "spec/support/loaded_site.rb",
269
+ "spec/support/messages.rb",
270
+ "spec/support/roles.rb",
228
271
  "spec/support/shared_connection.rb",
229
272
  "spec/support/users.rb",
230
273
  "spec/support/utilities.rb",
274
+ "spec/support/wysihtml5_helper.rb",
231
275
  "vendor/assets/javascripts/bootstrap-tags.js",
232
276
  "vendor/assets/stylesheets/bootstrap-tags.css"
233
277
  ]
234
278
  s.homepage = "http://www.gemvein.com/museum/cases/message_train"
235
279
  s.licenses = ["MIT"]
236
280
  s.rubygems_version = "2.4.5"
237
- s.summary = "Messaging for any object"
281
+ s.summary = "Rails 4 Engine providing messaging for any object"
238
282
 
239
283
  if s.respond_to? :specification_version then
240
284
  s.specification_version = 4
@@ -252,6 +296,8 @@ Gem::Specification.new do |s|
252
296
  s.add_runtime_dependency(%q<bootstrap_leather>, ["~> 0.8"])
253
297
  s.add_runtime_dependency(%q<bootstrap_pager>, ["~> 0.10"])
254
298
  s.add_runtime_dependency(%q<bootstrap_form>, ["~> 2.3"])
299
+ s.add_runtime_dependency(%q<bootstrap-wysihtml5-rails>, ["> 0.3"])
300
+ s.add_runtime_dependency(%q<cocoon>, ["~> 1.2"])
255
301
  s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
256
302
  s.add_development_dependency(%q<bundler>, ["~> 1.0"])
257
303
  s.add_development_dependency(%q<jeweler>, ["~> 2.0"])
@@ -265,6 +311,7 @@ Gem::Specification.new do |s|
265
311
  s.add_development_dependency(%q<seedbank>, ["~> 0.3"])
266
312
  s.add_development_dependency(%q<friendly_id>, ["~> 5"])
267
313
  s.add_development_dependency(%q<byebug>, ["~> 5"])
314
+ s.add_development_dependency(%q<high_voltage>, ["~> 2.4"])
268
315
  else
269
316
  s.add_dependency(%q<rails>, ["~> 4"])
270
317
  s.add_dependency(%q<paperclip>, ["~> 4.3"])
@@ -278,6 +325,8 @@ Gem::Specification.new do |s|
278
325
  s.add_dependency(%q<bootstrap_leather>, ["~> 0.8"])
279
326
  s.add_dependency(%q<bootstrap_pager>, ["~> 0.10"])
280
327
  s.add_dependency(%q<bootstrap_form>, ["~> 2.3"])
328
+ s.add_dependency(%q<bootstrap-wysihtml5-rails>, ["> 0.3"])
329
+ s.add_dependency(%q<cocoon>, ["~> 1.2"])
281
330
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
282
331
  s.add_dependency(%q<bundler>, ["~> 1.0"])
283
332
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
@@ -291,6 +340,7 @@ Gem::Specification.new do |s|
291
340
  s.add_dependency(%q<seedbank>, ["~> 0.3"])
292
341
  s.add_dependency(%q<friendly_id>, ["~> 5"])
293
342
  s.add_dependency(%q<byebug>, ["~> 5"])
343
+ s.add_dependency(%q<high_voltage>, ["~> 2.4"])
294
344
  end
295
345
  else
296
346
  s.add_dependency(%q<rails>, ["~> 4"])
@@ -305,6 +355,8 @@ Gem::Specification.new do |s|
305
355
  s.add_dependency(%q<bootstrap_leather>, ["~> 0.8"])
306
356
  s.add_dependency(%q<bootstrap_pager>, ["~> 0.10"])
307
357
  s.add_dependency(%q<bootstrap_form>, ["~> 2.3"])
358
+ s.add_dependency(%q<bootstrap-wysihtml5-rails>, ["> 0.3"])
359
+ s.add_dependency(%q<cocoon>, ["~> 1.2"])
308
360
  s.add_dependency(%q<rdoc>, ["~> 3.12"])
309
361
  s.add_dependency(%q<bundler>, ["~> 1.0"])
310
362
  s.add_dependency(%q<jeweler>, ["~> 2.0"])
@@ -318,6 +370,7 @@ Gem::Specification.new do |s|
318
370
  s.add_dependency(%q<seedbank>, ["~> 0.3"])
319
371
  s.add_dependency(%q<friendly_id>, ["~> 5"])
320
372
  s.add_dependency(%q<byebug>, ["~> 5"])
373
+ s.add_dependency(%q<high_voltage>, ["~> 2.4"])
321
374
  end
322
375
  end
323
376
 
@@ -7,7 +7,8 @@ describe MessageTrain::BoxesController do
7
7
 
8
8
  let(:valid_params) { { 'conversations' => {unread_conversation.id.to_s => unread_conversation.id} } }
9
9
  let(:invalid_params) { { 'conversations' => {'999' => 999} } }
10
-
10
+ let(:disallowed_params) { { 'conversations' => {someone_elses_conversation.id.to_s => someone_elses_conversation.id} } }
11
+
11
12
  before do
12
13
  login_user first_user
13
14
  end
@@ -35,7 +36,13 @@ describe MessageTrain::BoxesController do
35
36
  before do
36
37
  put :update, division: 'in', mark_to_set: 'read', objects: invalid_params
37
38
  end
38
- it_should_behave_like 'a page with an error message', "Conversation 999 not found in box"
39
+ it_should_behave_like 'a 404 Not Found error'
40
+ end
41
+ describe 'with disallowed params' do
42
+ before do
43
+ put :update, division: 'in', mark_to_set: 'read', objects: disallowed_params
44
+ end
45
+ it_should_behave_like 'a page with an error message matching', /Access to Conversation \d+ denied/
39
46
  end
40
47
  describe 'without params' do
41
48
  before do
@@ -56,7 +63,7 @@ describe MessageTrain::BoxesController do
56
63
  before do
57
64
  delete :destroy, division: 'in', mark_to_set: 'ignore', objects: invalid_params
58
65
  end
59
- it_should_behave_like 'a page with an error message', "Conversation 999 not found in box"
66
+ it_should_behave_like 'a 404 Not Found error'
60
67
  end
61
68
  describe 'without params' do
62
69
  before do
@@ -0,0 +1,40 @@
1
+ require 'rails_helper'
2
+
3
+ describe MessageTrain::BoxesController do
4
+ include_context 'loaded site'
5
+ include ControllerMacros
6
+ routes { MessageTrain::Engine.routes }
7
+
8
+ describe "GET #show" do
9
+ describe 'when not logged in' do
10
+ before do
11
+ get :show, division: 'in'
12
+ end
13
+ it_should_behave_like 'a redirect with notice', '/users/sign_in', 'You must sign in or sign up to continue.'
14
+ end
15
+
16
+ describe 'when neither sending nor receiving is allowed' do
17
+ before do
18
+ login_user third_user
19
+ get :show, division: 'in', collective_id: 'groups:first-group'
20
+ end
21
+ it_should_behave_like 'a redirect with error', '/', 'Access to that box denied'
22
+ end
23
+
24
+ describe 'when only sending is allowed' do
25
+ before do
26
+ login_user first_user
27
+ get :show, division: 'in', collective_id: 'groups:first-group'
28
+ end
29
+ it_should_behave_like 'a redirect with error', '/collectives/groups:first-group/box/sent', 'Access to that box denied'
30
+ end
31
+
32
+ describe 'when only receiving is allowed' do
33
+ before do
34
+ login_user first_user
35
+ get :show, division: 'sent', collective_id: 'groups:membered-group'
36
+ end
37
+ it_should_behave_like 'a redirect with error', '/collectives/groups:membered-group/box/in', 'Access to that box denied'
38
+ end
39
+ end
40
+ end
@@ -5,7 +5,7 @@ describe MessageTrain::ConversationsController do
5
5
  include ControllerMacros
6
6
  routes { MessageTrain::Engine.routes }
7
7
 
8
- let(:valid_params) { { 'messages' => {unread_conversation.messages.first.id.to_s => unread_conversation.messages.first.id} } }
8
+ let(:valid_params) { { 'messages' => {unread_message.id.to_s => unread_message.id} } }
9
9
  let(:invalid_params) { { 'messages' => {'999999' => 999999} } }
10
10
 
11
11
  before do
@@ -30,7 +30,7 @@ describe MessageTrain::ConversationsController do
30
30
 
31
31
  context 'loads messages into @messages' do
32
32
  subject { assigns(:messages) }
33
- it { should include unread_conversation.messages.first }
33
+ it { should include unread_message }
34
34
  end
35
35
  end
36
36
 
@@ -39,7 +39,7 @@ describe MessageTrain::ConversationsController do
39
39
  before do
40
40
  put :update, box_division: 'in', id: unread_conversation.id, mark_to_set: 'read', objects: invalid_params
41
41
  end
42
- it_should_behave_like 'a page with an error message', "Message 999999 not found in box"
42
+ it_should_behave_like 'a 404 Not Found error'
43
43
  end
44
44
  describe 'without params' do
45
45
  before do
@@ -20,15 +20,13 @@ describe MessageTrain::MessagesController do
20
20
  { subject: nil }
21
21
  }
22
22
 
23
- let(:draft_message) { draft_conversation.messages.first }
24
-
25
23
  before do
26
24
  login_user first_user
27
25
  end
28
26
 
29
27
  describe "GET #show" do
30
28
  before do
31
- get :show, box_division: 'in', id: unread_conversation.messages.first.id, format: :json
29
+ get :show, box_division: 'in', id: unread_message.id, format: :json
32
30
  end
33
31
  it_should_behave_like 'a successful page', which_renders: 'show'
34
32
 
@@ -39,13 +37,13 @@ describe MessageTrain::MessagesController do
39
37
 
40
38
  context 'loads message into @message' do
41
39
  subject { assigns(:message) }
42
- it { should eq unread_conversation.messages.first }
40
+ it { should eq unread_message }
43
41
  end
44
42
  end
45
43
 
46
44
  describe "GET #new" do
47
45
  before do
48
- get :new, box_division: 'in', conversation_id: unread_conversation.messages.first.conversation_id
46
+ get :new, box_division: 'in', conversation_id: unread_message.conversation_id
49
47
  end
50
48
  it_should_behave_like 'a successful page', which_renders: 'new'
51
49
 
@@ -64,14 +62,14 @@ describe MessageTrain::MessagesController do
64
62
  describe "GET #edit" do
65
63
  describe 'as someone other than the owner' do
66
64
  before do
67
- get :edit, box_division: 'in', id: someone_elses_conversation.messages.first.id
65
+ get :edit, box_division: 'in', id: someone_elses_message.id
68
66
  end
69
67
  it_should_behave_like 'a 404 Not Found error'
70
68
  end
71
69
  describe 'as the owner' do
72
70
  describe 'when message is a not a draft' do
73
71
  before do
74
- get :edit, box_division: 'in', id: unread_conversation.messages.first.id
72
+ get :edit, box_division: 'in', id: unread_message.id
75
73
  end
76
74
  it_should_behave_like 'a 404 Not Found error'
77
75
  end
@@ -117,9 +115,18 @@ describe MessageTrain::MessagesController do
117
115
  end
118
116
  end
119
117
  describe 'with valid attributes, counting' do
118
+ it 'results in a new conversation' do
119
+ expect { post :create, box_division: 'in', message: valid_attributes }.to change { MessageTrain::Conversation.count }.by(1)
120
+ end
120
121
  it 'results in a new message' do
121
122
  expect { post :create, box_division: 'in', message: valid_attributes }.to change { MessageTrain::Message.count }.by(1)
122
123
  end
124
+ it 'results in new receipts' do
125
+ expect { post :create, box_division: 'in', message: valid_attributes }.to change { MessageTrain::Receipt.count }.by(3)
126
+ end
127
+ it 'results in email notifications' do
128
+ expect { post :create, box_division: 'in', message: valid_attributes }.to change { ActionMailer::Base.deliveries.count }.by(2)
129
+ end
123
130
  end
124
131
  describe 'with invalid params' do
125
132
  before do
@@ -148,7 +155,7 @@ describe MessageTrain::MessagesController do
148
155
  describe "PUT #update" do
149
156
  describe 'as someone other than the owner' do
150
157
  before do
151
- put :update, box_division: 'in', id: someone_elses_conversation.messages.first.id, message: valid_attributes
158
+ put :update, box_division: 'in', id: someone_elses_message.id, message: valid_attributes
152
159
  end
153
160
  it_should_behave_like 'a 404 Not Found error'
154
161
  end
@@ -177,30 +184,56 @@ describe MessageTrain::MessagesController do
177
184
  describe 'with valid params' do
178
185
  describe 'when not a draft' do
179
186
  before do
180
- put :update, box_division: 'in', id: sent_conversation.messages.first.id, message: valid_attributes
187
+ put :update, box_division: 'in', id: sent_message.id, message: valid_attributes
181
188
  end
182
189
  it_should_behave_like 'a 404 Not Found error'
183
190
  end
184
191
  describe 'when a draft' do
185
- before do
186
- put :update, box_division: 'in', id: draft_message.id, message: valid_attributes
192
+ describe 'and updating to not draft' do
193
+
194
+ before do
195
+ put :update, box_division: 'in', id: draft_message.id, message: valid_attributes
196
+ end
197
+ it_should_behave_like 'a redirect to', '/box/sent'
198
+ it_should_behave_like 'a response without error'
199
+
200
+ context 'updates @message' do
201
+ subject { draft_message.reload }
202
+ its(:subject) { should eq 'Test Subject' }
203
+ end
204
+
205
+ context "sets no alert" do
206
+ subject { flash[:alert] }
207
+ it { should be nil }
208
+ end
209
+
210
+ context "sets the flash with a notice of the message's update" do
211
+ subject { flash[:notice] }
212
+ it { should eq 'Message sent.'}
213
+ end
187
214
  end
188
- it_should_behave_like 'a redirect to', '/box/sent'
189
- it_should_behave_like 'a response without error'
190
-
191
- context 'updates @message' do
192
- subject { draft_message.reload }
193
- its(:subject) { should eq 'Test Subject' }
194
- end
195
-
196
- context "sets no alert" do
197
- subject { flash[:alert] }
198
- it { should be nil }
199
- end
200
-
201
- context "sets the flash with a notice of the message's update" do
202
- subject { flash[:notice] }
203
- it { should eq 'Message sent.'}
215
+ describe 'and updating but keeping as a draft' do
216
+ let(:edited_draft_message) { { id: draft_message.id, subject: 'Still a draft', draft: 'Save As Draft' } }
217
+ before do
218
+ put :update, box_division: 'in', id: draft_message.id, message: edited_draft_message
219
+ end
220
+ it_should_behave_like 'a redirect matching', %r(/box/in/conversations/\d+)
221
+ it_should_behave_like 'a response without error'
222
+
223
+ context 'updates @message' do
224
+ subject { draft_message.reload }
225
+ its(:subject) { should eq 'Still a draft' }
226
+ end
227
+
228
+ context "sets no notice" do
229
+ subject { flash[:notice] }
230
+ it { should be nil }
231
+ end
232
+
233
+ context "sets the flash with a alert of the message's update" do
234
+ subject { flash[:alert] }
235
+ it { should eq 'Message saved as draft.'}
236
+ end
204
237
  end
205
238
  end
206
239
  end
@@ -10,14 +10,49 @@ describe MessageTrain::ParticipantsController do
10
10
  end
11
11
 
12
12
  describe "GET #index" do
13
- before do
14
- get :index, box_division: 'in', model: 'users', format: :json
13
+ describe 'with model to users' do
14
+ before do
15
+ get :index, box_division: 'in', model: 'users', format: :json
16
+ end
17
+ it_should_behave_like 'a successful page', which_renders: 'index'
18
+
19
+ context 'loads participants into @participants' do
20
+ subject { assigns(:participants) }
21
+ its(:first) { should be_a User }
22
+ end
15
23
  end
16
- it_should_behave_like 'a successful page', which_renders: 'index'
24
+ describe 'with model set to groups' do
25
+ describe 'given model responds to fallback method' do
26
+ before do
27
+ get :index, box_division: 'in', model: 'groups', format: :json
28
+ end
29
+ it_should_behave_like 'a successful page', which_renders: 'index'
17
30
 
18
- context 'loads participants into @participants' do
19
- subject { assigns(:participants) }
20
- its(:first) { should be_a User }
31
+ context 'loads participants into @participants' do
32
+ subject { assigns(:participants) }
33
+ its(:first) { should be_a Group }
34
+ it { should have_exactly(2).items }
35
+ end
36
+ end
37
+ describe 'given model does not fallback method' do
38
+ before do
39
+ MessageTrain.configuration.address_book_method = nil
40
+ get :index, box_division: 'in', model: 'groups', format: :json
41
+ end
42
+ it_should_behave_like 'a successful page', which_renders: 'index'
43
+
44
+ context 'loads participants into @participants' do
45
+ subject { assigns(:participants) }
46
+ its(:first) { should be_a Group }
47
+ it { should have_exactly(4).items }
48
+ end
49
+ end
50
+ end
51
+ describe 'with no model set' do
52
+ before do
53
+ get :index, box_division: 'in', model: '', format: :json
54
+ end
55
+ it_should_behave_like 'a 404 Not Found error'
21
56
  end
22
57
  end
23
58
 
@@ -0,0 +1,56 @@
1
+ require 'rails_helper'
2
+
3
+ describe MessageTrain::UnsubscribesController do
4
+ include_context 'loaded site'
5
+ include ControllerMacros
6
+ routes { MessageTrain::Engine.routes }
7
+
8
+ let(:valid_attributes) {
9
+ { from_type: 'Group', from_id: membered_group.id }
10
+ }
11
+
12
+ let(:invalid_attributes) {
13
+ { from_type: 'Group', from_id: empty_group.id }
14
+ }
15
+
16
+ before do
17
+ login_user first_user
18
+ end
19
+
20
+ describe "GET #index" do
21
+ before do
22
+ get :index
23
+ end
24
+ it_should_behave_like 'a successful page', which_renders: 'index'
25
+
26
+ context 'loads subscriptions into @subscriptions' do
27
+ subject { assigns(:subscriptions) }
28
+ it { should be_an Array }
29
+ it { should have_at_least(3).items }
30
+ end
31
+ end
32
+
33
+ describe "POST #create" do
34
+ describe 'with invalid attributes' do
35
+ before do
36
+ post :create, unsubscribe: invalid_attributes
37
+ end
38
+ it_should_behave_like 'a 404 Not Found error'
39
+ end
40
+ describe 'with valid attributes' do
41
+ before do
42
+ post :create, unsubscribe: valid_attributes
43
+ end
44
+ it_should_behave_like 'a redirect with a message', '/unsubscribes', notice: 'You are now unsubscribed from Membered Group, which means that you will not be notified by email of any messages received by that Group.'
45
+ it_should_behave_like 'a response without error'
46
+ end
47
+ end
48
+
49
+ describe "DELETE #destroy" do
50
+ before do
51
+ delete :destroy, id: first_user.unsubscribes.where(from_type: 'Group', from_id: unsubscribed_group.id).first.id
52
+ end
53
+ it_should_behave_like 'a redirect with a message', '/unsubscribes', notice: 'You are no longer unsubscribed from Unsubscribed Group, which means that you will now be notified by email of any messages received in that Group.'
54
+ end
55
+
56
+ end