protip 0.14.0 → 0.15.0

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
2
  SHA1:
3
- metadata.gz: 59a49ea006074b202ebfd0e2efff1c73aed317c9
4
- data.tar.gz: fbd024d6595d62474d21154c00b9a91987ba3f6c
3
+ metadata.gz: f2bcfe95ab05331d80a72680b824507b1183e50d
4
+ data.tar.gz: d5bc2008b39cbc556793156b50d92dc455673860
5
5
  SHA512:
6
- metadata.gz: 53ee5dabef500a1987f28573379483168fa1a2ebe1872fc2e5e4cce49be7d3ee867138bfe8076b4ab9ce28fd79c808b6680951fa602783973d8d149b153de9c0
7
- data.tar.gz: 5ba932bebcb02f060babaaa8c4afe58e2e722a7f3816adddc61aeae93d632d0702f2e243f9ca0d98ea7b452fb49a0a1b5d088de67e98705bb2d00d58f7e936cc
6
+ metadata.gz: d5d2a3761f37f72cb7fef48d87195f286ad3da0ae7cd725c3a04c2fbf57fdff9ccde25f64a8eca5f9c36e85f3088cbd34d080d046ccd72da8ff7f96c47c66477
7
+ data.tar.gz: 4b9f94b329d0c8f16c5ef2eba2b7a82dfbf5ae1d4bbdaf15c6a26f5cac24370b89d1dc4a5725003f9d22781306e7a8b5d47f396e3886d550a55d38a55b529360
@@ -2,11 +2,13 @@ require 'protip/converter'
2
2
 
3
3
  require 'protip/messages/types'
4
4
  require 'google/protobuf'
5
-
6
5
  module Protip
7
6
  class StandardConverter
8
7
  include Protip::Converter
9
8
 
9
+ TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON']
10
+ FALSE_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF']
11
+
10
12
  class << self
11
13
  attr_reader :conversions
12
14
  end
@@ -22,7 +24,7 @@ module Protip
22
24
  }
23
25
 
24
26
  ## Standard wrappers
25
- %w(Int64 Int32 UInt64 UInt32 Double Float Bool String Bytes).map{|type| "google.protobuf.#{type}Value"}.each do |name|
27
+ %w(Int64 Int32 UInt64 UInt32 Double Float String Bytes).map{|type| "google.protobuf.#{type}Value"}.each do |name|
26
28
  @conversions[name] = {
27
29
  to_object: ->(message) { message.value },
28
30
  to_message: lambda do |value, message_class|
@@ -31,6 +33,13 @@ module Protip
31
33
  }
32
34
  end
33
35
 
36
+ conversions['google.protobuf.BoolValue'] = {
37
+ to_object: ->(message) { message.value },
38
+ to_message: lambda do |value, message_class|
39
+ message_class.new value: value_to_boolean(value)
40
+ end
41
+ }
42
+
34
43
  def convertible?(message_class)
35
44
  self.class.conversions.has_key?(message_class.descriptor.name)
36
45
  end
@@ -42,5 +51,16 @@ module Protip
42
51
  def to_message(object, message_class)
43
52
  self.class.conversions[message_class.descriptor.name][:to_message].call(object, message_class)
44
53
  end
54
+
55
+ class << self
56
+ # Similar to Rails 3 value_to_boolean
57
+ def value_to_boolean(value)
58
+ return true if TRUE_VALUES.include?(value)
59
+ return false if FALSE_VALUES.include?(value)
60
+ # If we don't get a truthy/falsey value, use the original value (which should raise an
61
+ # exception)
62
+ value
63
+ end
64
+ end
45
65
  end
46
66
  end
@@ -83,5 +83,28 @@ describe Protip::StandardConverter do
83
83
  assert_equal 7, date.day # Sanity check argument order
84
84
  assert_equal ::Protip::Messages::Date.new(year: 2012, month: 5, day: 7), converter.to_message(date, ::Protip::Messages::Date)
85
85
  end
86
+
87
+ it 'converts truthy values to booleans' do
88
+ [true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON'].each do |truth_value|
89
+ assert_equal Google::Protobuf::BoolValue.new(value: true),
90
+ converter.to_message(truth_value, Google::Protobuf::BoolValue)
91
+ end
92
+ end
93
+
94
+ it 'converts falsey values to booleans' do
95
+ [false, 0, '0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF'].each do |false_value|
96
+ assert_equal Google::Protobuf::BoolValue.new(value: false),
97
+ converter.to_message(false_value, Google::Protobuf::BoolValue)
98
+ end
99
+ end
100
+
101
+ it 'raises an exception if non-boolean values passed to boolean field' do
102
+ [nil, 'test', Object.new, 2, {}, []].each do |bad_value|
103
+ assert_raises TypeError do
104
+ converter.to_message(bad_value, Google::Protobuf::BoolValue)
105
+ end
106
+ end
107
+ end
108
+
86
109
  end
87
110
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - AngelList
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-11-15 00:00:00.000000000 Z
11
+ date: 2015-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -138,6 +138,8 @@ description:
138
138
  email:
139
139
  - team@angel.co
140
140
  - k2@angel.co
141
+ - brian@angel.co
142
+ - paul@angel.co
141
143
  executables: []
142
144
  extensions: []
143
145
  extra_rdoc_files: []