spine-parameters 0.2.0 → 0.3.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: dab244a1431bc85f9228234dc4ab23c7c62e9e3a
4
- data.tar.gz: 4a50821b5a0d43fda17976e0630c263c18a7c986
3
+ metadata.gz: 8da37b80aed3f2b00511ff9e46697b999efa68da
4
+ data.tar.gz: 2409b7ac4da2049abf696605b675724348c11199
5
5
  SHA512:
6
- metadata.gz: 1276dc40bf34972fd32bf313ae0d77a80affdf59cdbb627eeba358db038cdfb8a4e20db557da91be485a32811ba650e486b84ec9a98f25243485a88e2598e066
7
- data.tar.gz: 54b21ed9574442236907cb8d0b70a7319877a0b5cc6460c52fd114613573be22400dc4d39383a4b1f734be3f1fe57871aafd51283f8898cd1dd7adaae7226ae0
6
+ metadata.gz: da605a66e6b10193ebfd68d02a3316d4466eeebc4f0e324c193f50a915c85953da6f148c89f8a1a86fdc780c60bafec71b9adfa54faf3edc70a15e9278c76df0
7
+ data.tar.gz: 4cf4749ea26a4a5d06affcf412d49d4a314653c5a392a42692e13d0ad997af47d0acf1481d8ef732ec4864d36179c0304a5fe5f80a6ac825c1b2182b4eb6af78
@@ -1,6 +1,9 @@
1
1
  Changelog
2
2
  =========
3
3
 
4
+ 0.3.0
5
+ -----
6
+ - Adds list parameter type which can handle Enumerables and Strings (comma separated list)
4
7
  0.2.0
5
8
  -----
6
9
  - Adds parameters extension for controllers/actions
@@ -7,26 +7,26 @@ PATH
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
- codeclimate-test-reporter (0.4.7)
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.2)
15
- rake (10.4.2)
16
- rspec (3.2.0)
17
- rspec-core (~> 3.2.0)
18
- rspec-expectations (~> 3.2.0)
19
- rspec-mocks (~> 3.2.0)
20
- rspec-core (3.2.3)
21
- rspec-support (~> 3.2.0)
22
- rspec-expectations (3.2.1)
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.2.0)
25
- rspec-mocks (3.2.1)
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.2.0)
28
- rspec-support (3.2.2)
29
- simplecov (0.10.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.7)
40
+ bundler (~> 1.10)
41
41
  codeclimate-test-reporter (~> 0.4)
42
42
  rake (~> 10.0)
43
- rspec (~> 3.2)
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
  [![Dependency Status](https://gemnasium.com/rspine/parameters.svg)](https://gemnasium.com/rspine/parameters)
5
5
  [![Test Coverage](https://codeclimate.com/github/rspine/parameters/badges/coverage.svg)](https://codeclimate.com/github/rspine/parameters/coverage)
6
6
  [![Code Climate](https://codeclimate.com/github/rspine/parameters/badges/gpa.svg)](https://codeclimate.com/github/rspine/parameters)
7
- [ ![Codeship Status for rspine/parameters](https://codeship.com/projects/c3d614e0-e11c-0132-df07-763d3ae4d225/status?branch=master)](https://codeship.com/projects/81066)
7
+ [![security](https://hakiri.io/github/rspine/parameters/master.svg)](https://hakiri.io/github/rspine/parameters/master)
8
+ [![Inline docs](http://inch-ci.org/github/rspine/parameters.svg?branch=master)](http://inch-ci.org/github/rspine/parameters)
9
+ [![Codeship Status for rspine/parameters](https://codeship.com/projects/c3d614e0-e11c-0132-df07-763d3ae4d225/status?branch=master)](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
@@ -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
@@ -8,6 +8,7 @@ module Spine
8
8
  include Syntax::Boolean
9
9
  include Syntax::Constraint
10
10
  include Syntax::Required
11
+ include Syntax::List
11
12
  include Errors
12
13
 
13
14
  attr_reader :raw, :values
@@ -0,0 +1,13 @@
1
+ module Spine
2
+ module Parameters
3
+ module Parsers
4
+ module Anything
5
+ extend self
6
+
7
+ def parse(name, value)
8
+ value
9
+ end
10
+ end
11
+ end
12
+ end
13
+ 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,13 @@
1
+ module Spine
2
+ module Parameters
3
+ module Parsers
4
+ module String
5
+ extend self
6
+
7
+ def parse(name, value)
8
+ value.to_s
9
+ end
10
+ end
11
+ end
12
+ end
13
+ 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
@@ -1,5 +1,5 @@
1
1
  module Spine
2
2
  module Parameters
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  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
@@ -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.7"
22
+ spec.add_development_dependency 'bundler', "~> 1.10"
23
23
  spec.add_development_dependency 'rake', "~> 10.0"
24
- spec.add_development_dependency 'rspec', "~> 3.2"
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.2.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: 2015-05-28 00:00:00.000000000 Z
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.7'
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.7'
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.2'
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.2'
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.4.5
139
+ rubygems_version: 2.5.1
136
140
  signing_key:
137
141
  specification_version: 4
138
142
  summary: Parameters validation and coversion.