conversations 0.0.1

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.
Files changed (87) hide show
  1. data/.gitignore +8 -0
  2. data/CHANGELOG.md +7 -0
  3. data/Gemfile +17 -0
  4. data/Gemfile.lock +146 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.md +55 -0
  7. data/Rakefile +32 -0
  8. data/TODO.md +4 -0
  9. data/app/assets/javascripts/conversations.js +5 -0
  10. data/app/assets/javascripts/jquery.tokeninput.js +860 -0
  11. data/app/assets/stylesheets/conversations.css +4 -0
  12. data/app/assets/stylesheets/token-input-facebook.css +122 -0
  13. data/app/assets/stylesheets/token-input-mac.css +204 -0
  14. data/app/assets/stylesheets/token-input.css +113 -0
  15. data/app/controllers/conversations/conversations_controller.rb +26 -0
  16. data/app/controllers/conversations/messages_controller.rb +17 -0
  17. data/app/controllers/conversations/user_conversations_controller.rb +28 -0
  18. data/app/models/conversations/conversation.rb +19 -0
  19. data/app/models/conversations/message.rb +11 -0
  20. data/app/models/conversations/user_conversation.rb +22 -0
  21. data/app/views/conversations/conversations/new.html.erb +19 -0
  22. data/app/views/conversations/user_conversations/index.html.erb +17 -0
  23. data/app/views/conversations/user_conversations/show.html.erb +35 -0
  24. data/config/routes.rb +12 -0
  25. data/conversations.gemspec +33 -0
  26. data/lib/conversations.rb +19 -0
  27. data/lib/conversations/engine.rb +29 -0
  28. data/lib/conversations/models/conversationalist.rb +22 -0
  29. data/lib/conversations/version.rb +3 -0
  30. data/lib/generators/conversations/conversations_generator.rb +20 -0
  31. data/lib/generators/conversations/templates/20120105153739_create_conversations.rb +9 -0
  32. data/lib/generators/conversations/templates/20120105153800_create_user_conversations.rb +12 -0
  33. data/lib/generators/conversations/templates/20120105153812_create_messages.rb +11 -0
  34. data/lib/tasks/conversations_tasks.rake +4 -0
  35. data/spec/dummy/Rakefile +7 -0
  36. data/spec/dummy/app/assets/javascripts/application.js +10 -0
  37. data/spec/dummy/app/assets/stylesheets/application.css +24 -0
  38. data/spec/dummy/app/controllers/application_controller.rb +13 -0
  39. data/spec/dummy/app/controllers/users_controller.rb +44 -0
  40. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  41. data/spec/dummy/app/mailers/.gitkeep +0 -0
  42. data/spec/dummy/app/models/.gitkeep +0 -0
  43. data/spec/dummy/app/models/user.rb +7 -0
  44. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  45. data/spec/dummy/app/views/users/_form.html.erb +5 -0
  46. data/spec/dummy/app/views/users/edit.html.erb +3 -0
  47. data/spec/dummy/app/views/users/index.html.erb +7 -0
  48. data/spec/dummy/app/views/users/new.html.erb +3 -0
  49. data/spec/dummy/app/views/users/show.html.erb +13 -0
  50. data/spec/dummy/config.ru +4 -0
  51. data/spec/dummy/config/application.rb +45 -0
  52. data/spec/dummy/config/boot.rb +10 -0
  53. data/spec/dummy/config/database.yml +25 -0
  54. data/spec/dummy/config/environment.rb +5 -0
  55. data/spec/dummy/config/environments/development.rb +37 -0
  56. data/spec/dummy/config/environments/production.rb +60 -0
  57. data/spec/dummy/config/environments/test.rb +39 -0
  58. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  59. data/spec/dummy/config/initializers/inflections.rb +10 -0
  60. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  61. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  62. data/spec/dummy/config/initializers/session_store.rb +8 -0
  63. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  64. data/spec/dummy/config/locales/en.yml +5 -0
  65. data/spec/dummy/config/routes.rb +69 -0
  66. data/spec/dummy/db/migrate/20120105152859_create_users.rb +9 -0
  67. data/spec/dummy/db/migrate/20120105153739_create_conversations.rb +9 -0
  68. data/spec/dummy/db/migrate/20120105153800_create_user_conversations.rb +12 -0
  69. data/spec/dummy/db/migrate/20120105153812_create_messages.rb +11 -0
  70. data/spec/dummy/db/schema.rb +45 -0
  71. data/spec/dummy/db/seeds.rb +12 -0
  72. data/spec/dummy/lib/assets/.gitkeep +0 -0
  73. data/spec/dummy/log/.gitkeep +0 -0
  74. data/spec/dummy/public/404.html +26 -0
  75. data/spec/dummy/public/422.html +26 -0
  76. data/spec/dummy/public/500.html +26 -0
  77. data/spec/dummy/public/favicon.ico +0 -0
  78. data/spec/dummy/script/rails +6 -0
  79. data/spec/factories.rb +29 -0
  80. data/spec/integration/conversations_controller_spec.rb +54 -0
  81. data/spec/integration/messages_controller_spec.rb +37 -0
  82. data/spec/integration/user_conversations_controller_spec.rb +51 -0
  83. data/spec/models/conversation_spec.rb +28 -0
  84. data/spec/models/message_spec.rb +23 -0
  85. data/spec/models/user_conversation_spec.rb +18 -0
  86. data/spec/spec_helper.rb +42 -0
  87. metadata +300 -0
@@ -0,0 +1,4 @@
1
+ /*
2
+ *= require_self
3
+ *= require_tree .
4
+ */
@@ -0,0 +1,122 @@
1
+ /* Example tokeninput style #2: Facebook style */
2
+ ul.token-input-list-facebook {
3
+ overflow: hidden;
4
+ height: auto !important;
5
+ height: 1%;
6
+ width: 400px;
7
+ border: 1px solid #8496ba;
8
+ cursor: text;
9
+ font-size: 12px;
10
+ font-family: Verdana;
11
+ min-height: 1px;
12
+ z-index: 999;
13
+ margin: 0;
14
+ padding: 0;
15
+ background-color: #fff;
16
+ list-style-type: none;
17
+ clear: left;
18
+ }
19
+
20
+ ul.token-input-list-facebook li input {
21
+ border: 0;
22
+ width: 100px;
23
+ padding: 3px 8px;
24
+ background-color: white;
25
+ margin: 2px 0;
26
+ -webkit-appearance: caret;
27
+ }
28
+
29
+ li.token-input-token-facebook {
30
+ overflow: hidden;
31
+ height: auto !important;
32
+ height: 15px;
33
+ margin: 3px;
34
+ padding: 1px 3px;
35
+ background-color: #eff2f7;
36
+ color: #000;
37
+ cursor: default;
38
+ border: 1px solid #ccd5e4;
39
+ font-size: 11px;
40
+ border-radius: 5px;
41
+ -moz-border-radius: 5px;
42
+ -webkit-border-radius: 5px;
43
+ float: left;
44
+ white-space: nowrap;
45
+ }
46
+
47
+ li.token-input-token-facebook p {
48
+ display: inline;
49
+ padding: 0;
50
+ margin: 0;
51
+ }
52
+
53
+ li.token-input-token-facebook span {
54
+ color: #a6b3cf;
55
+ margin-left: 5px;
56
+ font-weight: bold;
57
+ cursor: pointer;
58
+ }
59
+
60
+ li.token-input-selected-token-facebook {
61
+ background-color: #5670a6;
62
+ border: 1px solid #3b5998;
63
+ color: #fff;
64
+ }
65
+
66
+ li.token-input-input-token-facebook {
67
+ float: left;
68
+ margin: 0;
69
+ padding: 0;
70
+ list-style-type: none;
71
+ }
72
+
73
+ div.token-input-dropdown-facebook {
74
+ position: absolute;
75
+ width: 400px;
76
+ background-color: #fff;
77
+ overflow: hidden;
78
+ border-left: 1px solid #ccc;
79
+ border-right: 1px solid #ccc;
80
+ border-bottom: 1px solid #ccc;
81
+ cursor: default;
82
+ font-size: 11px;
83
+ font-family: Verdana;
84
+ z-index: 1;
85
+ }
86
+
87
+ div.token-input-dropdown-facebook p {
88
+ margin: 0;
89
+ padding: 5px;
90
+ font-weight: bold;
91
+ color: #777;
92
+ }
93
+
94
+ div.token-input-dropdown-facebook ul {
95
+ margin: 0;
96
+ padding: 0;
97
+ }
98
+
99
+ div.token-input-dropdown-facebook ul li {
100
+ background-color: #fff;
101
+ padding: 3px;
102
+ margin: 0;
103
+ list-style-type: none;
104
+ }
105
+
106
+ div.token-input-dropdown-facebook ul li.token-input-dropdown-item-facebook {
107
+ background-color: #fff;
108
+ }
109
+
110
+ div.token-input-dropdown-facebook ul li.token-input-dropdown-item2-facebook {
111
+ background-color: #fff;
112
+ }
113
+
114
+ div.token-input-dropdown-facebook ul li em {
115
+ font-weight: bold;
116
+ font-style: normal;
117
+ }
118
+
119
+ div.token-input-dropdown-facebook ul li.token-input-selected-dropdown-item-facebook {
120
+ background-color: #3b5998;
121
+ color: #fff;
122
+ }
@@ -0,0 +1,204 @@
1
+ /* Example tokeninput style #2: Mac Style */
2
+ fieldset.token-input-mac {
3
+ position: relative;
4
+ padding: 0;
5
+ margin: 5px 0;
6
+ background: #fff;
7
+ width: 400px;
8
+ border: 1px solid #A4BDEC;
9
+ border-radius: 10px;
10
+ -moz-border-radius: 10px;
11
+ -webkit-border-radius: 10px;
12
+ }
13
+
14
+ fieldset.token-input-mac.token-input-dropdown-mac {
15
+ border-radius: 10px 10px 0 0;
16
+ -moz-border-radius: 10px 10px 0 0;
17
+ -webkit-border-radius: 10px 10px 0 0;
18
+ box-shadow: 0 5px 20px 0 rgba(0,0,0,0.25);
19
+ -moz-box-shadow: 0 5px 20px 0 rgba(0,0,0,0.25);
20
+ -webkit-box-shadow: 0 5px 20px 0 rgba(0,0,0,0.25);
21
+ }
22
+
23
+ ul.token-input-list-mac {
24
+ overflow: hidden;
25
+ height: auto !important;
26
+ height: 1%;
27
+ cursor: text;
28
+ font-size: 12px;
29
+ font-family: Verdana;
30
+ min-height: 1px;
31
+ z-index: 999;
32
+ margin: 0;
33
+ padding: 3px;
34
+ background: transparent;
35
+ }
36
+
37
+ ul.token-input-list-mac.error {
38
+ border: 1px solid #C52020;
39
+ }
40
+
41
+ ul.token-input-list-mac li {
42
+ list-style-type: none;
43
+ }
44
+
45
+ li.token-input-token-mac p {
46
+ display: inline;
47
+ padding: 0;
48
+ margin: 0;
49
+ }
50
+
51
+ li.token-input-token-mac span {
52
+ color: #a6b3cf;
53
+ margin-left: 5px;
54
+ font-weight: bold;
55
+ cursor: pointer;
56
+ }
57
+
58
+ /* TOKENS */
59
+
60
+ li.token-input-token-mac {
61
+ font-family: "Lucida Grande", Arial, serif;
62
+ font-size: 9pt;
63
+ line-height: 12pt;
64
+ overflow: hidden;
65
+ height: 16px;
66
+ margin: 3px;
67
+ padding: 0 10px;
68
+ background: none;
69
+ background-color: #dee7f8;
70
+ color: #000;
71
+ cursor: default;
72
+ border: 1px solid #a4bdec;
73
+ border-radius: 15px;
74
+ -moz-border-radius: 15px;
75
+ -webkit-border-radius: 15px;
76
+ float: left;
77
+ }
78
+
79
+ li.token-input-highlighted-token-mac {
80
+ background-color: #bbcef1;
81
+ border: 1px solid #598bec;
82
+ color: #000;
83
+ }
84
+
85
+ li.token-input-selected-token-mac {
86
+ background-color: #598bec;
87
+ border: 1px solid transparent;
88
+ color: #fff;
89
+ }
90
+
91
+ li.token-input-highlighted-token-mac span.token-input-delete-token-mac {
92
+ color: #000;
93
+ }
94
+
95
+ li.token-input-selected-token-mac span.token-input-delete-token-mac {
96
+ color: #fff;
97
+ }
98
+
99
+ li.token-input-input-token-mac {
100
+ border: none;
101
+ background: transparent;
102
+ float: left;
103
+ padding: 0;
104
+ margin: 0;
105
+ }
106
+
107
+ li.token-input-input-token-mac input {
108
+ border: 0;
109
+ width: 100px;
110
+ padding: 3px;
111
+ background-color: transparent;
112
+ margin: 0;
113
+ }
114
+
115
+ div.token-input-dropdown-mac {
116
+ position: absolute;
117
+ border: 1px solid #A4BDEC;
118
+ border-top: none;
119
+ left: -1px;
120
+ right: -1px;
121
+ background-color: #fff;
122
+ overflow: hidden;
123
+ cursor: default;
124
+ font-size: 10pt;
125
+ font-family: "Lucida Grande", Arial, serif;
126
+ padding: 5px;
127
+ border-radius: 0 0 10px 10px;
128
+ -moz-border-radius: 0 0 10px 10px;
129
+ -webkit-border-radius: 0 0 10px 10px;
130
+ box-shadow: 0 5px 20px 0 rgba(0,0,0,0.25);
131
+ -moz-box-shadow: 0 5px 20px 0 rgba(0,0,0,0.25);
132
+ -webkit-box-shadow: 0 5px 20px 0 rgba(0,0,0,0.25);
133
+ clip:rect(0px, 1000px, 1000px, -10px);
134
+ }
135
+
136
+ div.token-input-dropdown-mac p {
137
+ font-size: 8pt;
138
+ margin: 0;
139
+ padding: 0 5px;
140
+ font-style: italic;
141
+ color: #aaa;
142
+ }
143
+
144
+ div.token-input-dropdown-mac h3.token-input-dropdown-category-mac {
145
+ font-family: "Lucida Grande", Arial, serif;
146
+ font-size: 10pt;
147
+ font-weight: bold;
148
+ border: none;
149
+ padding: 0 5px;
150
+ margin: 0;
151
+ }
152
+
153
+ div.token-input-dropdown-mac ul {
154
+ margin: 0;
155
+ padding: 0;
156
+ }
157
+
158
+ div.token-input-dropdown-mac ul li {
159
+ list-style-type: none;
160
+ cursor: pointer;
161
+ background: none;
162
+ background-color: #fff;
163
+ margin: 0;
164
+ padding: 0 0 0 25px;
165
+ }
166
+
167
+ div.token-input-dropdown-mac ul li.token-input-dropdown-item-mac {
168
+ background-color: #fff;
169
+ }
170
+
171
+ div.token-input-dropdown-mac ul li.token-input-dropdown-item-mac.odd {
172
+ background-color: #ECF4F9;
173
+ border-radius: 15px;
174
+ -moz-border-radius: 15px;
175
+ -webkit-border-radius: 15px;
176
+ }
177
+
178
+ div.token-input-dropdown-mac ul li.token-input-dropdown-item-mac span.token-input-dropdown-item-description-mac {
179
+ float: right;
180
+ font-size: 8pt;
181
+ font-style: italic;
182
+ padding: 0 10px 0 0;
183
+ color: #999;
184
+ }
185
+
186
+ div.token-input-dropdown-mac ul li strong {
187
+ font-weight: bold;
188
+ text-decoration: underline;
189
+ font-style: none;
190
+ }
191
+
192
+ div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac,
193
+ div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac.odd {
194
+ background-color: #598bec;
195
+ color: #fff;
196
+ border-radius: 15px;
197
+ -moz-border-radius: 15px;
198
+ -webkit-border-radius: 15px;
199
+ }
200
+
201
+ div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac span.token-input-dropdown-item-description-mac,
202
+ div.token-input-dropdown-mac ul li.token-input-selected-dropdown-item-mac.odd span.token-input-dropdown-item-description-mac {
203
+ color: #fff;
204
+ }
@@ -0,0 +1,113 @@
1
+ /* Example tokeninput style #1: Token vertical list*/
2
+ ul.token-input-list {
3
+ overflow: hidden;
4
+ height: auto !important;
5
+ height: 1%;
6
+ width: 400px;
7
+ border: 1px solid #999;
8
+ cursor: text;
9
+ font-size: 12px;
10
+ font-family: Verdana;
11
+ z-index: 999;
12
+ margin: 0;
13
+ padding: 0;
14
+ background-color: #fff;
15
+ list-style-type: none;
16
+ clear: left;
17
+ }
18
+
19
+ ul.token-input-list li {
20
+ list-style-type: none;
21
+ }
22
+
23
+ ul.token-input-list li input {
24
+ border: 0;
25
+ width: 350px;
26
+ padding: 3px 8px;
27
+ background-color: white;
28
+ -webkit-appearance: caret;
29
+ }
30
+
31
+ li.token-input-token {
32
+ overflow: hidden;
33
+ height: auto !important;
34
+ height: 1%;
35
+ margin: 3px;
36
+ padding: 3px 5px;
37
+ background-color: #d0efa0;
38
+ color: #000;
39
+ font-weight: bold;
40
+ cursor: default;
41
+ display: block;
42
+ }
43
+
44
+ li.token-input-token p {
45
+ float: left;
46
+ padding: 0;
47
+ margin: 0;
48
+ }
49
+
50
+ li.token-input-token span {
51
+ float: right;
52
+ color: #777;
53
+ cursor: pointer;
54
+ }
55
+
56
+ li.token-input-selected-token {
57
+ background-color: #08844e;
58
+ color: #fff;
59
+ }
60
+
61
+ li.token-input-selected-token span {
62
+ color: #bbb;
63
+ }
64
+
65
+ div.token-input-dropdown {
66
+ position: absolute;
67
+ width: 400px;
68
+ background-color: #fff;
69
+ overflow: hidden;
70
+ border-left: 1px solid #ccc;
71
+ border-right: 1px solid #ccc;
72
+ border-bottom: 1px solid #ccc;
73
+ cursor: default;
74
+ font-size: 12px;
75
+ font-family: Verdana;
76
+ z-index: 1;
77
+ }
78
+
79
+ div.token-input-dropdown p {
80
+ margin: 0;
81
+ padding: 5px;
82
+ font-weight: bold;
83
+ color: #777;
84
+ }
85
+
86
+ div.token-input-dropdown ul {
87
+ margin: 0;
88
+ padding: 0;
89
+ }
90
+
91
+ div.token-input-dropdown ul li {
92
+ background-color: #fff;
93
+ padding: 3px;
94
+ list-style-type: none;
95
+ }
96
+
97
+ div.token-input-dropdown ul li.token-input-dropdown-item {
98
+ background-color: #fafafa;
99
+ }
100
+
101
+ div.token-input-dropdown ul li.token-input-dropdown-item2 {
102
+ background-color: #fff;
103
+ }
104
+
105
+ div.token-input-dropdown ul li em {
106
+ font-weight: bold;
107
+ font-style: normal;
108
+ }
109
+
110
+ div.token-input-dropdown ul li.token-input-selected-dropdown-item {
111
+ background-color: #d0efa0;
112
+ }
113
+
@@ -0,0 +1,26 @@
1
+ module Conversations
2
+ class ConversationsController < ::ApplicationController
3
+ include ApplicationHelper
4
+
5
+ def new
6
+ @user = User.find(params[:user_id])
7
+ @conversation = Conversation.new
8
+ @conversation.messages.build
9
+ end
10
+
11
+ def create
12
+ @user = User.find(params[:user_id])
13
+ @conversation = Conversation.new params[:conversations_conversation]
14
+ @conversation.user_conversations.build
15
+ @conversation.user_conversations.first.user = @user
16
+ @conversation.messages.build :body => params[:conversations_conversation][:messages_attributes]['0'][:body]
17
+ @conversation.messages.first.user = @user
18
+ if @conversation.save
19
+ redirect_to user_conversation_path(@user, @user.user_conversations.last), notice: 'Conversation was successfully created.'
20
+ else
21
+ render action: "new"
22
+ end
23
+ end
24
+
25
+ end
26
+ end