sparsam 0.2.2 → 0.2.3

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: 80bcbb2225d5e0f24f9a295afd99be378fca3fcc
4
- data.tar.gz: cdfd6e2214719008a2482693bcf60ca662a22609
3
+ metadata.gz: 4b9246d1a569e7fa72c9f97015e0f9031b31249a
4
+ data.tar.gz: ba92cae518e5606f8c7273fb32519f307163b72c
5
5
  SHA512:
6
- metadata.gz: 41eff67315ab200edfab3501d6997136fd1a0642e0b1cbe0a46e47e5bccd0f3a4926ffb2ed6a04f97e757736058e0c76d6dc875a7a7bbb58c132c9665d06cef0
7
- data.tar.gz: a7d5aef8bd988ec4535f54c7dbd73f3352742ed2574e5cb1c79b51508a2529201121adb9d15726a9508347c458d80142e643b50a8fadc29a16881895849cad86
6
+ metadata.gz: 268c577839d6ba4ff96b19dfdf9d09e6b903a72ef298a4cba763ed13dd4723181b85bf213e0a974ffa0abdf0a5ac131b6ef51f3fe8b42ae753ac4f3d48378afe
7
+ data.tar.gz: 83b7f8c97f0feea55491958a67ae0db8805a080a0e874c27e7046211f49f74cd6b39e0f67ac1014b27a70734247ca38173dd1ece94b6dd11bf41ca0b435c9646
@@ -4,6 +4,7 @@ require 'sparsam_native'
4
4
  require 'sparsam/types'
5
5
  require 'sparsam/exceptions'
6
6
  require 'sparsam/struct'
7
+ require 'sparsam/application_exception'
7
8
  require 'sparsam/union'
8
9
  require 'sparsam/deserializer'
9
10
 
@@ -0,0 +1,10 @@
1
+ require 'sparsam/base_type'
2
+ require 'sparsam/base_struct'
3
+
4
+ module Sparsam
5
+ class ApplicationException < StandardError
6
+ include ::Sparsam::BaseType
7
+ include ::Sparsam::StructInitialization
8
+ include ::Sparsam::BaseStruct
9
+ end
10
+ end
@@ -0,0 +1,35 @@
1
+ module Sparsam
2
+ module BaseStruct
3
+ def self.included(base)
4
+ base.extend(ClassMethods)
5
+ end
6
+
7
+ module ClassMethods
8
+ def field_accessor(klass, field_key, field_info)
9
+ field_name = field_info[:name]
10
+ klass.class_eval(<<-EOF, __FILE__, __LINE__)
11
+ attr_accessor :'#{field_name}'
12
+ EOF
13
+ end
14
+ end
15
+
16
+ private
17
+
18
+ def assign_defaults(defaults)
19
+ defaults.each do |name, default_value|
20
+ accessors = name_to_accessors(name)
21
+ send(accessors.writer, default_value)
22
+ end
23
+ end
24
+
25
+ def assign_from_arg(d)
26
+ d.each do |name, value|
27
+ accessors = name_to_accessors(name)
28
+ unless accessors
29
+ raise Sparsam::Exception, "Unknown key given to #{self.class}.new: #{name}"
30
+ end
31
+ send(accessors.writer, value)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,89 @@
1
+ require 'set'
2
+ require 'sparsam/types'
3
+
4
+ module Sparsam
5
+ module BaseType
6
+ class AccessorNames < Struct.new(:reader, :writer); end
7
+
8
+ def self.included(base)
9
+ base.extend(ClassMethods)
10
+ end
11
+
12
+ module ClassMethods
13
+ def generate_field_syms(klass)
14
+ field_syms = {}
15
+ klass::FIELDS.each do |_, field_info|
16
+ name = field_info[:name].to_sym
17
+ accessors = AccessorNames.new(name, :"#{name}=")
18
+ field_syms[name] = accessors
19
+ field_syms[name.to_s] = accessors
20
+ end
21
+
22
+ klass.const_set(
23
+ :FIELD_SYMS,
24
+ field_syms
25
+ )
26
+ end
27
+
28
+ def generate_accessors(klass)
29
+ klass::FIELDS.each do |field_key, field_info|
30
+ field_accessor(klass, field_key, field_info)
31
+ end
32
+ end
33
+
34
+ def generate_default_values(klass)
35
+ fields_with_default_values = {}
36
+ klass::FIELDS.each do |fid, field_def|
37
+ unless field_def[:default].nil?
38
+ fields_with_default_values[field_def[:name]] = field_def[:default].freeze
39
+ end
40
+ end
41
+
42
+ if fields_with_default_values.empty?
43
+ klass.const_set(
44
+ :DEFAULT_VALUES,
45
+ nil
46
+ )
47
+ else
48
+ klass.const_set(
49
+ :DEFAULT_VALUES,
50
+ fields_with_default_values
51
+ )
52
+ end
53
+ end
54
+
55
+ def init_thrift_struct(klass)
56
+ generate_accessors(klass)
57
+ generate_field_syms(klass)
58
+ Sparsam.cache_fields(klass)
59
+ generate_default_values(klass)
60
+ klass.class_eval(<<-EOF, __FILE__, __LINE__)
61
+ def struct_fields
62
+ FIELDS
63
+ end
64
+ EOF
65
+ end
66
+ end
67
+
68
+ def serialize(prot = Sparsam::CompactProtocol)
69
+ s = Sparsam::Serializer.new(prot, "")
70
+ s.serialize(self.class, self)
71
+ end
72
+
73
+ def validate(mode = Sparsam::NORMAL)
74
+ Sparsam.validate(self.class, self, mode)
75
+ end
76
+
77
+ private
78
+
79
+ def name_to_accessors(name)
80
+ self.class::FIELD_SYMS[name]
81
+ end
82
+
83
+ def each_field
84
+ struct_fields.each do |fid, data|
85
+ yield fid, data
86
+ end
87
+ end
88
+ end
89
+ end
@@ -1,9 +1,12 @@
1
1
  # -*- coding: UTF-8 -*-
2
- require 'sparsam/base_class'
2
+ require 'sparsam/base_type'
3
+ require 'sparsam/base_struct'
3
4
 
4
5
  module Sparsam
5
- class Struct < ::Sparsam::BaseClass
6
+ class Struct
7
+ include ::Sparsam::BaseType
6
8
  include ::Sparsam::StructInitialization
9
+ include ::Sparsam::BaseStruct
7
10
 
8
11
  def ==(other)
9
12
  return true if other.equal?(self)
@@ -15,31 +18,5 @@ module Sparsam
15
18
  end
16
19
  end
17
20
  alias_method :eql?, :==
18
-
19
- def self.field_accessor(klass, field_key, field_info)
20
- field_name = field_info[:name]
21
- klass.class_eval(<<-EOF, __FILE__, __LINE__)
22
- attr_accessor :'#{field_name}'
23
- EOF
24
- end
25
-
26
- private
27
-
28
- def assign_defaults(defaults)
29
- defaults.each do |name, default_value|
30
- accessors = name_to_accessors(name)
31
- send(accessors.writer, default_value)
32
- end
33
- end
34
-
35
- def assign_from_arg(d)
36
- d.each do |name, value|
37
- accessors = name_to_accessors(name)
38
- unless accessors
39
- raise Sparsam::Exception, "Unknown key given to #{self.class}.new: #{name}"
40
- end
41
- send(accessors.writer, value)
42
- end
43
- end
44
21
  end
45
22
  end
@@ -1,8 +1,10 @@
1
1
  # -*- coding: UTF-8 -*-
2
- require 'sparsam/base_class'
2
+ require 'sparsam/base_type'
3
3
 
4
4
  module Sparsam
5
- class Union < ::Sparsam::BaseClass
5
+ class Union
6
+ include ::Sparsam::BaseType
7
+
6
8
  def initialize(name = nil, value = nil)
7
9
  if name
8
10
  if name.is_a? Hash
@@ -1,5 +1,5 @@
1
1
  #
2
- # Autogenerated by Thrift Compiler (0.1.0)
2
+ # Autogenerated by Thrift Compiler (0.1.1)
3
3
  #
4
4
  # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
5
  #
@@ -1,5 +1,5 @@
1
1
  #
2
- # Autogenerated by Thrift Compiler (0.1.0)
2
+ # Autogenerated by Thrift Compiler (0.1.1)
3
3
  #
4
4
  # DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
5
5
  #
@@ -126,3 +126,20 @@ class EveryType < ::Sparsam::Struct
126
126
  init_thrift_struct(self)
127
127
  end
128
128
 
129
+ class SimpleException < ::Sparsam::ApplicationException
130
+ FIELDS = {
131
+ 1 => {:type => ::Sparsam::Types::STRING, :name => 'message', :optional => true}
132
+ }
133
+
134
+ init_thrift_struct(self)
135
+ end
136
+
137
+ class WithFieldsException < ::Sparsam::ApplicationException
138
+ FIELDS = {
139
+ 1 => {:type => ::Sparsam::Types::I64, :name => 'an_i64', :optional => true},
140
+ 2 => {:type => ::Sparsam::Types::STRING, :name => 'message', :optional => true}
141
+ }
142
+
143
+ init_thrift_struct(self)
144
+ end
145
+
@@ -460,5 +460,27 @@ describe 'Sparsam' do
460
460
 
461
461
  expect { data.serialize }.not_to raise_error
462
462
  end
463
+
464
+ describe 'ApplicationException' do
465
+ it 'creates exceptions that can be raised' do
466
+ e = SimpleException.new(message: "Oops")
467
+
468
+ e.message.should eq("Oops")
469
+
470
+ expect { raise e }.to raise_error(SimpleException, "Oops")
471
+ end
472
+
473
+ it 'serializes and reads exceptions' do
474
+ e = SimpleException.new(message: "Oops")
475
+
476
+ data = e.serialize
477
+
478
+ e2 = Sparsam::Deserializer.deserialize(SimpleException, data)
479
+
480
+ e2.message.should eq("Oops")
481
+
482
+ expect { raise e2 }.to raise_error(SimpleException, "Oops")
483
+ end
484
+ end
463
485
  end
464
486
  end
@@ -81,3 +81,12 @@ struct EveryType {
81
81
  14: optional US a_struct
82
82
  15: optional UN a_union
83
83
  }
84
+
85
+ exception SimpleException {
86
+ 1: optional string message
87
+ }
88
+
89
+ exception WithFieldsException {
90
+ 1: optional i64 an_i64
91
+ 2: optional string message
92
+ }
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.2
4
+ version: 0.2.3
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: 2017-08-30 00:00:00.000000000 Z
11
+ date: 2017-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -90,24 +90,26 @@ extra_rdoc_files:
90
90
  - README.md
91
91
  - ext/ruby_hooks.c
92
92
  - ext/serializer.h
93
- - ext/third-party/sparsepp/sparsepp/spp.h
94
- - ext/third-party/sparsepp/sparsepp/spp_config.h
95
- - ext/third-party/sparsepp/sparsepp/spp_dlalloc.h
96
93
  - ext/third-party/sparsepp/sparsepp/spp_memory.h
94
+ - ext/third-party/sparsepp/sparsepp/spp_utils.h
97
95
  - ext/third-party/sparsepp/sparsepp/spp_smartptr.h
96
+ - ext/third-party/sparsepp/sparsepp/spp.h
98
97
  - ext/third-party/sparsepp/sparsepp/spp_stdint.h
99
98
  - ext/third-party/sparsepp/sparsepp/spp_timer.h
99
+ - ext/third-party/sparsepp/sparsepp/spp_config.h
100
100
  - ext/third-party/sparsepp/sparsepp/spp_traits.h
101
- - ext/third-party/sparsepp/sparsepp/spp_utils.h
101
+ - ext/third-party/sparsepp/sparsepp/spp_dlalloc.h
102
102
  - ext/extconf.rb
103
103
  - ext/serializer.cpp
104
- - lib/sparsam/base_class.rb
105
- - lib/sparsam/deserializer.rb
106
- - lib/sparsam/exceptions.rb
104
+ - lib/sparsam.rb
107
105
  - lib/sparsam/struct.rb
108
- - lib/sparsam/types.rb
106
+ - lib/sparsam/base_struct.rb
109
107
  - lib/sparsam/union.rb
110
- - lib/sparsam.rb
108
+ - lib/sparsam/application_exception.rb
109
+ - lib/sparsam/exceptions.rb
110
+ - lib/sparsam/types.rb
111
+ - lib/sparsam/deserializer.rb
112
+ - lib/sparsam/base_type.rb
111
113
  files:
112
114
  - README.md
113
115
  - ext/extconf.rb
@@ -124,7 +126,9 @@ files:
124
126
  - ext/third-party/sparsepp/sparsepp/spp_traits.h
125
127
  - ext/third-party/sparsepp/sparsepp/spp_utils.h
126
128
  - lib/sparsam.rb
127
- - lib/sparsam/base_class.rb
129
+ - lib/sparsam/application_exception.rb
130
+ - lib/sparsam/base_struct.rb
131
+ - lib/sparsam/base_type.rb
128
132
  - lib/sparsam/deserializer.rb
129
133
  - lib/sparsam/exceptions.rb
130
134
  - lib/sparsam/struct.rb
@@ -166,7 +170,8 @@ signing_key:
166
170
  specification_version: 4
167
171
  summary: Ruby bindings for Apache Thrift
168
172
  test_files:
169
- - spec/gen-ruby/user_constants.rb
170
- - spec/gen-ruby/user_types.rb
171
173
  - spec/sparsam_spec.rb
174
+ - spec/gen-ruby/user_types.rb
175
+ - spec/gen-ruby/user_constants.rb
172
176
  - spec/user.thrift
177
+ has_rdoc: true
@@ -1,83 +0,0 @@
1
- require 'set'
2
- require 'sparsam/types'
3
-
4
- module Sparsam
5
- class BaseClass
6
- class AccessorNames < Struct.new(:reader, :writer); end
7
-
8
- def self.generate_field_syms(klass)
9
- field_syms = {}
10
- klass::FIELDS.each do |_, field_info|
11
- name = field_info[:name].to_sym
12
- accessors = AccessorNames.new(name, :"#{name}=")
13
- field_syms[name] = accessors
14
- field_syms[name.to_s] = accessors
15
- end
16
-
17
- klass.const_set(
18
- :FIELD_SYMS,
19
- field_syms
20
- )
21
- end
22
-
23
- def self.generate_accessors(klass)
24
- klass::FIELDS.each do |field_key, field_info|
25
- field_accessor(klass, field_key, field_info)
26
- end
27
- end
28
-
29
- def self.generate_default_values(klass)
30
- fields_with_default_values = {}
31
- klass::FIELDS.each do |fid, field_def|
32
- unless field_def[:default].nil?
33
- fields_with_default_values[field_def[:name]] = field_def[:default].freeze
34
- end
35
- end
36
-
37
- if fields_with_default_values.empty?
38
- klass.const_set(
39
- :DEFAULT_VALUES,
40
- nil
41
- )
42
- else
43
- klass.const_set(
44
- :DEFAULT_VALUES,
45
- fields_with_default_values
46
- )
47
- end
48
- end
49
-
50
- def self.init_thrift_struct(klass)
51
- generate_accessors(klass)
52
- generate_field_syms(klass)
53
- Sparsam.cache_fields(klass)
54
- generate_default_values(klass)
55
- klass.class_eval(<<-EOF, __FILE__, __LINE__)
56
- def struct_fields
57
- FIELDS
58
- end
59
- EOF
60
- end
61
-
62
- def serialize(prot = Sparsam::CompactProtocol)
63
- s = Sparsam::Serializer.new(prot, "")
64
- s.serialize(self.class, self)
65
- end
66
-
67
- def validate(mode = Sparsam::NORMAL)
68
- Sparsam.validate(self.class, self, mode)
69
- end
70
-
71
- private
72
-
73
- def name_to_accessors(name)
74
- self.class::FIELD_SYMS[name]
75
- end
76
-
77
- def each_field
78
- struct_fields.each do |fid, data|
79
- yield fid, data
80
- end
81
- end
82
- end
83
- end