ncco 0.1.0 → 0.1.1
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 +4 -4
- data/.circleci/config.yml +1 -0
- data/Gemfile.lock +2 -14
- data/lib/ncco/data/errors.yml +2 -2
- data/lib/ncco/predicates.rb +7 -5
- data/lib/ncco/schemas/base_schema.rb +6 -0
- data/lib/ncco/schemas/connect.rb +2 -2
- data/lib/ncco/schemas/record.rb +1 -1
- data/lib/ncco/version.rb +1 -1
- data/lib/ncco.rb +9 -4
- data/ncco.gemspec +0 -1
- metadata +1 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83ee03788109717640e74920bb21cc2fbc07dd2d27ec8850bde4ad0002ae94a7
|
4
|
+
data.tar.gz: 625ca24611c7640f53e7bdfbae9758a7a13f74df4f61248977d8f44363baa49b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e31008d689272f5ef55f293670fc160f7dd466288ea57bca7b38bc92cb39c0b69cb9259b2104154de5ba722ed938485566d0e9ee73d9d303b6ade9772ffe3969
|
7
|
+
data.tar.gz: 17b0a41431b94d9840972d06ec6792f0325f66645162946e86a02eb1831ed899f0226ac9fb6715ec5914dac5348155b3630f2c3756ac0b247723cd439e53f651
|
data/.circleci/config.yml
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,17 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
ncco (0.1.
|
4
|
+
ncco (0.1.1)
|
5
5
|
dry-validation (~> 0.12.2)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
activesupport (5.2.1)
|
11
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
12
|
-
i18n (>= 0.7, < 2)
|
13
|
-
minitest (~> 5.1)
|
14
|
-
tzinfo (~> 1.1)
|
15
10
|
ast (2.4.0)
|
16
11
|
coderay (1.1.2)
|
17
12
|
concurrent-ruby (1.1.3)
|
@@ -29,7 +24,7 @@ GEM
|
|
29
24
|
dry-container (~> 0.2, >= 0.2.6)
|
30
25
|
dry-core (~> 0.2)
|
31
26
|
dry-equalizer (~> 0.2)
|
32
|
-
dry-types (0.13.
|
27
|
+
dry-types (0.13.3)
|
33
28
|
concurrent-ruby (~> 1.0)
|
34
29
|
dry-container (~> 0.3)
|
35
30
|
dry-core (~> 0.4, >= 0.4.4)
|
@@ -46,11 +41,8 @@ GEM
|
|
46
41
|
gc_ruboconfig (2.3.13)
|
47
42
|
rubocop (>= 0.57, < 0.61)
|
48
43
|
rubocop-rspec (~> 1.25)
|
49
|
-
i18n (1.1.1)
|
50
|
-
concurrent-ruby (~> 1.0)
|
51
44
|
jaro_winkler (1.5.1)
|
52
45
|
method_source (0.9.2)
|
53
|
-
minitest (5.11.3)
|
54
46
|
parallel (1.12.1)
|
55
47
|
parser (2.5.3.0)
|
56
48
|
ast (~> 2.4.0)
|
@@ -84,16 +76,12 @@ GEM
|
|
84
76
|
rubocop-rspec (1.30.1)
|
85
77
|
rubocop (>= 0.60.0)
|
86
78
|
ruby-progressbar (1.10.0)
|
87
|
-
thread_safe (0.3.6)
|
88
|
-
tzinfo (1.2.5)
|
89
|
-
thread_safe (~> 0.1)
|
90
79
|
unicode-display_width (1.4.0)
|
91
80
|
|
92
81
|
PLATFORMS
|
93
82
|
ruby
|
94
83
|
|
95
84
|
DEPENDENCIES
|
96
|
-
activesupport (~> 5.2.1)
|
97
85
|
bundler (~> 1.17.a)
|
98
86
|
gc_ruboconfig (~> 2.3.13)
|
99
87
|
ncco!
|
data/lib/ncco/data/errors.yml
CHANGED
@@ -3,8 +3,8 @@ en:
|
|
3
3
|
strict_keys?: has attributes which aren't part of the NCCO specification
|
4
4
|
http_or_https_url?: must be a valid HTTP or HTTPS URL
|
5
5
|
supported_http_method?: must be a supported HTTP method
|
6
|
-
|
7
|
-
|
6
|
+
phone_keypad_digit?: must be a single digit from a phone keypad, as a string
|
7
|
+
phone_keypad_digits?: must be a series of one or more digits from a phone keypad, as a string
|
8
8
|
e164?: must be a valid E.164-formatted phone number
|
9
9
|
websocket_url?: must be a valid Websocket URL
|
10
10
|
hash_with_string_keys_and_values?: must be a hash with String keys and values
|
data/lib/ncco/predicates.rb
CHANGED
@@ -4,6 +4,7 @@ module NCCO
|
|
4
4
|
module Predicates
|
5
5
|
include ::Dry::Logic::Predicates
|
6
6
|
|
7
|
+
# TODO: Does Nexmo accept URLs relative to the current location?
|
7
8
|
predicate(:http_or_https_url?) do |value|
|
8
9
|
uri = URI.parse(value)
|
9
10
|
%w[http https].include?(uri.scheme)
|
@@ -25,16 +26,17 @@ module NCCO
|
|
25
26
|
end
|
26
27
|
|
27
28
|
NUMBERS = (0..9).map(&:to_s).freeze
|
28
|
-
|
29
|
+
PHONE_KEYPAD_DIGITS = [*NUMBERS, "*", "#"].freeze
|
29
30
|
|
30
|
-
predicate(:
|
31
|
-
|
31
|
+
predicate(:phone_keypad_digit?) do |value|
|
32
|
+
PHONE_KEYPAD_DIGITS.include?(value)
|
32
33
|
end
|
33
34
|
|
34
|
-
predicate(:
|
35
|
+
predicate(:phone_keypad_digits?) do |value|
|
35
36
|
value.is_a?(String) &&
|
36
37
|
!value.empty? &&
|
37
|
-
|
38
|
+
# There shouldn't be any characters in the input that aren't keypad digits
|
39
|
+
(value.chars - PHONE_KEYPAD_DIGITS).none?
|
38
40
|
end
|
39
41
|
|
40
42
|
predicate(:e164?) do |value|
|
@@ -6,8 +6,14 @@ module NCCO
|
|
6
6
|
input :hash?, :strict_keys?
|
7
7
|
|
8
8
|
configure do
|
9
|
+
# `dry-validations` includes a bunch of "predicates" which you can use to
|
10
|
+
# validate values. This includes some custom Nexmo-specific ones (e.g. for
|
11
|
+
# phone digits and URLs).
|
9
12
|
predicates(Predicates)
|
10
13
|
|
14
|
+
# Used to validate that the input only includes keys that are defined in
|
15
|
+
# the schema, implementing a slightly hacky "whitelisting" behaviour (which
|
16
|
+
# for some reason isn't include in `dry-validations`!)
|
11
17
|
def strict_keys?(input)
|
12
18
|
(input.keys - rules.keys).empty?
|
13
19
|
end
|
data/lib/ncco/schemas/connect.rb
CHANGED
@@ -9,9 +9,9 @@ module NCCO
|
|
9
9
|
# Phone endpoint attributes
|
10
10
|
optional(:number).value(:e164?)
|
11
11
|
optional(:onAnswer).value(:http_or_https_url?)
|
12
|
-
optional(:dtmfAnswer).value(:
|
12
|
+
optional(:dtmfAnswer).value(:phone_keypad_digits?)
|
13
13
|
|
14
|
-
#
|
14
|
+
# WebSocket endpoint attributes
|
15
15
|
optional(:uri).value(:websocket_url?) # Also used for SIP endpoints
|
16
16
|
optional("content-type").value(eql?: "audio/l16;rate=16000")
|
17
17
|
optional(:headers).value(:hash_with_string_keys_and_values?)
|
data/lib/ncco/schemas/record.rb
CHANGED
@@ -11,7 +11,7 @@ module NCCO
|
|
11
11
|
optional(:split).value(included_in?: [nil, "conversation"])
|
12
12
|
optional(:channels).value(type?: Integer, gteq?: 1, lteq?: 32)
|
13
13
|
optional(:endOnSilence).value(type?: Integer, gteq?: 3, lteq?: 10)
|
14
|
-
optional(:endOnKey).value(:
|
14
|
+
optional(:endOnKey).value(:phone_keypad_digit?)
|
15
15
|
optional(:beepStart).value(:bool?)
|
16
16
|
optional(:timeout).value(type?: Integer, gteq?: 3, lteq?: 7200)
|
17
17
|
optional(:eventUrl).value(:http_or_https_url?)
|
data/lib/ncco/version.rb
CHANGED
data/lib/ncco.rb
CHANGED
@@ -14,6 +14,8 @@ require "ncco/schemas/talk"
|
|
14
14
|
module NCCO
|
15
15
|
class InvalidActionError < StandardError; end
|
16
16
|
|
17
|
+
# Maps the "action" attribute within an action to the schema which should be used
|
18
|
+
# to validate it
|
17
19
|
SCHEMAS_BY_TYPE = {
|
18
20
|
"connect" => Schemas::Connect,
|
19
21
|
"conversation" => Schemas::Conversation,
|
@@ -62,7 +64,8 @@ module NCCO
|
|
62
64
|
index: index)
|
63
65
|
end
|
64
66
|
|
65
|
-
|
67
|
+
result = schema.call(action)
|
68
|
+
error_messages = get_error_messages(result)
|
66
69
|
|
67
70
|
raise_invalid_error(error_messages.join(", "), index: index) if error_messages.any?
|
68
71
|
end
|
@@ -105,14 +108,16 @@ module NCCO
|
|
105
108
|
end
|
106
109
|
end
|
107
110
|
|
108
|
-
#
|
111
|
+
# Gets the error messages from `Dry::Validation::Result`s in a consistent format. For
|
109
112
|
# field-level errors, we get back a `Hash` mapping the attribute name to an array of
|
110
113
|
# `String` error messages, whereas for unrecognised attributes (which is a bit of a
|
111
114
|
# hack), we just get back an array. This handles either gracefully.
|
112
115
|
#
|
113
|
-
# @param
|
116
|
+
# @param result [Dry::Valiation::Result] the result from validating an action against
|
117
|
+
# a schema
|
114
118
|
# @return [Array<String>] a list of error messages which is guaranteed to be an array
|
115
|
-
def
|
119
|
+
def get_error_messages(result)
|
120
|
+
error_messages = result.messages(full: true)
|
116
121
|
return error_messages if error_messages.is_a?(Array)
|
117
122
|
|
118
123
|
error_messages.values.flatten
|
data/ncco.gemspec
CHANGED
@@ -30,7 +30,6 @@ Gem::Specification.new do |spec|
|
|
30
30
|
|
31
31
|
spec.add_dependency "dry-validation", "~> 0.12.2"
|
32
32
|
|
33
|
-
spec.add_development_dependency "activesupport", "~> 5.2.1"
|
34
33
|
spec.add_development_dependency "bundler", "~> 1.17.a"
|
35
34
|
spec.add_development_dependency "gc_ruboconfig", "~> 2.3.13"
|
36
35
|
spec.add_development_dependency "pry", "~> 0.12.2"
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ncco
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Rogers
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 0.12.2
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: activesupport
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 5.2.1
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 5.2.1
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: bundler
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|