aerospike_native 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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