cmetrics 0.2.0 → 0.2.4

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
  SHA256:
3
- metadata.gz: 7718f2df26fa25f74be30a4ac65f555b53576641df5ceb5fcb4db8e67ed8b1d0
4
- data.tar.gz: 7e154efbf9beaff565af8f812bd63932ebf0594faf800fda4b82790d11911fe1
3
+ metadata.gz: 5f7a2ed53936604ee92cc24e2aa15bfa07389c54e1612170c266d8953fb113a2
4
+ data.tar.gz: e25ebd242bbfc84b994545675c3de1fa66276e643b57d6acaff2e8009e611c89
5
5
  SHA512:
6
- metadata.gz: 807d890634944b9bc738fd518af39a28cfea55a2daad19c0435786ece2535bd94c5fe34c8ab9ebae4c3408180e8005b75ee97377ace9fb6c67c802baad39da1d
7
- data.tar.gz: '0698fef3a0195bd4499cedff46f3146aff5a49831e23ef3bc6ce6789df77cb36ef2b956cbcb99d254fabbd44709f964c44612c03c64a9f49b67b9fb4819f2a6c'
6
+ metadata.gz: 3848618b6b384afb7867db62133784c9492335757f53f92641c11a75ee82269a9a21150a8a73e81361ff2a6be252bfc6477c2269392ce75cb50f356d62b2ebb9
7
+ data.tar.gz: 360bf386dfb723f5daf2cf14e028c23ed7a546aa9e51a5ef9a403c19ffc9f380199f47eed82f0e8978991b939e64418a38839e88b4a333680888a5e64ed9842b
@@ -0,0 +1,39 @@
1
+ name: Apt based Linux
2
+ on:
3
+ push:
4
+ pull_request:
5
+ jobs:
6
+ build:
7
+ name: Build
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ label:
12
+ - Debian GNU/Linux Bullseye amd64
13
+ - Debian GNU/Linux Buster amd64
14
+ - Ubuntu Bionic amd64
15
+ - Ubuntu Focal amd64
16
+ include:
17
+ - label: Debian GNU/Linux Bullseye amd64
18
+ test-docker-image: debian:bullseye
19
+ test-script: ci/apt-test.sh
20
+ - label: Debian GNU/Linux Buster amd64
21
+ test-docker-image: debian:buster
22
+ test-script: ci/apt-test.sh
23
+ - label: Ubuntu Bionic amd64
24
+ test-docker-image: ubuntu:bionic
25
+ test-script: ci/apt-test.sh
26
+ - label: Ubuntu Focal amd64
27
+ test-docker-image: ubuntu:focal
28
+ test-script: ci/apt-test.sh
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@master
32
+ - name: rake compile & rake test
33
+ run: |
34
+ docker run \
35
+ --rm \
36
+ --tty \
37
+ --volume ${PWD}:/cmetrics-ruby \
38
+ ${{ matrix.test-docker-image }} \
39
+ /cmetrics-ruby/${{ matrix.test-script }}
@@ -10,9 +10,9 @@ jobs:
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 3.0.1
13
+ ruby-version: '3.0'
14
14
  - name: Run the default task
15
15
  run: |
16
- gem install bundler -v 2.2.15
16
+ gem install bundler -v 2.2.26
17
17
  bundle install
18
18
  bundle exec rake
@@ -10,9 +10,9 @@ jobs:
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 3.0.1
13
+ ruby-version: '3.0'
14
14
  - name: Run the default task
15
15
  run: |
16
- gem install bundler -v 2.2.15
16
+ gem install bundler -v 2.2.26
17
17
  bundle install
18
18
  bundle exec rake
@@ -10,9 +10,9 @@ jobs:
10
10
  - name: Set up Ruby
11
11
  uses: ruby/setup-ruby@v1
12
12
  with:
13
- ruby-version: 3.0.1
13
+ ruby-version: '3.0'
14
14
  - name: Run the default task
15
15
  run: |
16
- gem install bundler -v 2.2.15
16
+ gem install bundler -v 2.2.26
17
17
  ridk exec bundle install
18
18
  ridk exec bundle exec rake
@@ -0,0 +1,39 @@
1
+ name: Yum based Linux
2
+ on:
3
+ push:
4
+ pull_request:
5
+ jobs:
6
+ build:
7
+ name: Build
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ label:
12
+ - CentOS 7 x86_64
13
+ - CentOS 8 x86_64
14
+ - Fedora 34 x86_64
15
+ - AmazonLinux 2 x86_64
16
+ include:
17
+ - label: CentOS 7 x86_64
18
+ test-docker-image: centos:7
19
+ test-script: ci/yum-test.sh
20
+ - label: CentOS 8 x86_64
21
+ test-docker-image: centos:8
22
+ test-script: ci/yum-test.sh
23
+ - label: Fedora 34 x86_64
24
+ test-docker-image: fedora:34
25
+ test-script: ci/yum-test.sh
26
+ - label: AmazonLinux 2 x86_64
27
+ test-docker-image: amazonlinux:2
28
+ test-script: ci/yum-test.sh
29
+ runs-on: ubuntu-latest
30
+ steps:
31
+ - uses: actions/checkout@master
32
+ - name: rake compile & rake test
33
+ run: |
34
+ docker run \
35
+ --rm \
36
+ --tty \
37
+ --volume ${PWD}:/cmetrics-ruby \
38
+ ${{ matrix.test-docker-image }} \
39
+ /cmetrics-ruby/${{ matrix.test-script }}
data/Gemfile CHANGED
@@ -7,4 +7,10 @@ gemspec
7
7
 
8
8
  gem "rake", "~> 13.0"
9
9
 
10
- gem "test-unit", "~> 3.0"
10
+ gem "test-unit", "~> 3.4"
11
+
12
+ local_gemfile = File.join(File.dirname(__FILE__), "Gemfile.local")
13
+ if File.exist?(local_gemfile)
14
+ puts "Loading Gemfile.local ..." if $DEBUG # `ruby -d` or `bundle -v`
15
+ instance_eval File.read(local_gemfile)
16
+ end
data/ci/apt-test.sh ADDED
@@ -0,0 +1,40 @@
1
+ #!/bin/bash
2
+
3
+ set -exu
4
+
5
+ export DEBIAN_FRONTEND=noninteractive
6
+
7
+ if [ -f /etc/lsb-release ]; then
8
+ . /etc/lsb-release
9
+ distribution=$DISTRIB_ID
10
+ version=${DISTRIB_RELEASE%%.*}
11
+ codename=${DISTRIB_CODENAME%%.*}
12
+ else
13
+ distribution="Debian"
14
+ version=$(cat /etc/debian_version | cut -d'.' -f1)
15
+ fi
16
+
17
+ apt update
18
+
19
+ case "$distribution" in
20
+ "Ubuntu")
21
+ case "$codename" in
22
+ "bionic")
23
+ apt install -V -y wget gpg
24
+ wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /usr/share/keyrings/kitware-archive-keyring.gpg >/dev/null && \
25
+ echo 'deb [signed-by=/usr/share/keyrings/kitware-archive-keyring.gpg] https://apt.kitware.com/ubuntu/ bionic main' | tee /etc/apt/sources.list.d/kitware.list >/dev/null && \
26
+ apt update
27
+ ;;
28
+ *)
29
+ ;;
30
+ esac
31
+ ;;
32
+ esac
33
+
34
+ apt install -V -y lsb-release
35
+
36
+ apt install -V -y ruby-dev git build-essential pkg-config cmake
37
+ cd /cmetrics-ruby && \
38
+ gem install bundler --no-document && \
39
+ bundle install && \
40
+ bundle exec rake
data/ci/yum-test.sh ADDED
@@ -0,0 +1,77 @@
1
+ #!/bin/bash
2
+
3
+ set -exu
4
+
5
+ USE_SCL=0
6
+ USE_AMZN_EXT=0
7
+
8
+ distribution=$(cat /etc/system-release-cpe | awk '{print substr($0, index($1, "o"))}' | cut -d: -f2)
9
+ version=$(cat /etc/system-release-cpe | awk '{print substr($0, index($1, "o"))}' | cut -d: -f4)
10
+ USE_SCL=0
11
+ USE_AMZN_EXT=0
12
+
13
+ case ${distribution} in
14
+ amazon)
15
+ case ${version} in
16
+ 2)
17
+ DNF=yum
18
+ USE_AMZN_EXT=1
19
+ ;;
20
+ esac
21
+ ;;
22
+ centos)
23
+ case ${version} in
24
+ 7)
25
+ DNF=yum
26
+ USE_SCL=1
27
+ ;;
28
+ *)
29
+ DNF="dnf --enablerepo=powertools"
30
+ ;;
31
+ esac
32
+ ;;
33
+ fedoraproject)
34
+ case ${version} in
35
+ 33|34)
36
+ DNF=yum
37
+ ;;
38
+ esac
39
+ ;;
40
+ esac
41
+
42
+ ${DNF} groupinstall -y "Development Tools"
43
+
44
+ if [ $USE_SCL -eq 1 ]; then
45
+ ${DNF} install -y centos-release-scl && \
46
+ ${DNF} install -y epel-release && \
47
+ ${DNF} install -y \
48
+ rh-ruby26-ruby-devel \
49
+ rh-ruby26-rubygems \
50
+ rh-ruby26-rubygem-rake \
51
+ rpm-build \
52
+ cmake3
53
+ elif [ $USE_AMZN_EXT -eq 1 ]; then
54
+ yum update -y && \
55
+ yum install -y yum-utils && \
56
+ yum-config-manager --enable epel && \
57
+ amazon-linux-extras install -y ruby2.6 && \
58
+ ${DNF} install -y ruby-devel \
59
+ cmake3
60
+ else
61
+ ${DNF} install -y ruby-devel \
62
+ rubygems \
63
+ rpm-build \
64
+ cmake \
65
+ libarchive
66
+ fi
67
+
68
+ if [ $USE_SCL -eq 1 ]; then
69
+ # For unbound variable error
70
+ export MANPATH=
71
+ cd /cmetrics-ruby && source /opt/rh/rh-ruby26/enable && gem install bundler --no-document && bundle install && bundle exec rake
72
+ else
73
+ if [ $USE_AMZN_EXT -eq 1 ]; then
74
+ echo 'gem "io-console"' > /cmetrics-ruby/Gemfile.local
75
+ fi
76
+ cd /cmetrics-ruby && gem install bundler --no-document && bundle install && bundle exec rake
77
+ fi
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
  spec.add_development_dependency "rake", ">= 0"
30
30
  spec.add_development_dependency "rake-compiler", "~> 1.0"
31
31
  spec.add_development_dependency "rake-compiler-dock", "~> 1.0"
32
+ spec.add_development_dependency "msgpack", "~> 1.4.2"
32
33
 
33
- spec.add_dependency 'mini_portile2', '~> 2.1'
34
+ spec.add_dependency 'mini_portile2', '~> 2.7'
34
35
  end
@@ -65,5 +65,8 @@ void Init_cmetrics_counter(VALUE rb_mCMetrics);
65
65
  void Init_cmetrics_gauge(VALUE rb_mCMetrics);
66
66
  void Init_cmetrics_serde(VALUE rb_mCMetrics);
67
67
  void Init_cmetrics_untyped(VALUE rb_mCMetrics);
68
+ const struct CMetricsCounter *cmetrics_counter_get_ptr(VALUE rb_mCMetrics);
69
+ const struct CMetricsGauge *cmetrics_gauge_get_ptr(VALUE rb_mCMetrics);
70
+ const struct CMetricsUntyped *cmetrics_untyped_get_ptr(VALUE rb_mCMetrics);
68
71
 
69
72
  #endif // _CMETRICS_C_H
@@ -34,16 +34,32 @@ static const rb_data_type_t rb_cmetrics_counter_type = { "cmetrics/counter",
34
34
  RUBY_TYPED_FREE_IMMEDIATELY };
35
35
 
36
36
 
37
+ const struct CMetricsCounter *cmetrics_counter_get_ptr(VALUE self)
38
+ {
39
+ struct CMetricsCounter *cmetricsCounter = NULL;
40
+
41
+ TypedData_Get_Struct(
42
+ self, struct CMetricsCounter, &rb_cmetrics_counter_type, cmetricsCounter);
43
+
44
+ if (NIL_P(self)) {
45
+ rb_raise(rb_eRuntimeError, "Given CMetrics argument must not be nil");
46
+ }
47
+ if (!cmetricsCounter->counter) {
48
+ rb_raise(rb_eRuntimeError, "Create counter with CMetrics::Counter#create first.");
49
+ }
50
+ return cmetricsCounter;
51
+ }
52
+
37
53
  static void
38
54
  counter_free(void* ptr)
39
55
  {
40
56
  struct CMetricsCounter* cmetricsCounter = (struct CMetricsCounter*)ptr;
41
57
 
42
- if (!cmetricsCounter) {
43
- if (!cmetricsCounter->counter) {
58
+ if (cmetricsCounter) {
59
+ if (cmetricsCounter->counter) {
44
60
  cmt_counter_destroy(cmetricsCounter->counter);
45
61
  }
46
- if (!cmetricsCounter->instance) {
62
+ if (cmetricsCounter->instance) {
47
63
  cmt_destroy(cmetricsCounter->instance);
48
64
  }
49
65
  }
@@ -34,16 +34,32 @@ static const rb_data_type_t rb_cmetrics_gauge_type = { "cmetrics/gauge",
34
34
  RUBY_TYPED_FREE_IMMEDIATELY };
35
35
 
36
36
 
37
+ const struct CMetricsGauge *cmetrics_gauge_get_ptr(VALUE self)
38
+ {
39
+ struct CMetricsGauge *cmetricsGauge = NULL;
40
+
41
+ TypedData_Get_Struct(
42
+ self, struct CMetricsGauge, &rb_cmetrics_gauge_type, cmetricsGauge);
43
+
44
+ if (NIL_P(self)) {
45
+ rb_raise(rb_eRuntimeError, "Given CMetrics argument must not be nil");
46
+ }
47
+ if (!cmetricsGauge->gauge) {
48
+ rb_raise(rb_eRuntimeError, "Create gauge with CMetrics::Gauge#create first.");
49
+ }
50
+ return cmetricsGauge;
51
+ }
52
+
37
53
  static void
38
54
  gauge_free(void* ptr)
39
55
  {
40
56
  struct CMetricsGauge* cmetricsGauge = (struct CMetricsGauge*)ptr;
41
57
 
42
- if (!cmetricsGauge) {
43
- if (!cmetricsGauge->gauge) {
58
+ if (cmetricsGauge) {
59
+ if (cmetricsGauge->gauge) {
44
60
  cmt_gauge_destroy(cmetricsGauge->gauge);
45
61
  }
46
- if (!cmetricsGauge->instance) {
62
+ if (cmetricsGauge->instance) {
47
63
  cmt_destroy(cmetricsGauge->instance);
48
64
  }
49
65
  }
@@ -20,9 +20,14 @@
20
20
  #include "cmetrics_c.h"
21
21
  #include <cmetrics/cmt_map.h>
22
22
  #include <cmetrics/cmt_metric.h>
23
+ #include <cmetrics/cmt_cat.h>
23
24
 
24
25
  VALUE rb_cSerde;
25
26
 
27
+ extern VALUE rb_cCounter;
28
+ extern VALUE rb_cGauge;
29
+ extern VALUE rb_cUntyped;
30
+
26
31
  static void serde_free(void* ptr);
27
32
 
28
33
  static const rb_data_type_t rb_cmetrics_serde_type = { "cmetrics/serde",
@@ -41,8 +46,8 @@ serde_free(void* ptr)
41
46
  {
42
47
  struct CMetricsSerde* cmetricsSerde = (struct CMetricsSerde*)ptr;
43
48
 
44
- if (!cmetricsSerde) {
45
- if (!cmetricsSerde->instance) {
49
+ if (cmetricsSerde) {
50
+ if (cmetricsSerde->instance) {
46
51
  cmt_destroy(cmetricsSerde->instance);
47
52
  }
48
53
  }
@@ -135,13 +140,14 @@ rb_cmetrics_serde_from_msgpack_feed_each_impl(VALUE self, VALUE rb_msgpack_buffe
135
140
  struct CMetricsSerde* cmetricsSerde;
136
141
  struct cmt *cmt = NULL;
137
142
  int ret = 0;
143
+ size_t offset = 0;
138
144
 
139
145
  RETURN_ENUMERATOR(self, 0, 0);
140
146
 
141
147
  TypedData_Get_Struct(
142
148
  self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
143
149
 
144
- for (size_t offset = 0; offset <= msgpack_length; ) {
150
+ for (offset = 0; offset <= msgpack_length; ) {
145
151
  ret = cmt_decode_msgpack_create(&cmt, StringValuePtr(rb_msgpack_buffer), msgpack_length, &offset);
146
152
  if (ret == 0) {
147
153
  cmetricsSerde->instance = cmt;
@@ -167,6 +173,41 @@ rb_cmetrics_serde_from_msgpack_feed_each(VALUE self, VALUE rb_data)
167
173
  }
168
174
  }
169
175
 
176
+ static VALUE
177
+ rb_cmetrics_serde_concat_metric(VALUE self, VALUE rb_data)
178
+ {
179
+ struct CMetricsSerde* cmetricsSerde = NULL;
180
+ struct CMetricsCounter* cmetricsCounter = NULL;
181
+ struct CMetricsGauge* cmetricsGauge = NULL;
182
+ struct CMetricsUntyped* cmetricsUntyped = NULL;
183
+
184
+ TypedData_Get_Struct(
185
+ self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
186
+
187
+ if (!NIL_P(rb_data)) {
188
+ if (cmetricsSerde->instance == NULL) {
189
+ cmetricsSerde->instance = cmt_create();
190
+ }
191
+
192
+ if (rb_obj_is_kind_of(rb_data, rb_cCounter)) {
193
+ cmetricsCounter = (struct CMetricsCounter *)cmetrics_counter_get_ptr(rb_data);
194
+ cmt_cat(cmetricsSerde->instance, cmetricsCounter->instance);
195
+ } else if (rb_obj_is_kind_of(rb_data, rb_cGauge)) {
196
+ cmetricsGauge = (struct CMetricsGauge *)cmetrics_gauge_get_ptr(rb_data);
197
+ cmt_cat(cmetricsSerde->instance, cmetricsGauge->instance);
198
+ } else if (rb_obj_is_kind_of(rb_data, rb_cUntyped)) {
199
+ cmetricsUntyped = (struct CMetricsUntyped *)cmetrics_untyped_get_ptr(rb_data);
200
+ cmt_cat(cmetricsSerde->instance, cmetricsUntyped->instance);
201
+ } else {
202
+ rb_raise(rb_eArgError, "specified type of instance is not supported.");
203
+ }
204
+ } else {
205
+ rb_raise(rb_eArgError, "nil is not valid value for concatenating");
206
+ }
207
+
208
+ return Qnil;
209
+ }
210
+
170
211
  static VALUE
171
212
  rb_cmetrics_serde_to_prometheus(VALUE self)
172
213
  {
@@ -177,6 +218,10 @@ rb_cmetrics_serde_to_prometheus(VALUE self)
177
218
  TypedData_Get_Struct(
178
219
  self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
179
220
 
221
+ if (cmetricsSerde->instance == NULL) {
222
+ rb_raise(rb_eRuntimeError, "Invalid cmt context");
223
+ }
224
+
180
225
  prom = cmt_encode_prometheus_create(cmetricsSerde->instance, CMT_TRUE);
181
226
 
182
227
  str = rb_str_new2(prom);
@@ -196,6 +241,10 @@ rb_cmetrics_serde_to_influx(VALUE self)
196
241
  TypedData_Get_Struct(
197
242
  self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
198
243
 
244
+ if (cmetricsSerde->instance == NULL) {
245
+ rb_raise(rb_eRuntimeError, "Invalid cmt context");
246
+ }
247
+
199
248
  prom = cmt_encode_influx_create(cmetricsSerde->instance);
200
249
 
201
250
  str = rb_str_new2(prom);
@@ -215,6 +264,10 @@ rb_cmetrics_serde_to_msgpack(VALUE self)
215
264
  TypedData_Get_Struct(
216
265
  self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
217
266
 
267
+ if (cmetricsSerde->instance == NULL) {
268
+ rb_raise(rb_eRuntimeError, "Invalid cmt context");
269
+ }
270
+
218
271
  ret = cmt_encode_msgpack_create(cmetricsSerde->instance, &buffer, &buffer_size);
219
272
 
220
273
  if (ret == 0) {
@@ -234,6 +287,10 @@ rb_cmetrics_serde_to_text(VALUE self)
234
287
  TypedData_Get_Struct(
235
288
  self, struct CMetricsSerde, &rb_cmetrics_serde_type, cmetricsSerde);
236
289
 
290
+ if (cmetricsSerde->instance == NULL) {
291
+ rb_raise(rb_eRuntimeError, "Invalid cmt context");
292
+ }
293
+
237
294
  buffer = cmt_encode_text_create(cmetricsSerde->instance);
238
295
  if (buffer == NULL) {
239
296
  return Qnil;
@@ -398,6 +455,7 @@ void Init_cmetrics_serde(VALUE rb_mCMetrics)
398
455
  rb_define_alloc_func(rb_cSerde, rb_cmetrics_serde_alloc);
399
456
 
400
457
  rb_define_method(rb_cSerde, "initialize", rb_cmetrics_serde_initialize, 0);
458
+ rb_define_method(rb_cSerde, "concat", rb_cmetrics_serde_concat_metric, 1);
401
459
  rb_define_method(rb_cSerde, "from_msgpack", rb_cmetrics_serde_from_msgpack, -1);
402
460
  rb_define_method(rb_cSerde, "to_prometheus", rb_cmetrics_serde_to_prometheus, 0);
403
461
  rb_define_method(rb_cSerde, "to_influx", rb_cmetrics_serde_to_influx, 0);
@@ -34,16 +34,32 @@ static const rb_data_type_t rb_cmetrics_untyped_type = { "cmetrics/untyped",
34
34
  RUBY_TYPED_FREE_IMMEDIATELY };
35
35
 
36
36
 
37
+ const struct CMetricsUntyped *cmetrics_untyped_get_ptr(VALUE self)
38
+ {
39
+ struct CMetricsUntyped *cmetricsUntyped = NULL;
40
+
41
+ TypedData_Get_Struct(
42
+ self, struct CMetricsUntyped, &rb_cmetrics_untyped_type, cmetricsUntyped);
43
+
44
+ if (NIL_P(self)) {
45
+ rb_raise(rb_eRuntimeError, "Given CMetrics argument must not be nil");
46
+ }
47
+ if (!cmetricsUntyped->untyped) {
48
+ rb_raise(rb_eRuntimeError, "Create untyped with CMetrics::Untyped#create first.");
49
+ }
50
+ return cmetricsUntyped;
51
+ }
52
+
37
53
  static void
38
54
  untyped_free(void* ptr)
39
55
  {
40
56
  struct CMetricsUntyped* cmetricsUntyped = (struct CMetricsUntyped*)ptr;
41
57
 
42
- if (!cmetricsUntyped) {
43
- if (!cmetricsUntyped->untyped) {
58
+ if (cmetricsUntyped) {
59
+ if (cmetricsUntyped->untyped) {
44
60
  cmt_untyped_destroy(cmetricsUntyped->untyped);
45
61
  }
46
- if (!cmetricsUntyped->instance) {
62
+ if (cmetricsUntyped->instance) {
47
63
  cmt_destroy(cmetricsUntyped->instance);
48
64
  }
49
65
  }
@@ -13,17 +13,35 @@ def windows?
13
13
  RUBY_PLATFORM =~ /mingw|mswin/
14
14
  end
15
15
 
16
+ def determine_preferred_command(bin, default_bin)
17
+ printf "checking for whether %s or %s is usable... ", bin, default_bin
18
+ STDOUT.flush
19
+ bin += RbConfig::CONFIG['EXEEXT']
20
+ path = ENV['PATH'].split(RbConfig::CONFIG['PATH_SEPARATOR'])
21
+ for dir in path
22
+ file = File.join(dir, bin)
23
+ if FileTest.executable?(file)
24
+ printf "%s\n", bin
25
+ return bin
26
+ else
27
+ next
28
+ end
29
+ end
30
+ printf "%s\n", default_bin
31
+ return default_bin
32
+ end
33
+
16
34
  class BuildCMetrics
17
35
 
18
36
  attr_reader :recipe
19
37
 
20
- def initialize(version=nil)
38
+ def initialize(version=nil, **kwargs)
21
39
  @version = if version
22
40
  version
23
41
  else
24
42
  "master".freeze
25
43
  end
26
- @recipe = MiniPortileCMake.new("cmetrics", @version)
44
+ @recipe = MiniPortileCMake.new("cmetrics", @version, **kwargs)
27
45
  @checkpoint = ".#{@recipe.name}-#{@recipe.version}.installed"
28
46
  @recipe.target = File.join(ROOT, "ports")
29
47
  @recipe.files << {
@@ -52,7 +70,7 @@ class BuildCMetrics
52
70
  end
53
71
  end
54
72
 
55
- cmetrics = BuildCMetrics.new("0.2.1")
73
+ cmetrics = BuildCMetrics.new("0.2.1", cmake_command: determine_preferred_command("cmake3", "cmake"))
56
74
  cmetrics.build
57
75
 
58
76
  libdir = RbConfig::CONFIG["libdir"]
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CMetrics
4
- VERSION = "0.2.0"
4
+ VERSION = "0.2.4"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cmetrics
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hiroshi Hatake
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-08-23 00:00:00.000000000 Z
11
+ date: 2021-09-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,20 +66,34 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '1.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: msgpack
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 1.4.2
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 1.4.2
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: mini_portile2
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '2.1'
89
+ version: '2.7'
76
90
  type: :runtime
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '2.1'
96
+ version: '2.7'
83
97
  description: C binding for cmetric library.
84
98
  email:
85
99
  - cosmo0920.oucc@gmail.com
@@ -88,9 +102,11 @@ extensions:
88
102
  - ext/cmetrics/extconf.rb
89
103
  extra_rdoc_files: []
90
104
  files:
105
+ - ".github/workflows/apt.yml"
91
106
  - ".github/workflows/linux.yml"
92
107
  - ".github/workflows/macos.yml"
93
108
  - ".github/workflows/windows.yml"
109
+ - ".github/workflows/yum.yml"
94
110
  - ".gitignore"
95
111
  - Gemfile
96
112
  - LICENSE
@@ -98,6 +114,8 @@ files:
98
114
  - Rakefile
99
115
  - bin/console
100
116
  - bin/setup
117
+ - ci/apt-test.sh
118
+ - ci/yum-test.sh
101
119
  - cmetrics-ruby.gemspec
102
120
  - ext/cmetrics/cmetrics.c
103
121
  - ext/cmetrics/cmetrics_c.h
@@ -114,7 +132,7 @@ licenses:
114
132
  metadata:
115
133
  homepage_uri: https://github.com/calyptia/cmetrics-ruby
116
134
  changelog_uri: https://github.com/calyptia/cmetrics-ruby/blob/master/CHANGELOG.md
117
- post_install_message:
135
+ post_install_message:
118
136
  rdoc_options: []
119
137
  require_paths:
120
138
  - lib
@@ -130,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
130
148
  version: '0'
131
149
  requirements: []
132
150
  rubygems_version: 3.2.22
133
- signing_key:
151
+ signing_key:
134
152
  specification_version: 4
135
153
  summary: C binding for cmetric library.
136
154
  test_files: []