Sha256: bf152e66a0a5a412b6c667b58821a64f7f3478801cabeeaa2d40ea907d51b6bc

Contents?: true

Size: 1.77 KB

Versions: 5

Compression:

Stored size: 1.77 KB

Contents

module MongoDoc
  module Timestamps

    # Create automatic timestamps on a +root+ Document. Timestamps are not
    # implemented for embedded documents.
    #
    # Two timestamps fields are created: +created_at+, +updated_at+
    #
    # +created_at+:: set on initial save only
    # +updated_at+:: set on every save
    def timestamps!
      [:created_at, :updated_at].each do |name|
        _add_key(name)
        attr_reader name
        class_eval(<<-RUBY, __FILE__, __LINE__)
          def #{name}=(value)                       # def created_at=(value)
            if value.kind_of?(String)               #   if value.kind_of?(String)
              value = Time.cast_from_string(value)  #     value = Time.cast_from_string(value)
            end                                     #   end
            @#{name} = value.nil? ? nil : value.utc #   @created_at = value.nil? ? nil : value.utc
          end                                       # end
        RUBY
      end

      class_eval(<<-RUBY, __FILE__, __LINE__)
        def _save(safe)
          if new_record?
            self.created_at = self.updated_at = Time.now
          else
            original_updated_at = updated_at
            self.updated_at = Time.now
          end
          super
        rescue Mongo::MongoDBError => e
          if new_record?
            self.created_at = self.updated_at = nil
          else
            self.updated_at = original_updated_at
          end
          raise e
        end

        def _update(selector, data, safe)
          original_updated_at = updated_at
          self.updated_at = Time.now
          data[:updated_at] = updated_at
          super
        rescue Mongo::MongoDBError => e
          self.updated_at = original_updated_at
          raise e
        end
      RUBY
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
mongo_doc-0.6.34 lib/mongo_doc/timestamps.rb
mongo_doc-0.6.33 lib/mongo_doc/timestamps.rb
mongo_doc-0.6.32 lib/mongo_doc/timestamps.rb
mongo_doc-0.6.31 lib/mongo_doc/timestamps.rb
mongo_doc-0.6.30 lib/mongo_doc/timestamps.rb