acfs 0.22.2.b194 → 0.22.2.b196
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 +8 -8
- data/lib/acfs/errors.rb +15 -0
- data/lib/acfs/model/query_methods.rb +20 -7
- data/spec/acfs/model/persistance_spec.rb +5 -5
- data/spec/acfs/model/query_methods_spec.rb +37 -1
- data/spec/support/service.rb +21 -0
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
---
|
|
2
2
|
!binary "U0hBMQ==":
|
|
3
3
|
metadata.gz: !binary |-
|
|
4
|
-
|
|
4
|
+
YjNkYThhNTU4ZGM5MWFiOWQyNDRlY2MxYmU2ZGRmMzIxYzhjZDQ1Zg==
|
|
5
5
|
data.tar.gz: !binary |-
|
|
6
|
-
|
|
6
|
+
MDFmNGVlYzg1YThiMzljMDMwZGE5MmQzZDc3ZDhlOTgxMDhmZDVlZA==
|
|
7
7
|
!binary "U0hBNTEy":
|
|
8
8
|
metadata.gz: !binary |-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
MjViYjlhZmIwYjUxOTZjZTc2NTgxNmQwMDNhOTczZWVkMGFlMzgyZTEyM2Ni
|
|
10
|
+
OTNiODg3NDA1NmE3MjNiNDViNGYzOTcxZTQ5NDc5Y2I5NTk5YWVkMTZhNGJh
|
|
11
|
+
ODM1NGNlNGNhNDEyMTBmMTlhZjJkNzY1N2Y3YTYyMmY2YWMxMjg=
|
|
12
12
|
data.tar.gz: !binary |-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
OTllM2RlYThiNjUzYzNlYTIwYTJmZDcwNDQ1MzI4MTQyMWJmNTY1ZWQ0ZjM1
|
|
14
|
+
MDdiMWQ0YzZhMzlmMmUyZDQ4MDk2ZWRiMTBiOTQ1YTVmNTE1OTA4YzcwNmM3
|
|
15
|
+
MTRlZjE1MDMyZmMzNGRmODdjOGU0YmVlNzY4MDIzN2Y5ZjY2Zjk=
|
data/lib/acfs/errors.rb
CHANGED
|
@@ -86,5 +86,20 @@ module Acfs
|
|
|
86
86
|
end
|
|
87
87
|
end
|
|
88
88
|
|
|
89
|
+
# Gets raised if ressource type is no valid subclass of
|
|
90
|
+
# parent resource. Check if the type is set to the correct
|
|
91
|
+
# Acfs::Resource Name
|
|
92
|
+
class RessourceTypeError < Error
|
|
93
|
+
attr_reader :base_class
|
|
94
|
+
attr_reader :type_name
|
|
95
|
+
|
|
96
|
+
def initialize(opts = {})
|
|
97
|
+
@base_class = opts.delete :base_class
|
|
98
|
+
@type_name = opts.delete :type_name
|
|
99
|
+
opts[:message] = "Recieved ressource type #{type_name} is no subclass of #{base_class}"
|
|
100
|
+
super
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
|
|
89
104
|
class RealRequestsNotAllowedError < StandardError; end
|
|
90
105
|
end
|
|
@@ -76,10 +76,7 @@ module Acfs::Model
|
|
|
76
76
|
|
|
77
77
|
operation :list, params: params do |data|
|
|
78
78
|
data.each do |obj|
|
|
79
|
-
collection <<
|
|
80
|
-
m.attributes = obj
|
|
81
|
-
m.loaded!
|
|
82
|
-
end
|
|
79
|
+
collection << create_resource(obj)
|
|
83
80
|
end
|
|
84
81
|
collection.loaded!
|
|
85
82
|
block.call collection unless block.nil?
|
|
@@ -91,14 +88,13 @@ module Acfs::Model
|
|
|
91
88
|
|
|
92
89
|
private
|
|
93
90
|
def find_single(id, opts, &block)
|
|
94
|
-
model = self.new
|
|
91
|
+
model = SimpleDelegator.new self.new
|
|
95
92
|
|
|
96
93
|
opts[:params] ||= {}
|
|
97
94
|
opts[:params].merge!({ id: id })
|
|
98
95
|
|
|
99
96
|
operation :read, opts do |data|
|
|
100
|
-
model.
|
|
101
|
-
model.loaded!
|
|
97
|
+
model.__setobj__ create_resource data, origin: model.__getobj__
|
|
102
98
|
block.call model unless block.nil?
|
|
103
99
|
end
|
|
104
100
|
|
|
@@ -119,6 +115,23 @@ module Acfs::Model
|
|
|
119
115
|
end
|
|
120
116
|
end
|
|
121
117
|
end
|
|
118
|
+
|
|
119
|
+
def create_resource(data, opts = {})
|
|
120
|
+
type = data.delete 'type'
|
|
121
|
+
klass = resource_class_lookup(type)
|
|
122
|
+
(opts[:origin].is_a?(klass) ? opts[:origin] : klass.new).tap do |m|
|
|
123
|
+
m.attributes = data
|
|
124
|
+
m.loaded!
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def resource_class_lookup(type)
|
|
129
|
+
return self if type.nil?
|
|
130
|
+
klass = type.camelize.constantize
|
|
131
|
+
raise Acfs::RessourceTypeError, type_name: type, base_class: self unless klass <= self
|
|
132
|
+
klass
|
|
133
|
+
end
|
|
134
|
+
|
|
122
135
|
end
|
|
123
136
|
end
|
|
124
137
|
end
|
|
@@ -113,7 +113,7 @@ describe Acfs::Model::Persistence do
|
|
|
113
113
|
|
|
114
114
|
it 'should be frozen after DELETE' do
|
|
115
115
|
model.delete!
|
|
116
|
-
expect(model).to be_frozen
|
|
116
|
+
expect(model.__getobj__).to be_frozen
|
|
117
117
|
end
|
|
118
118
|
end
|
|
119
119
|
|
|
@@ -127,12 +127,12 @@ describe Acfs::Model::Persistence do
|
|
|
127
127
|
end
|
|
128
128
|
|
|
129
129
|
it 'should save resource' do
|
|
130
|
-
expect(model).to receive(:save).with({})
|
|
130
|
+
expect(model.__getobj__).to receive(:save).with({})
|
|
131
131
|
model.update_attributes name: 'Idefix'
|
|
132
132
|
end
|
|
133
133
|
|
|
134
134
|
it 'should pass second hash to save' do
|
|
135
|
-
expect(model).to receive(:save).with({ bla: 'blub' })
|
|
135
|
+
expect(model.__getobj__).to receive(:save).with({ bla: 'blub' })
|
|
136
136
|
model.update_attributes({ name: 'Idefix' }, { bla: 'blub' })
|
|
137
137
|
end
|
|
138
138
|
end
|
|
@@ -147,12 +147,12 @@ describe Acfs::Model::Persistence do
|
|
|
147
147
|
end
|
|
148
148
|
|
|
149
149
|
it 'should save resource' do
|
|
150
|
-
expect(model).to receive(:save!).with({})
|
|
150
|
+
expect(model.__getobj__).to receive(:save!).with({})
|
|
151
151
|
model.update_attributes! name: 'Idefix'
|
|
152
152
|
end
|
|
153
153
|
|
|
154
154
|
it 'should pass second hash to save' do
|
|
155
|
-
expect(model).to receive(:save!).with({ bla: 'blub' })
|
|
155
|
+
expect(model.__getobj__).to receive(:save!).with({ bla: 'blub' })
|
|
156
156
|
model.update_attributes!({ name: 'Idefix' }, { bla: 'blub' })
|
|
157
157
|
end
|
|
158
158
|
end
|
|
@@ -20,7 +20,7 @@ describe Acfs::Model::QueryMethods do
|
|
|
20
20
|
it 'should invoke callback after model is loaded' do
|
|
21
21
|
proc = Proc.new { }
|
|
22
22
|
proc.should_receive(:call) do |user|
|
|
23
|
-
expect(user).to
|
|
23
|
+
expect(user.__getobj__).to equal @user.__getobj__
|
|
24
24
|
expect(user).to be_loaded
|
|
25
25
|
end
|
|
26
26
|
|
|
@@ -100,4 +100,40 @@ describe Acfs::Model::QueryMethods do
|
|
|
100
100
|
end
|
|
101
101
|
end
|
|
102
102
|
end
|
|
103
|
+
|
|
104
|
+
describe '.all' do
|
|
105
|
+
let(:computer) { Computer }
|
|
106
|
+
let(:pc) { PC }
|
|
107
|
+
let(:mac) { Mac }
|
|
108
|
+
before do
|
|
109
|
+
stub_request(:get, 'http://computers.example.org/computers').to_return response([{ id: 1, type: 'PC' }, { id: 2, type: 'Computer' }, { id: 3, type: 'Mac' }])
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
context 'with resource type inheritance' do
|
|
113
|
+
it 'should create appropriate subclass resources' do
|
|
114
|
+
@computers = Computer.all
|
|
115
|
+
|
|
116
|
+
expect(@computers).to_not be_loaded
|
|
117
|
+
|
|
118
|
+
Acfs.run
|
|
119
|
+
|
|
120
|
+
expect(@computers).to be_loaded
|
|
121
|
+
expect(@computers).to have(3).items
|
|
122
|
+
expect(@computers[0]).to be_a PC
|
|
123
|
+
expect(@computers[1]).to be_a Computer
|
|
124
|
+
expect(@computers[2]).to be_a Mac
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
context 'with invalid type set' do
|
|
128
|
+
before do
|
|
129
|
+
stub_request(:get, 'http://computers.example.org/computers').to_return response([{ id: 1, type: 'MyUser' }, { id: 2, type: 'Computer' }, { id: 3, type: 'Mac' }])
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
it 'should raise error if type is no subclass' do
|
|
133
|
+
Computer.all
|
|
134
|
+
expect { Acfs.run }.to raise_error(Acfs::RessourceTypeError)
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
end
|
|
103
139
|
end
|
data/spec/support/service.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
Acfs.configure do
|
|
3
3
|
locate :user_service, 'http://users.example.org'
|
|
4
|
+
locate :computer_service, 'http://computers.example.org'
|
|
4
5
|
locate :comments, 'http://comments.example.org'
|
|
5
6
|
end
|
|
6
7
|
|
|
@@ -47,6 +48,26 @@ class Comment < Acfs::Resource
|
|
|
47
48
|
attribute :text, :string
|
|
48
49
|
end
|
|
49
50
|
|
|
51
|
+
class ComputerService < Acfs::Service
|
|
52
|
+
use Acfs::Middleware::MessagePackDecoder
|
|
53
|
+
use Acfs::Middleware::JsonDecoder
|
|
54
|
+
use Acfs::Middleware::JsonEncoder
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
class Computer < Acfs::Resource
|
|
58
|
+
service ComputerService, path: 'computers'
|
|
59
|
+
|
|
60
|
+
attribute :id, :integer
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
class PC < Computer
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
class Mac < Computer
|
|
68
|
+
|
|
69
|
+
end
|
|
70
|
+
|
|
50
71
|
# DRAFT: Singular resource
|
|
51
72
|
#class Singular < Acfs::Resource
|
|
52
73
|
# service UserService, singular: true
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: acfs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.22.2.
|
|
4
|
+
version: 0.22.2.b196
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jan Graichen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2013-09-
|
|
11
|
+
date: 2013-09-26 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|