metry 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. data/History.txt +6 -0
  2. data/Manifest.txt +14 -69
  3. data/TODO +2 -3
  4. data/cucumber.yml +1 -0
  5. data/example/example.rb +1 -1
  6. data/features/psycho/dashboard.feature +17 -0
  7. data/features/psycho/goals.feature +24 -0
  8. data/features/psycho/visitor_tracking.feature +32 -0
  9. data/features/step_definitions/goals.rb +3 -0
  10. data/features/step_definitions/tracking.rb +1 -1
  11. data/features/step_definitions/web.rb +14 -2
  12. data/features/support/env.rb +4 -0
  13. data/lib/metry.rb +4 -6
  14. data/lib/metry/experiment.rb +6 -8
  15. data/lib/metry/psycho.rb +112 -0
  16. data/lib/metry/psycho/dashboard.erb +14 -0
  17. data/lib/metry/psycho/layout.erb +8 -0
  18. data/lib/metry/psycho/new_goal.erb +9 -0
  19. data/lib/metry/psycho/visitor.erb +7 -0
  20. data/lib/metry/rack/tracking.rb +17 -13
  21. data/lib/metry/storage.rb +116 -0
  22. data/radiant/example/features/metry.feature +8 -8
  23. data/radiant/example/features/psycho.feature +13 -0
  24. data/radiant/example/features/step_definitions/experiments.rb +2 -2
  25. data/radiant/example/features/step_definitions/tracking.rb +1 -1
  26. data/radiant/example/features/support/env.rb +3 -0
  27. data/radiant/extension/lib/metry_authenticator.rb +30 -0
  28. data/radiant/extension/lib/metry_tags.rb +2 -1
  29. data/radiant/extension/metry_extension.rb +1 -1
  30. data/test/{test_tokyo.rb → test_storage.rb} +3 -3
  31. metadata +17 -72
  32. data/lib/metry/memory.rb +0 -27
  33. data/lib/metry/tokyo.rb +0 -181
  34. data/vendor/rufus-tokyo/CHANGELOG.txt +0 -112
  35. data/vendor/rufus-tokyo/CREDITS.txt +0 -27
  36. data/vendor/rufus-tokyo/LICENSE.txt +0 -21
  37. data/vendor/rufus-tokyo/README.txt +0 -310
  38. data/vendor/rufus-tokyo/Rakefile +0 -118
  39. data/vendor/rufus-tokyo/TODO.txt +0 -25
  40. data/vendor/rufus-tokyo/doc/decision_table.numbers +0 -0
  41. data/vendor/rufus-tokyo/doc/rdoc-style.css +0 -320
  42. data/vendor/rufus-tokyo/lib/rufus-edo.rb +0 -3
  43. data/vendor/rufus-tokyo/lib/rufus-tokyo.rb +0 -3
  44. data/vendor/rufus-tokyo/lib/rufus/edo.rb +0 -39
  45. data/vendor/rufus-tokyo/lib/rufus/edo/README.txt +0 -106
  46. data/vendor/rufus-tokyo/lib/rufus/edo/cabcore.rb +0 -333
  47. data/vendor/rufus-tokyo/lib/rufus/edo/cabinet/abstract.rb +0 -219
  48. data/vendor/rufus-tokyo/lib/rufus/edo/cabinet/table.rb +0 -159
  49. data/vendor/rufus-tokyo/lib/rufus/edo/error.rb +0 -36
  50. data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant.rb +0 -4
  51. data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant/abstract.rb +0 -137
  52. data/vendor/rufus-tokyo/lib/rufus/edo/ntyrant/table.rb +0 -141
  53. data/vendor/rufus-tokyo/lib/rufus/edo/tabcore.rb +0 -567
  54. data/vendor/rufus-tokyo/lib/rufus/tokyo.rb +0 -58
  55. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/abstract.rb +0 -568
  56. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/lib.rb +0 -230
  57. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/table.rb +0 -753
  58. data/vendor/rufus-tokyo/lib/rufus/tokyo/cabinet/util.rb +0 -425
  59. data/vendor/rufus-tokyo/lib/rufus/tokyo/config.rb +0 -161
  60. data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia.rb +0 -43
  61. data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia/lib.rb +0 -65
  62. data/vendor/rufus-tokyo/lib/rufus/tokyo/dystopia/words.rb +0 -71
  63. data/vendor/rufus-tokyo/lib/rufus/tokyo/hmethods.rb +0 -111
  64. data/vendor/rufus-tokyo/lib/rufus/tokyo/query.rb +0 -102
  65. data/vendor/rufus-tokyo/lib/rufus/tokyo/transactions.rb +0 -74
  66. data/vendor/rufus-tokyo/lib/rufus/tokyo/ttcommons.rb +0 -59
  67. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant.rb +0 -35
  68. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/abstract.rb +0 -146
  69. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/lib.rb +0 -153
  70. data/vendor/rufus-tokyo/lib/rufus/tokyo/tyrant/table.rb +0 -162
  71. data/vendor/rufus-tokyo/rufus-tokyo.gemspec +0 -25
  72. data/vendor/rufus-tokyo/spec/cabinet_spec.rb +0 -472
  73. data/vendor/rufus-tokyo/spec/cabinetconfig_spec.rb +0 -82
  74. data/vendor/rufus-tokyo/spec/edo_cabinet_spec.rb +0 -447
  75. data/vendor/rufus-tokyo/spec/edo_ntyrant_spec.rb +0 -299
  76. data/vendor/rufus-tokyo/spec/edo_ntyrant_table_spec.rb +0 -462
  77. data/vendor/rufus-tokyo/spec/edo_table_spec.rb +0 -560
  78. data/vendor/rufus-tokyo/spec/hmethods_spec.rb +0 -44
  79. data/vendor/rufus-tokyo/spec/incr.lua +0 -20
  80. data/vendor/rufus-tokyo/spec/spec.rb +0 -9
  81. data/vendor/rufus-tokyo/spec/spec_base.rb +0 -23
  82. data/vendor/rufus-tokyo/spec/start_tyrants.sh +0 -26
  83. data/vendor/rufus-tokyo/spec/stop_tyrants.sh +0 -9
  84. data/vendor/rufus-tokyo/spec/table_spec.rb +0 -567
  85. data/vendor/rufus-tokyo/spec/tyrant_spec.rb +0 -309
  86. data/vendor/rufus-tokyo/spec/tyrant_table_spec.rb +0 -479
  87. data/vendor/rufus-tokyo/spec/util_list_spec.rb +0 -200
  88. data/vendor/rufus-tokyo/spec/util_map_spec.rb +0 -132
  89. data/vendor/rufus-tokyo/tasks/dev.rb +0 -70
  90. data/vendor/rufus-tokyo/test/bm0.rb +0 -353
  91. data/vendor/rufus-tokyo/test/bm1_compression.rb +0 -54
  92. data/vendor/rufus-tokyo/test/con0.rb +0 -30
  93. data/vendor/rufus-tokyo/test/mem.rb +0 -49
  94. data/vendor/rufus-tokyo/test/mem1.rb +0 -44
  95. data/vendor/rufus-tokyo/test/readme0.rb +0 -17
  96. data/vendor/rufus-tokyo/test/readme1.rb +0 -21
  97. data/vendor/rufus-tokyo/test/readme2.rb +0 -15
  98. data/vendor/rufus-tokyo/test/readme3.rb +0 -24
  99. data/vendor/rufus-tokyo/test/readmes_test.sh +0 -17
@@ -1,59 +0,0 @@
1
- #--
2
- # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- # THE SOFTWARE.
21
- #
22
- # Made in Japan.
23
- #++
24
-
25
-
26
- module Rufus
27
- module Tokyo
28
-
29
- #
30
- # #stat and #compte_ext_opts, that's all.
31
- #
32
- module TyrantCommons
33
-
34
- # Returns a hash of information about the Tokyo Tyrant database (or table)
35
- # at the other end of the connection.
36
- #
37
- def stat
38
-
39
- do_stat.split("\n").inject({}) { |r, l|
40
- kv = l.split("\t")
41
- r[kv.first] = kv.last
42
- r
43
- }
44
- end
45
-
46
- # Computes the :int option for the "ext" function (triggering
47
- # tyrant embedded lua functions)
48
- #
49
- def compute_ext_opts (opts)
50
-
51
- r = 0
52
- r = r | 1 if opts[:record_locking]
53
- r = r | 2 if opts[:global_locking]
54
- r
55
- end
56
- end
57
- end
58
- end
59
-
@@ -1,35 +0,0 @@
1
- #--
2
- # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- # THE SOFTWARE.
21
- #
22
- # Made in Japan.
23
- #++
24
-
25
-
26
- require 'rufus/tokyo'
27
-
28
-
29
- module Rufus::Tokyo
30
- end
31
-
32
- require 'rufus/tokyo/tyrant/lib'
33
- require 'rufus/tokyo/tyrant/abstract'
34
- require 'rufus/tokyo/tyrant/table'
35
-
@@ -1,146 +0,0 @@
1
- #--
2
- # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- # THE SOFTWARE.
21
- #
22
- # Made in Japan.
23
- #++
24
-
25
-
26
- require 'rufus/tokyo/ttcommons'
27
-
28
-
29
- module Rufus::Tokyo
30
-
31
- #
32
- # Connecting to a 'classic' tyrant server remotely
33
- #
34
- # require 'rufus/tokyo/tyrant'
35
- # t = Rufus::Tokyo::Tyrant.new('127.0.0.1', 44001)
36
- # t['toto'] = 'blah blah'
37
- # t['toto'] # => 'blah blah'
38
- #
39
- class Tyrant < Cabinet
40
-
41
- include TyrantCommons
42
-
43
- attr_reader :host, :port
44
-
45
- # Connects to a given Tokyo Tyrant server.
46
- #
47
- # Note that if the port is not specified, the host parameter is expected
48
- # to hold the path to a unix socket (not a TCP socket).
49
- #
50
- # (You can start a unix socket listening Tyrant with :
51
- #
52
- # ttserver -host /tmp/tyrant_socket -port 0 data.tch
53
- #
54
- # and then connect to it with rufus-tokyo via :
55
- #
56
- # require 'rufus/tokyo/tyrant'
57
- # db = Rufus::Tokyo::Tyrant.new('/tmp/tyrant_socket')
58
- # db['a'] = 'alpha'
59
- # db.close
60
- # )
61
- #
62
- # To connect to a classic TCP bound Tyrant (port 44001) :
63
- #
64
- # t = Rufus::Tokyo::Tyrant.new('127.0.0.1', 44001)
65
- #
66
- def initialize (host, port=0)
67
-
68
- @db = lib.tcrdbnew
69
-
70
- @host = host
71
- @port = port
72
-
73
- (lib.tcrdbopen(@db, host, port) == 1) ||
74
- raise("couldn't connect to tyrant at #{host}:#{port}")
75
-
76
- if self.stat['type'] == 'table'
77
-
78
- self.close
79
-
80
- raise ArgumentError.new(
81
- "tyrant at #{host}:#{port} is a table, " +
82
- "use Rufus::Tokyo::TyrantTable instead to access it.")
83
- end
84
- end
85
-
86
- # Using the tyrant lib
87
- #
88
- def lib
89
-
90
- TyrantLib
91
- end
92
-
93
- # isn't that a bit dangerous ? it creates a file on the server...
94
- #
95
- # DISABLED.
96
- #
97
- def copy (target_path)
98
-
99
- #@db.copy(target_path)
100
- raise 'not allowed to create files on the server'
101
- end
102
-
103
- # Calls a lua embedded function
104
- # (http://tokyocabinet.sourceforge.net/tyrantdoc/#luaext)
105
- #
106
- # Options are :global_locking and :record_locking
107
- #
108
- # Returns the return value of the called function.
109
- #
110
- # Nil is returned in case of failure.
111
- #
112
- def ext (func_name, key, value, opts={})
113
-
114
- k = key.to_s
115
- v = value.to_s
116
-
117
- outlen_op(
118
- :tcrdbext,
119
- func_name.to_s,
120
- compute_ext_opts(opts),
121
- k, Rufus::Tokyo.blen(k),
122
- v, Rufus::Tokyo.blen(v))
123
- end
124
-
125
- # Tyrant databases DO NOT support the 'defrag' call. Calling this method
126
- # will raise an exception.
127
- #
128
- undef_method(:defrag)
129
-
130
- protected
131
-
132
- def do_call_misc (function, list_pointer)
133
-
134
- lib.tcrdbmisc(@db, function, 0, list_pointer)
135
- # opts always to 0 for now
136
- end
137
-
138
- # Returns the raw stat string from the Tyrant server.
139
- #
140
- def do_stat
141
-
142
- lib.tcrdbstat(@db)
143
- end
144
- end
145
- end
146
-
@@ -1,153 +0,0 @@
1
- #--
2
- # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- # THE SOFTWARE.
21
- #
22
- # Made in Japan.
23
- #++
24
-
25
-
26
- module Rufus::Tokyo
27
-
28
- #
29
- # The libtokyocabinet.so methods get bound to this module
30
- #
31
- module TyrantLib #:nodoc#
32
-
33
- extend FFI::Library
34
-
35
- #
36
- # find Tokyo Tyrant lib
37
-
38
- paths = Array(ENV['TOKYO_TYRANT_LIB'] || %w{
39
- /usr/lib/libtokyotyrant.so
40
- /opt/local/lib/libtokyotyrant.dylib
41
- /opt/local/lib/libtokyotyrant.so
42
- /usr/local/lib/libtokyotyrant.dylib
43
- /usr/local/lib/libtokyotyrant.so
44
- })
45
-
46
- begin
47
-
48
- ffi_lib(*paths)
49
-
50
- rescue LoadError => le
51
- raise(
52
- "didn't find Tokyo Tyrant libs on your system. " +
53
- "Please install Tokyo Tyrant (http://tokyocabinet.sf.net) " +
54
- "(see also http://openwferu.rubyforge.org/tokyo.html)"
55
- )
56
- end
57
-
58
-
59
- class << self
60
- alias :attfunc :attach_function
61
- end
62
-
63
- #
64
- # tcrdb functions
65
-
66
- attfunc :tcrdbnew, [], :pointer
67
-
68
- attfunc :tcrdbstat, [ :pointer ], :string
69
-
70
- attfunc :tcrdbopen, [ :pointer, :string, :int ], :int
71
- attfunc :abs_close, :tcrdbclose, [ :pointer ], :int
72
-
73
- attfunc :abs_del, :tcrdbdel, [ :pointer ], :void
74
-
75
- attfunc :abs_rnum, :tcrdbrnum, [ :pointer ], :uint64
76
- attfunc :abs_size, :tcrdbsize, [ :pointer ], :uint64
77
-
78
- attfunc :abs_get, :tcrdbget, [ :pointer, :pointer, :int, :pointer ], :pointer
79
- attfunc :abs_put, :tcrdbput, [ :pointer, :pointer, :int, :pointer, :int ], :int
80
-
81
- attfunc :abs_out, :tcrdbout, [ :pointer, :pointer, :int ], :int
82
-
83
- attfunc :abs_putkeep, :tcrdbputkeep, [ :pointer, :pointer, :int, :pointer, :int ], :int
84
-
85
- attfunc :abs_iterinit, :tcrdbiterinit, [ :pointer ], :int
86
- attfunc :abs_iternext, :tcrdbiternext, [ :pointer, :pointer ], :pointer
87
-
88
- attfunc :abs_vanish, :tcrdbvanish, [ :pointer ], :int
89
-
90
- attfunc :abs_sync, :tcrdbsync, [ :pointer ], :int
91
- attfunc :abs_copy, :tcrdbcopy, [ :pointer, :string ], :int
92
-
93
- attfunc :abs_fwmkeys, :tcrdbfwmkeys, [ :pointer, :pointer, :int, :int ], :pointer
94
- attfunc :tcrdbmisc, [ :pointer, :string, :int, :pointer ], :pointer
95
-
96
- attfunc :tcrdbext, [ :pointer, :string, :int, :pointer, :int, :pointer, :int, :pointer ], :pointer
97
-
98
- attfunc :addint, :tcrdbaddint, [ :pointer, :string, :int, :int ], :int
99
- attfunc :adddouble, :tcrdbadddouble, [ :pointer, :string, :int, :double ], :double
100
-
101
- #
102
- # table functions
103
-
104
- attfunc :tab_close, :tcrdbclose, [ :pointer ], :int
105
-
106
- attfunc :tab_genuid, :tcrdbtblgenuid, [ :pointer ], :int64
107
-
108
- attfunc :tab_get, :tcrdbtblget, [ :pointer, :pointer, :int ], :pointer
109
-
110
- attfunc :tab_iterinit, :tcrdbiterinit, [ :pointer ], :int
111
- attfunc :tab_iternext, :tcrdbiternext, [ :pointer, :pointer ], :pointer
112
-
113
- attfunc :tab_put, :tcrdbtblput, [ :pointer, :pointer, :int, :pointer ], :int
114
-
115
- attfunc :tab_out, :tcrdbtblout, [ :pointer, :string, :int ], :int
116
-
117
- attfunc :tab_ecode, :tcrdbecode, [ :pointer ], :int
118
- attfunc :tab_errmsg, :tcrdberrmsg, [ :int ], :string
119
-
120
- attfunc :tab_del, :tcrdbdel, [ :pointer ], :void
121
-
122
- attfunc :tab_rnum, :tcrdbrnum, [ :pointer ], :uint64
123
-
124
- attfunc :tab_vanish, :tcrdbvanish, [ :pointer ], :int
125
-
126
- attfunc :tab_setindex, :tcrdbtblsetindex, [ :pointer, :string, :int ], :int
127
-
128
- attfunc :tab_fwmkeys, :tcrdbfwmkeys, [ :pointer, :pointer, :int, :int ], :pointer
129
-
130
- #
131
- # qry functions
132
-
133
- attfunc :qry_new, :tcrdbqrynew, [ :pointer ], :pointer
134
- attfunc :qry_del, :tcrdbqrydel, [ :pointer ], :void
135
-
136
- attfunc :qry_addcond, :tcrdbqryaddcond, [ :pointer, :string, :int, :string ], :void
137
- attfunc :qry_setorder, :tcrdbqrysetorder, [ :pointer, :string, :int ], :void
138
-
139
- begin
140
- attfunc :qry_setmax, :tcrdbqrysetmax, [ :pointer, :int ], :void
141
- rescue FFI::NotFoundError => nfe
142
- attfunc :qry_setlimit, :tcrdbqrysetlimit, [ :pointer, :int, :int ], :void
143
- end
144
-
145
- attfunc :qry_search, :tcrdbqrysearch, [ :pointer ], :pointer
146
- attfunc :qry_searchout, :tcrdbqrysearchout, [ :pointer ], :int
147
-
148
- begin # since TC 1.4.21
149
- attfunc :qry_count, :tcrdbqrysearchcount, [ :pointer ], :int
150
- rescue FFI::NotFoundError => nfe
151
- end
152
- end
153
- end
@@ -1,162 +0,0 @@
1
- #--
2
- # Copyright (c) 2009, John Mettraux, jmettraux@gmail.com
3
- #
4
- # Permission is hereby granted, free of charge, to any person obtaining a copy
5
- # of this software and associated documentation files (the "Software"), to deal
6
- # in the Software without restriction, including without limitation the rights
7
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
- # copies of the Software, and to permit persons to whom the Software is
9
- # furnished to do so, subject to the following conditions:
10
- #
11
- # The above copyright notice and this permission notice shall be included in
12
- # all copies or substantial portions of the Software.
13
- #
14
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
- # THE SOFTWARE.
21
- #
22
- # Made in Japan.
23
- #++
24
-
25
-
26
- require 'rufus/tokyo/ttcommons'
27
-
28
-
29
- module Rufus::Tokyo
30
-
31
- #
32
- # A Tokyo Cabinet table, but remote...
33
- #
34
- # require 'rufus/tokyo/tyrant'
35
- # t = Rufus::Tokyo::Tyrant.new('127.0.0.1', 44001)
36
- # t['toto'] = { 'name' => 'toto the first', 'age' => '34' }
37
- # t['toto']
38
- # # => { 'name' => 'toto the first', 'age' => '34' }
39
- #
40
- # Most of the methods of this TyrantTable class are defined in the parent
41
- # class Rufus::Tokyo::Table.
42
- #
43
- class TyrantTable < Table
44
-
45
- include TyrantCommons
46
-
47
-
48
- attr_reader :host, :port
49
-
50
- # Connects to the Tyrant table listening at the given host and port.
51
- #
52
- # You start such a Tyrant with :
53
- #
54
- # ttserver -port 44502 data.tct
55
- #
56
- # and then :
57
- #
58
- # require 'rufus/tokyo/tyrant'
59
- # t = Rufus::Tokyo::TyrantTable.new('127.0.0.1', 44502)
60
- # t['client0'] = { 'name' => 'Heike no Kyomori', 'country' => 'jp' }
61
- # t.close
62
- #
63
- #
64
- # You can start a Tokyo Tyrant and make it listen to a unix socket (not TCP)
65
- # with :
66
- #
67
- # ttserver -host /tmp/table_socket -port 0 data.tct
68
- #
69
- # then :
70
- #
71
- # require 'rufus/tokyo/tyrant'
72
- # t = Rufus::Tokyo::TyrantTable.new('/tmp/table_socket')
73
- # t['client0'] = { 'name' => 'Theodore Roosevelt', 'country' => 'usa' }
74
- # t.close
75
- #
76
- def initialize (host, port=0)
77
-
78
- @db = lib.tcrdbnew
79
-
80
- @host = host
81
- @port = port
82
-
83
- (lib.tcrdbopen(@db, host, port) == 1) ||
84
- raise("couldn't connect to tyrant at #{host}:#{port}")
85
-
86
- if self.stat['type'] != 'table'
87
-
88
- self.close
89
-
90
- raise ArgumentError.new(
91
- "tyrant at #{host}:#{port} is a not table, " +
92
- "use Rufus::Tokyo::Tyrant instead to access it.")
93
- end
94
- end
95
-
96
- #
97
- # using the cabinet lib
98
- #
99
- def lib
100
- TyrantLib
101
- end
102
-
103
- def transaction #:nodoc#
104
- raise_transaction_nme('transaction')
105
- end
106
- def abort #:nodoc#
107
- raise_transaction_nme('abort')
108
- end
109
- def tranbegin #:nodoc#
110
- raise_transaction_nme('tranbegin')
111
- end
112
- def trancommit #:nodoc#
113
- raise_transaction_nme('trancommit')
114
- end
115
- def tranabort #:nodoc#
116
- raise_transaction_nme('tranabort')
117
- end
118
-
119
- #--
120
- # Doesn't work properly, tcrdbmisc doesn't return something leveragable :(
121
- #
122
- #def lget (keys)
123
- # call_misc('getlist', Rufus::Tokyo::List.new(keys))
124
- #end
125
- #++
126
-
127
- protected
128
-
129
- def raise_transaction_nme (method_name)
130
-
131
- raise NoMethodError.new(
132
- "Tyrant tables don't support transactions", method_name)
133
- end
134
-
135
- # Returns the raw stat string from the Tyrant server.
136
- #
137
- def do_stat
138
-
139
- lib.tcrdbstat(@db) # note : this is using tcrdbstat
140
- end
141
-
142
- #--
143
- # (see #lget's comment)
144
- #
145
- # wrapping tcadbmisc or tcrdbmisc
146
- # (and taking care of freeing the list_pointer)
147
- #
148
- #def call_misc (function, list_pointer)
149
- # list_pointer = list_pointer.pointer \
150
- # if list_pointer.is_a?(Rufus::Tokyo::List)
151
- # begin
152
- # l = lib.tcrdbmisc(@db, function, 0, list_pointer)
153
- # # opts always to 0 for now
154
- # raise "function '#{function}' failed" unless l
155
- # Rufus::Tokyo::List.new(l).release
156
- # ensure
157
- # Rufus::Tokyo::List.free(list_pointer)
158
- # end
159
- #end
160
- #++
161
- end
162
- end