unread 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,6 +4,7 @@ rvm:
4
4
  gemfile:
5
5
  - ci/Gemfile.rails-2.3.x
6
6
  - ci/Gemfile.rails-3.0.x
7
+ - ci/Gemfile.rails-3.1.x
7
8
  env:
8
9
  - DB=sqlite
9
10
  - DB=mysql
data/README.md CHANGED
@@ -3,7 +3,7 @@ Unread
3
3
 
4
4
  Gem to manage read/unread status of ActiveRecord objects - and it's fast.
5
5
 
6
- [![Build Status](http://travis-ci.org/ledermann/unread.png)](http://travis-ci.org/ledermann/unread)
6
+ [![Build Status](https://secure.travis-ci.org/ledermann/unread.png)](http://travis-ci.org/ledermann/unread)
7
7
 
8
8
  ## Features
9
9
 
@@ -17,8 +17,8 @@ Gem to manage read/unread status of ActiveRecord objects - and it's fast.
17
17
 
18
18
  ## Requirements
19
19
 
20
- * Ruby 1.8.7, REE or 1.9.2
21
- * ActiveRecord >= 2.3 (tested with SQLite and MySQL)
20
+ * Ruby 1.8.7 or 1.9.2
21
+ * ActiveRecord 2.3.x, 3.0.x, 3.1.x (tested with SQLite and MySQL)
22
22
  * Needs a timestamp field in your models (e.g. created_at) with a database index on it
23
23
 
24
24
 
@@ -1,3 +1,9 @@
1
+ 0.0.4 - 2011/08/31
2
+
3
+ * Ignore multiple calls of acts_as_*
4
+ * Improved error messages
5
+ * Tested with Rails 3.1
6
+
1
7
  0.0.3 - 2011/08/01
2
8
 
3
9
  * Fixed gemspec by adding development dependencies
@@ -1,6 +1,6 @@
1
1
  source :rubygems
2
2
 
3
- gem 'activerecord', '~> 2.3'
3
+ gem 'activerecord', '~> 2.3.14'
4
4
  gem 'sqlite3'
5
5
  gem 'mysql2', '~> 0.2.11'
6
6
  gem 'mocha'
@@ -1,6 +1,6 @@
1
1
  source :rubygems
2
2
 
3
- gem 'activerecord', '~> 3.0'
3
+ gem 'activerecord', '~> 3.0.10'
4
4
  gem 'sqlite3'
5
5
  gem 'mysql2', '~> 0.2.11'
6
6
  gem 'mocha'
@@ -0,0 +1,7 @@
1
+ source :rubygems
2
+
3
+ gem 'activerecord', '~> 3.1.0'
4
+ gem 'sqlite3'
5
+ gem 'mysql2', '>= 0.3.6'
6
+ gem 'mocha'
7
+ gem 'rake'
@@ -5,6 +5,9 @@ module Unread
5
5
 
6
6
  module ActsAsReadable
7
7
  def acts_as_reader
8
+ # Ignore multiple calls
9
+ return if ReadMark.reader_class
10
+
8
11
  ReadMark.reader_class = self
9
12
 
10
13
  has_many :read_marks, :dependent => :delete_all
@@ -17,6 +20,9 @@ module Unread
17
20
  end
18
21
 
19
22
  def acts_as_readable(options={})
23
+ # Ignore multiple calls
24
+ return if self.included_modules.include?(InstanceMethods)
25
+
20
26
  options.reverse_merge!({ :on => :updated_at })
21
27
  if respond_to?(:class_attribute)
22
28
  class_attribute :readable_options
@@ -34,8 +40,7 @@ module Unread
34
40
  scope_method = ActiveRecord::VERSION::MAJOR < 3 ? :named_scope : :scope
35
41
 
36
42
  send scope_method, :unread_by, lambda { |user|
37
- check_reader
38
- raise ArgumentError unless user.is_a?(ReadMark.reader_class)
43
+ assert_reader(user)
39
44
 
40
45
  result = { :joins => "LEFT JOIN read_marks ON read_marks.readable_type = '#{self.base_class.name}'
41
46
  AND read_marks.readable_id = #{self.table_name}.id
@@ -55,11 +60,10 @@ module Unread
55
60
 
56
61
  module ClassMethods
57
62
  def mark_as_read!(target, options)
58
- check_reader
59
63
  raise ArgumentError unless target == :all || target.is_a?(Array)
60
64
 
61
65
  user = options[:for]
62
- raise ArgumentError unless user.is_a?(ReadMark.reader_class)
66
+ assert_reader(user)
63
67
 
64
68
  if target == :all
65
69
  reset_read_marks!(user)
@@ -80,9 +84,7 @@ module Unread
80
84
  end
81
85
 
82
86
  def read_mark(user)
83
- check_reader
84
- raise ArgumentError unless user.is_a?(ReadMark.reader_class)
85
-
87
+ assert_reader(user)
86
88
  user.read_marks.readable_type(self.base_class.name).global.first
87
89
  end
88
90
 
@@ -110,7 +112,7 @@ module Unread
110
112
  end
111
113
 
112
114
  def cleanup_read_marks!
113
- check_reader
115
+ assert_reader
114
116
 
115
117
  ReadMark.reader_class.find_each do |user|
116
118
  ReadMark.transaction do
@@ -130,7 +132,7 @@ module Unread
130
132
  end
131
133
 
132
134
  def reset_read_marks!(user = :all)
133
- check_reader
135
+ assert_reader
134
136
 
135
137
  ReadMark.transaction do
136
138
  if user == :all
@@ -149,8 +151,14 @@ module Unread
149
151
  true
150
152
  end
151
153
 
152
- def check_reader
153
- raise RuntimeError, 'Plugin "unread": No reader defined!' unless ReadMark.reader_class
154
+ def assert_reader(user=nil)
155
+ if ReadMark.reader_class
156
+ if user && !user.is_a?(ReadMark.reader_class)
157
+ raise ArgumentError, "Class #{user.class.name} is not registered by acts_as_reader!"
158
+ end
159
+ else
160
+ raise RuntimeError, 'There is no class using acts_as_reader!'
161
+ end
154
162
  end
155
163
  end
156
164
 
@@ -160,10 +168,8 @@ module Unread
160
168
  end
161
169
 
162
170
  def mark_as_read!(options)
163
- self.class.check_reader
164
-
165
171
  user = options[:for]
166
- raise ArgumentError unless user.is_a?(ReadMark.reader_class)
172
+ self.class.assert_reader(user)
167
173
 
168
174
  ReadMark.transaction do
169
175
  if unread?(user)
@@ -1,3 +1,3 @@
1
1
  module Unread
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
@@ -1,17 +1,13 @@
1
1
  require 'rubygems'
2
2
 
3
- gem 'activerecord'
4
- gem 'mocha'
5
-
6
3
  require 'test/unit'
7
- require 'active_record'
8
4
  require 'active_support'
9
5
  require 'active_support/test_case'
6
+ require 'active_record'
10
7
 
11
8
  require File.dirname(__FILE__) + '/../init.rb'
12
9
 
13
-
14
- configs = YAML.load_file('test/database.yml')
10
+ configs = YAML.load_file(File.dirname(__FILE__) + '/database.yml')
15
11
  ActiveRecord::Base.configurations = configs
16
12
 
17
13
  db_name = ENV['DB'] || 'sqlite'
@@ -25,4 +21,6 @@ end
25
21
 
26
22
  class Email < ActiveRecord::Base
27
23
  acts_as_readable :on => :updated_at
28
- end
24
+ end
25
+
26
+ puts "Testing with ActiveRecord #{ActiveRecord::VERSION::STRING}"
@@ -26,6 +26,10 @@ class UnreadTest < ActiveSupport::TestCase
26
26
 
27
27
  assert_equal 2, Email.unread_by(@user).count
28
28
  assert_equal 2, Email.unread_by(@other_user).count
29
+
30
+ assert_raise(ArgumentError) {
31
+ Email.unread_by(42)
32
+ }
29
33
  end
30
34
 
31
35
  def test_scope_after_reset
@@ -35,9 +39,13 @@ class UnreadTest < ActiveSupport::TestCase
35
39
  assert_equal 1, Email.unread_by(@user).count
36
40
  end
37
41
 
38
- def test_unread_by
42
+ def test_unread_after_create
39
43
  assert_equal true, @email1.unread?(@user)
40
44
  assert_equal true, @email1.unread?(@other_user)
45
+
46
+ assert_raise(ArgumentError) {
47
+ @email1.unread?(42)
48
+ }
41
49
  end
42
50
 
43
51
  def test_unread_after_update
@@ -1,6 +1,7 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
  require "unread/version"
4
+ require 'active_record/version'
4
5
 
5
6
  Gem::Specification.new do |s|
6
7
  s.name = "unread"
@@ -23,5 +24,10 @@ Gem::Specification.new do |s|
23
24
  s.add_development_dependency 'rake'
24
25
  s.add_development_dependency 'mocha'
25
26
  s.add_development_dependency 'sqlite3'
26
- s.add_development_dependency 'mysql2', '~> 0.2.11'
27
+
28
+ if ActiveRecord::VERSION::MAJOR == 3 && ActiveRecord::VERSION::MINOR >= 1
29
+ s.add_development_dependency 'mysql2', '>= 0.3.6'
30
+ else
31
+ s.add_development_dependency 'mysql2', '~> 0.2.11'
32
+ end
27
33
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unread
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Georg Ledermann
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-01 00:00:00 Z
18
+ date: 2011-08-31 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: activerecord
@@ -80,14 +80,14 @@ dependencies:
80
80
  requirement: &id005 !ruby/object:Gem::Requirement
81
81
  none: false
82
82
  requirements:
83
- - - ~>
83
+ - - ">="
84
84
  - !ruby/object:Gem::Version
85
- hash: 1
85
+ hash: 31
86
86
  segments:
87
87
  - 0
88
- - 2
89
- - 11
90
- version: 0.2.11
88
+ - 3
89
+ - 6
90
+ version: 0.3.6
91
91
  type: :development
92
92
  version_requirements: *id005
93
93
  description: "This gem creates a scope for unread objects and adds methods to mark objects as read "
@@ -109,6 +109,7 @@ files:
109
109
  - changelog.md
110
110
  - ci/Gemfile.rails-2.3.x
111
111
  - ci/Gemfile.rails-3.0.x
112
+ - ci/Gemfile.rails-3.1.x
112
113
  - init.rb
113
114
  - lib/app/models/read_mark.rb
114
115
  - lib/unread.rb
@@ -149,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
149
150
  requirements: []
150
151
 
151
152
  rubyforge_project: unread
152
- rubygems_version: 1.8.6
153
+ rubygems_version: 1.8.10
153
154
  signing_key:
154
155
  specification_version: 3
155
156
  summary: Manages read/unread status of ActiveRecord objects