sparsam 0.2.7 → 0.2.10

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
- SHA1:
3
- metadata.gz: 418d5b778804d87629bffaa38ae70420ce0c1d54
4
- data.tar.gz: 97e472841bbf213dfad5e161228bdea9ec2e2baa
2
+ SHA256:
3
+ metadata.gz: c759ead3b6f09dd4e6b1e1754dc0443ea782e37fd717617d4069e5952605bc85
4
+ data.tar.gz: 3734e8cfa8796efdcfe78a702a536672bf88e5e442fdedb1e59b60602b34daaa
5
5
  SHA512:
6
- metadata.gz: 823b230987338ee70f778a1c1dd92818acf6d1719175ae0f365b3514eb0ebcdb203993442b9688b1e3e63fc81ddc809d6ce51747b23f46d3c5b62818e2a0ef86
7
- data.tar.gz: f11c539cedebcad0ac100fa27a0cd267f2b50b97d652800537413ba13009d4bf723c872874c6c43f0d77fcdf609ac8ec340caf091c0855735f76fd1f0fb8a6b8
6
+ metadata.gz: 9eec207eba73e7fdb9a53edf2de172f34d640cfc15d484804204b929ecdc4caf223eb76a01be496487734ca1af54760fc1e7ad9cf4622e27183e4c4db24fa323
7
+ data.tar.gz: 27a9faadcf29db90b72d14a1b775c10ac9004a31f98562f1906c771a8f923124f1290feef5df5e2e8aefc39912ccaedc2b783b8461573eab71b2afc9770d6f4a
data/ext/extconf.rb CHANGED
@@ -7,12 +7,70 @@ if Gem::Version.new(RUBY_VERSION.dup) < Gem::Version.new('2.0.0')
7
7
  $CPPFLAGS += $CXXFLAGS
8
8
  end
9
9
 
10
+ brew = find_executable('brew')
11
+
12
+ # Automatically use homebrew to discover thrift package if it is
13
+ # available and not disabled via --disable-homebrew.
14
+ use_homebrew = enable_config('homebrew', brew)
15
+
16
+ if use_homebrew
17
+ $stderr.puts "Using #{brew} to locate thrift and boost packages"
18
+ $stderr.puts '(disable Homebrew integration via --disable-homebrew)'
19
+
20
+ thrift_package = with_config('homebrew-thrift-package', 'thrift@0.9')
21
+ $stderr.puts "looking for Homebrew thrift package '#{thrift_package}'"
22
+ $stderr.puts '(change Homebrew thrift package name via --with-homebrew-thrift-package=<package>)'
23
+
24
+ thrift_prefix = `#{brew} --prefix #{thrift_package}`.strip
25
+
26
+ unless File.exists?(thrift_prefix)
27
+ $stderr.puts "#{thrift_prefix} does not exist"
28
+ $stderr.puts "To resolve, `brew install #{thrift_package}` or pass"
29
+ $stderr.puts '--with-homebrew-thrift-package=<package> to this build to specify'
30
+ $stderr.puts 'an alternative thrift package to build against. e.g.:'
31
+ $stderr.puts
32
+ $stderr.puts ' $ bundle config --global build.sparsam --with-homebrew-thrift-package=mythrift'
33
+
34
+ raise "Homebrew package #{thrift_package} not installed"
35
+ end
36
+
37
+ $stderr.puts "using Homebrew thrift at #{thrift_prefix}"
38
+ $CFLAGS << " -I#{thrift_prefix}/include"
39
+ $CXXFLAGS << " -I#{thrift_prefix}/include"
40
+ $CPPFLAGS << " -I#{thrift_prefix}/include"
41
+ $LDFLAGS << " -L#{thrift_prefix}/lib"
42
+
43
+ # Also add boost to the includes search path if it is installed.
44
+ boost_package = with_config('homebrew-boost-package', 'boost')
45
+ $stderr.puts "looking for Homebrew boost package '#{boost_package}'"
46
+ $stderr.puts '(change Homebrew boost package name via --with-homebrew-boost-package=<package>)'
47
+
48
+ boost_prefix = `#{brew} --prefix #{boost_package}`.strip
49
+
50
+ if File.exists?(boost_prefix)
51
+ $stderr.puts("using Homebrew boost at #{boost_prefix}")
52
+ $CFLAGS << " -I#{boost_prefix}/include"
53
+ $CXXFLAGS << " -I#{boost_prefix}/include"
54
+ $CPPFLAGS << " -I#{boost_prefix}/include"
55
+ else
56
+ $stderr.puts 'Homebrew boost not found; assuming boost is in default search paths'
57
+ end
58
+ end
59
+
10
60
  have_func("strlcpy", "string.h")
11
- have_library("thrift")
61
+
62
+ unless have_library("thrift")
63
+ raise 'thrift library not found; aborting since compile would fail'
64
+ end
65
+
12
66
  libs = ['-lthrift']
13
67
 
14
68
  libs.each do |lib|
15
69
  $LOCAL_LIBS << "#{lib} "
16
70
  end
17
71
 
72
+ # Ideally we'd validate boost as well. But boost is header only and
73
+ # mkmf's have_header() doesn't work with C++ headers.
74
+ # https://bugs.ruby-lang.org/issues/4924
75
+
18
76
  create_makefile 'sparsam_native'
data/ext/serializer.cpp CHANGED
@@ -1,7 +1,5 @@
1
- extern "C" {
2
1
  #include <ruby.h>
3
2
  #include <ruby/intern.h>
4
- }
5
3
  #include <ruby/encoding.h>
6
4
  #include <stdio.h>
7
5
  #include <thrift/protocol/TBinaryProtocol.h>
@@ -51,6 +49,8 @@ VALUE SetClass;
51
49
  KlassFieldsCache klassCache; // consider the memory leaked.
52
50
  std::unordered_set<VALUE> unions;
53
51
 
52
+ #define SPARSAM_CHECK_TYPE(x, t, outer_struct, field_sym) if (!(RB_TYPE_P(x, t))) { raise_type_mismatch(outer_struct, field_sym, t, x); }
53
+
54
54
  void *serializer_create() { return (void *)(new ThriftSerializer()); }
55
55
 
56
56
  void serializer_free(void *data) {
@@ -185,12 +185,6 @@ static inline long raise_type_mismatch_as_value(VALUE outer_struct,
185
185
  return 0;
186
186
  }
187
187
 
188
- static inline void Sparsam_Check_Type(VALUE x, int t, VALUE outer_struct,
189
- VALUE field_sym) {
190
- if (!(RB_TYPE_P(x, t))) {
191
- raise_type_mismatch(outer_struct, field_sym, t, x);
192
- }
193
- }
194
188
 
195
189
  static inline VALUE make_ruby_bool(bool val) { return val ? Qtrue : Qfalse; }
196
190
 
@@ -513,7 +507,7 @@ void ThriftSerializer::writeAny(TType ttype, FieldInfo *field_info,
513
507
  HANDLE_TYPE(BYTE, Byte, CONVERT_FIXNUM(byte_convert, protocol::T_BYTE))
514
508
 
515
509
  case protocol::T_STRING: {
516
- Sparsam_Check_Type(actual, T_STRING, outer_struct, field_sym);
510
+ SPARSAM_CHECK_TYPE(actual, T_STRING, outer_struct, field_sym);
517
511
 
518
512
  string data = string(StringValuePtr(actual), RSTRING_LEN(actual));
519
513
  if (field_info->isBinaryString) {
@@ -525,7 +519,7 @@ void ThriftSerializer::writeAny(TType ttype, FieldInfo *field_info,
525
519
  }
526
520
 
527
521
  case protocol::T_LIST: {
528
- Sparsam_Check_Type(actual, T_ARRAY, outer_struct, field_sym);
522
+ SPARSAM_CHECK_TYPE(actual, T_ARRAY, outer_struct, field_sym);
529
523
 
530
524
  long length = RARRAY_LEN(actual);
531
525
  TType elem = field_info->elementType->ftype;
@@ -556,7 +550,7 @@ void ThriftSerializer::writeAny(TType ttype, FieldInfo *field_info,
556
550
  }
557
551
 
558
552
  case protocol::T_MAP: {
559
- Sparsam_Check_Type(actual, T_HASH, outer_struct, field_sym);
553
+ SPARSAM_CHECK_TYPE(actual, T_HASH, outer_struct, field_sym);
560
554
 
561
555
  TType keyTType = field_info->keyType->ftype,
562
556
  valueTType = field_info->elementType->ftype;
@@ -16,6 +16,8 @@ module Sparsam
16
16
  reader = name_to_accessors(info[:name]).reader
17
17
  return false unless send(reader) == other.send(reader)
18
18
  end
19
+
20
+ true
19
21
  end
20
22
  alias_method :eql?, :==
21
23
  end
@@ -13,6 +13,7 @@ module Magic
13
13
  Blue = 3
14
14
  Green = 4
15
15
  VALUE_MAP = {0 => "Black", 1 => "White", 2 => "Red", 3 => "Blue", 4 => "Green"}
16
+ INVERTED_VALUE_MAP = {"Black" => 0, "White" => 1, "Red" => 2, "Blue" => 3, "Green" => 4}
16
17
  VALID_VALUES = Set.new([Black, White, Red, Blue, Green]).freeze
17
18
  end
18
19
 
data/spec/sparsam_spec.rb CHANGED
@@ -546,4 +546,76 @@ describe 'Sparsam' do
546
546
  end
547
547
  end
548
548
  end
549
+
550
+ describe 'generated enum types' do
551
+ let(:enum_module) { Magic }
552
+
553
+ it 'includes thrift constants as top level module constants' do
554
+ enum_module.const_defined?(:Black).should == true
555
+ enum_module.const_defined?(:White).should == true
556
+ enum_module.const_defined?(:Red).should == true
557
+ enum_module.const_defined?(:Blue).should == true
558
+ enum_module.const_defined?(:Green).should == true
559
+
560
+ enum_module.const_get(:Black).should == 0
561
+ enum_module.const_get(:White).should == 1
562
+ enum_module.const_get(:Red).should == 2
563
+ enum_module.const_get(:Blue).should == 3
564
+ enum_module.const_get(:Green).should == 4
565
+ end
566
+
567
+ it 'contains a VALUE_MAP constant that maps from int value to string' do
568
+ enum_module.const_defined?(:VALUE_MAP).should == true
569
+
570
+ value_map = enum_module.const_get(:VALUE_MAP)
571
+
572
+ value_map.should eql({
573
+ 0 => 'Black',
574
+ 1 => 'White',
575
+ 2 => 'Red',
576
+ 3 => 'Blue',
577
+ 4 => 'Green',
578
+ })
579
+
580
+ value_map[enum_module.const_get(:Black)].should == 'Black'
581
+ value_map[enum_module.const_get(:White)].should == 'White'
582
+ value_map[enum_module.const_get(:Red)].should == 'Red'
583
+ value_map[enum_module.const_get(:Blue)].should == 'Blue'
584
+ value_map[enum_module.const_get(:Green)].should == 'Green'
585
+ end
586
+
587
+ it 'contains an INVERTED_VALUE_MAP constant that maps from name to int value' do
588
+ enum_module.const_defined?(:INVERTED_VALUE_MAP).should == true
589
+
590
+ inverted_value_map = enum_module.const_get(:INVERTED_VALUE_MAP)
591
+
592
+ inverted_value_map.should eql({
593
+ 'Black' => 0,
594
+ 'White' => 1,
595
+ 'Red' => 2,
596
+ 'Blue' => 3,
597
+ 'Green' => 4,
598
+ })
599
+
600
+ inverted_value_map['Black'].should == enum_module.const_get(:Black)
601
+ inverted_value_map['White'].should == enum_module.const_get(:White)
602
+ inverted_value_map['Red'].should == enum_module.const_get(:Red)
603
+ inverted_value_map['Blue'].should == enum_module.const_get(:Blue)
604
+ inverted_value_map['Green'].should == enum_module.const_get(:Green)
605
+ end
606
+
607
+ it 'contains a VALID_VALUES constant that is a set of all enum values' do
608
+ enum_module.const_defined?(:VALID_VALUES).should == true
609
+
610
+ valid_values = enum_module.const_get(:VALID_VALUES)
611
+
612
+ valid_values.should be_a(Set)
613
+ valid_values.should include(enum_module.const_get(:Black))
614
+ valid_values.should include(enum_module.const_get(:White))
615
+ valid_values.should include(enum_module.const_get(:Red))
616
+ valid_values.should include(enum_module.const_get(:Blue))
617
+ valid_values.should include(enum_module.const_get(:Green))
618
+ valid_values.length.should == 5
619
+ end
620
+ end
549
621
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sparsam
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Airbnb Thrift Developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-08 00:00:00.000000000 Z
11
+ date: 2022-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -164,8 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
164
164
  - !ruby/object:Gem::Version
165
165
  version: '0'
166
166
  requirements: []
167
- rubyforge_project: thrift
168
- rubygems_version: 2.5.1
167
+ rubygems_version: 3.0.3.1
169
168
  signing_key:
170
169
  specification_version: 4
171
170
  summary: Ruby bindings for Apache Thrift