spine-parameters 0.2.0 → 0.3.0
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/CHANGELOG.md +3 -0
- data/Gemfile.lock +20 -17
- data/README.md +5 -1
- data/lib/spine/parameters.rb +12 -0
- data/lib/spine/parameters/collection.rb +1 -0
- data/lib/spine/parameters/parsers/anything.rb +13 -0
- data/lib/spine/parameters/parsers/list.rb +29 -0
- data/lib/spine/parameters/parsers/string.rb +13 -0
- data/lib/spine/parameters/syntax/list.rb +20 -0
- data/lib/spine/parameters/version.rb +1 -1
- data/spec/spine/parameters/parameters_spec.rb +48 -3
- data/spine-parameters.gemspec +2 -2
- metadata +11 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8da37b80aed3f2b00511ff9e46697b999efa68da
|
4
|
+
data.tar.gz: 2409b7ac4da2049abf696605b675724348c11199
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: da605a66e6b10193ebfd68d02a3316d4466eeebc4f0e324c193f50a915c85953da6f148c89f8a1a86fdc780c60bafec71b9adfa54faf3edc70a15e9278c76df0
|
7
|
+
data.tar.gz: 4cf4749ea26a4a5d06affcf412d49d4a314653c5a392a42692e13d0ad997af47d0acf1481d8ef732ec4864d36179c0304a5fe5f80a6ac825c1b2182b4eb6af78
|
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -7,26 +7,26 @@ PATH
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
codeclimate-test-reporter (0.4.
|
10
|
+
codeclimate-test-reporter (0.4.8)
|
11
11
|
simplecov (>= 0.7.1, < 1.0.0)
|
12
12
|
diff-lcs (1.2.5)
|
13
13
|
docile (1.1.5)
|
14
|
-
json (1.8.
|
15
|
-
rake (10.
|
16
|
-
rspec (3.
|
17
|
-
rspec-core (~> 3.
|
18
|
-
rspec-expectations (~> 3.
|
19
|
-
rspec-mocks (~> 3.
|
20
|
-
rspec-core (3.2
|
21
|
-
rspec-support (~> 3.
|
22
|
-
rspec-expectations (3.
|
14
|
+
json (1.8.3)
|
15
|
+
rake (10.5.0)
|
16
|
+
rspec (3.4.0)
|
17
|
+
rspec-core (~> 3.4.0)
|
18
|
+
rspec-expectations (~> 3.4.0)
|
19
|
+
rspec-mocks (~> 3.4.0)
|
20
|
+
rspec-core (3.4.2)
|
21
|
+
rspec-support (~> 3.4.0)
|
22
|
+
rspec-expectations (3.4.0)
|
23
23
|
diff-lcs (>= 1.2.0, < 2.0)
|
24
|
-
rspec-support (~> 3.
|
25
|
-
rspec-mocks (3.
|
24
|
+
rspec-support (~> 3.4.0)
|
25
|
+
rspec-mocks (3.4.1)
|
26
26
|
diff-lcs (>= 1.2.0, < 2.0)
|
27
|
-
rspec-support (~> 3.
|
28
|
-
rspec-support (3.
|
29
|
-
simplecov (0.
|
27
|
+
rspec-support (~> 3.4.0)
|
28
|
+
rspec-support (3.4.1)
|
29
|
+
simplecov (0.11.1)
|
30
30
|
docile (~> 1.1.0)
|
31
31
|
json (~> 1.8)
|
32
32
|
simplecov-html (~> 0.10.0)
|
@@ -37,8 +37,11 @@ PLATFORMS
|
|
37
37
|
ruby
|
38
38
|
|
39
39
|
DEPENDENCIES
|
40
|
-
bundler (~> 1.
|
40
|
+
bundler (~> 1.10)
|
41
41
|
codeclimate-test-reporter (~> 0.4)
|
42
42
|
rake (~> 10.0)
|
43
|
-
rspec (~> 3
|
43
|
+
rspec (~> 3)
|
44
44
|
spine-parameters!
|
45
|
+
|
46
|
+
BUNDLED WITH
|
47
|
+
1.11.2
|
data/README.md
CHANGED
@@ -4,7 +4,9 @@
|
|
4
4
|
[](https://gemnasium.com/rspine/parameters)
|
5
5
|
[](https://codeclimate.com/github/rspine/parameters/coverage)
|
6
6
|
[](https://codeclimate.com/github/rspine/parameters)
|
7
|
-
[
|
7
|
+
[](https://hakiri.io/github/rspine/parameters/master)
|
8
|
+
[](http://inch-ci.org/github/rspine/parameters)
|
9
|
+
[](https://codeship.com/projects/81066)
|
8
10
|
|
9
11
|
Validates and converts parameters. Also it converts all keys to symbols.
|
10
12
|
|
@@ -25,6 +27,8 @@ parameters = Spine::Parameters::Collection.new(parameters_containing_hash)
|
|
25
27
|
parameters.required(:name)
|
26
28
|
.integer(:id)
|
27
29
|
.timestamp(:since)
|
30
|
+
.boolean(:valid)
|
31
|
+
.list(:favourites)
|
28
32
|
|
29
33
|
parameters.errors? # Checks if there is any parsing error.
|
30
34
|
parameters.errors
|
data/lib/spine/parameters.rb
CHANGED
@@ -10,12 +10,24 @@ module Spine
|
|
10
10
|
autoload :Timestamp, 'spine/parameters/syntax/timestamp'
|
11
11
|
autoload :Boolean, 'spine/parameters/syntax/boolean'
|
12
12
|
autoload :Required, 'spine/parameters/syntax/required'
|
13
|
+
autoload :List, 'spine/parameters/syntax/list'
|
13
14
|
end
|
14
15
|
|
15
16
|
module Parsers
|
16
17
|
autoload :Integer, 'spine/parameters/parsers/integer'
|
17
18
|
autoload :Timestamp, 'spine/parameters/parsers/timestamp'
|
18
19
|
autoload :Boolean, 'spine/parameters/parsers/boolean'
|
20
|
+
autoload :Anything, 'spine/parameters/parsers/anything'
|
21
|
+
autoload :String, 'spine/parameters/parsers/string'
|
22
|
+
autoload :List, 'spine/parameters/parsers/list'
|
23
|
+
|
24
|
+
ALL = {
|
25
|
+
anything: Parsers::Anything,
|
26
|
+
string: Parsers::String,
|
27
|
+
integer: Parsers::Integer,
|
28
|
+
boolean: Parsers::Boolean,
|
29
|
+
timestamp: Parsers::Timestamp
|
30
|
+
}
|
19
31
|
end
|
20
32
|
end
|
21
33
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Spine
|
2
|
+
module Parameters
|
3
|
+
module Parsers
|
4
|
+
class List
|
5
|
+
def initialize(parser = Parsers::Anything)
|
6
|
+
@parser = parser
|
7
|
+
end
|
8
|
+
|
9
|
+
def parse(name, value)
|
10
|
+
return [] unless value
|
11
|
+
return parse_collection(value) if value.is_a?(Enumerable)
|
12
|
+
return parse_collection(value.split(',')) if value.is_a?(::String)
|
13
|
+
|
14
|
+
raise ArgumentError.new
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def parse_collection(collection)
|
20
|
+
collection.map { |item| parse_element(item) }
|
21
|
+
end
|
22
|
+
|
23
|
+
def parse_element(element)
|
24
|
+
@parser.parse(nil, element)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Spine
|
2
|
+
module Parameters
|
3
|
+
module Syntax
|
4
|
+
module List
|
5
|
+
def list(name, options = {}, &block)
|
6
|
+
parse(name, Parsers::List.new(list_parser(options[:type])), &block)
|
7
|
+
rescue ArgumentError
|
8
|
+
add_error(name, 'is not a list.')
|
9
|
+
self
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def list_parser(type)
|
15
|
+
Parsers::ALL.fetch(type, Parsers::Anything)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -10,7 +10,11 @@ module Spine
|
|
10
10
|
{
|
11
11
|
"selected_account_id"=>"1",
|
12
12
|
"some_timestamp" => "2015-01-12T10:42:36+02:00",
|
13
|
-
"google_login" => "true"
|
13
|
+
"google_login" => "true",
|
14
|
+
"favourites" => "1,2,3",
|
15
|
+
"parsed_list" => ['1', '2'],
|
16
|
+
"parsed_integer" => 1,
|
17
|
+
"parsed_map" => { key: 'value' }
|
14
18
|
}
|
15
19
|
}
|
16
20
|
|
@@ -19,6 +23,47 @@ module Spine
|
|
19
23
|
expect(subject[:some_timestamp]).to be
|
20
24
|
end
|
21
25
|
|
26
|
+
context "when parsing list" do
|
27
|
+
it "returns valid array" do
|
28
|
+
subject.list(:favourites)
|
29
|
+
expect(subject[:favourites]).to eq(['1', '2', '3'])
|
30
|
+
end
|
31
|
+
|
32
|
+
it "returns valid array of specified type" do
|
33
|
+
subject.list(:favourites, type: :integer)
|
34
|
+
expect(subject[:favourites]).to eq([1, 2, 3])
|
35
|
+
end
|
36
|
+
|
37
|
+
it "has errors if list is not parsed" do
|
38
|
+
subject.list(:parsed_integer)
|
39
|
+
expect(subject.errors?).to be
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when parsing parsed list" do
|
44
|
+
it "returns valid array" do
|
45
|
+
subject.list(:parsed_list)
|
46
|
+
expect(subject[:parsed_list]).to eq(['1', '2'])
|
47
|
+
end
|
48
|
+
|
49
|
+
it "returns valid array of specified type" do
|
50
|
+
subject.list(:parsed_list, type: :integer)
|
51
|
+
expect(subject[:parsed_list]).to eq([1, 2])
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when parsing parsed map" do
|
56
|
+
it "returns valid array" do
|
57
|
+
subject.list(:parsed_map)
|
58
|
+
expect(subject[:parsed_map]).to eq([[:key, 'value']])
|
59
|
+
end
|
60
|
+
|
61
|
+
it "has errors" do
|
62
|
+
subject.list(:parsed_map, type: :integer)
|
63
|
+
expect(subject.errors?).to be
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
22
67
|
context "when parsing integer" do
|
23
68
|
it "returns valid integer" do
|
24
69
|
subject.integer(:selected_account_id)
|
@@ -68,12 +113,12 @@ module Spine
|
|
68
113
|
end
|
69
114
|
|
70
115
|
context "with required constraint" do
|
71
|
-
it "has an error, if key is missing" do
|
116
|
+
it "has an error, if key is missing" do
|
72
117
|
subject.required(:beginning_of_week)
|
73
118
|
expect(subject.errors?).to be
|
74
119
|
end
|
75
120
|
|
76
|
-
it "has no errors if key exists" do
|
121
|
+
it "has no errors if key exists" do
|
77
122
|
subject.required(:some_timestamp)
|
78
123
|
expect(subject.errors?).not_to be
|
79
124
|
end
|
data/spine-parameters.gemspec
CHANGED
@@ -19,8 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
|
20
20
|
spec.add_dependency 'spine-symbolize', "~> 0.1"
|
21
21
|
|
22
|
-
spec.add_development_dependency 'bundler', "~> 1.
|
22
|
+
spec.add_development_dependency 'bundler', "~> 1.10"
|
23
23
|
spec.add_development_dependency 'rake', "~> 10.0"
|
24
|
-
spec.add_development_dependency 'rspec', "~> 3
|
24
|
+
spec.add_development_dependency 'rspec', "~> 3"
|
25
25
|
spec.add_development_dependency 'codeclimate-test-reporter', "~> 0.4"
|
26
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spine-parameters
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TOGGL LLC
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spine-symbolize
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '1.
|
33
|
+
version: '1.10'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.10'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +58,14 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '3
|
61
|
+
version: '3'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '3
|
68
|
+
version: '3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: codeclimate-test-reporter
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -99,12 +99,16 @@ files:
|
|
99
99
|
- lib/spine/parameters/action.rb
|
100
100
|
- lib/spine/parameters/collection.rb
|
101
101
|
- lib/spine/parameters/errors.rb
|
102
|
+
- lib/spine/parameters/parsers/anything.rb
|
102
103
|
- lib/spine/parameters/parsers/boolean.rb
|
103
104
|
- lib/spine/parameters/parsers/integer.rb
|
105
|
+
- lib/spine/parameters/parsers/list.rb
|
106
|
+
- lib/spine/parameters/parsers/string.rb
|
104
107
|
- lib/spine/parameters/parsers/timestamp.rb
|
105
108
|
- lib/spine/parameters/syntax/boolean.rb
|
106
109
|
- lib/spine/parameters/syntax/constraint.rb
|
107
110
|
- lib/spine/parameters/syntax/integer.rb
|
111
|
+
- lib/spine/parameters/syntax/list.rb
|
108
112
|
- lib/spine/parameters/syntax/required.rb
|
109
113
|
- lib/spine/parameters/syntax/timestamp.rb
|
110
114
|
- lib/spine/parameters/version.rb
|
@@ -132,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
132
136
|
version: '0'
|
133
137
|
requirements: []
|
134
138
|
rubyforge_project:
|
135
|
-
rubygems_version: 2.
|
139
|
+
rubygems_version: 2.5.1
|
136
140
|
signing_key:
|
137
141
|
specification_version: 4
|
138
142
|
summary: Parameters validation and coversion.
|