simple_messenger 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 77da1ce00f5c0a237fef690def25a3fd35d6f952
4
+ data.tar.gz: e92f498bb0bf4da6a72803b9fb37a8a0d16c3167
5
+ SHA512:
6
+ metadata.gz: 0c26d9adbc6fde8a2486d641d0011ec06d1579efcd86a33a491c093382951f01d36bc38cc3e47ff641107d70b74fc85d4254aae2648632795bc32c7d4a309029
7
+ data.tar.gz: 9ec7d27c57379da9cc9f51a5abab79f8aaad385ac0e7f063928ec597f8c4291939ff8a1b9cba2aac330cd1ad7cefab779c525c819a98316c593a9a12b9601b92
data/.gitignore ADDED
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .project
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in simple_messenger.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Kainage
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,179 @@
1
+ # Simple Messenger
2
+
3
+ Add simple messaging functionality to active record models.
4
+
5
+ **Requires ruby >= 2.0.0**
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'simple_messenger'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ ```
18
+ $ bundle
19
+ ```
20
+
21
+ Or install it yourself as:
22
+
23
+ ```
24
+ $ gem install simple_messenger
25
+ ```
26
+
27
+ Run the generator to create the migration file and message model:
28
+
29
+ ```
30
+ $ rails g messages
31
+ ```
32
+
33
+ Migrate the database:
34
+
35
+ ```
36
+ $ rake db:migrate
37
+ ```
38
+
39
+ ## Usage
40
+
41
+ ### Message Model
42
+
43
+ This will be generated and placed in your app/models folder:
44
+
45
+ ```ruby
46
+ class Message
47
+ include SimpleMessenger::MessageAdditions
48
+ end
49
+ ```
50
+
51
+ You can add any custom functionality to the Message model here.
52
+
53
+ ### Messenger Model
54
+
55
+ Add the appropriate line to the top of your activerecord model:
56
+
57
+ ```ruby
58
+ class User
59
+ simple_messenger
60
+ end
61
+ ```
62
+
63
+ The class is not restricted to User, it can be any class you add ```simple_messenger``` to.
64
+
65
+ ### Creating Messages
66
+
67
+ Send messages by passing in a sender, receiver and some content:
68
+
69
+ ```ruby
70
+ bob = User.create
71
+ alice = User.create
72
+ bob.create_message!(receiver: alice, content: 'Hello')
73
+ # => <Message id: 1 sender_id: 1 sender_type 'User' ... content: "Hello" viewed: false>
74
+
75
+ bob.messages.count
76
+ # => 1
77
+
78
+ bob.sent_messages.count
79
+ # => 1
80
+
81
+ bob.received_messages.count
82
+ # => 0
83
+
84
+ bob.new_messages.count
85
+ # => 0
86
+
87
+ bob.messages_with(alice)
88
+ # => <Message id: 1 ... >
89
+
90
+ alice.messages.count
91
+ # => 1
92
+
93
+ alice.sent_messages.count
94
+ # => 0
95
+
96
+ alice.received_messages.count
97
+ # => 1
98
+
99
+ alice.new_messages.count
100
+ # => 1
101
+
102
+ alice.messages_with(bob)
103
+ # => <Message id: 1 ... >
104
+ ```
105
+
106
+ ### Messenger Helpers
107
+
108
+ The following constructors are available:
109
+
110
+ ```ruby
111
+ bob.build_message
112
+ bob.new_message
113
+ bob.create_message
114
+ bob.create_message!
115
+ ```
116
+
117
+ Due to the nature of the design you would have to type:
118
+
119
+ ```ruby
120
+ bob.sent_messages.build ...
121
+ ```
122
+
123
+ As typing the ```bob.messages``` returns a specialized relation and is not
124
+ created through a ```has_many``` relationship:
125
+
126
+ ### Message Helpers
127
+
128
+ **Class Methods**
129
+
130
+ To get all the member ids in a collection of messages use the following:
131
+
132
+ ```ruby
133
+ Message.uniq_member_ids_for(messages)
134
+ ```
135
+
136
+ You can optionally omit one or more member from the collection:
137
+
138
+ ```ruby
139
+ Message.uniq_member_ids_for(messages, remove: current_user)
140
+ ```
141
+ This could be useful for rendering a list of users which the current_user has
142
+ messaged.
143
+
144
+ ```remove``` can be an id, array of ids, ActiveRecord object, collection of
145
+ ActiveRecord objects, or anything that ```respond_to?(:id)```
146
+
147
+ **Instance Methods**
148
+
149
+ Check to see if the message has been read:
150
+
151
+ ```ruby
152
+ msg = Message.create(sender: bob, receiver: alice, content: 'Hello')
153
+ # => <Message ... viewed: false>
154
+ msg.read?(bob) # true as bob is the sender
155
+ # => true
156
+ msg.read?(alice)
157
+ # => false
158
+ ```
159
+
160
+ Find the opposite member in the message:
161
+
162
+ ```ruby
163
+ msg = Message.create(sender: bob, receiver: alice, content: 'Hello')
164
+ # => <Message ... >
165
+ msg.member_who_is_not(bob)
166
+ # => <User ... username: 'alice'>
167
+ msg.member_who_is_not(alice)
168
+ # => <User ... username: 'bob'>
169
+ msg.member_who_is_not(jimmy)
170
+ # => SimpleMessenger::NotInvolved error
171
+ ```
172
+
173
+ ## Contributing
174
+
175
+ 1. Fork it
176
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
177
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
178
+ 4. Push to the branch (`git push origin my-new-feature`)
179
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task default: :spec
@@ -0,0 +1,16 @@
1
+ require 'rails/generators/migration'
2
+
3
+ class MessagesGenerator < Rails::Generators::Base
4
+ include Rails::Generators::Migration
5
+
6
+ source_root File.expand_path("../templates", __FILE__)
7
+
8
+ def self.next_migration_number(path)
9
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
10
+ end
11
+
12
+ def create_simple_messenger_files
13
+ copy_file "message.rb", "app/models/message.rb"
14
+ migration_template "create_messages.rb", "db/migrate/create_messages.rb"
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ class CreateMessages < ActiveRecord::Migration
2
+ def change
3
+ create_table :messages do |t|
4
+ t.references :sender, polymorphic: true, null: false
5
+ t.references :receiver, polymorphic: true, null: false
6
+ t.string :subject
7
+ t.text :content, :null => false
8
+ t.boolean :viewed, :null => false, :default => false
9
+
10
+ t.timestamps
11
+ end
12
+
13
+ add_index :messages, [:sender_id, :sender_type]
14
+ add_index :messages, [:receiver_id, :receiver_type]
15
+ end
16
+ end
@@ -0,0 +1,3 @@
1
+ class Message < ActiveRecord::Base
2
+ include SimpleMessenger::MessageAdditions
3
+ end
@@ -0,0 +1,70 @@
1
+ module SimpleMessenger
2
+ class NotInvolved < StandardError; end
3
+
4
+ module MessageAdditions
5
+ def self.included(feature_model)
6
+ feature_model.belongs_to :sender, polymorphic: true
7
+ feature_model.belongs_to :receiver, polymorphic: true
8
+
9
+ feature_model.scope :unviewed, -> { feature_model.where(viewed: false) }
10
+
11
+ # Using ARel find all the messages where the model is sender or receiver.
12
+ feature_model.scope :all_for, ->(model) {
13
+ feature_model.where(
14
+ ((feature_model.arel_table[:sender_id].eq model.id).
15
+ and(feature_model.arel_table[:sender_type].eq model.class.to_s)).
16
+ or((feature_model.arel_table[:receiver_id].eq model.id).
17
+ and(feature_model.arel_table[:receiver_type].eq model.class.to_s))
18
+ )
19
+ }
20
+
21
+ # Find a conversations between 2 models by joining all_for on both.
22
+ feature_model.scope :between, ->(models) {
23
+ feature_model.all_for(models.first).all_for(models.last)
24
+ }
25
+
26
+ feature_model.validates_presence_of :sender_id, :sender_type,
27
+ :receiver_id, :receiver_type
28
+
29
+ # When given an array of messages, this will return a list of all the ids of the
30
+ # models that have interacted together. Useful for creating a list of objects
31
+ # which a given object has communicated with.
32
+ #
33
+ # remove is optional and takes a fixnum, object or array of either and will remove
34
+ # it's id from the list. Useful for sending a current_user in to get a unique
35
+ # list of other users which they have communicated with.
36
+ def feature_model.uniq_member_ids_for(msgs, remove:nil)
37
+ ids = msgs.map { |m| [m.receiver_id, m.sender_id] }.flatten.uniq
38
+ ids -= case
39
+ when remove.respond_to?(:first)
40
+ # If remove is an array, check for ActiveRecord object, if not return the element
41
+ remove.first.respond_to?(:id) ? remove.map(&:id) : remove
42
+ else
43
+ # Check for ActiveRecord object, otherwise return the passed object
44
+ [remove.respond_to?(:id) ? remove.id : remove].flatten
45
+ end if remove
46
+ ids
47
+ end
48
+
49
+ # Check if the message has been read by the recipient for highlighting
50
+ # in a conversation. Without the check for the user being the recipient,
51
+ # the messages that she sent would return true.
52
+ def read?(obj)
53
+ obj == receiver && viewed?
54
+ end
55
+
56
+ # This will return the other member in the communication then the one
57
+ # provided. Note: still struggling with a good name for this method.
58
+ def member_who_is_not(obj)
59
+ case obj
60
+ when sender
61
+ receiver
62
+ when receiver
63
+ sender
64
+ else
65
+ raise SimpleMessenger::NotInvolved
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,59 @@
1
+ module SimpleMessenger
2
+ module MessengerAdditions
3
+ def self.included(base)
4
+ base.extend ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+ def simple_messenger
9
+ has_many :sent_messages,
10
+ :as => :sender,
11
+ :class_name => 'Message',
12
+ :dependent => :destroy
13
+
14
+ has_many :received_messages,
15
+ :as => :receiver,
16
+ :class_name => 'Message',
17
+ :dependent => :destroy
18
+
19
+ include SimpleMessenger::MessengerAdditions::InstanceMethods
20
+ end
21
+ end
22
+
23
+ module InstanceMethods
24
+ def messages
25
+ Message.all_for(self)
26
+ end
27
+
28
+ def new_messages
29
+ received_messages.unviewed
30
+ end
31
+
32
+ def messages_with(other_messenger)
33
+ Message.between([self, other_messenger])
34
+ end
35
+
36
+ # Build helper instead of typing User.sent_messages.build
37
+ def build_message(*args)
38
+ sent_messages.build(*args)
39
+ end
40
+
41
+ # New helper instead of typing User.sent_messages.new
42
+ def new_message(*args)
43
+ sent_messages.new(*args)
44
+ end
45
+
46
+ # Create helper instead of typing User.sent_messages.create
47
+ def create_message(*args)
48
+ sent_messages.create(*args)
49
+ end
50
+
51
+ # Create! helper instead of typing User.sent_messages.create!
52
+ def create_message!(*args)
53
+ sent_messages.create!(*args)
54
+ end
55
+ end
56
+ end
57
+ end
58
+
59
+ ActiveRecord::Base.send(:include, SimpleMessenger::MessengerAdditions)
@@ -0,0 +1,3 @@
1
+ module SimpleMessenger
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,5 @@
1
+ require "simple_messenger/version"
2
+
3
+ require 'active_record' unless defined? Rails
4
+ require 'simple_messenger/message_additions'
5
+ require 'simple_messenger/messenger_additions'
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'simple_messenger/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "simple_messenger"
8
+ spec.version = SimpleMessenger::VERSION
9
+ spec.authors = ["Kainage"]
10
+ spec.email = ["kainage@gmail.com"]
11
+ spec.description = %q{Add a simple messaging functionality between ActiveRecord models}
12
+ spec.summary = %q{Add a simple messaging functionality between ActiveRecord models}
13
+ spec.homepage = "https://github.com/kainage/simple_messenger"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "activerecord", "~> 4.0.0.rc1"
22
+
23
+ spec.add_development_dependency "bundler", "~> 1.3"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency "sqlite3"
27
+ spec.add_development_dependency "shoulda-matchers"
28
+ end
@@ -0,0 +1,7 @@
1
+ class User < ActiveRecord::Base
2
+ simple_messenger
3
+ end
4
+
5
+ class Message < ActiveRecord::Base
6
+ include SimpleMessenger::MessageAdditions
7
+ end
@@ -0,0 +1,19 @@
1
+ ActiveRecord::Schema.define :version => 0 do
2
+ create_table :messages do |t|
3
+ t.references :sender, polymorphic: true, null: false
4
+ t.references :receiver, polymorphic: true, null: false
5
+ t.string :subject
6
+ t.text :content, :null => false
7
+ t.boolean :viewed, :null => false, :default => false
8
+
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :messages, [:sender_id, :sender_type]
13
+ add_index :messages, [:receiver_id, :receiver_type]
14
+
15
+ create_table :users do |t|
16
+ t.string :username
17
+ t.text :email
18
+ end
19
+ end
@@ -0,0 +1,112 @@
1
+ require 'spec_helper'
2
+
3
+ describe Message do
4
+ # puts ActiveRecord::Base.connection.execute("PRAGMA table_info(messages);")
5
+ # Helper method to make messages quickly
6
+ def msg(uzer, recip = false)
7
+ if recip
8
+ {
9
+ sender_id: 1234, sender_type: 'User', receiver_id: uzer.id,
10
+ receiver_type: 'User', content: 'Hello'
11
+ }
12
+ else
13
+ {
14
+ sender_id: uzer.id, sender_type: 'User', receiver_id: 1234,
15
+ receiver_type: 'User', content: 'Hello'
16
+ }
17
+ end
18
+ end
19
+
20
+ before :each do
21
+ @user1 = User.create!
22
+ @user2 = User.create!
23
+ @message = Message.create!(sender: @user1, receiver: @user2, content: 'Hello')
24
+ end
25
+
26
+ context "class methods" do
27
+ specify { @message.should be_valid }
28
+ specify { @message.should belong_to(:sender) }
29
+ specify { @message.should belong_to(:receiver) }
30
+
31
+ specify { @message.should validate_presence_of(:sender_id) }
32
+ specify { @message.should validate_presence_of(:sender_type) }
33
+ specify { @message.should validate_presence_of(:receiver_id) }
34
+ specify { @message.should validate_presence_of(:receiver_type) }
35
+
36
+ it "should give you all messaged wheather you are the seder or recipient" do
37
+ Message.all_for(@user1).count.should eql 1
38
+
39
+ Message.create! msg(@user1)
40
+ Message.all_for(@user1).count.should eql 2
41
+
42
+ Message.create! msg(@user1, true)
43
+ Message.all_for(@user1).count.should eql 3
44
+ end
45
+
46
+ it "should give all the messages between you and another user" do
47
+ Message.between([@user1, @user2]).count.should eql 1
48
+
49
+ Message.create!(sender: @user1, receiver: @user2, content: 'Hello')
50
+ Message.between([@user1, @user2]).count.should eql 2
51
+
52
+ Message.create!(msg(@user1))
53
+ Message.between([@user1, @user2]).count.should eql 2
54
+ end
55
+
56
+ describe "finding uniq members" do
57
+ before :each do
58
+ @user3 = User.create!
59
+ @messages = [
60
+ Message.create!(msg(@user1)),
61
+ Message.create!(msg(@user2)),
62
+ Message.create!(msg(@user3))
63
+ ]
64
+ end
65
+
66
+ it "should return uniq memeber" do
67
+ Message.uniq_member_ids_for(@messages).should =~
68
+ [1234, @user1.id, @user2.id, @user3.id]
69
+ end
70
+
71
+ it "should remove a given fixnum" do
72
+ Message.uniq_member_ids_for(@messages, remove: 1234).should =~
73
+ [@user1.id, @user2.id, @user3.id]
74
+ end
75
+
76
+ it "should remove a given array of fixnum" do
77
+ Message.uniq_member_ids_for(@messages, remove: [@user1.id, @user2.id]).should =~
78
+ [1234, @user3.id]
79
+ end
80
+
81
+ it "should remove a given ar object" do
82
+ Message.uniq_member_ids_for(@messages, remove: @user1).should =~
83
+ [1234, @user2.id, @user3.id]
84
+ end
85
+
86
+ it "should remove a given array of ar objects" do
87
+ Message.uniq_member_ids_for(@messages, remove: [@user1, @user2]).should =~
88
+ [1234, @user3.id]
89
+ end
90
+ end
91
+ end
92
+
93
+ context "instance methods" do
94
+ specify { @message.read?(@user1).should be_false }
95
+ specify { @message.read?(@user2).should be_false }
96
+
97
+ it "should act as viewed when applicable" do
98
+ @message.viewed = true
99
+ @message.read?(@user1).should be_false
100
+ @message.read?(@user2).should be_true
101
+ end
102
+
103
+ it "should return the opposite model" do
104
+ @message.member_who_is_not(@user1).should eq @user2
105
+ @message.member_who_is_not(@user2).should eq @user1
106
+ end
107
+
108
+ it "should raise execption if passed model is neither sender or receiver" do
109
+ expect { @message.member_who_is_not(User.create!) }.to raise_error SimpleMessenger::NotInvolved
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,89 @@
1
+ require 'spec_helper'
2
+
3
+ describe SimpleMessenger::MessengerAdditions do
4
+ # puts ActiveRecord::Base.connection.execute("PRAGMA table_info(messages);")
5
+ # Helper method to make messages quickly
6
+ def msg(uzer, recip = false, read = false)
7
+ if recip
8
+ {
9
+ sender_id: 1234, sender_type: 'User', receiver_id: uzer.id,
10
+ receiver_type: 'User', content: 'Hello', viewed: read
11
+ }
12
+ else
13
+ {
14
+ sender_id: uzer.id, sender_type: 'User', receiver_id: 1234,
15
+ receiver_type: 'User', content: 'Hello', viewed: read
16
+ }
17
+ end
18
+ end
19
+
20
+ before :each do
21
+ @user1 = User.create!
22
+ @user2 = User.create!
23
+ @message = Message.create!(sender: @user1, receiver: @user2, content: 'Hello')
24
+ end
25
+
26
+ it "should return all sent messages" do
27
+ @user1.sent_messages.count.should eql 1
28
+
29
+ Message.create! msg(@user1)
30
+ @user1.sent_messages.count.should eql 2
31
+
32
+ Message.create! msg(@user1, true)
33
+ @user1.sent_messages.count.should eql 2
34
+ end
35
+
36
+ it "should return all received messages"do
37
+ @user1.received_messages.count.should eql 0
38
+
39
+ Message.create! msg(@user1)
40
+ @user1.received_messages.count.should eql 0
41
+
42
+ Message.create! msg(@user1, true)
43
+ @user1.received_messages.count.should eql 1
44
+ end
45
+
46
+ it "should return all messages" do
47
+ @user1.messages.count.should eql 1
48
+
49
+ Message.create! msg(@user1)
50
+ @user1.messages.count.should eql 2
51
+
52
+ Message.create! msg(@user1, true)
53
+ @user1.messages.count.should eql 3
54
+ end
55
+
56
+ it "should return all new messages" do
57
+ @user1.new_messages.count.should eql 0
58
+
59
+ Message.create! msg(@user1, true)
60
+ @user1.new_messages.count.should eql 1
61
+
62
+ Message.create! msg(@user1, true, true)
63
+ @user1.new_messages.count.should eql 1
64
+ end
65
+
66
+ it "should give all the messages between 2 models" do
67
+ @user1.messages_with(@user2).count.should eql 1
68
+
69
+ Message.create!(sender: @user1, receiver: @user2, content: 'Hello')
70
+ @user1.messages_with(@user2).count.should eql 2
71
+
72
+ Message.create!(msg(@user1)) # Different user
73
+ @user1.messages_with(@user2).count.should eql 2
74
+ end
75
+
76
+ context "build helpers" do
77
+ specify { expect(@user1.build_message).to be_kind_of(Message) }
78
+ specify { expect(@user1.build_message.new_record?).to be_true }
79
+
80
+ specify { expect(@user1.new_message).to be_kind_of(Message) }
81
+ specify { expect(@user1.new_message.new_record?).to be_true }
82
+
83
+ specify { expect(@user1.create_message(msg @user1)).to be_kind_of(Message) }
84
+ specify { expect(@user1.create_message(msg @user1).new_record?).to be_false }
85
+
86
+ specify { expect(@user1.create_message!(msg @user1)).to be_kind_of(Message) }
87
+ specify { expect(@user1.create_message!(msg @user1).new_record?).to be_false }
88
+ end
89
+ end
@@ -0,0 +1,17 @@
1
+ require 'simple_messenger'
2
+ require 'rspec/autorun'
3
+ require 'shoulda-matchers'
4
+
5
+ ActiveRecord::Base.establish_connection(
6
+ :adapter => "sqlite3",
7
+ :database => ":memory:"
8
+ )
9
+
10
+ load(File.dirname(__FILE__) + '/extra/schema.rb')
11
+ load(File.dirname(__FILE__) + '/extra/models.rb')
12
+
13
+ RSpec.configure do |config|
14
+ config.treat_symbols_as_metadata_keys_with_true_values = true
15
+ config.filter_run :focus => true
16
+ config.run_all_when_everything_filtered = true
17
+ end
metadata ADDED
@@ -0,0 +1,152 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: simple_messenger
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kainage
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-05-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 4.0.0.rc1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 4.0.0.rc1
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '1.3'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: sqlite3
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: shoulda-matchers
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Add a simple messaging functionality between ActiveRecord models
98
+ email:
99
+ - kainage@gmail.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - .gitignore
105
+ - .rspec
106
+ - Gemfile
107
+ - LICENSE.txt
108
+ - README.md
109
+ - Rakefile
110
+ - lib/generators/messages_generator.rb
111
+ - lib/generators/templates/create_messages.rb
112
+ - lib/generators/templates/message.rb
113
+ - lib/simple_messenger.rb
114
+ - lib/simple_messenger/message_additions.rb
115
+ - lib/simple_messenger/messenger_additions.rb
116
+ - lib/simple_messenger/version.rb
117
+ - simple_messenger.gemspec
118
+ - spec/extra/models.rb
119
+ - spec/extra/schema.rb
120
+ - spec/message_spec.rb
121
+ - spec/messenger_spec.rb
122
+ - spec/spec_helper.rb
123
+ homepage: https://github.com/kainage/simple_messenger
124
+ licenses:
125
+ - MIT
126
+ metadata: {}
127
+ post_install_message:
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ requirements:
133
+ - - '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ requirements:
138
+ - - '>='
139
+ - !ruby/object:Gem::Version
140
+ version: '0'
141
+ requirements: []
142
+ rubyforge_project:
143
+ rubygems_version: 2.0.3
144
+ signing_key:
145
+ specification_version: 4
146
+ summary: Add a simple messaging functionality between ActiveRecord models
147
+ test_files:
148
+ - spec/extra/models.rb
149
+ - spec/extra/schema.rb
150
+ - spec/message_spec.rb
151
+ - spec/messenger_spec.rb
152
+ - spec/spec_helper.rb