Class: ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
- Inherits:
-
Object
- Object
- ActiveRecord::Middleware::DatabaseSelector::Resolver::Session
- Defined in:
- lib/active_record/middleware/database_selector/resolver/session.rb
Overview
The session class is used by the DatabaseSelector::Resolver to save timestamps of the last write in the session.
The last_write is used to determine whether it’s safe to read from the replica or the request needs to be sent to the primary.
Instance Attribute Summary collapse
-
#session ⇒ Object
readonly
Returns the value of attribute session.
Class Method Summary collapse
-
.call(request) ⇒ Object
:nodoc:.
-
.convert_time_to_timestamp(time) ⇒ Object
Converts time to a timestamp that represents milliseconds since epoch.
-
.convert_timestamp_to_time(timestamp) ⇒ Object
Converts milliseconds since epoch timestamp into a time object.
Instance Method Summary collapse
-
#initialize(session) ⇒ Session
constructor
A new instance of Session.
- #last_write_timestamp ⇒ Object
- #update_last_write_timestamp ⇒ Object
Constructor Details
#initialize(session) ⇒ Session
Returns a new instance of Session.
28 29 30 |
# File 'lib/active_record/middleware/database_selector/resolver/session.rb', line 28 def initialize(session) @session = session end |
Instance Attribute Details
#session ⇒ Object (readonly)
Returns the value of attribute session.
32 33 34 |
# File 'lib/active_record/middleware/database_selector/resolver/session.rb', line 32 def session @session end |
Class Method Details
.call(request) ⇒ Object
:nodoc:
13 14 15 |
# File 'lib/active_record/middleware/database_selector/resolver/session.rb', line 13 def self.call(request) new(request.session) end |
.convert_time_to_timestamp(time) ⇒ Object
Converts time to a timestamp that represents milliseconds since epoch.
19 20 21 |
# File 'lib/active_record/middleware/database_selector/resolver/session.rb', line 19 def self.(time) time.to_i * 1000 + time.usec / 1000 end |
.convert_timestamp_to_time(timestamp) ⇒ Object
Converts milliseconds since epoch timestamp into a time object.
24 25 26 |
# File 'lib/active_record/middleware/database_selector/resolver/session.rb', line 24 def self.() ? Time.at( / 1000, ( % 1000) * 1000) : Time.at(0) end |
Instance Method Details
#last_write_timestamp ⇒ Object
34 35 36 |
# File 'lib/active_record/middleware/database_selector/resolver/session.rb', line 34 def self.class.(session[:last_write]) end |
#update_last_write_timestamp ⇒ Object
38 39 40 |
# File 'lib/active_record/middleware/database_selector/resolver/session.rb', line 38 def session[:last_write] = self.class.(Time.now) end |