Class: SadieSession

Inherits:
Object
  • Object
show all
Defined in:
lib/sadie_session.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(params) ⇒ SadieSession

Returns a new instance of SadieSession.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/sadie_session.rb', line 10

def initialize( params )
  
  @expiry_mutex = Mutex.new
  @expire_schedule = MultiRBTree.new
  @expiry_thread = Thread.new do
    _expiry_loop
  end
  
  @refresh_mutex = Mutex.new
  @refresh_schedule = MultiRBTree.new
  @refresh_thread = Thread.new do
    _refresh_loop
  end
  
  @registered_key = {}
  
  unless params.nil?
    if params.is_a? Hash
      if params.has_key?( :primers_dirpath )
        self.primers_dirpath = params[:primers_dirpath]
        puts "initializing session with primer dirpath: #{self.primers_dirpath}"
        _register_primers
      end
    end
  end
  
  @storage_manager_thread_mutex = Mutex.new
  @storage_manager = SadieStorageManager.new
  @storage_manager_thread_mutex.synchronize do
    @storage_manager.register_storage_mechanism :memory, SadieStorageMechanismMemory.new
  end
end

Instance Attribute Details

#primers_dirpathObject

Returns the value of attribute primers_dirpath.



8
9
10
# File 'lib/sadie_session.rb', line 8

def primers_dirpath
  @primers_dirpath
end

Instance Method Details

#get(key) ⇒ Object



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/sadie_session.rb', line 75

def get( key )
  if @storage_manager.has_key?( key )
    @storage_manager.get( key )
  elsif primer_registered?( key )
    p = Primer.new( :session => self )
    p.decorate( @registered_key[ key ] )
    if p.expire == :on_get
      ret = @storage_manager.get( key )
      @storage_manager.unset( key )
      ret
    elsif ( p.refreshes? )
      _manage_refresh( key, p.refresh_rate )
      @storage_manager.get( key )
    else
      @storage_manager.get( key )
    end
  end
end

#has_key?(key) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
46
47
# File 'lib/sadie_session.rb', line 43

def has_key?( key )
  @storage_manager_thread_mutex.synchronize do
    @storage_manager.has_key?( key )
  end
end

#primer_registered?(key) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/sadie_session.rb', line 49

def primer_registered?( key )
  @registered_key.has_key? key
end

#set(keys, value, params = nil) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# File 'lib/sadie_session.rb', line 59

def set( keys, value, params=nil )
  expires, mechanism = :never, :memory
  unless params.nil?
    if params.is_a? Hash
      expires = params[:expire] if params.has_key?( :expire )
      mechanism = params[:mechanism] if params.has_key?( :mechanism )
    end
  end
  @storage_manager_thread_mutex.synchronize do
    @storage_manager.set( :keys => Array( keys ),
                          :value => value,
                          :mechanism => mechanism )
  end
  _manage_expiry( keys, expires ) unless expires == :never || expires == :on_get
end

#unset(key) ⇒ Object



53
54
55
56
57
# File 'lib/sadie_session.rb', line 53

def unset( key )
  @storage_manager_thread_mutex.synchronize do
    @storage_manager.unset( key )
  end
end