cyrax 0.2.4 → 0.2.5
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/cyrax/extensions/has_resource.rb +4 -24
- data/lib/cyrax/extensions/has_service.rb +29 -3
- data/lib/cyrax/version.rb +1 -1
- data/spec/cyrax/base_resource_spec.rb +13 -17
- data/spec/cyrax/callbacks_spec.rb +1 -1
- data/spec/cyrax/decorator_spec.rb +1 -1
- data/spec/cyrax/extensions/has_callbacks_spec.rb +6 -6
- data/spec/cyrax/extensions/has_resource_spec.rb +7 -47
- data/spec/cyrax/extensions/has_response_spec.rb +7 -7
- data/spec/cyrax/extensions/has_service_spec.rb +63 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZDE0YjZkNTZmYTNmNzI1YzQzODY2Nzg1OWI4MDY3NDZmMzY5N2Y1Yg==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MzlhNjI4YThhOTc5MWE3YzhkMjU2NDIzNmQ0YjU1YzExNDY1YjRmOQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Njk3YmQyYzdlOWFiZWUxODM0NjNmZTdlOTgzNTVhMDFjNmI3N2I3ODc3MTk1
|
10
|
+
ODc2NDJjNzI3ZDg1OWNiMDVjZjlkOGFmMGFhNzA4Y2JlYTEwMjExYjgwODk3
|
11
|
+
ODMyYmNhMWIzODk2MTg2YzcyYzQwYTYzMjg0ZjFmYTlmYjgzNDM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NDZjZTM1ZDNlNWM2NGFlODc4NmE0MzhmMWRiYmJkMDJiZDgzNmU1OTBiZjU3
|
14
|
+
ZDg1NGNjMDFkYTJiYjhiN2MzMjVmOTM1OGQ0MTA2NDBiYWVlZDAzNDE2ODQx
|
15
|
+
NjM4YzY1NWFlYWEzNDM3NWRjMWM0Y2QzNzBiMmQ3ZTBiNDQ4OGM=
|
@@ -7,11 +7,12 @@ module Cyrax::Extensions
|
|
7
7
|
register_extension :has_resource
|
8
8
|
class_attribute :resource_name
|
9
9
|
class_attribute :resource_class_name
|
10
|
+
class_attribute :collection_name
|
10
11
|
end
|
11
12
|
|
12
13
|
def resource_class
|
13
|
-
if self.
|
14
|
-
self.
|
14
|
+
if self.resource_class_name
|
15
|
+
self.resource_class_name.constantize
|
15
16
|
else
|
16
17
|
resource_name.classify.constantize
|
17
18
|
end
|
@@ -21,32 +22,10 @@ module Cyrax::Extensions
|
|
21
22
|
resource_class
|
22
23
|
end
|
23
24
|
|
24
|
-
def collection_name
|
25
|
-
resource_name.pluralize
|
26
|
-
end
|
27
|
-
|
28
25
|
def resource_attributes
|
29
26
|
filter_attributes(dirty_resource_attributes)
|
30
27
|
end
|
31
28
|
|
32
|
-
def build_resource(id, attributes = {})
|
33
|
-
if id.present?
|
34
|
-
resource = find_resource(id)
|
35
|
-
resource.attributes = attributes
|
36
|
-
resource
|
37
|
-
else
|
38
|
-
resource_scope.new(default_resource_attributes.merge(attributes))
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def build_collection
|
43
|
-
resource_scope
|
44
|
-
end
|
45
|
-
|
46
|
-
def find_resource(id)
|
47
|
-
resource_scope.find(id)
|
48
|
-
end
|
49
|
-
|
50
29
|
def response_name
|
51
30
|
resource_name
|
52
31
|
end
|
@@ -64,6 +43,7 @@ module Cyrax::Extensions
|
|
64
43
|
def resource(name, options = {})
|
65
44
|
self.resource_name = name.to_s
|
66
45
|
self.resource_class_name = options[:class_name]
|
46
|
+
self.collection_name = name.to_s.pluralize
|
67
47
|
end
|
68
48
|
end
|
69
49
|
|
@@ -19,7 +19,7 @@ module Cyrax::Extensions
|
|
19
19
|
resource = build_resource(nil, custom_attributes||resource_attributes)
|
20
20
|
invoke_callback(:before_create, resource)
|
21
21
|
invoke_callback(:before_save, resource)
|
22
|
-
if resource
|
22
|
+
if save_resource(resource)
|
23
23
|
invoke_callback(:after_create, resource)
|
24
24
|
invoke_callback(:after_save, resource)
|
25
25
|
set_message("#{resource_name.titleize} successfully created")
|
@@ -39,7 +39,7 @@ module Cyrax::Extensions
|
|
39
39
|
resource = build_resource(params[:id], custom_attributes||resource_attributes)
|
40
40
|
invoke_callback(:before_update, resource)
|
41
41
|
invoke_callback(:before_save, resource)
|
42
|
-
if resource
|
42
|
+
if save_resource(resource)
|
43
43
|
invoke_callback(:after_update, resource)
|
44
44
|
invoke_callback(:after_save, resource)
|
45
45
|
set_message("#{resource_name.titleize} successfully updated")
|
@@ -52,9 +52,35 @@ module Cyrax::Extensions
|
|
52
52
|
def destroy
|
53
53
|
resource = find_resource(params[:id])
|
54
54
|
invoke_callback(:before_destroy, resource)
|
55
|
-
resource
|
55
|
+
delete_resource(resource)
|
56
56
|
invoke_callback(:after_destroy, resource)
|
57
57
|
respond_with(resource)
|
58
58
|
end
|
59
|
+
|
60
|
+
def find_resource(id)
|
61
|
+
resource_scope.find(id)
|
62
|
+
end
|
63
|
+
|
64
|
+
def build_resource(id, attributes = {})
|
65
|
+
if id.present?
|
66
|
+
resource = find_resource(id)
|
67
|
+
resource.attributes = attributes
|
68
|
+
resource
|
69
|
+
else
|
70
|
+
resource_scope.new(default_resource_attributes.merge(attributes))
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def save_resource(resource)
|
75
|
+
resource.save
|
76
|
+
end
|
77
|
+
|
78
|
+
def delete_resource(resource)
|
79
|
+
resource.destroy
|
80
|
+
end
|
81
|
+
|
82
|
+
def build_collection
|
83
|
+
resource_scope
|
84
|
+
end
|
59
85
|
end
|
60
86
|
end
|
data/lib/cyrax/version.rb
CHANGED
@@ -4,10 +4,6 @@ class Foo; end
|
|
4
4
|
module Cyrax
|
5
5
|
describe BaseResource do
|
6
6
|
describe 'it should behave like resource' do
|
7
|
-
context 'class methods' do
|
8
|
-
subject { Cyrax::BaseResource }
|
9
|
-
it{ should respond_to(:new) }
|
10
|
-
end
|
11
7
|
context 'instance methods' do
|
12
8
|
subject { Cyrax::BaseResource.new }
|
13
9
|
it{ should respond_to(:accessor) }
|
@@ -30,19 +26,19 @@ module Cyrax
|
|
30
26
|
end
|
31
27
|
|
32
28
|
subject { Cyrax::BaseResource.new }
|
33
|
-
let(:resource) {
|
34
|
-
let(:collection) { [
|
29
|
+
let(:resource) { double.as_null_object }
|
30
|
+
let(:collection) { [double] }
|
35
31
|
before do
|
36
|
-
subject.stub
|
37
|
-
subject.stub
|
38
|
-
subject.
|
32
|
+
subject.stub(:params).and_return({id:123})
|
33
|
+
subject.stub(:find_resource).and_return(resource)
|
34
|
+
subject.class.send :resource, :foo
|
39
35
|
end
|
40
36
|
|
41
|
-
describe '#
|
37
|
+
describe '#read_all' do
|
42
38
|
it 'responds with decorated collection' do
|
43
39
|
subject.should_receive(:build_collection).and_return(collection)
|
44
40
|
subject.should_receive(:respond_with).with(collection, name: 'foos', present: :collection)
|
45
|
-
subject.
|
41
|
+
subject.read_all
|
46
42
|
end
|
47
43
|
end
|
48
44
|
|
@@ -91,7 +87,7 @@ module Cyrax
|
|
91
87
|
|
92
88
|
describe '#create' do
|
93
89
|
let(:params) { {foo: 'bar'} }
|
94
|
-
before { subject.stub
|
90
|
+
before { subject.stub(:build_resource).and_return(resource) }
|
95
91
|
it 'responds with resource' do
|
96
92
|
subject.should_receive(:build_resource).with(nil, params)
|
97
93
|
subject.should_receive(:respond_with).with(resource)
|
@@ -99,7 +95,7 @@ module Cyrax
|
|
99
95
|
end
|
100
96
|
|
101
97
|
context 'when resource successfully saved' do
|
102
|
-
before { resource.stub
|
98
|
+
before { resource.stub(:save).and_return(true) }
|
103
99
|
|
104
100
|
it 'invokes callbacks' do
|
105
101
|
subject.should_receive(:invoke_callback).with(:before_save, resource)
|
@@ -116,7 +112,7 @@ module Cyrax
|
|
116
112
|
end
|
117
113
|
|
118
114
|
context 'when resource could not be saved' do
|
119
|
-
before { resource.stub
|
115
|
+
before { resource.stub(:save).and_return(false) }
|
120
116
|
|
121
117
|
it 'invokes callbacks' do
|
122
118
|
subject.should_receive(:invoke_callback).with(:before_save, resource)
|
@@ -135,7 +131,7 @@ module Cyrax
|
|
135
131
|
|
136
132
|
describe '#update' do
|
137
133
|
let(:params) { {foo: 'bar'} }
|
138
|
-
before { subject.stub
|
134
|
+
before { subject.stub(:build_resource).and_return(resource) }
|
139
135
|
it 'responds with resource' do
|
140
136
|
subject.should_receive(:build_resource).with(123, params)
|
141
137
|
subject.should_receive(:respond_with).with(resource)
|
@@ -143,7 +139,7 @@ module Cyrax
|
|
143
139
|
end
|
144
140
|
|
145
141
|
context 'when resource successfully saved' do
|
146
|
-
before { resource.stub
|
142
|
+
before { resource.stub(:save).and_return(true) }
|
147
143
|
|
148
144
|
it 'invokes callbacks' do
|
149
145
|
subject.should_receive(:invoke_callback).with(:before_save, resource)
|
@@ -160,7 +156,7 @@ module Cyrax
|
|
160
156
|
end
|
161
157
|
|
162
158
|
context 'when resource could not be saved' do
|
163
|
-
before { resource.stub
|
159
|
+
before { resource.stub(:save).and_return(false) }
|
164
160
|
|
165
161
|
it 'invokes callbacks' do
|
166
162
|
subject.should_receive(:invoke_callback).with(:before_save, resource)
|
@@ -10,17 +10,17 @@ module Cyrax
|
|
10
10
|
|
11
11
|
describe '#invoke_callback' do
|
12
12
|
context 'when callback handler class is not defined' do
|
13
|
-
let(:name) {
|
14
|
-
let(:resource) {
|
15
|
-
before { subject.class.stub
|
13
|
+
let(:name) { double }
|
14
|
+
let(:resource) { double }
|
15
|
+
before { subject.class.stub(:resource_callbacks_handler_class) }
|
16
16
|
it { subject.invoke_callback(name, resource).should be_nil }
|
17
17
|
end
|
18
18
|
|
19
19
|
context 'when callback handler class is defined' do
|
20
20
|
let(:name) { "foo" }
|
21
|
-
let(:resource) {
|
21
|
+
let(:resource) { double }
|
22
22
|
let(:handle_class) { double.as_null_object }
|
23
|
-
before { subject.class.stub
|
23
|
+
before { subject.class.stub(:resource_callbacks_handler_class).and_return(handle_class) }
|
24
24
|
|
25
25
|
it 'initializes handle class instance' do
|
26
26
|
handle_class.should_receive(:new).with(resource)
|
@@ -29,7 +29,7 @@ module Cyrax
|
|
29
29
|
|
30
30
|
it 'calls corresponding method on instance' do
|
31
31
|
instance = double.as_null_object
|
32
|
-
handle_class.stub
|
32
|
+
handle_class.stub(:new).and_return(instance)
|
33
33
|
instance.should_receive(:foo)
|
34
34
|
subject.invoke_callback(name, resource)
|
35
35
|
end
|
@@ -56,53 +56,13 @@ module Cyrax
|
|
56
56
|
end
|
57
57
|
|
58
58
|
describe '#resource_scope' do
|
59
|
-
before { subject.stub
|
59
|
+
before { subject.stub(:resource_class).and_return(Foo) }
|
60
60
|
its(:resource_scope) { should eq(Foo) }
|
61
61
|
end
|
62
62
|
|
63
|
-
describe '#build_collection' do
|
64
|
-
before { subject.stub!(:resource_class).and_return(Foo) }
|
65
|
-
its(:build_collection) { should eq(Foo) }
|
66
|
-
end
|
67
|
-
|
68
|
-
describe '#find_resource' do
|
69
|
-
let(:resource_scope) { mock }
|
70
|
-
before { subject.stub!(:resource_scope).and_return(resource_scope) }
|
71
|
-
it 'finds resource by id' do
|
72
|
-
allow_message_expectations_on_nil
|
73
|
-
resource_scope.should_receive(:find).with(123)
|
74
|
-
subject.find_resource(123)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe '#build_resource' do
|
79
|
-
context 'when id is nil' do
|
80
|
-
let(:resource_scope) { mock }
|
81
|
-
before { subject.stub!(:resource_scope).and_return(resource_scope) }
|
82
|
-
it 'initializes new object' do
|
83
|
-
allow_message_expectations_on_nil
|
84
|
-
resource_scope.should_receive(:new).with({foo: 'bar'})
|
85
|
-
subject.build_resource(nil, {foo: 'bar'})
|
86
|
-
end
|
87
|
-
end
|
88
|
-
context 'when id is present' do
|
89
|
-
let(:resource) { mock.as_null_object }
|
90
|
-
it 'finds resource' do
|
91
|
-
subject.should_receive(:find_resource).with(123).and_return(resource)
|
92
|
-
subject.build_resource(123, {foo: 'bar'})
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'assigns provided attributes' do
|
96
|
-
subject.stub!(:find_resource).and_return(resource)
|
97
|
-
resource.should_receive(:attributes=).with({foo: 'bar'})
|
98
|
-
subject.build_resource(123, {foo: 'bar'})
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
|
103
63
|
describe '#resource_attributes' do
|
104
|
-
let(:dirty_resource_attributes) {
|
105
|
-
before { subject.stub
|
64
|
+
let(:dirty_resource_attributes) { double }
|
65
|
+
before { subject.stub(:dirty_resource_attributes).and_return(dirty_resource_attributes)}
|
106
66
|
it 'filters dirty attributes' do
|
107
67
|
subject.should_receive(:filter_attributes).with(dirty_resource_attributes)
|
108
68
|
subject.resource_attributes
|
@@ -114,15 +74,15 @@ module Cyrax
|
|
114
74
|
describe '#dirty_resource_attributes' do
|
115
75
|
context 'when params are present' do
|
116
76
|
it 'should return from params by resource_name' do
|
117
|
-
subject.stub
|
118
|
-
subject.stub
|
77
|
+
subject.stub(:resource_name).and_return(:foo)
|
78
|
+
subject.stub(:params).and_return({foo: {bar: 'bazz'}})
|
119
79
|
subject.send(:dirty_resource_attributes).should eq({bar: 'bazz'})
|
120
80
|
end
|
121
81
|
end
|
122
82
|
context 'when there are no params' do
|
123
83
|
it 'should return empty hash' do
|
124
|
-
subject.stub
|
125
|
-
subject.stub
|
84
|
+
subject.stub(:resource_name).and_return(:foo)
|
85
|
+
subject.stub(:params).and_return({})
|
126
86
|
subject.send(:dirty_resource_attributes).should eq({})
|
127
87
|
end
|
128
88
|
end
|
@@ -8,8 +8,8 @@ module Cyrax
|
|
8
8
|
describe Cyrax::Extensions::HasResponse do
|
9
9
|
subject { BaseWithResponse.new }
|
10
10
|
before do
|
11
|
-
subject.stub
|
12
|
-
subject.stub
|
11
|
+
subject.stub(:decorable?).and_return(false)
|
12
|
+
subject.stub(:decorator_class).and_return(nil)
|
13
13
|
end
|
14
14
|
|
15
15
|
describe '#set_message' do
|
@@ -40,8 +40,8 @@ module Cyrax
|
|
40
40
|
|
41
41
|
describe '#add_errors_from' do
|
42
42
|
let(:messages) { [[:foo, 'bar'], [:bar, 'bazz']]}
|
43
|
-
let(:errors) {
|
44
|
-
let(:model) {
|
43
|
+
let(:errors) { double(messages: messages)}
|
44
|
+
let(:model) { double(errors: errors) }
|
45
45
|
|
46
46
|
it 'should add errors from model error messages' do
|
47
47
|
subject.add_errors_from(model)
|
@@ -57,9 +57,9 @@ module Cyrax
|
|
57
57
|
end
|
58
58
|
|
59
59
|
describe '#respond_with' do
|
60
|
-
before { subject.stub
|
60
|
+
before { subject.stub(:response_name).and_return(:foo) }
|
61
61
|
it 'calls Cyrax::Response' do
|
62
|
-
Cyrax::Response.should_receive(:new).with(:foo, 'bar').and_return(
|
62
|
+
Cyrax::Response.should_receive(:new).with(:foo, 'bar').and_return(double.as_null_object)
|
63
63
|
subject.respond_with('bar')
|
64
64
|
end
|
65
65
|
|
@@ -68,7 +68,7 @@ module Cyrax
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it 'should assign message, errors and additional assignments to response object' do
|
71
|
-
response =
|
71
|
+
response = double
|
72
72
|
Cyrax::Response.should_receive(:new).and_return(response)
|
73
73
|
response.should_receive(:message=)
|
74
74
|
response.should_receive(:errors=)
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class StrongParameters < Hash
|
4
|
+
def permit(attrs)
|
5
|
+
self.slice(*attrs)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
class Bar; end
|
10
|
+
class Foo; end
|
11
|
+
|
12
|
+
module Cyrax
|
13
|
+
class BaseWithService < Cyrax::Base
|
14
|
+
include Cyrax::Extensions::HasService
|
15
|
+
end
|
16
|
+
|
17
|
+
describe Cyrax::Extensions::HasResource do
|
18
|
+
subject { BaseWithService.new }
|
19
|
+
|
20
|
+
describe 'instance methods' do
|
21
|
+
describe '#build_collection' do
|
22
|
+
before { subject.stub(:resource_scope).and_return(Foo) }
|
23
|
+
its(:build_collection) { should eq(Foo) }
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '#find_resource' do
|
27
|
+
let(:resource_scope) { double }
|
28
|
+
before { subject.stub(:resource_scope).and_return(resource_scope) }
|
29
|
+
it 'finds resource by id' do
|
30
|
+
allow_message_expectations_on_nil
|
31
|
+
resource_scope.should_receive(:find).with(123)
|
32
|
+
subject.find_resource(123)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#build_resource' do
|
37
|
+
context 'when id is nil' do
|
38
|
+
let(:resource_scope) { double }
|
39
|
+
before { subject.stub(:resource_scope).and_return(resource_scope) }
|
40
|
+
before { subject.stub(:default_resource_attributes).and_return({}) }
|
41
|
+
it 'initializes new object' do
|
42
|
+
allow_message_expectations_on_nil
|
43
|
+
resource_scope.should_receive(:new).with({foo: 'bar'})
|
44
|
+
subject.build_resource(nil, {foo: 'bar'})
|
45
|
+
end
|
46
|
+
end
|
47
|
+
context 'when id is present' do
|
48
|
+
let(:resource) { double.as_null_object }
|
49
|
+
it 'finds resource' do
|
50
|
+
subject.should_receive(:find_resource).with(123).and_return(resource)
|
51
|
+
subject.build_resource(123, {foo: 'bar'})
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'assigns provided attributes' do
|
55
|
+
subject.stub(:find_resource).and_return(resource)
|
56
|
+
resource.should_receive(:attributes=).with({foo: 'bar'})
|
57
|
+
subject.build_resource(123, {foo: 'bar'})
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cyrax
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Droidlabs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-09-
|
11
|
+
date: 2013-09-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- spec/cyrax/extensions/has_decorator_spec.rb
|
98
98
|
- spec/cyrax/extensions/has_resource_spec.rb
|
99
99
|
- spec/cyrax/extensions/has_response_spec.rb
|
100
|
+
- spec/cyrax/extensions/has_service_spec.rb
|
100
101
|
- spec/cyrax/response_spec.rb
|
101
102
|
- spec/spec_helper.rb
|
102
103
|
homepage:
|
@@ -132,5 +133,6 @@ test_files:
|
|
132
133
|
- spec/cyrax/extensions/has_decorator_spec.rb
|
133
134
|
- spec/cyrax/extensions/has_resource_spec.rb
|
134
135
|
- spec/cyrax/extensions/has_response_spec.rb
|
136
|
+
- spec/cyrax/extensions/has_service_spec.rb
|
135
137
|
- spec/cyrax/response_spec.rb
|
136
138
|
- spec/spec_helper.rb
|