motion-resource 0.1.1 → 0.1.2
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/Gemfile +1 -1
- data/lib/motion-resource/callbacks.rb +17 -0
- data/lib/motion-resource/crud.rb +21 -7
- data/lib/motion-resource/requests.rb +2 -1
- data/lib/motion-resource/version.rb +1 -1
- data/spec/motion-resource/callbacks_spec.rb +70 -0
- metadata +7 -4
data/Gemfile
CHANGED
@@ -0,0 +1,17 @@
|
|
1
|
+
module MotionResource
|
2
|
+
class Base
|
3
|
+
include MotionSupport::Callbacks
|
4
|
+
|
5
|
+
define_callbacks :create, :save, :update, :destroy
|
6
|
+
|
7
|
+
[:create, :save, :update, :destroy].each do |callback|
|
8
|
+
define_singleton_method "before_#{callback}" do |*filters, &blk|
|
9
|
+
set_callback(callback, :before, *filters, &blk)
|
10
|
+
end
|
11
|
+
|
12
|
+
define_singleton_method "after_#{callback}" do |*filters, &blk|
|
13
|
+
set_callback(callback, :after, *filters, &blk)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/motion-resource/crud.rb
CHANGED
@@ -1,26 +1,40 @@
|
|
1
1
|
module MotionResource
|
2
2
|
class Base
|
3
3
|
def save(&block)
|
4
|
-
|
4
|
+
run_callbacks :save do
|
5
|
+
@new_record ? create(&block) : update(&block)
|
6
|
+
end
|
5
7
|
end
|
6
8
|
|
7
9
|
def update(&block)
|
8
|
-
|
9
|
-
self.class.
|
10
|
+
run_callbacks :update do
|
11
|
+
self.class.put(member_url, :payload => { self.class.name.underscore => attributes }) do |response, json|
|
12
|
+
self.class.request_block_call(block, json.blank? ? self : self.class.instantiate(json), response) if block
|
13
|
+
end
|
10
14
|
end
|
11
15
|
end
|
12
16
|
|
13
17
|
def create(&block)
|
14
18
|
# weird heisenbug: Specs crash without that line :(
|
15
19
|
dummy = self
|
16
|
-
|
17
|
-
self.class.
|
20
|
+
run_callbacks :create do
|
21
|
+
self.class.post(collection_url, :payload => { self.class.name.underscore => attributes }) do |response, json|
|
22
|
+
self.class.request_block_call(block, json.blank? ? self : self.class.instantiate(json), response) if block
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.create(attributes = {}, &block)
|
28
|
+
new(attributes).tap do |model|
|
29
|
+
model.create(&block)
|
18
30
|
end
|
19
31
|
end
|
20
32
|
|
21
33
|
def destroy(&block)
|
22
|
-
|
23
|
-
self.class.
|
34
|
+
run_callbacks :destroy do
|
35
|
+
self.class.delete(member_url) do |response, json|
|
36
|
+
self.class.request_block_call(block, json.blank? ? nil : self.class.instantiate(json), response) if block
|
37
|
+
end
|
24
38
|
end
|
25
39
|
end
|
26
40
|
|
@@ -48,10 +48,11 @@ module MotionResource
|
|
48
48
|
if self.default_url_options
|
49
49
|
options.merge!(self.default_url_options)
|
50
50
|
end
|
51
|
-
logger.log "#{method.upcase} #{url}"
|
52
51
|
|
53
52
|
url.insert_extension!(self.extension)
|
54
53
|
|
54
|
+
logger.log "#{method.upcase} #{url}"
|
55
|
+
|
55
56
|
BubbleWrap::HTTP.send(method, url, options) do |response|
|
56
57
|
if response.ok?
|
57
58
|
body = response.body.to_str.strip rescue nil
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module CallbackSpec
|
2
|
+
class Model < MotionResource::Base
|
3
|
+
self.member_url = 'models/:id'
|
4
|
+
self.collection_url = 'models'
|
5
|
+
|
6
|
+
before_create { |m| m.history << "before_create" }
|
7
|
+
after_create { |m| m.history << "after_create" }
|
8
|
+
before_save { |m| m.history << "before_save" }
|
9
|
+
after_save { |m| m.history << "after_save" }
|
10
|
+
before_update { |m| m.history << "before_update" }
|
11
|
+
after_update { |m| m.history << "after_update" }
|
12
|
+
before_destroy { |m| m.history << "before_destroy" }
|
13
|
+
after_destroy { |m| m.history << "after_destroy" }
|
14
|
+
|
15
|
+
def history
|
16
|
+
@history ||= []
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "base" do
|
22
|
+
extend WebStub::SpecHelpers
|
23
|
+
extend MotionResource::SpecHelpers
|
24
|
+
|
25
|
+
describe "callbacks" do
|
26
|
+
it "should run create callbacks" do
|
27
|
+
stub_request(:post, "http://example.com/models.json").to_return(json: {})
|
28
|
+
@model = CallbackSpec::Model.create { |obj| resume }
|
29
|
+
wait_max 1.0 do
|
30
|
+
@model.history.should == ['before_create', 'after_create']
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should run create and save callbacks on first save" do
|
35
|
+
stub_request(:post, "http://example.com/models.json").to_return(json: {})
|
36
|
+
@model = CallbackSpec::Model.new
|
37
|
+
@model.save { |obj| resume }
|
38
|
+
wait_max 1.0 do
|
39
|
+
@model.history.should == ['before_save', 'before_create', 'after_create', 'after_save']
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should run update and save callbacks on subsequent save" do
|
44
|
+
stub_request(:put, "http://example.com/models/10.json").to_return(json: {})
|
45
|
+
@model = CallbackSpec::Model.instantiate(:id => 10)
|
46
|
+
@model.save { |obj| resume }
|
47
|
+
wait_max 1.0 do
|
48
|
+
@model.history.should == ['before_save', 'before_update', 'after_update', 'after_save']
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should run update callbacks" do
|
53
|
+
stub_request(:put, "http://example.com/models/10.json").to_return(json: {})
|
54
|
+
@model = CallbackSpec::Model.instantiate(:id => 10)
|
55
|
+
@model.update { |obj| resume }
|
56
|
+
wait_max 1.0 do
|
57
|
+
@model.history.should == ['before_update', 'after_update']
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should run destroy callbacks" do
|
62
|
+
stub_request(:delete, "http://example.com/models/10.json").to_return(json: {})
|
63
|
+
@model = CallbackSpec::Model.instantiate(:id => 10)
|
64
|
+
@model.destroy { |obj| resume }
|
65
|
+
wait_max 1.0 do
|
66
|
+
@model.history.should == ['before_destroy', 'after_destroy']
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: motion-resource
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-05-
|
12
|
+
date: 2013-05-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bubble-wrap
|
@@ -84,6 +84,7 @@ files:
|
|
84
84
|
- lib/motion-resource/associations.rb
|
85
85
|
- lib/motion-resource/attributes.rb
|
86
86
|
- lib/motion-resource/base.rb
|
87
|
+
- lib/motion-resource/callbacks.rb
|
87
88
|
- lib/motion-resource/crud.rb
|
88
89
|
- lib/motion-resource/find.rb
|
89
90
|
- lib/motion-resource/logger.rb
|
@@ -100,6 +101,7 @@ files:
|
|
100
101
|
- spec/motion-resource/associations/scope_spec.rb
|
101
102
|
- spec/motion-resource/attributes_spec.rb
|
102
103
|
- spec/motion-resource/base_spec.rb
|
104
|
+
- spec/motion-resource/callbacks_spec.rb
|
103
105
|
- spec/motion-resource/crud_spec.rb
|
104
106
|
- spec/motion-resource/find_spec.rb
|
105
107
|
- spec/motion-resource/requests_spec.rb
|
@@ -119,7 +121,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
119
121
|
version: '0'
|
120
122
|
segments:
|
121
123
|
- 0
|
122
|
-
hash:
|
124
|
+
hash: 4144364702470032416
|
123
125
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
126
|
none: false
|
125
127
|
requirements:
|
@@ -128,7 +130,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
128
130
|
version: '0'
|
129
131
|
segments:
|
130
132
|
- 0
|
131
|
-
hash:
|
133
|
+
hash: 4144364702470032416
|
132
134
|
requirements: []
|
133
135
|
rubyforge_project:
|
134
136
|
rubygems_version: 1.8.25
|
@@ -143,6 +145,7 @@ test_files:
|
|
143
145
|
- spec/motion-resource/associations/scope_spec.rb
|
144
146
|
- spec/motion-resource/attributes_spec.rb
|
145
147
|
- spec/motion-resource/base_spec.rb
|
148
|
+
- spec/motion-resource/callbacks_spec.rb
|
146
149
|
- spec/motion-resource/crud_spec.rb
|
147
150
|
- spec/motion-resource/find_spec.rb
|
148
151
|
- spec/motion-resource/requests_spec.rb
|