unread 0.8.1 → 0.8.2
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.
- checksums.yaml +4 -4
- data/lib/generators/unread/migration/templates/migration.rb +1 -1
- data/lib/generators/unread/polymorphic_reader_migration/templates/unread_polymorphic_reader_migration.rb +1 -1
- data/lib/unread/base.rb +4 -0
- data/lib/unread/readable.rb +13 -6
- data/lib/unread/readable_scopes.rb +3 -1
- data/lib/unread/reader_scopes.rb +3 -1
- data/lib/unread/version.rb +1 -1
- data/spec/unread/readable_spec.rb +14 -0
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 302efc346d484f76d5346d27288d5e095062df99
         | 
| 4 | 
            +
              data.tar.gz: 81d1a2fa58f5b4a6a7a78c3bede1d812033a1882
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 7d79c07ac3de9d382349db73507e078156ed7731664cef4d0475b46a147299ab10037b12d874bbccb98b177d379eecc628c9cd4691c23f41bf9a91adff382db9
         | 
| 7 | 
            +
              data.tar.gz: 5f4863448e71c179e30f61751d7849fee31d7bd6c1419db43c3f57d0d410683dbe9d7d8b069e902f54f4a1c3535c2040526254ecdcad23d3e6f5082ba742a832
         | 
| @@ -6,7 +6,7 @@ class UnreadMigration < ActiveRecord::Migration | |
| 6 6 | 
             
                  t.datetime :timestamp
         | 
| 7 7 | 
             
                end
         | 
| 8 8 |  | 
| 9 | 
            -
                add_index ReadMark, [:reader_id, :reader_type, :readable_type, :readable_id], name: 'read_marks_reader_readable_index'
         | 
| 9 | 
            +
                add_index ReadMark, [:reader_id, :reader_type, :readable_type, :readable_id], name: 'read_marks_reader_readable_index', unique: true
         | 
| 10 10 | 
             
              end
         | 
| 11 11 |  | 
| 12 12 | 
             
              def self.down
         | 
| @@ -4,7 +4,7 @@ class UnreadPolymorphicReaderMigration < ActiveRecord::Migration | |
| 4 4 | 
             
                rename_column :read_marks, :user_id, :reader_id
         | 
| 5 5 | 
             
                add_column :read_marks, :reader_type, :string
         | 
| 6 6 | 
             
                execute "update read_marks set reader_type = 'User'"
         | 
| 7 | 
            -
                add_index :read_marks, [:reader_id, :reader_type, :readable_type, :readable_id], name: 'read_marks_reader_readable_index'
         | 
| 7 | 
            +
                add_index :read_marks, [:reader_id, :reader_type, :readable_type, :readable_id], name: 'read_marks_reader_readable_index', unique: true
         | 
| 8 8 | 
             
              end
         | 
| 9 9 |  | 
| 10 10 | 
             
              def self.down
         | 
    
        data/lib/unread/base.rb
    CHANGED
    
    
    
        data/lib/unread/readable.rb
    CHANGED
    
    | @@ -27,11 +27,18 @@ module Unread | |
| 27 27 | 
             
                        if global_timestamp && global_timestamp >= timestamp
         | 
| 28 28 | 
             
                          # The object is implicitly marked as read, so there is nothing to do
         | 
| 29 29 | 
             
                        else
         | 
| 30 | 
            -
                           | 
| 31 | 
            -
                           | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
             | 
| 30 | 
            +
                          # This transaction is needed, so that parent transaction won't rollback even there's an error.
         | 
| 31 | 
            +
                          ReadMark.transaction(requires_new: true) do
         | 
| 32 | 
            +
                            begin
         | 
| 33 | 
            +
                              rm = obj.read_marks.where(reader_id: reader.id, reader_type: reader.class.base_class.name).first || obj.read_marks.build
         | 
| 34 | 
            +
                              rm.reader_id   = reader.id
         | 
| 35 | 
            +
                              rm.reader_type = reader.class.base_class.name
         | 
| 36 | 
            +
                              rm.timestamp   = timestamp
         | 
| 37 | 
            +
                              rm.save!
         | 
| 38 | 
            +
                            rescue ActiveRecord::RecordNotUnique
         | 
| 39 | 
            +
                              raise ActiveRecord::Rollback
         | 
| 40 | 
            +
                            end
         | 
| 41 | 
            +
                          end
         | 
| 35 42 | 
             
                        end
         | 
| 36 43 | 
             
                      end
         | 
| 37 44 | 
             
                    end
         | 
| @@ -71,7 +78,7 @@ module Unread | |
| 71 78 | 
             
                      rm = reader.read_marks.new
         | 
| 72 79 | 
             
                      rm.readable_type = self.readable_parent.name
         | 
| 73 80 | 
             
                      rm.timestamp = Time.current
         | 
| 74 | 
            -
                      rm.save! | 
| 81 | 
            +
                      rm.save!
         | 
| 75 82 | 
             
                    end
         | 
| 76 83 |  | 
| 77 84 | 
             
                    reader.forget_memoized_read_mark_global
         | 
| @@ -35,9 +35,11 @@ module Unread | |
| 35 35 | 
             
                  end
         | 
| 36 36 |  | 
| 37 37 | 
             
                  def with_read_marks_for(reader)
         | 
| 38 | 
            +
                    postgresql_string_cast = using_postgresql? ? '::varchar' : ''
         | 
| 39 | 
            +
             | 
| 38 40 | 
             
                    join_read_marks(reader).select("#{quoted_table_name}.*,
         | 
| 39 41 | 
             
                                                    #{ReadMark.quoted_table_name}.id AS read_mark_id,
         | 
| 40 | 
            -
                                                    #{quote_bound_value(reader.class.base_class.name)} AS read_mark_reader_type,
         | 
| 42 | 
            +
                                                    #{quote_bound_value(reader.class.base_class.name)}#{postgresql_string_cast} AS read_mark_reader_type,
         | 
| 41 43 | 
             
                                                    #{quote_bound_value(reader.id)} AS read_mark_reader_id")
         | 
| 42 44 | 
             
                  end
         | 
| 43 45 | 
             
                end
         | 
    
        data/lib/unread/reader_scopes.rb
    CHANGED
    
    | @@ -27,9 +27,11 @@ module Unread | |
| 27 27 | 
             
                  end
         | 
| 28 28 |  | 
| 29 29 | 
             
                  def with_read_marks_for(readable)
         | 
| 30 | 
            +
                    postgresql_string_cast = using_postgresql? ? '::varchar' : ''
         | 
| 31 | 
            +
             | 
| 30 32 | 
             
                    join_read_marks(readable).select("#{quoted_table_name}.*,
         | 
| 31 33 | 
             
                                                      #{ReadMark.quoted_table_name}.id AS read_mark_id,
         | 
| 32 | 
            -
             | 
| 34 | 
            +
                                                      #{quote_bound_value readable.class.name}#{postgresql_string_cast} AS read_mark_readable_type,
         | 
| 33 35 | 
             
                                                      #{readable.id} AS read_mark_readable_id")
         | 
| 34 36 | 
             
                  end
         | 
| 35 37 | 
             
                end
         | 
    
        data/lib/unread/version.rb
    CHANGED
    
    
| @@ -266,6 +266,20 @@ describe Unread::Readable do | |
| 266 266 | 
             
                  expect(@email2.unread?(@reader)).to be_falsey
         | 
| 267 267 | 
             
                end
         | 
| 268 268 |  | 
| 269 | 
            +
                it "should mark the rest as read when the first record is not unique" do
         | 
| 270 | 
            +
                  Email.mark_as_read! [ @email1 ], for: @reader
         | 
| 271 | 
            +
             | 
| 272 | 
            +
                  allow(@email1).to receive_message_chain("read_marks.build").and_return(@email1.read_marks.build)
         | 
| 273 | 
            +
                  allow(@email1).to receive_message_chain("read_marks.where").and_return([])
         | 
| 274 | 
            +
             | 
| 275 | 
            +
                  expect do
         | 
| 276 | 
            +
                    Email.mark_as_read! [ @email1, @email2 ], for: @reader
         | 
| 277 | 
            +
                  end.to change(ReadMark, :count).by(1)
         | 
| 278 | 
            +
             | 
| 279 | 
            +
                  expect(@email1.unread?(@reader)).to be_falsey
         | 
| 280 | 
            +
                  expect(@email2.unread?(@reader)).to be_falsey
         | 
| 281 | 
            +
                end
         | 
| 282 | 
            +
             | 
| 269 283 | 
             
                it "should perform less queries if the objects are already read" do
         | 
| 270 284 | 
             
                  Email.mark_as_read! :all, :for => @reader
         | 
| 271 285 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: unread
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.8. | 
| 4 | 
            +
              version: 0.8.2
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Georg Ledermann
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2016- | 
| 11 | 
            +
            date: 2016-08-22 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: activerecord
         |