cloudspace_chat_service 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 (70) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/CHANGELOG +4 -0
  4. data/Gemfile +30 -0
  5. data/Gemfile.lock +160 -0
  6. data/LICENSE.txt +20 -0
  7. data/README.rdoc +19 -0
  8. data/Rakefile +45 -0
  9. data/VERSION +1 -0
  10. data/app/controllers/cloudspace_chat/handle_messages.rb +77 -0
  11. data/app/models/cloudspace_chat.rb +5 -0
  12. data/app/models/cloudspace_chat/current_room_user.rb +31 -0
  13. data/app/models/cloudspace_chat/message.rb +18 -0
  14. data/app/models/cloudspace_chat/role.rb +4 -0
  15. data/app/models/cloudspace_chat/room.rb +5 -0
  16. data/app/models/cloudspace_chat/room_user_role.rb +6 -0
  17. data/config/routes.rb +4 -0
  18. data/lib/cloudspace_chat_service.rb +2 -0
  19. data/lib/cloudspace_chat_service/config.rb +31 -0
  20. data/lib/cloudspace_chat_service/engine.rb +4 -0
  21. data/lib/cloudspace_chat_service/railtie.rb +8 -0
  22. data/lib/generators/cloudspace_chat_service/install_generator.rb +45 -0
  23. data/lib/generators/cloudspace_chat_service/templates/config.rb +3 -0
  24. data/lib/generators/cloudspace_chat_service/templates/migrations/install_migration.rb.erb +51 -0
  25. data/spec/dummy/Rakefile +7 -0
  26. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  27. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  28. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  29. data/spec/dummy/config.ru +4 -0
  30. data/spec/dummy/config/application.rb +45 -0
  31. data/spec/dummy/config/boot.rb +10 -0
  32. data/spec/dummy/config/database.yml +22 -0
  33. data/spec/dummy/config/environment.rb +5 -0
  34. data/spec/dummy/config/environments/development.rb +26 -0
  35. data/spec/dummy/config/environments/production.rb +49 -0
  36. data/spec/dummy/config/environments/test.rb +35 -0
  37. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  38. data/spec/dummy/config/initializers/cloudspace_chat_service.rb +3 -0
  39. data/spec/dummy/config/initializers/inflections.rb +10 -0
  40. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  41. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  42. data/spec/dummy/config/initializers/session_store.rb +8 -0
  43. data/spec/dummy/config/locales/en.yml +5 -0
  44. data/spec/dummy/config/routes.rb +58 -0
  45. data/spec/dummy/db/migrate/20111101133120_create_cloudspace_chat_service_tables.rb +51 -0
  46. data/spec/dummy/db/schema.rb +55 -0
  47. data/spec/dummy/features/step_definitions/web_steps.rb +214 -0
  48. data/spec/dummy/features/support/env.rb +14 -0
  49. data/spec/dummy/features/support/paths.rb +22 -0
  50. data/spec/dummy/features/support/selectors.rb +39 -0
  51. data/spec/dummy/public/404.html +26 -0
  52. data/spec/dummy/public/422.html +26 -0
  53. data/spec/dummy/public/500.html +26 -0
  54. data/spec/dummy/public/favicon.ico +0 -0
  55. data/spec/dummy/public/javascripts/application.js +2 -0
  56. data/spec/dummy/public/javascripts/controls.js +965 -0
  57. data/spec/dummy/public/javascripts/dragdrop.js +974 -0
  58. data/spec/dummy/public/javascripts/effects.js +1123 -0
  59. data/spec/dummy/public/javascripts/prototype.js +6001 -0
  60. data/spec/dummy/public/javascripts/rails.js +191 -0
  61. data/spec/dummy/public/stylesheets/.gitkeep +0 -0
  62. data/spec/dummy/script/rails +6 -0
  63. data/spec/models/current_room_user_spec.rb +105 -0
  64. data/spec/models/message_spec.rb +39 -0
  65. data/spec/models/role_spec.rb +13 -0
  66. data/spec/models/room_spec.rb +22 -0
  67. data/spec/models/room_user_role_spec.rb +13 -0
  68. data/spec/spec_helper.rb +39 -0
  69. data/spec/support/readme +1 -0
  70. metadata +292 -0
@@ -0,0 +1,191 @@
1
+ (function() {
2
+ // Technique from Juriy Zaytsev
3
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
+ function isEventSupported(eventName) {
5
+ var el = document.createElement('div');
6
+ eventName = 'on' + eventName;
7
+ var isSupported = (eventName in el);
8
+ if (!isSupported) {
9
+ el.setAttribute(eventName, 'return;');
10
+ isSupported = typeof el[eventName] == 'function';
11
+ }
12
+ el = null;
13
+ return isSupported;
14
+ }
15
+
16
+ function isForm(element) {
17
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
+ }
19
+
20
+ function isInput(element) {
21
+ if (Object.isElement(element)) {
22
+ var name = element.nodeName.toUpperCase()
23
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
+ }
25
+ else return false
26
+ }
27
+
28
+ var submitBubbles = isEventSupported('submit'),
29
+ changeBubbles = isEventSupported('change')
30
+
31
+ if (!submitBubbles || !changeBubbles) {
32
+ // augment the Event.Handler class to observe custom events when needed
33
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
+ function(init, element, eventName, selector, callback) {
35
+ init(element, eventName, selector, callback)
36
+ // is the handler being attached to an element that doesn't support this event?
37
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
+ // "submit" => "emulated:submit"
40
+ this.eventName = 'emulated:' + this.eventName
41
+ }
42
+ }
43
+ )
44
+ }
45
+
46
+ if (!submitBubbles) {
47
+ // discover forms on the page by observing focus events which always bubble
48
+ document.on('focusin', 'form', function(focusEvent, form) {
49
+ // special handler for the real "submit" event (one-time operation)
50
+ if (!form.retrieve('emulated:submit')) {
51
+ form.on('submit', function(submitEvent) {
52
+ var emulated = form.fire('emulated:submit', submitEvent, true)
53
+ // if custom event received preventDefault, cancel the real one too
54
+ if (emulated.returnValue === false) submitEvent.preventDefault()
55
+ })
56
+ form.store('emulated:submit', true)
57
+ }
58
+ })
59
+ }
60
+
61
+ if (!changeBubbles) {
62
+ // discover form inputs on the page
63
+ document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
+ // special handler for real "change" events
65
+ if (!input.retrieve('emulated:change')) {
66
+ input.on('change', function(changeEvent) {
67
+ input.fire('emulated:change', changeEvent, true)
68
+ })
69
+ input.store('emulated:change', true)
70
+ }
71
+ })
72
+ }
73
+
74
+ function handleRemote(element) {
75
+ var method, url, params;
76
+
77
+ var event = element.fire("ajax:before");
78
+ if (event.stopped) return false;
79
+
80
+ if (element.tagName.toLowerCase() === 'form') {
81
+ method = element.readAttribute('method') || 'post';
82
+ url = element.readAttribute('action');
83
+ params = element.serialize();
84
+ } else {
85
+ method = element.readAttribute('data-method') || 'get';
86
+ url = element.readAttribute('href');
87
+ params = {};
88
+ }
89
+
90
+ new Ajax.Request(url, {
91
+ method: method,
92
+ parameters: params,
93
+ evalScripts: true,
94
+
95
+ onComplete: function(request) { element.fire("ajax:complete", request); },
96
+ onSuccess: function(request) { element.fire("ajax:success", request); },
97
+ onFailure: function(request) { element.fire("ajax:failure", request); }
98
+ });
99
+
100
+ element.fire("ajax:after");
101
+ }
102
+
103
+ function handleMethod(element) {
104
+ var method = element.readAttribute('data-method'),
105
+ url = element.readAttribute('href'),
106
+ csrf_param = $$('meta[name=csrf-param]')[0],
107
+ csrf_token = $$('meta[name=csrf-token]')[0];
108
+
109
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
+ element.parentNode.insert(form);
111
+
112
+ if (method !== 'post') {
113
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
+ form.insert(field);
115
+ }
116
+
117
+ if (csrf_param) {
118
+ var param = csrf_param.readAttribute('content'),
119
+ token = csrf_token.readAttribute('content'),
120
+ field = new Element('input', { type: 'hidden', name: param, value: token });
121
+ form.insert(field);
122
+ }
123
+
124
+ form.submit();
125
+ }
126
+
127
+
128
+ document.on("click", "*[data-confirm]", function(event, element) {
129
+ var message = element.readAttribute('data-confirm');
130
+ if (!confirm(message)) event.stop();
131
+ });
132
+
133
+ document.on("click", "a[data-remote]", function(event, element) {
134
+ if (event.stopped) return;
135
+ handleRemote(element);
136
+ event.stop();
137
+ });
138
+
139
+ document.on("click", "a[data-method]", function(event, element) {
140
+ if (event.stopped) return;
141
+ handleMethod(element);
142
+ event.stop();
143
+ });
144
+
145
+ document.on("submit", function(event) {
146
+ var element = event.findElement(),
147
+ message = element.readAttribute('data-confirm');
148
+ if (message && !confirm(message)) {
149
+ event.stop();
150
+ return false;
151
+ }
152
+
153
+ var inputs = element.select("input[type=submit][data-disable-with]");
154
+ inputs.each(function(input) {
155
+ input.disabled = true;
156
+ input.writeAttribute('data-original-value', input.value);
157
+ input.value = input.readAttribute('data-disable-with');
158
+ });
159
+
160
+ var element = event.findElement("form[data-remote]");
161
+ if (element) {
162
+ handleRemote(element);
163
+ event.stop();
164
+ }
165
+ });
166
+
167
+ document.on("ajax:after", "form", function(event, element) {
168
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
+ inputs.each(function(input) {
170
+ input.value = input.readAttribute('data-original-value');
171
+ input.removeAttribute('data-original-value');
172
+ input.disabled = false;
173
+ });
174
+ });
175
+
176
+ Ajax.Responders.register({
177
+ onCreate: function(request) {
178
+ var csrf_meta_tag = $$('meta[name=csrf-token]')[0];
179
+
180
+ if (csrf_meta_tag) {
181
+ var header = 'X-CSRF-Token',
182
+ token = csrf_meta_tag.readAttribute('content');
183
+
184
+ if (!request.options.requestHeaders) {
185
+ request.options.requestHeaders = {};
186
+ }
187
+ request.options.requestHeaders[header] = token;
188
+ }
189
+ }
190
+ });
191
+ })();
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,105 @@
1
+ require 'spec_helper'
2
+
3
+ describe CloudspaceChat::CurrentRoomUser do
4
+ before { @current_room_user = CloudspaceChat::CurrentRoomUser.new }
5
+ subject { @current_room_user }
6
+
7
+ it { should have_many :messages }
8
+ it { should have_many :room_user_roles }
9
+ it { should have_many(:roles).through(:room_user_roles) }
10
+ it { should belong_to :room }
11
+ it { should belong_to :user }
12
+
13
+ it { should respond_to :connected }
14
+ it { should respond_to :allowed }
15
+ it { should respond_to :banned }
16
+
17
+ it { should validate_presence_of :user_id }
18
+ it { should validate_presence_of :room_id }
19
+
20
+ it "should validate connected is true or false" do
21
+ @current_room_user.connected = true
22
+ should have(0).errors_on :connected
23
+
24
+ @current_room_user.connected = false
25
+ should have(0).errors_on :connected
26
+ end
27
+
28
+ it "should validate allowed is true or false" do
29
+ @current_room_user.allowed = true
30
+ should have(0).errors_on :allowed
31
+
32
+ @current_room_user.allowed = false
33
+ should have(0).errors_on :allowed
34
+ end
35
+
36
+ it "should validate banned is true or false" do
37
+ @current_room_user.banned = true
38
+ should have(0).errors_on :banned
39
+
40
+ @current_room_user.banned = false
41
+ should have(0).errors_on :banned
42
+ end
43
+
44
+ it { should respond_to :connect_and_generate_hash }
45
+ describe "connect and generate hash" do
46
+ before(:each) do
47
+ attributes = {
48
+ :room_id => 1,
49
+ :user_id => 2,
50
+ :connected => false,
51
+ :banned => false,
52
+ :allowed => true
53
+ }
54
+ @room_user = CloudspaceChat::CurrentRoomUser.create(attributes)
55
+ end
56
+
57
+ it "should generate a hash and set connected" do
58
+ @room_user.connect_and_generate_hash
59
+ @room_user.connected.should be_true
60
+ @room_user.connected_hash.length.should > 0
61
+ end
62
+
63
+ it "should not do that if the user is banned" do
64
+ @room_user.banned = true
65
+ @room_user.connect_and_generate_hash
66
+ @room_user.connected.should be_false
67
+ @room_user.connected_hash.should be_nil
68
+ end
69
+
70
+ it "should return the value of the connected hash" do
71
+ returned_val = @room_user.connect_and_generate_hash
72
+ @room_user.connected_hash.should == returned_val
73
+ end
74
+
75
+ it "should save the user after making changes so it better pass validations" do
76
+ @room_user.should_receive(:save)
77
+ @room_user.connect_and_generate_hash
78
+ end
79
+ end
80
+
81
+ it { should respond_to :disconnect_and_remove_hash }
82
+ describe "disconnect_and_remove_hash" do
83
+ before(:each) do
84
+ attributes = {
85
+ :room_id => 1,
86
+ :user_id => 2,
87
+ :connected => true,
88
+ :banned => false,
89
+ :allowed => true
90
+ }
91
+ @room_user = CloudspaceChat::CurrentRoomUser.create(attributes)
92
+ end
93
+
94
+ it "should remove the hash and set to disconnected" do
95
+ @room_user.disconnect_and_remove_hash
96
+ @room_user.connected.should be_false
97
+ @room_user.connected_hash.length.should == 0
98
+ end
99
+
100
+ it "should save the user after making changes so it better pass validations" do
101
+ @room_user.should_receive(:save)
102
+ @room_user.disconnect_and_remove_hash
103
+ end
104
+ end
105
+ end
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe CloudspaceChat::Message do
4
+ before { @message = CloudspaceChat::Message.new }
5
+ subject { @message }
6
+
7
+ it { should belong_to :current_room_user }
8
+
9
+ it { should respond_to :input_text }
10
+ it { should respond_to :output_text }
11
+ it { should respond_to :visible }
12
+
13
+ it { should validate_presence_of :current_room_user_id }
14
+ it { should validate_presence_of :input_text }
15
+ it { should validate_presence_of :output_text }
16
+
17
+ it "should validate visible is true or false" do
18
+ @message.visible = true
19
+ should have(0).errors_on :visible
20
+
21
+ @message.visible = false
22
+ should have(0).errors_on :visible
23
+ end
24
+
25
+ it { should respond_to :prepare_input_text }
26
+ describe ".prepare_input_text" do
27
+ it "should be called before validations" do
28
+ @message.should_receive(:prepare_input_text)
29
+ @message.valid?
30
+ end
31
+
32
+ it "should set the output to input and set the message to visible" do
33
+ @message.attributes = { :input_text => "hello", :visible => nil }
34
+ @message.valid?
35
+ @message.output_text.should == "hello"
36
+ @message.visible.should be_true
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe CloudspaceChat::Role do
4
+ before { @role = CloudspaceChat::Role.new }
5
+ subject { @role }
6
+
7
+ it { should have_many :room_user_roles }
8
+
9
+ it { should respond_to :name }
10
+
11
+ it { should validate_presence_of :name }
12
+
13
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe CloudspaceChat::Room do
4
+ before { @room = CloudspaceChat::Room.new }
5
+ subject { @room }
6
+
7
+ it { should have_many :current_room_users }
8
+
9
+ it { should respond_to :name }
10
+ it { should respond_to :public }
11
+
12
+ it { should validate_presence_of :name }
13
+
14
+ it "should validate public is true or false" do
15
+ @room.public = true
16
+ should have(0).errors_on :public
17
+
18
+ @room.public = false
19
+ should have(0).errors_on :public
20
+ end
21
+
22
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe CloudspaceChat::RoomUserRole do
4
+ before { @room_user_role = CloudspaceChat::RoomUserRole.new }
5
+ subject { @room_user_role }
6
+
7
+ it { should belong_to :current_room_user }
8
+ it { should belong_to :role }
9
+
10
+ it { should validate_presence_of :current_room_user_id }
11
+ it { should validate_presence_of :role_id }
12
+
13
+ end
@@ -0,0 +1,39 @@
1
+ # Configure Rails Envinronment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require "ruby-debug"
5
+
6
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
7
+ require "rails/test_help"
8
+ require "rspec/rails"
9
+ require "shoulda"
10
+
11
+ ActionMailer::Base.delivery_method = :test
12
+ ActionMailer::Base.perform_deliveries = true
13
+ ActionMailer::Base.default_url_options[:host] = "test.com"
14
+
15
+ Rails.backtrace_cleaner.remove_silencers!
16
+
17
+ # Configure capybara for integration testing
18
+ require "capybara/rails"
19
+ Capybara.default_driver = :rack_test
20
+ Capybara.default_selector = :css
21
+
22
+ # Run any available migration
23
+ ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
24
+
25
+ RSpec.configure do |config|
26
+ # Remove this line if you don't want RSpec's should and should_not
27
+ # methods or matchers
28
+ require 'rspec/expectations'
29
+ config.include RSpec::Matchers
30
+
31
+ # == Mock Framework
32
+ config.mock_with :rspec
33
+
34
+ # use transactions
35
+ config.use_transactional_fixtures = true
36
+ end
37
+
38
+ # Load support files
39
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
@@ -0,0 +1 @@
1
+ This file must be here to ensure the folder is in the repo. Delete when there are actual support files.
metadata ADDED
@@ -0,0 +1,292 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cloudspace_chat_service
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Jeremiah Hemphill
9
+ - Ethan Pemble
10
+ - Adam Dunson
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+
15
+ date: 2011-11-01 00:00:00 Z
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: rails
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - "="
23
+ - !ruby/object:Gem::Version
24
+ version: 3.0.7
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: *id001
28
+ - !ruby/object:Gem::Dependency
29
+ name: capybara
30
+ requirement: &id002 !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ">="
34
+ - !ruby/object:Gem::Version
35
+ version: 0.4.0
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: *id002
39
+ - !ruby/object:Gem::Dependency
40
+ name: sqlite3
41
+ requirement: &id003 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: "0"
47
+ type: :development
48
+ prerelease: false
49
+ version_requirements: *id003
50
+ - !ruby/object:Gem::Dependency
51
+ name: ruby-debug19
52
+ requirement: &id004 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ type: :development
59
+ prerelease: false
60
+ version_requirements: *id004
61
+ - !ruby/object:Gem::Dependency
62
+ name: rspec
63
+ requirement: &id005 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 2.6.0
69
+ type: :development
70
+ prerelease: false
71
+ version_requirements: *id005
72
+ - !ruby/object:Gem::Dependency
73
+ name: rspec-rails
74
+ requirement: &id006 !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ~>
78
+ - !ruby/object:Gem::Version
79
+ version: 2.6.1
80
+ type: :development
81
+ prerelease: false
82
+ version_requirements: *id006
83
+ - !ruby/object:Gem::Dependency
84
+ name: shoulda
85
+ requirement: &id007 !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: "0"
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: *id007
94
+ - !ruby/object:Gem::Dependency
95
+ name: yard
96
+ requirement: &id008 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ~>
100
+ - !ruby/object:Gem::Version
101
+ version: 0.6.0
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: *id008
105
+ - !ruby/object:Gem::Dependency
106
+ name: cucumber
107
+ requirement: &id009 !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: "0"
113
+ type: :development
114
+ prerelease: false
115
+ version_requirements: *id009
116
+ - !ruby/object:Gem::Dependency
117
+ name: cucumber-rails
118
+ requirement: &id010 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: "0"
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: *id010
127
+ - !ruby/object:Gem::Dependency
128
+ name: database_cleaner
129
+ requirement: &id011 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: "0"
135
+ type: :development
136
+ prerelease: false
137
+ version_requirements: *id011
138
+ - !ruby/object:Gem::Dependency
139
+ name: bundler
140
+ requirement: &id012 !ruby/object:Gem::Requirement
141
+ none: false
142
+ requirements:
143
+ - - ~>
144
+ - !ruby/object:Gem::Version
145
+ version: 1.0.0
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: *id012
149
+ - !ruby/object:Gem::Dependency
150
+ name: jeweler
151
+ requirement: &id013 !ruby/object:Gem::Requirement
152
+ none: false
153
+ requirements:
154
+ - - ~>
155
+ - !ruby/object:Gem::Version
156
+ version: 1.6.3
157
+ type: :development
158
+ prerelease: false
159
+ version_requirements: *id013
160
+ - !ruby/object:Gem::Dependency
161
+ name: rcov
162
+ requirement: &id014 !ruby/object:Gem::Requirement
163
+ none: false
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: "0"
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: *id014
171
+ - !ruby/object:Gem::Dependency
172
+ name: ci_reporter
173
+ requirement: &id015 !ruby/object:Gem::Requirement
174
+ none: false
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: "0"
179
+ type: :development
180
+ prerelease: false
181
+ version_requirements: *id015
182
+ description: Extendable chat service for cloudspace
183
+ email: jeremiah@cloudspace.com,epemble@cloudspace.com,adam@cloudspace.com
184
+ executables: []
185
+
186
+ extensions: []
187
+
188
+ extra_rdoc_files:
189
+ - LICENSE.txt
190
+ - README.rdoc
191
+ files:
192
+ - .document
193
+ - .rspec
194
+ - CHANGELOG
195
+ - Gemfile
196
+ - Gemfile.lock
197
+ - LICENSE.txt
198
+ - README.rdoc
199
+ - Rakefile
200
+ - VERSION
201
+ - app/controllers/cloudspace_chat/handle_messages.rb
202
+ - app/models/cloudspace_chat.rb
203
+ - app/models/cloudspace_chat/current_room_user.rb
204
+ - app/models/cloudspace_chat/message.rb
205
+ - app/models/cloudspace_chat/role.rb
206
+ - app/models/cloudspace_chat/room.rb
207
+ - app/models/cloudspace_chat/room_user_role.rb
208
+ - config/routes.rb
209
+ - lib/cloudspace_chat_service.rb
210
+ - lib/cloudspace_chat_service/config.rb
211
+ - lib/cloudspace_chat_service/engine.rb
212
+ - lib/cloudspace_chat_service/railtie.rb
213
+ - lib/generators/cloudspace_chat_service/install_generator.rb
214
+ - lib/generators/cloudspace_chat_service/templates/config.rb
215
+ - lib/generators/cloudspace_chat_service/templates/migrations/install_migration.rb.erb
216
+ - spec/dummy/Rakefile
217
+ - spec/dummy/app/controllers/application_controller.rb
218
+ - spec/dummy/app/helpers/application_helper.rb
219
+ - spec/dummy/app/views/layouts/application.html.erb
220
+ - spec/dummy/config.ru
221
+ - spec/dummy/config/application.rb
222
+ - spec/dummy/config/boot.rb
223
+ - spec/dummy/config/database.yml
224
+ - spec/dummy/config/environment.rb
225
+ - spec/dummy/config/environments/development.rb
226
+ - spec/dummy/config/environments/production.rb
227
+ - spec/dummy/config/environments/test.rb
228
+ - spec/dummy/config/initializers/backtrace_silencers.rb
229
+ - spec/dummy/config/initializers/cloudspace_chat_service.rb
230
+ - spec/dummy/config/initializers/inflections.rb
231
+ - spec/dummy/config/initializers/mime_types.rb
232
+ - spec/dummy/config/initializers/secret_token.rb
233
+ - spec/dummy/config/initializers/session_store.rb
234
+ - spec/dummy/config/locales/en.yml
235
+ - spec/dummy/config/routes.rb
236
+ - spec/dummy/db/migrate/20111101133120_create_cloudspace_chat_service_tables.rb
237
+ - spec/dummy/db/schema.rb
238
+ - spec/dummy/features/step_definitions/web_steps.rb
239
+ - spec/dummy/features/support/env.rb
240
+ - spec/dummy/features/support/paths.rb
241
+ - spec/dummy/features/support/selectors.rb
242
+ - spec/dummy/public/404.html
243
+ - spec/dummy/public/422.html
244
+ - spec/dummy/public/500.html
245
+ - spec/dummy/public/favicon.ico
246
+ - spec/dummy/public/javascripts/application.js
247
+ - spec/dummy/public/javascripts/controls.js
248
+ - spec/dummy/public/javascripts/dragdrop.js
249
+ - spec/dummy/public/javascripts/effects.js
250
+ - spec/dummy/public/javascripts/prototype.js
251
+ - spec/dummy/public/javascripts/rails.js
252
+ - spec/dummy/public/stylesheets/.gitkeep
253
+ - spec/dummy/script/rails
254
+ - spec/models/current_room_user_spec.rb
255
+ - spec/models/message_spec.rb
256
+ - spec/models/role_spec.rb
257
+ - spec/models/room_spec.rb
258
+ - spec/models/room_user_role_spec.rb
259
+ - spec/spec_helper.rb
260
+ - spec/support/readme
261
+ homepage: http://github.com/jeremiahishere/cloudspace_chat_service
262
+ licenses:
263
+ - MIT
264
+ post_install_message:
265
+ rdoc_options: []
266
+
267
+ require_paths:
268
+ - lib
269
+ required_ruby_version: !ruby/object:Gem::Requirement
270
+ none: false
271
+ requirements:
272
+ - - ">="
273
+ - !ruby/object:Gem::Version
274
+ hash: -2018485719706912435
275
+ segments:
276
+ - 0
277
+ version: "0"
278
+ required_rubygems_version: !ruby/object:Gem::Requirement
279
+ none: false
280
+ requirements:
281
+ - - ">="
282
+ - !ruby/object:Gem::Version
283
+ version: "0"
284
+ requirements: []
285
+
286
+ rubyforge_project:
287
+ rubygems_version: 1.8.5
288
+ signing_key:
289
+ specification_version: 3
290
+ summary: Extendable chat service for cloudspace
291
+ test_files: []
292
+