requisite 0.3.0 → 0.4.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/Gemfile.lock +63 -0
- data/lib/requisite.rb +1 -0
- data/lib/requisite/api_model.rb +11 -9
- data/lib/requisite/boundary_object.rb +5 -5
- data/lib/requisite/version.rb +1 -1
- data/requisite.gemspec +2 -0
- data/test/requisite/api_model_test.rb +7 -0
- metadata +32 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6b64e1b0c71c849d17375adc03eb2704586aa34
|
4
|
+
data.tar.gz: fb200944d39969a6b5d3e61d76e37803812ed98b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d6cf2087d2ee9dae26585859335529305b3e3852ec977f1814d8db1e919f47143e5a70a8e488f5df36ca2fda329a3a0e6e3111375aa10319897bc8163c54febc
|
7
|
+
data.tar.gz: 5800a2eb21bb387067cfad863a654fde52d988f0a11084e3e946b60755ac1b5c1ad2da5ef8edba1d8c23a96a74985f33b00ea89108d717eab1e145b85ca86048
|
data/Gemfile.lock
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
requisite (0.4.0)
|
5
|
+
actionpack (>= 4.2.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: http://rubygems.org/
|
9
|
+
specs:
|
10
|
+
actionpack (5.1.5)
|
11
|
+
actionview (= 5.1.5)
|
12
|
+
activesupport (= 5.1.5)
|
13
|
+
rack (~> 2.0)
|
14
|
+
rack-test (>= 0.6.3)
|
15
|
+
rails-dom-testing (~> 2.0)
|
16
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.2)
|
17
|
+
actionview (5.1.5)
|
18
|
+
activesupport (= 5.1.5)
|
19
|
+
builder (~> 3.1)
|
20
|
+
erubi (~> 1.4)
|
21
|
+
rails-dom-testing (~> 2.0)
|
22
|
+
rails-html-sanitizer (~> 1.0, >= 1.0.3)
|
23
|
+
activesupport (5.1.5)
|
24
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
25
|
+
i18n (~> 0.7)
|
26
|
+
minitest (~> 5.1)
|
27
|
+
tzinfo (~> 1.1)
|
28
|
+
builder (3.2.3)
|
29
|
+
concurrent-ruby (1.0.5)
|
30
|
+
crass (1.0.3)
|
31
|
+
erubi (1.7.1)
|
32
|
+
i18n (0.9.5)
|
33
|
+
concurrent-ruby (~> 1.0)
|
34
|
+
loofah (2.2.1)
|
35
|
+
crass (~> 1.0.2)
|
36
|
+
nokogiri (>= 1.5.9)
|
37
|
+
mini_portile2 (2.3.0)
|
38
|
+
minitest (5.11.3)
|
39
|
+
nokogiri (1.8.2)
|
40
|
+
mini_portile2 (~> 2.3.0)
|
41
|
+
rack (2.0.4)
|
42
|
+
rack-test (0.8.3)
|
43
|
+
rack (>= 1.0, < 3)
|
44
|
+
rails-dom-testing (2.0.3)
|
45
|
+
activesupport (>= 4.2.0)
|
46
|
+
nokogiri (>= 1.6)
|
47
|
+
rails-html-sanitizer (1.0.3)
|
48
|
+
loofah (~> 2.0)
|
49
|
+
rake (12.3.0)
|
50
|
+
thread_safe (0.3.6)
|
51
|
+
tzinfo (1.2.5)
|
52
|
+
thread_safe (~> 0.1)
|
53
|
+
|
54
|
+
PLATFORMS
|
55
|
+
ruby
|
56
|
+
|
57
|
+
DEPENDENCIES
|
58
|
+
minitest
|
59
|
+
rake
|
60
|
+
requisite!
|
61
|
+
|
62
|
+
BUNDLED WITH
|
63
|
+
1.16.1
|
data/lib/requisite.rb
CHANGED
data/lib/requisite/api_model.rb
CHANGED
@@ -5,7 +5,14 @@ module Requisite
|
|
5
5
|
attr_reader :model
|
6
6
|
|
7
7
|
def initialize(model={})
|
8
|
-
@model =
|
8
|
+
@model = case model
|
9
|
+
when ActionController::Parameters
|
10
|
+
Hash[model.to_unsafe_h.map { |k, v| [k.to_sym, v] }]
|
11
|
+
when Hash
|
12
|
+
Hash[model.map { |k, v| [k.to_sym, v] }]
|
13
|
+
else
|
14
|
+
model
|
15
|
+
end
|
9
16
|
end
|
10
17
|
|
11
18
|
def convert(name)
|
@@ -28,9 +35,9 @@ module Requisite
|
|
28
35
|
def to_hash(show_nil: false)
|
29
36
|
preprocess_model
|
30
37
|
{}.tap do |result|
|
31
|
-
self.class.attribute_keys_with_inheritance.each do |
|
32
|
-
value = self.send(
|
33
|
-
result
|
38
|
+
self.class.attribute_keys_with_inheritance.each do |key|
|
39
|
+
value = self.send(key)
|
40
|
+
result[key] = value if show_nil || !value.nil?
|
34
41
|
end
|
35
42
|
end
|
36
43
|
end
|
@@ -88,7 +95,6 @@ module Requisite
|
|
88
95
|
nil
|
89
96
|
end
|
90
97
|
|
91
|
-
|
92
98
|
def model_responds_to_attribute_query?(name)
|
93
99
|
if @model.kind_of?(Hash)
|
94
100
|
@model[name] != nil
|
@@ -97,10 +103,6 @@ module Requisite
|
|
97
103
|
end
|
98
104
|
end
|
99
105
|
|
100
|
-
def merge_attribute_if_exists!(to_merge, attribute_name)
|
101
|
-
attribute_from_model(attribute_name) ? to_merge.merge!(attribute_from_model(attribute_name)) : to_merge
|
102
|
-
end
|
103
|
-
|
104
106
|
def preprocess_model
|
105
107
|
# noop
|
106
108
|
end
|
@@ -15,7 +15,7 @@ module Requisite
|
|
15
15
|
result
|
16
16
|
end
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
def attribute!(name, options={})
|
20
20
|
attribute_keys << name
|
21
21
|
define_method(name) do
|
@@ -29,7 +29,7 @@ module Requisite
|
|
29
29
|
result
|
30
30
|
end
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
def serialized_attributes(&block)
|
34
34
|
@attribute_keys = []
|
35
35
|
instance_eval(&block)
|
@@ -45,10 +45,10 @@ module Requisite
|
|
45
45
|
end
|
46
46
|
|
47
47
|
private
|
48
|
-
|
48
|
+
|
49
49
|
self.singleton_class.send(:alias_method, :a, :attribute)
|
50
50
|
self.singleton_class.send(:alias_method, :a!, :attribute!)
|
51
|
-
|
51
|
+
|
52
52
|
def raise_bad_type_if_type_mismatch(value, desired_type)
|
53
53
|
raise BadTypeError.new(value, desired_type) unless (value.kind_of?(desired_type)) || ((value.kind_of?(TrueClass) || value.kind_of?(TrueClass)) && desired_type == Requisite::Boolean)
|
54
54
|
end
|
@@ -56,7 +56,7 @@ module Requisite
|
|
56
56
|
def raise_not_implemented_for_attribute(name)
|
57
57
|
raise NotImplementedError.new("'#{name}' method not implemented")
|
58
58
|
end
|
59
|
-
|
59
|
+
|
60
60
|
def empty_result?(result)
|
61
61
|
result.nil? || result == {}
|
62
62
|
end
|
data/lib/requisite/version.rb
CHANGED
data/requisite.gemspec
CHANGED
@@ -13,6 +13,8 @@ Gem::Specification.new do |gem|
|
|
13
13
|
gem.homepage = 'https://www.intercom.io'
|
14
14
|
gem.license = 'Apache License Version 2.0'
|
15
15
|
gem.add_development_dependency "minitest"
|
16
|
+
gem.add_development_dependency "rake"
|
17
|
+
gem.add_runtime_dependency "actionpack", ">= 4.2.0"
|
16
18
|
gem.files = `git ls-files`.split($/)
|
17
19
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
18
20
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
@@ -180,6 +180,13 @@ module Requisite
|
|
180
180
|
response.to_hash.must_equal(:num => 12)
|
181
181
|
end
|
182
182
|
|
183
|
+
it 'works with ActionController::Parameters' do
|
184
|
+
DummyApiModel.serialized_attributes { attribute :num }
|
185
|
+
params = ActionController::Parameters.new(num: 12)
|
186
|
+
response = DummyApiModel.new(params)
|
187
|
+
response.to_hash.must_equal(:num => 12)
|
188
|
+
end
|
189
|
+
|
183
190
|
describe 'with nested structures' do
|
184
191
|
|
185
192
|
describe 'with typed arrays' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: requisite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Osler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: actionpack
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 4.2.0
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 4.2.0
|
27
55
|
description: " Requisite is an elegant way of strongly defining request and response
|
28
56
|
models for serialization "
|
29
57
|
email:
|
@@ -35,6 +63,7 @@ files:
|
|
35
63
|
- ".gitignore"
|
36
64
|
- CHANGES.md
|
37
65
|
- Gemfile
|
66
|
+
- Gemfile.lock
|
38
67
|
- LICENCE.txt
|
39
68
|
- README.md
|
40
69
|
- Rakefile
|
@@ -70,7 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
70
99
|
version: '0'
|
71
100
|
requirements: []
|
72
101
|
rubyforge_project:
|
73
|
-
rubygems_version: 2.2.2
|
102
|
+
rubygems_version: 2.5.2.2
|
74
103
|
signing_key:
|
75
104
|
specification_version: 4
|
76
105
|
summary: Strongly defined models for HTTP APIs
|
@@ -79,4 +108,3 @@ test_files:
|
|
79
108
|
- test/requisite/api_model_test.rb
|
80
109
|
- test/requisite/api_user_test.rb
|
81
110
|
- test/test_helper.rb
|
82
|
-
has_rdoc:
|