grpc 1.39.0-x64-mingw32 → 1.41.0-x64-mingw32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e90c7f1f6dce50d9e02aa7fc6c75b12e1c27315dfd6d713ed1590960b3f5318
4
- data.tar.gz: 5c1599b7d2e071c0a447ad24b80900e930990e833e3bab164055f2c2d5163c5d
3
+ metadata.gz: 93ed21f0763e536b14116fa2d43f6cfbbf770f2d8218e9507de0c9e4ab363e14
4
+ data.tar.gz: f2d6b173c4b05663c9e3b7f17285ca8c311d3c3d16d447e9228d89023d170501
5
5
  SHA512:
6
- metadata.gz: 3c3d18ab1ce1b6d9de305db848026bcf9836000f7d2e254b8e2e4bb5a57d255f87270e292acb7259e31de8ff4107eb06f32dc77cda4d8227ead93514871853dc
7
- data.tar.gz: 722ce49d0520d0a8171dd31b58ffef006b5a45cafbfe38272f58ccd99a8fa5639ea92a8b248c8ad29f19a7f7672d556d98b330155a391ef18ab4d2cfce6776fd
6
+ metadata.gz: 3aeb97801f2daf3ad539641af6c2cb9a561d2257f0316db46e6c710640be2e49919e8c6f1e24875195591916c2cd7e2ef4c1bf4818f0feca68f5c5cd7d23c06a
7
+ data.tar.gz: 95ddd95860f552a0db75e8d7dd74ca5c2605e1a913891fbf1721cec06e7afec06a82e7c2ac36004efc0ca85f595abfd2407818e89a2c9d78aa500d552f56d82c
data/grpc_c.32.ruby CHANGED
Binary file
data/grpc_c.64.ruby CHANGED
Binary file
@@ -57,7 +57,7 @@ end
57
57
 
58
58
  ENV['CPPFLAGS'] = '-DGPR_BACKWARDS_COMPATIBILITY_MODE'
59
59
  ENV['CPPFLAGS'] += ' -DGRPC_XDS_USER_AGENT_NAME_SUFFIX="\"RUBY\"" '
60
- ENV['CPPFLAGS'] += ' -DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="\"1.39.0\"" '
60
+ ENV['CPPFLAGS'] += ' -DGRPC_XDS_USER_AGENT_VERSION_SUFFIX="\"1.41.0\"" '
61
61
 
62
62
  output_dir = File.expand_path(RbConfig::CONFIG['topdir'])
63
63
  grpc_lib_dir = File.join(output_dir, 'libs', grpc_config)
@@ -19,12 +19,13 @@
19
19
  #include <ruby/ruby.h>
20
20
 
21
21
  #include "rb_byte_buffer.h"
22
+
23
+ #include "rb_grpc.h"
22
24
  #include "rb_grpc_imports.generated.h"
23
25
 
24
26
  #include <grpc/byte_buffer_reader.h>
25
27
  #include <grpc/grpc.h>
26
28
  #include <grpc/slice.h>
27
- #include "rb_grpc.h"
28
29
 
29
30
  grpc_byte_buffer* grpc_rb_s_to_byte_buffer(char* string, size_t length) {
30
31
  grpc_slice slice = grpc_slice_from_copied_buffer(string, length);
@@ -19,6 +19,11 @@
19
19
  #include <ruby/ruby.h>
20
20
 
21
21
  #include "rb_call.h"
22
+
23
+ #include "rb_byte_buffer.h"
24
+ #include "rb_call_credentials.h"
25
+ #include "rb_completion_queue.h"
26
+ #include "rb_grpc.h"
22
27
  #include "rb_grpc_imports.generated.h"
23
28
 
24
29
  #include <grpc/grpc.h>
@@ -26,11 +31,6 @@
26
31
  #include <grpc/support/alloc.h>
27
32
  #include <grpc/support/log.h>
28
33
 
29
- #include "rb_byte_buffer.h"
30
- #include "rb_call_credentials.h"
31
- #include "rb_completion_queue.h"
32
- #include "rb_grpc.h"
33
-
34
34
  /* grpc_rb_cCall is the Call class whose instances proxy grpc_call. */
35
35
  static VALUE grpc_rb_cCall;
36
36
 
@@ -19,19 +19,19 @@
19
19
  #include <ruby/ruby.h>
20
20
 
21
21
  #include "rb_call_credentials.h"
22
- #include "rb_grpc_imports.generated.h"
23
22
 
24
23
  #include <ruby/thread.h>
25
24
 
25
+ #include "rb_call.h"
26
+ #include "rb_event_thread.h"
27
+ #include "rb_grpc.h"
28
+ #include "rb_grpc_imports.generated.h"
29
+
26
30
  #include <grpc/grpc.h>
27
31
  #include <grpc/grpc_security.h>
28
32
  #include <grpc/support/alloc.h>
29
33
  #include <grpc/support/log.h>
30
34
 
31
- #include "rb_call.h"
32
- #include "rb_event_thread.h"
33
- #include "rb_grpc.h"
34
-
35
35
  /* grpc_rb_cCallCredentials is the ruby class that proxies
36
36
  * grpc_call_credentials */
37
37
  static VALUE grpc_rb_cCallCredentials = Qnil;
@@ -17,25 +17,27 @@
17
17
  */
18
18
 
19
19
  #include <ruby/ruby.h>
20
- #include <ruby/thread.h>
21
20
 
22
- #include "rb_byte_buffer.h"
23
21
  #include "rb_channel.h"
24
- #include "rb_grpc_imports.generated.h"
25
22
 
26
- #include <grpc/grpc.h>
27
- #include <grpc/grpc_security.h>
28
- #include <grpc/support/alloc.h>
29
- #include <grpc/support/log.h>
30
- #include <grpc/support/time.h>
23
+ #include <ruby/thread.h>
24
+
25
+ #include "rb_byte_buffer.h"
31
26
  #include "rb_call.h"
32
27
  #include "rb_channel_args.h"
33
28
  #include "rb_channel_credentials.h"
34
29
  #include "rb_completion_queue.h"
35
30
  #include "rb_grpc.h"
31
+ #include "rb_grpc_imports.generated.h"
36
32
  #include "rb_server.h"
37
33
  #include "rb_xds_channel_credentials.h"
38
34
 
35
+ #include <grpc/grpc.h>
36
+ #include <grpc/grpc_security.h>
37
+ #include <grpc/support/alloc.h>
38
+ #include <grpc/support/log.h>
39
+ #include <grpc/support/time.h>
40
+
39
41
  /* id_channel is the name of the hidden ivar that preserves a reference to the
40
42
  * channel on a call, so that calls are not GCed before their channel. */
41
43
  static ID id_channel;
@@ -19,12 +19,12 @@
19
19
  #include <ruby/ruby.h>
20
20
 
21
21
  #include "rb_channel_args.h"
22
+
23
+ #include "rb_grpc.h"
22
24
  #include "rb_grpc_imports.generated.h"
23
25
 
24
26
  #include <grpc/grpc.h>
25
27
 
26
- #include "rb_grpc.h"
27
-
28
28
  static rb_data_type_t grpc_rb_channel_args_data_type = {
29
29
  "grpc_channel_args",
30
30
  {GRPC_RB_GC_NOT_MARKED,
@@ -18,9 +18,12 @@
18
18
 
19
19
  #include <ruby/ruby.h>
20
20
 
21
+ #include "rb_channel_credentials.h"
22
+
21
23
  #include <string.h>
22
24
 
23
- #include "rb_channel_credentials.h"
25
+ #include "rb_call_credentials.h"
26
+ #include "rb_grpc.h"
24
27
  #include "rb_grpc_imports.generated.h"
25
28
 
26
29
  #include <grpc/grpc.h>
@@ -28,9 +31,6 @@
28
31
  #include <grpc/support/alloc.h>
29
32
  #include <grpc/support/log.h>
30
33
 
31
- #include "rb_call_credentials.h"
32
- #include "rb_grpc.h"
33
-
34
34
  /* grpc_rb_cChannelCredentials is the ruby class that proxies
35
35
  grpc_channel_credentials. */
36
36
  static VALUE grpc_rb_cChannelCredentials = Qnil;
@@ -20,6 +20,7 @@
20
20
  #define GRPC_RB_CREDENTIALS_H_
21
21
 
22
22
  #include <ruby/ruby.h>
23
+
23
24
  #include <stdbool.h>
24
25
 
25
26
  #include <grpc/grpc_security.h>
@@ -19,14 +19,15 @@
19
19
  #include <ruby/ruby.h>
20
20
 
21
21
  #include "rb_completion_queue.h"
22
- #include "rb_grpc_imports.generated.h"
23
22
 
24
23
  #include <ruby/thread.h>
25
24
 
25
+ #include "rb_grpc.h"
26
+ #include "rb_grpc_imports.generated.h"
27
+
26
28
  #include <grpc/grpc.h>
27
29
  #include <grpc/support/log.h>
28
30
  #include <grpc/support/time.h>
29
- #include "rb_grpc.h"
30
31
 
31
32
  /* Used to allow grpc_completion_queue_next call to release the GIL */
32
33
  typedef struct next_call_stack {
@@ -18,8 +18,12 @@
18
18
 
19
19
  #include <ruby/ruby.h>
20
20
 
21
- #include "rb_byte_buffer.h"
22
21
  #include "rb_compression_options.h"
22
+
23
+ #include <string.h>
24
+
25
+ #include "rb_byte_buffer.h"
26
+ #include "rb_grpc.h"
23
27
  #include "rb_grpc_imports.generated.h"
24
28
 
25
29
  #include <grpc/compression.h>
@@ -29,9 +33,6 @@
29
33
  #include <grpc/support/alloc.h>
30
34
  #include <grpc/support/log.h>
31
35
  #include <grpc/support/string_util.h>
32
- #include <string.h>
33
-
34
- #include "rb_grpc.h"
35
36
 
36
37
  static VALUE grpc_rb_cCompressionOptions = Qnil;
37
38
 
@@ -19,17 +19,17 @@
19
19
  #include <ruby/ruby.h>
20
20
 
21
21
  #include "rb_event_thread.h"
22
- #include "rb_grpc_imports.generated.h"
23
22
 
23
+ #include <ruby/thread.h>
24
24
  #include <stdbool.h>
25
25
 
26
+ #include "rb_grpc.h"
27
+ #include "rb_grpc_imports.generated.h"
28
+
26
29
  #include <grpc/support/alloc.h>
27
30
  #include <grpc/support/log.h>
28
31
  #include <grpc/support/sync.h>
29
32
  #include <grpc/support/time.h>
30
- #include <ruby/thread.h>
31
-
32
- #include "rb_grpc.h"
33
33
 
34
34
  typedef struct grpc_rb_event {
35
35
  // callback will be called with argument while holding the GVL
@@ -19,7 +19,6 @@
19
19
  #include <ruby/ruby.h>
20
20
 
21
21
  #include "rb_grpc.h"
22
- #include "rb_grpc_imports.generated.h"
23
22
 
24
23
  #include <math.h>
25
24
  #include <ruby/vm.h>
@@ -28,21 +27,23 @@
28
27
  #include <sys/types.h>
29
28
  #include <unistd.h>
30
29
 
31
- #include <grpc/grpc.h>
32
- #include <grpc/support/log.h>
33
- #include <grpc/support/time.h>
34
30
  #include "rb_call.h"
35
31
  #include "rb_call_credentials.h"
36
32
  #include "rb_channel.h"
37
33
  #include "rb_channel_credentials.h"
38
34
  #include "rb_compression_options.h"
39
35
  #include "rb_event_thread.h"
36
+ #include "rb_grpc_imports.generated.h"
40
37
  #include "rb_loader.h"
41
38
  #include "rb_server.h"
42
39
  #include "rb_server_credentials.h"
43
40
  #include "rb_xds_channel_credentials.h"
44
41
  #include "rb_xds_server_credentials.h"
45
42
 
43
+ #include <grpc/grpc.h>
44
+ #include <grpc/support/log.h>
45
+ #include <grpc/support/time.h>
46
+
46
47
  static VALUE grpc_rb_cTimeVal = Qnil;
47
48
 
48
49
  static rb_data_type_t grpc_rb_timespec_data_type = {
@@ -20,6 +20,7 @@
20
20
  #define GRPC_RB_H_
21
21
 
22
22
  #include <ruby/ruby.h>
23
+
23
24
  #include <sys/time.h>
24
25
 
25
26
  #include <grpc/support/time.h>
@@ -18,21 +18,22 @@
18
18
 
19
19
  #include <ruby/ruby.h>
20
20
 
21
- #include "rb_grpc_imports.generated.h"
22
21
  #include "rb_server.h"
23
22
 
24
- #include <grpc/grpc.h>
25
- #include <grpc/grpc_security.h>
26
- #include <grpc/support/atm.h>
27
- #include <grpc/support/log.h>
28
23
  #include "rb_byte_buffer.h"
29
24
  #include "rb_call.h"
30
25
  #include "rb_channel_args.h"
31
26
  #include "rb_completion_queue.h"
32
27
  #include "rb_grpc.h"
28
+ #include "rb_grpc_imports.generated.h"
33
29
  #include "rb_server_credentials.h"
34
30
  #include "rb_xds_server_credentials.h"
35
31
 
32
+ #include <grpc/grpc.h>
33
+ #include <grpc/grpc_security.h>
34
+ #include <grpc/support/atm.h>
35
+ #include <grpc/support/log.h>
36
+
36
37
  /* grpc_rb_cServer is the ruby class that proxies grpc_server. */
37
38
  static VALUE grpc_rb_cServer = Qnil;
38
39
 
@@ -18,15 +18,15 @@
18
18
 
19
19
  #include <ruby/ruby.h>
20
20
 
21
- #include "rb_grpc_imports.generated.h"
22
21
  #include "rb_server_credentials.h"
23
22
 
23
+ #include "rb_grpc.h"
24
+ #include "rb_grpc_imports.generated.h"
25
+
24
26
  #include <grpc/grpc.h>
25
27
  #include <grpc/grpc_security.h>
26
28
  #include <grpc/support/log.h>
27
29
 
28
- #include "rb_grpc.h"
29
-
30
30
  /* grpc_rb_cServerCredentials is the ruby class that proxies
31
31
  grpc_server_credentials. */
32
32
  static VALUE grpc_rb_cServerCredentials = Qnil;
@@ -20,6 +20,7 @@
20
20
  #define GRPC_RB_SERVER_CREDENTIALS_H_
21
21
 
22
22
  #include <ruby/ruby.h>
23
+
23
24
  #include <stdbool.h>
24
25
 
25
26
  #include <grpc/grpc_security.h>
@@ -16,18 +16,21 @@
16
16
  *
17
17
  */
18
18
 
19
- #include <grpc/grpc.h>
20
- #include <grpc/grpc_security.h>
21
- #include <grpc/support/alloc.h>
22
- #include <grpc/support/log.h>
23
19
  #include <ruby/ruby.h>
20
+
21
+ #include "rb_xds_channel_credentials.h"
22
+
24
23
  #include <string.h>
25
24
 
26
25
  #include "rb_call_credentials.h"
27
26
  #include "rb_channel_credentials.h"
28
27
  #include "rb_grpc.h"
29
28
  #include "rb_grpc_imports.generated.h"
30
- #include "rb_xds_channel_credentials.h"
29
+
30
+ #include <grpc/grpc.h>
31
+ #include <grpc/grpc_security.h>
32
+ #include <grpc/support/alloc.h>
33
+ #include <grpc/support/log.h>
31
34
 
32
35
  /* grpc_rb_cXdsChannelCredentials is the ruby class that proxies
33
36
  grpc_channel_credentials. */
@@ -19,10 +19,12 @@
19
19
  #ifndef GRPC_RB_XDS_CHANNEL_CREDENTIALS_H_
20
20
  #define GRPC_RB_XDS_CHANNEL_CREDENTIALS_H_
21
21
 
22
- #include <grpc/grpc_security.h>
23
22
  #include <ruby/ruby.h>
23
+
24
24
  #include <stdbool.h>
25
25
 
26
+ #include <grpc/grpc_security.h>
27
+
26
28
  /* Initializes the ruby ChannelCredentials class. */
27
29
  void Init_grpc_xds_channel_credentials();
28
30
 
@@ -16,17 +16,18 @@
16
16
  *
17
17
  */
18
18
 
19
- #include "rb_xds_server_credentials.h"
20
-
21
- #include <grpc/grpc.h>
22
- #include <grpc/grpc_security.h>
23
- #include <grpc/support/log.h>
24
19
  #include <ruby/ruby.h>
25
20
 
21
+ #include "rb_xds_server_credentials.h"
22
+
26
23
  #include "rb_grpc.h"
27
24
  #include "rb_grpc_imports.generated.h"
28
25
  #include "rb_server_credentials.h"
29
26
 
27
+ #include <grpc/grpc.h>
28
+ #include <grpc/grpc_security.h>
29
+ #include <grpc/support/log.h>
30
+
30
31
  /* grpc_rb_cXdsServerCredentials is the ruby class that proxies
31
32
  grpc_server_credentials. */
32
33
  static VALUE grpc_rb_cXdsServerCredentials = Qnil;
@@ -19,10 +19,12 @@
19
19
  #ifndef GRPC_RB_XDS_SERVER_CREDENTIALS_H_
20
20
  #define GRPC_RB_XDS_SERVER_CREDENTIALS_H_
21
21
 
22
- #include <grpc/grpc_security.h>
23
22
  #include <ruby/ruby.h>
23
+
24
24
  #include <stdbool.h>
25
25
 
26
+ #include <grpc/grpc_security.h>
27
+
26
28
  /* Initializes the ruby XdsServerCredentials class. */
27
29
  void Init_grpc_xds_server_credentials();
28
30
 
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -14,5 +14,5 @@
14
14
 
15
15
  # GRPC contains the General RPC module.
16
16
  module GRPC
17
- VERSION = '1.39.0'
17
+ VERSION = '1.41.0'
18
18
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grpc
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.39.0
4
+ version: 1.41.0
5
5
  platform: x64-mingw32
6
6
  authors:
7
7
  - gRPC Authors
8
8
  autorequire:
9
9
  bindir: src/ruby/bin
10
10
  cert_chain: []
11
- date: 2021-07-21 00:00:00.000000000 Z
11
+ date: 2021-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-protobuf
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.15'
19
+ version: '3.17'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3.15'
26
+ version: '3.17'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: googleapis-common-protos-types
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -354,51 +354,51 @@ required_rubygems_version: !ruby/object:Gem::Requirement
354
354
  - !ruby/object:Gem::Version
355
355
  version: '0'
356
356
  requirements: []
357
- rubygems_version: 3.2.24
357
+ rubygems_version: 3.2.28
358
358
  signing_key:
359
359
  specification_version: 4
360
360
  summary: GRPC system in Ruby
361
361
  test_files:
362
+ - src/ruby/spec/pb/duplicate/codegen_spec.rb
363
+ - src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto
364
+ - src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto
365
+ - src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto
366
+ - src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto
367
+ - src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto
368
+ - src/ruby/spec/pb/codegen/grpc/testing/package_options.proto
369
+ - src/ruby/spec/pb/codegen/package_option_spec.rb
370
+ - src/ruby/spec/pb/health/checker_spec.rb
371
+ - src/ruby/spec/call_spec.rb
372
+ - src/ruby/spec/call_credentials_spec.rb
362
373
  - src/ruby/spec/channel_connection_spec.rb
374
+ - src/ruby/spec/user_agent_spec.rb
375
+ - src/ruby/spec/server_spec.rb
376
+ - src/ruby/spec/time_consts_spec.rb
377
+ - src/ruby/spec/support/helpers.rb
378
+ - src/ruby/spec/support/services.rb
379
+ - src/ruby/spec/channel_credentials_spec.rb
380
+ - src/ruby/spec/google_rpc_status_utils_spec.rb
381
+ - src/ruby/spec/channel_spec.rb
363
382
  - src/ruby/spec/errors_spec.rb
364
383
  - src/ruby/spec/generic/active_call_spec.rb
365
- - src/ruby/spec/generic/rpc_desc_spec.rb
366
- - src/ruby/spec/generic/server_interceptors_spec.rb
367
- - src/ruby/spec/generic/rpc_server_pool_spec.rb
368
384
  - src/ruby/spec/generic/rpc_server_spec.rb
385
+ - src/ruby/spec/generic/server_interceptors_spec.rb
386
+ - src/ruby/spec/generic/rpc_desc_spec.rb
387
+ - src/ruby/spec/generic/interceptor_registry_spec.rb
369
388
  - src/ruby/spec/generic/service_spec.rb
370
389
  - src/ruby/spec/generic/client_interceptors_spec.rb
371
- - src/ruby/spec/generic/interceptor_registry_spec.rb
390
+ - src/ruby/spec/generic/rpc_server_pool_spec.rb
372
391
  - src/ruby/spec/generic/client_stub_spec.rb
373
392
  - src/ruby/spec/spec_helper.rb
374
393
  - src/ruby/spec/testdata/server1.key
375
- - src/ruby/spec/testdata/client.key
394
+ - src/ruby/spec/testdata/client.pem
376
395
  - src/ruby/spec/testdata/README
377
396
  - src/ruby/spec/testdata/server1.pem
397
+ - src/ruby/spec/testdata/client.key
378
398
  - src/ruby/spec/testdata/ca.pem
379
- - src/ruby/spec/testdata/client.pem
380
- - src/ruby/spec/channel_credentials_spec.rb
381
- - src/ruby/spec/debug_message_spec.rb
382
- - src/ruby/spec/call_spec.rb
383
- - src/ruby/spec/client_auth_spec.rb
384
- - src/ruby/spec/server_spec.rb
385
- - src/ruby/spec/server_credentials_spec.rb
386
- - src/ruby/spec/support/helpers.rb
387
- - src/ruby/spec/support/services.rb
388
- - src/ruby/spec/pb/duplicate/codegen_spec.rb
389
- - src/ruby/spec/pb/codegen/package_option_spec.rb
390
- - src/ruby/spec/pb/codegen/grpc/testing/package_options_import2.proto
391
- - src/ruby/spec/pb/codegen/grpc/testing/package_options_ruby_style.proto
392
- - src/ruby/spec/pb/codegen/grpc/testing/same_ruby_package_service_name.proto
393
- - src/ruby/spec/pb/codegen/grpc/testing/package_options.proto
394
- - src/ruby/spec/pb/codegen/grpc/testing/same_package_service_name.proto
395
- - src/ruby/spec/pb/codegen/grpc/testing/package_options_import.proto
396
- - src/ruby/spec/pb/health/checker_spec.rb
397
399
  - src/ruby/spec/client_server_spec.rb
398
- - src/ruby/spec/user_agent_spec.rb
399
- - src/ruby/spec/compression_options_spec.rb
400
- - src/ruby/spec/google_rpc_status_utils_spec.rb
401
- - src/ruby/spec/call_credentials_spec.rb
402
- - src/ruby/spec/channel_spec.rb
403
400
  - src/ruby/spec/error_sanity_spec.rb
404
- - src/ruby/spec/time_consts_spec.rb
401
+ - src/ruby/spec/server_credentials_spec.rb
402
+ - src/ruby/spec/client_auth_spec.rb
403
+ - src/ruby/spec/compression_options_spec.rb
404
+ - src/ruby/spec/debug_message_spec.rb