aerospike_native 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c3a4c1501ed65384aa0a0d8dd90db474e0ff72de
4
- data.tar.gz: 04e3a37359e96e9a753fb2dd88ab1251d68d9290
3
+ metadata.gz: f9adbd76e01717770aa172758d38a3e9340abbec
4
+ data.tar.gz: 5f95658e8a79c57d2021a5ae041c69300989372e
5
5
  SHA512:
6
- metadata.gz: 9ceaf60e6dbe985eee662d96f931af9caf2a95573f3612a0b53411cf38fd57da4f0e9713092883eaf41301b665ea1bd29e8c1f9792356b62773d2978c54aa3d6
7
- data.tar.gz: b962db5ee9f2f2d394424c3a7eeaee3f36ff14f613d727337e3251abbb4518881f3e4077fd5ba2591d5543cd5ae81332eb325dd39d9ee6500d5c30beb5e7f34d
6
+ metadata.gz: f27395cdf1605ca3fb553f77220951adecd99b124ce28570948f3e46e063f17c50b6b8ccd7fb7e858a8abec94a6042c0e3f2325946833f621293fe574b3f2e4e
7
+ data.tar.gz: 5220d3cc0b14b6c4f033e5831f092e9e485bddce1be9bd277fb9159ed47a322fd131e67c0abeecfb282b545ebb447f0b25d9e912f0a5e5d94134d634b4c66006
data/README.md CHANGED
@@ -35,6 +35,8 @@ Or install it yourself as:
35
35
 
36
36
  ## Usage
37
37
 
38
+ ### Basic
39
+
38
40
  ```ruby
39
41
  require 'aerospike_native'
40
42
 
@@ -55,7 +57,17 @@ client.create_index('test', 'test', 'number', 'number_idx');
55
57
 
56
58
  records = []
57
59
  client.where('test', 'test', [AerospikeNative::Condition.range("number", 1, 7)]) { |record| records << record }
58
- records
60
+ puts records.inspect
61
+ records.each { |record| client.remove(record.key) }
62
+ ```
63
+
64
+ ### Logger
65
+
66
+ You can specify logger and log level
67
+
68
+ ```ruby
69
+ AerospikeNative::Client.set_logger Rails.logger # stdout by default
70
+ AerospikeNative::Client.set_log_level :debug # :debug by default
59
71
  ```
60
72
 
61
73
  ## Contributing
@@ -6,12 +6,14 @@ require 'aerospike_native/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "aerospike_native"
8
8
  spec.version = AerospikeNative::VERSION
9
+ spec.platform = Gem::Platform::RUBY
9
10
  spec.authors = ["Vladimir Ziablitskii"]
10
11
  spec.email = ["zyablitskiy@gmail.com"]
11
12
  spec.summary = %q{Aerospike native client}
12
- spec.description = %q{Aerospike ruby client with c extension}
13
+ spec.description = %q{Unofficial Aerospike Client for ruby with c extension (official aerospike c client)}
13
14
  spec.homepage = "https://github.com/rainlabs/aerospike_native"
14
15
  spec.license = "MIT"
16
+ # spec.required_ruby_version = '>= 1.9.3'
15
17
 
16
18
  spec.files = `git ls-files -z`.split("\x0")
17
19
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
@@ -21,6 +23,6 @@ Gem::Specification.new do |spec|
21
23
 
22
24
  spec.add_development_dependency "bundler", "~> 1.7"
23
25
  spec.add_development_dependency "rake", "~> 10.0"
24
- spec.add_development_dependency "rake-compiler"
25
- spec.add_development_dependency "rspec"
26
+ spec.add_development_dependency "rake-compiler", "~> 0.9"
27
+ spec.add_development_dependency "rspec", "~> 3.3"
26
28
  end
@@ -12,6 +12,7 @@ void Init_aerospike_native()
12
12
  {
13
13
  AerospikeNativeClass = rb_define_module("AerospikeNative");
14
14
  define_exception();
15
+ define_logger();
15
16
  define_client();
16
17
  define_native_key();
17
18
  define_record();
@@ -72,7 +72,6 @@ VALUE client_initialize(int argc, VALUE* argv, VALUE self)
72
72
  VALUE hash = rb_ary_entry(ary, n);
73
73
  VALUE host = rb_hash_aref(hash, rb_str_new2("host"));
74
74
  VALUE port = rb_hash_aref(hash, rb_str_new2("port"));
75
- printf("host: %s:%d\n", StringValueCStr(host), NUM2UINT(port));
76
75
  as_config_add_host(&config, StringValueCStr(host), NUM2UINT(port));
77
76
  }
78
77
  }
@@ -701,6 +700,22 @@ VALUE client_exec_query(int argc, VALUE* vArgs, VALUE vSelf)
701
700
  return vArray;
702
701
  }
703
702
 
703
+ VALUE client_set_logger(VALUE vSelf, VALUE vNewLogger)
704
+ {
705
+ VALUE vLogger = rb_cv_get(vSelf, "@@logger");
706
+ rb_iv_set(vLogger, "@internal", vNewLogger);
707
+
708
+ return vLogger;
709
+ }
710
+
711
+ VALUE client_set_log_level(VALUE vSelf, VALUE vLevel)
712
+ {
713
+ VALUE vLogger = rb_cv_get(vSelf, "@@logger");
714
+ Check_Type(vLevel, T_SYMBOL);
715
+
716
+ return rb_funcall(vLogger, rb_intern("set_level"), 1, vLevel);
717
+ }
718
+
704
719
  void define_client()
705
720
  {
706
721
  ClientClass = rb_define_class_under(AerospikeNativeClass, "Client", rb_cObject);
@@ -715,4 +730,8 @@ void define_client()
715
730
  rb_define_method(ClientClass, "create_index", client_create_index, -1);
716
731
  rb_define_method(ClientClass, "drop_index", client_drop_index, -1);
717
732
  rb_define_method(ClientClass, "where", client_exec_query, -1);
733
+
734
+ rb_cv_set(ClientClass, "@@logger", rb_class_new_instance(0, NULL, LoggerClass));
735
+ rb_define_singleton_method(ClientClass, "set_logger", client_set_logger, 1);
736
+ rb_define_singleton_method(ClientClass, "set_log_level", client_set_log_level, 1);
718
737
  }
@@ -3,6 +3,7 @@
3
3
 
4
4
  #include <ruby.h>
5
5
  #include "exception.h"
6
+ #include "logger.h"
6
7
 
7
8
  VALUE rb_hash_keys(VALUE hash);
8
9
 
@@ -50,7 +50,7 @@ VALUE key_initialize(int argc, VALUE* vArgs, VALUE vSelf)
50
50
 
51
51
  Data_Get_Struct(vSelf, as_key, ptr);
52
52
 
53
- if(TYPE(vValue) == T_STRING) {
53
+ if(TYPE(vValue) == T_STRING || TYPE(vValue) == T_FIXNUM) {
54
54
  switch(TYPE(vValue)) {
55
55
  case T_FIXNUM:
56
56
  as_key_init_int64(ptr, StringValueCStr( vNamespace ), StringValueCStr( vSet ), FIX2LONG( vValue ));
@@ -0,0 +1,158 @@
1
+ #include "logger.h"
2
+ #include "client.h"
3
+
4
+ VALUE LoggerClass;
5
+
6
+ bool aerospike_log_callback(as_log_level level, const char *func, const char *file,
7
+ uint32_t line, const char *fmt, ...)
8
+ {
9
+ char msg[1024] = {0};
10
+ char log_msg[1500] = {0};
11
+ va_list ap;
12
+ VALUE vLogger = rb_cv_get(ClientClass, "@@logger");
13
+
14
+ va_start(ap, fmt);
15
+ vsnprintf(msg, 1024, fmt, ap);
16
+ msg[1023] = '\0';
17
+ va_end(ap);
18
+
19
+ sprintf(log_msg, "%d (Aerospike) - %s", level, msg);
20
+
21
+ if(TYPE(vLogger) != T_NIL) {
22
+ rb_funcall(vLogger, rb_intern("write"), 2, INT2FIX(level), rb_str_new2(log_msg));
23
+ }
24
+
25
+ return true;
26
+ }
27
+
28
+ VALUE logger_initialize(VALUE vSelf)
29
+ {
30
+ int default_level = AS_LOG_LEVEL_DEBUG;
31
+ as_log_set_level(default_level);
32
+ as_log_set_callback(aerospike_log_callback);
33
+ rb_iv_set(vSelf, "@level", INT2FIX(default_level));
34
+ return vSelf;
35
+ }
36
+
37
+ VALUE logger_set_level(VALUE vSelf, VALUE vLevel)
38
+ {
39
+ VALUE vInternalLogger = rb_iv_get(vSelf, "@internal");
40
+ int log_level = AS_LOG_LEVEL_INFO;
41
+ VALUE vError = ID2SYM( rb_intern("error") );
42
+ VALUE vWarn = ID2SYM( rb_intern("warn") );
43
+ VALUE vInfo = ID2SYM( rb_intern("info") );
44
+ VALUE vDebug = ID2SYM( rb_intern("debug") );
45
+ VALUE vTrace = ID2SYM( rb_intern("trace") );
46
+
47
+ Check_Type(vLevel, T_SYMBOL);
48
+ if (vLevel == vError) {
49
+ log_level = AS_LOG_LEVEL_ERROR;
50
+ } else if (vLevel == vWarn) {
51
+ log_level = AS_LOG_LEVEL_WARN;
52
+ } else if (vLevel == vInfo) {
53
+ log_level = AS_LOG_LEVEL_INFO;
54
+ } else if (vLevel == vDebug) {
55
+ log_level = AS_LOG_LEVEL_DEBUG;
56
+ } else if (vLevel == vTrace) {
57
+ log_level = AS_LOG_LEVEL_TRACE;
58
+ } else {
59
+ return Qfalse;
60
+ }
61
+
62
+ as_log_set_level(log_level);
63
+ rb_iv_set(vSelf, "@level", INT2FIX(log_level));
64
+
65
+ if (TYPE(vInternalLogger) != T_NIL) {
66
+ int internal_level = 3 - (log_level == AS_LOG_LEVEL_TRACE ? AS_LOG_LEVEL_DEBUG : log_level);
67
+ rb_iv_set(vInternalLogger, "@level", INT2FIX(internal_level));
68
+ }
69
+
70
+ return Qtrue;
71
+ }
72
+
73
+ VALUE logger_write(VALUE vSelf, VALUE vLevel, VALUE vMsg)
74
+ {
75
+ int level;
76
+ VALUE vInternalLevel, vInternalLogger;
77
+ ID vMethod;
78
+ Check_Type(vLevel, T_FIXNUM);
79
+ Check_Type(vMsg, T_STRING);
80
+
81
+ vInternalLevel = rb_iv_get(vSelf, "@level");
82
+ vInternalLogger = rb_iv_get(vSelf, "@internal");
83
+ Check_Type(vInternalLevel, T_FIXNUM);
84
+ level = FIX2INT(vLevel);
85
+
86
+ switch(TYPE(vInternalLogger)) {
87
+ case T_NIL:
88
+ if (level <= FIX2INT(vInternalLevel)) {
89
+ // TODO: add default behavior with write into file
90
+ fprintf(stdout, "%s\n", StringValueCStr(vMsg));
91
+ return vMsg;
92
+ }
93
+ break;
94
+ case T_OBJECT:
95
+ switch(level) {
96
+ case AS_LOG_LEVEL_ERROR:
97
+ vMethod = rb_intern("error");
98
+ break;
99
+ case AS_LOG_LEVEL_WARN:
100
+ vMethod = rb_intern("warn");
101
+ break;
102
+ case AS_LOG_LEVEL_INFO:
103
+ vMethod = rb_intern("info");
104
+ break;
105
+ case AS_LOG_LEVEL_DEBUG:
106
+ case AS_LOG_LEVEL_TRACE:
107
+ vMethod = rb_intern("debug");
108
+ break;
109
+ default:
110
+ vMethod = rb_intern("unknown");
111
+ break;
112
+ }
113
+
114
+ return rb_funcall(vInternalLogger, vMethod, 1, vMsg);
115
+ }
116
+
117
+ return Qnil;
118
+ }
119
+
120
+ VALUE logger_error(VALUE vSelf, VALUE vMsg)
121
+ {
122
+ return rb_funcall(vSelf, rb_intern("write"), 2, INT2FIX(AS_LOG_LEVEL_ERROR), vMsg);
123
+ }
124
+
125
+ VALUE logger_warn(VALUE vSelf, VALUE vMsg)
126
+ {
127
+ return rb_funcall(vSelf, rb_intern("write"), 2, INT2FIX(AS_LOG_LEVEL_WARN), vMsg);
128
+ }
129
+
130
+ VALUE logger_info(VALUE vSelf, VALUE vMsg)
131
+ {
132
+ return rb_funcall(vSelf, rb_intern("write"), 2, INT2FIX(AS_LOG_LEVEL_INFO), vMsg);
133
+ }
134
+
135
+ VALUE logger_debug(VALUE vSelf, VALUE vMsg)
136
+ {
137
+ return rb_funcall(vSelf, rb_intern("write"), 2, INT2FIX(AS_LOG_LEVEL_DEBUG), vMsg);
138
+ }
139
+
140
+ VALUE logger_trace(VALUE vSelf, VALUE vMsg)
141
+ {
142
+ return rb_funcall(vSelf, rb_intern("write"), 2, INT2FIX(AS_LOG_LEVEL_TRACE), vMsg);
143
+ }
144
+
145
+ void define_logger()
146
+ {
147
+ LoggerClass = rb_define_class_under(AerospikeNativeClass, "Logger", rb_cObject);
148
+ rb_define_method(LoggerClass, "initialize", logger_initialize, 0);
149
+ rb_define_method(LoggerClass, "set_level", logger_set_level, 1);
150
+ rb_define_method(LoggerClass, "write", logger_write, 2);
151
+ rb_define_method(LoggerClass, "error", logger_error, 1);
152
+ rb_define_method(LoggerClass, "warn", logger_warn, 1);
153
+ rb_define_method(LoggerClass, "info", logger_info, 1);
154
+ rb_define_method(LoggerClass, "debug", logger_debug, 1);
155
+ rb_define_method(LoggerClass, "trace", logger_trace, 1);
156
+ rb_define_attr(LoggerClass, "level", 1, 0);
157
+ rb_define_attr(LoggerClass, "internal", 1, 1);
158
+ }
@@ -0,0 +1,10 @@
1
+ #ifndef LOGGER_H
2
+ #define LOGGER_H
3
+
4
+ #include "aerospike_native.h"
5
+
6
+ RUBY_EXTERN VALUE LoggerClass;
7
+ void define_logger();
8
+
9
+ #endif // LOGGER_H
10
+
@@ -1,3 +1,3 @@
1
1
  module AerospikeNative
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aerospike_native
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Ziablitskii
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-07-12 00:00:00.000000000 Z
11
+ date: 2015-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -42,31 +42,32 @@ dependencies:
42
42
  name: rake-compiler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '0.9'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '0.9'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '3.3'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
69
- description: Aerospike ruby client with c extension
68
+ version: '3.3'
69
+ description: Unofficial Aerospike Client for ruby with c extension (official aerospike
70
+ c client)
70
71
  email:
71
72
  - zyablitskiy@gmail.com
72
73
  executables: []
@@ -95,6 +96,8 @@ files:
95
96
  - ext/aerospike_native/key.c
96
97
  - ext/aerospike_native/key.h
97
98
  - ext/aerospike_native/lib/.keep
99
+ - ext/aerospike_native/logger.c
100
+ - ext/aerospike_native/logger.h
98
101
  - ext/aerospike_native/operation.c
99
102
  - ext/aerospike_native/operation.h
100
103
  - ext/aerospike_native/policy.c