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 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.