rest_model 0.1.22 → 0.1.23
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.
- data/examples/to_source/serializables.rb +3 -1
- data/examples/validations/simple.rb +6 -1
- data/lib/rest_model/serialization/symbol.rb +15 -0
- data/lib/rest_model/source/translation.rb +36 -6
- data/lib/rest_model/version.rb +1 -1
- data/lib/rest_model.rb +1 -0
- data/spec/integration/to_source_spec.rb +1 -0
- data/spec/integration/validations_spec.rb +2 -1
- metadata +15 -14
@@ -15,6 +15,7 @@ class Customer < RestModel
|
|
15
15
|
property :active, type: Boolean
|
16
16
|
property :services, type: Enumerable
|
17
17
|
property :balance, type: Float
|
18
|
+
property :sym, type: Symbol
|
18
19
|
end
|
19
20
|
|
20
21
|
@root = Customer.new(login: 'jackiechan2010',
|
@@ -23,6 +24,7 @@ end
|
|
23
24
|
created_at: DateTime.now,
|
24
25
|
active: true,
|
25
26
|
services: ["Hosting", "Email"],
|
26
|
-
balance: 200.00
|
27
|
+
balance: 200.00,
|
28
|
+
sym: :some_symbol)
|
27
29
|
|
28
30
|
inspect_rest_model(@root)
|
@@ -19,7 +19,8 @@ class Service < RestModel
|
|
19
19
|
end
|
20
20
|
|
21
21
|
class Product < RestModel
|
22
|
-
|
22
|
+
VALUES = [10.00, 20.00, 25.50]
|
23
|
+
property :value, type: Float, values: VALUES
|
23
24
|
property :created_at, type: DateTime
|
24
25
|
end
|
25
26
|
|
@@ -32,6 +33,10 @@ products = [
|
|
32
33
|
{
|
33
34
|
value: "non float (P1)",
|
34
35
|
created_at: "2011-11-11T11:11:11"
|
36
|
+
},
|
37
|
+
{
|
38
|
+
value: 20.00,
|
39
|
+
created_at: "2011-11-11T11:11:11"
|
35
40
|
}
|
36
41
|
]
|
37
42
|
|
@@ -0,0 +1,15 @@
|
|
1
|
+
class RestModel
|
2
|
+
module Serialization
|
3
|
+
class Symbol
|
4
|
+
def self.serialize(value)
|
5
|
+
value.to_s.to_sym
|
6
|
+
rescue
|
7
|
+
raise SerializationError, "value '#{value}' is not a symbol"
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.desserialize(value)
|
11
|
+
serialize(value)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -17,11 +17,7 @@ class RestModel
|
|
17
17
|
if from_source
|
18
18
|
resource.instance_exec(value, &from_source)
|
19
19
|
elsif values
|
20
|
-
|
21
|
-
fail TranslationError, "value '#{value}' doesn't belong to values: #{values.values}"
|
22
|
-
end
|
23
|
-
|
24
|
-
values.key(value)
|
20
|
+
translate_from_source_values(value)
|
25
21
|
else
|
26
22
|
value
|
27
23
|
end
|
@@ -35,13 +31,47 @@ class RestModel
|
|
35
31
|
if to_source
|
36
32
|
resource.instance_exec(value, &to_source)
|
37
33
|
elsif values
|
34
|
+
translate_to_source_values(value)
|
35
|
+
else
|
36
|
+
value
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def translate_from_source_values(value)
|
43
|
+
if values.kind_of?(Hash)
|
44
|
+
unless values.has_value?(value)
|
45
|
+
fail TranslationError, "value '#{value}' doesn't belong to values: #{values.values}"
|
46
|
+
end
|
47
|
+
|
48
|
+
values.key(value)
|
49
|
+
elsif values.kind_of?(Array)
|
50
|
+
unless values.member?(value)
|
51
|
+
fail TranslationError, "value '#{value}' doesn't belong to values in: #{values}"
|
52
|
+
end
|
53
|
+
|
54
|
+
value
|
55
|
+
else
|
56
|
+
fail TranslationError, "not supported values"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def translate_to_source_values(value)
|
61
|
+
if values.kind_of?(Hash)
|
38
62
|
unless values.has_key?(value)
|
39
63
|
fail TranslationError, "value '#{value}' doesn't belong to values: #{values.keys}"
|
40
64
|
end
|
41
65
|
|
42
66
|
values[value]
|
43
|
-
|
67
|
+
elsif values.kind_of?(Array)
|
68
|
+
unless values.member?(value)
|
69
|
+
fail TranslationError, "value '#{value}' doesn't belong to values in: #{values}"
|
70
|
+
end
|
71
|
+
|
44
72
|
value
|
73
|
+
else
|
74
|
+
fail TranslationError, "not supported values"
|
45
75
|
end
|
46
76
|
end
|
47
77
|
end
|
data/lib/rest_model/version.rb
CHANGED
data/lib/rest_model.rb
CHANGED
@@ -20,6 +20,7 @@ require "rest_model/serialization/enumerable"
|
|
20
20
|
require "rest_model/serialization/float"
|
21
21
|
require "rest_model/serialization/integer"
|
22
22
|
require "rest_model/serialization/string"
|
23
|
+
require "rest_model/serialization/symbol"
|
23
24
|
require "rest_model/key"
|
24
25
|
require "rest_model/key/property"
|
25
26
|
require "rest_model/key/property/builder"
|
@@ -11,10 +11,11 @@ describe "validations" do
|
|
11
11
|
code: "value 'non integer (S0)' is not an integer",
|
12
12
|
products: {
|
13
13
|
0 => {
|
14
|
+
value: "value '100.0' doesn't belong to values in: [10.0, 20.0, 25.5]",
|
14
15
|
created_at: "value 'non datetime (P0)' is an invalid date time"
|
15
16
|
},
|
16
17
|
1 => {
|
17
|
-
value: "value 'non float (P1)'
|
18
|
+
value: "value 'non float (P1)' doesn't belong to values in: [10.0, 20.0, 25.5]"
|
18
19
|
}
|
19
20
|
}
|
20
21
|
}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rest_model
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.23
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2011-12-
|
14
|
+
date: 2011-12-21 00:00:00.000000000Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
18
|
-
requirement: &
|
18
|
+
requirement: &70269236026780 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ~>
|
@@ -23,10 +23,10 @@ dependencies:
|
|
23
23
|
version: '3.0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70269236026780
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: i18n
|
29
|
-
requirement: &
|
29
|
+
requirement: &70269236026280 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
32
|
- - ! '>='
|
@@ -34,10 +34,10 @@ dependencies:
|
|
34
34
|
version: '0.5'
|
35
35
|
type: :runtime
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70269236026280
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: rspec
|
40
|
-
requirement: &
|
40
|
+
requirement: &70269236025820 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
@@ -45,10 +45,10 @@ dependencies:
|
|
45
45
|
version: '2.6'
|
46
46
|
type: :development
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *70269236025820
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: guard
|
51
|
-
requirement: &
|
51
|
+
requirement: &70269236025360 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ~>
|
@@ -56,10 +56,10 @@ dependencies:
|
|
56
56
|
version: '0.5'
|
57
57
|
type: :development
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *70269236025360
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: guard-rspec
|
62
|
-
requirement: &
|
62
|
+
requirement: &70269227073320 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
65
|
- - ~>
|
@@ -67,10 +67,10 @@ dependencies:
|
|
67
67
|
version: '0.4'
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *70269227073320
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: growl
|
73
|
-
requirement: &
|
73
|
+
requirement: &70269227072860 !ruby/object:Gem::Requirement
|
74
74
|
none: false
|
75
75
|
requirements:
|
76
76
|
- - ~>
|
@@ -78,7 +78,7 @@ dependencies:
|
|
78
78
|
version: '1.0'
|
79
79
|
type: :development
|
80
80
|
prerelease: false
|
81
|
-
version_requirements: *
|
81
|
+
version_requirements: *70269227072860
|
82
82
|
description: ''
|
83
83
|
email:
|
84
84
|
- victorcrodrigues@gmail.com
|
@@ -179,6 +179,7 @@ files:
|
|
179
179
|
- lib/rest_model/serialization/float.rb
|
180
180
|
- lib/rest_model/serialization/integer.rb
|
181
181
|
- lib/rest_model/serialization/string.rb
|
182
|
+
- lib/rest_model/serialization/symbol.rb
|
182
183
|
- lib/rest_model/source/path.rb
|
183
184
|
- lib/rest_model/source/retriever.rb
|
184
185
|
- lib/rest_model/source/sender.rb
|