Class: Rufus::Edo::NetTyrant
- Inherits:
-
Object
- Object
- Rufus::Edo::NetTyrant
- Includes:
- CabinetCore, Tokyo::NoTransactions, Tokyo::TyrantCommons
- Defined in:
- lib/rufus/edo/ntyrant/abstract.rb
Overview
Instance Attribute Summary collapse
-
#host ⇒ Object
readonly
Returns the value of attribute host.
-
#port ⇒ Object
readonly
Returns the value of attribute port.
Attributes included from Tokyo::HashMethods
Instance Method Summary collapse
-
#compact_copy(target_path) ⇒ Object
Copies the current cabinet to a new file.
-
#copy(target_path) ⇒ Object
Tells the Tyrant server to create a copy of itself at the given (remote) target_path.
-
#ext(func_name, key = '', value = '', opts = {}) ⇒ Object
Calls a lua embedded function (tokyocabinet.sourceforge.net/tyrantdoc/#luaext).
-
#initialize(host, port = 0, params = {}) ⇒ NetTyrant
constructor
Connects to a given Tokyo Tyrant server.
-
#weight ⇒ Object
Returns the ‘weight’ of the db (in bytes).
Methods included from Tokyo::NoTransactions
#abort, #tranabort, #tranbegin, #trancommit, #transaction
Methods included from Tokyo::TyrantCommons
Methods included from CabinetCore
#[]=, #clear, #close, #counter_value, #defrag, #delete, #delete_keys_with_prefix, included, #incr, #keys, #ldelete, #lget, #merge!, #original, #path, #putcat, #putkeep, #size, #sync, #tranabort, #tranbegin, #trancommit
Methods included from Tokyo::Transactions
Methods included from Tokyo::HashMethods
#[], #default, #default=, #each, #merge, #merge!, #to_a, #to_h, #values
Constructor Details
#initialize(host, port = 0, params = {}) ⇒ NetTyrant
Connects to a given Tokyo Tyrant server.
Note that if the port is not specified, the host parameter is expected to hold the path to a unix socket (not a TCP socket).
(You can start a unix socket listening Tyrant with :
ttserver -host /tmp/tyrant_socket -port 0 data.tch
and then connect to it with rufus-tokyo via :
require 'rufus/edo/ntyrant'
db = Rufus::Edo::NetTyrant.new('/tmp/tyrant_socket')
db['a'] = 'alpha'
db.close
)
To connect to a classic TCP bound Tyrant (port 44001) :
t = Rufus::Edo::NetTyrant.new('127.0.0.1', 44001)
:default and :default_proc
Much like a Ruby Hash, a Tyrant accepts a default value or a default_proc
db = Rufus::Edo::NetTyrant.new('127.0.0.1', 1978, :default => 'xxx')
db['fred'] = 'Astaire'
p db['fred'] # => 'Astaire'
p db['ginger'] # => 'xxx'
db = Rufus::Edo::NetTyrant.new(
'127.0.0.1',
1978,
:default_proc => lambda { |cab, key| "not found : '#{k}'" }
p db['ginger'] # => "not found : 'ginger'"
The first arg passed to the default_proc is the tyrant itself, so this opens up interesting possibilities.
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'lib/rufus/edo/ntyrant/abstract.rb', line 91 def initialize (host, port=0, params={}) @host = host @port = port @db = TokyoTyrant::RDB.new @db.open(host, port) || raise_error if self.stat['type'] == 'table' @db.close raise ArgumentError.new( "tyrant at #{host}:#{port} is a table, " + "use Rufus::Edo::NetTyrantTable instead to access it.") end # # default value|proc self.default = params[:default] @default_proc ||= params[:default_proc] end |
Instance Attribute Details
#host ⇒ Object (readonly)
Returns the value of attribute host.
49 50 51 |
# File 'lib/rufus/edo/ntyrant/abstract.rb', line 49 def host @host end |
#port ⇒ Object (readonly)
Returns the value of attribute port.
49 50 51 |
# File 'lib/rufus/edo/ntyrant/abstract.rb', line 49 def port @port end |
Instance Method Details
#compact_copy(target_path) ⇒ Object
Copies the current cabinet to a new file.
Does it by copying each entry afresh to the target file. Spares some space, hence the ‘compact’ label…
141 142 143 144 |
# File 'lib/rufus/edo/ntyrant/abstract.rb', line 141 def compact_copy (target_path) raise NotImplementedError.new('not creating files locally') end |
#copy(target_path) ⇒ Object
Tells the Tyrant server to create a copy of itself at the given (remote) target_path.
Returns true when successful.
Note : if you started your ttserver with a path like “tyrants/data.tch” you have to provide a target path in the same subdir, like “tyrants/data_prime.tch”.
131 132 133 134 |
# File 'lib/rufus/edo/ntyrant/abstract.rb', line 131 def copy (target_path) @db.copy(target_path) || raise_error end |
#ext(func_name, key = '', value = '', opts = {}) ⇒ Object
Calls a lua embedded function (tokyocabinet.sourceforge.net/tyrantdoc/#luaext)
Options are :global_locking and :record_locking
Returns the return value of the called function.
Nil is returned in case of failure.
155 156 157 158 |
# File 'lib/rufus/edo/ntyrant/abstract.rb', line 155 def ext (func_name, key='', value='', opts={}) @db.ext(func_name.to_s, key.to_s, value.to_s, compute_ext_opts(opts)) end |
#weight ⇒ Object
Returns the ‘weight’ of the db (in bytes)
117 118 119 120 |
# File 'lib/rufus/edo/ntyrant/abstract.rb', line 117 def weight self.stat['size'] end |