toast 0.7.1 → 0.7.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.
@@ -17,6 +17,7 @@ class ToastController < ApplicationController
17
17
  return head(:not_found)
18
18
 
19
19
  rescue Toast::PayloadInvalid => e
20
+ raise e if Rails.env == "test"
20
21
  return render :text => e.message, :status => :forbidden
21
22
 
22
23
  rescue Toast::PayloadFormatError => e
@@ -28,16 +28,16 @@ module Toast
28
28
  unless @model_or_relation.respond_to?(@collection)
29
29
  raise "Toast Error: Cannot find class method '#{@collection}' of model '#{@model_or_relation}', which is configured in 'acts_as_resource > collections'."
30
30
  end
31
-
31
+
32
32
  # FIXME: This is a lot of hallooballoo to check if the #send
33
33
  # will be successful, but if it's not checked the error
34
34
  # message is not helpful to find the error.
35
35
 
36
- records = if @config_out.pass_params_to.include?(@collection)
37
- if @target_model.method(@collection).arity != 1
36
+ records = if @config_out.pass_params_to.include?(@collection)
37
+ if @target_model.method(@collection).arity**2 != 1
38
38
  raise "Toast Error: Class method '#{@collection}' of model '#{@target_model}' must accept one parameter, as configured by 'acts_as_resource > pass_params_to'."
39
39
  end
40
- # fetch results
40
+ # fetch results
41
41
  @model_or_relation.send(@collection, @params)
42
42
 
43
43
  else
@@ -78,14 +78,11 @@ module Toast
78
78
  def post payload, media_type
79
79
  raise MethodNotAllowed unless @config_in.postable?
80
80
 
81
+
81
82
  if media_type != @config_in.media_type
82
83
  raise UnsupportedMediaType
83
84
  end
84
85
 
85
- if @collection != "all"
86
- raise MethodNotAllowed
87
- end
88
-
89
86
  begin
90
87
  payload = ActiveSupport::JSON.decode(payload)
91
88
  rescue
@@ -100,8 +97,18 @@ module Toast
100
97
  payload.delete(rof)
101
98
  end
102
99
 
100
+
103
101
  begin
104
- record = @model_or_relation.create! payload
102
+
103
+ if @collection != "all"
104
+ # post on scope?
105
+ record = @model_or_relation.create! payload do |obj|
106
+ hook = @config_in.before_scoped_create[@collection]
107
+ obj.send(hook) if hook
108
+ end
109
+ else
110
+ record = @model_or_relation.create! payload
111
+ end
105
112
 
106
113
  {
107
114
  :json => record.represent( @config_out.exposed_attributes,
@@ -14,6 +14,7 @@ module Toast
14
14
  @deletable = false
15
15
  @postable = false
16
16
  @pass_params_to = []
17
+ @before_scoped_create = {}
17
18
  @in_collection = ConfigDSL::InCollection.new model, self
18
19
  @media_type = "application/json"
19
20
 
@@ -76,6 +77,17 @@ module Toast
76
77
  self.pass_params_to = arg
77
78
  end
78
79
 
80
+ def before_scoped_create= arg
81
+ for key in arg.keys
82
+ @before_scoped_create[key.to_s] = arg[key].to_sym
83
+ end
84
+ end
85
+
86
+ def before_scoped_create arg={}
87
+ return(@before_scoped_create) if arg.empty?
88
+ self.before_scoped_create = arg
89
+ end
90
+
79
91
  def collections= collections=[]
80
92
  @collections = ConfigDSL.sanitize(collections, "collections")
81
93
  end
data/lib/toast/record.rb CHANGED
@@ -86,11 +86,18 @@ module Toast
86
86
  def delete
87
87
  raise MethodNotAllowed unless @config_out.deletable?
88
88
 
89
- @record.destroy
90
- {
91
- :nothing => true,
92
- :status => :ok
93
- }
89
+ if @record.destroy
90
+ {
91
+ :nothing => true,
92
+ :status => :ok
93
+ }
94
+ else
95
+ {
96
+ :nothing => true,
97
+ :status => :conflict
98
+ }
99
+ end
100
+
94
101
  end
95
102
 
96
103
  def link l
data/lib/toast/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Toast
2
- VERSION = '0.7.1'
2
+ VERSION = '0.7.2'
3
3
  end
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toast
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
4
+ hash: 7
5
+ prerelease:
5
6
  segments:
6
7
  - 0
7
8
  - 7
8
- - 1
9
- version: 0.7.1
9
+ - 2
10
+ version: 0.7.2
10
11
  platform: ruby
11
12
  authors:
12
13
  - "robokopp (Robert Anni\xC3\xA9s)"
@@ -14,16 +15,17 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2012-07-13 00:00:00 +02:00
18
- default_executable:
18
+ date: 2012-07-19 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: shoulda
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
24
25
  requirements:
25
26
  - - ">="
26
27
  - !ruby/object:Gem::Version
28
+ hash: 3
27
29
  segments:
28
30
  - 0
29
31
  version: "0"
@@ -33,9 +35,11 @@ dependencies:
33
35
  name: rails
34
36
  prerelease: false
35
37
  requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
36
39
  requirements:
37
40
  - - ">="
38
41
  - !ruby/object:Gem::Version
42
+ hash: 3
39
43
  segments:
40
44
  - 3
41
45
  - 1
@@ -47,9 +51,11 @@ dependencies:
47
51
  name: blockenspiel
48
52
  prerelease: false
49
53
  requirement: &id003 !ruby/object:Gem::Requirement
54
+ none: false
50
55
  requirements:
51
56
  - - ~>
52
57
  - !ruby/object:Gem::Version
58
+ hash: 11
53
59
  segments:
54
60
  - 0
55
61
  - 4
@@ -61,9 +67,11 @@ dependencies:
61
67
  name: rack-accept-media-types
62
68
  prerelease: false
63
69
  requirement: &id004 !ruby/object:Gem::Requirement
70
+ none: false
64
71
  requirements:
65
72
  - - ~>
66
73
  - !ruby/object:Gem::Version
74
+ hash: 25
67
75
  segments:
68
76
  - 0
69
77
  - 9
@@ -74,9 +82,11 @@ dependencies:
74
82
  name: ffaker
75
83
  prerelease: false
76
84
  requirement: &id005 !ruby/object:Gem::Requirement
85
+ none: false
77
86
  requirements:
78
87
  - - ">="
79
88
  - !ruby/object:Gem::Version
89
+ hash: 3
80
90
  segments:
81
91
  - 0
82
92
  version: "0"
@@ -108,7 +118,6 @@ files:
108
118
  - lib/toast/single.rb
109
119
  - lib/toast/scoped_association.rb
110
120
  - README.md
111
- has_rdoc: true
112
121
  homepage: https://github.com/robokopp/toast
113
122
  licenses: []
114
123
 
@@ -118,23 +127,27 @@ rdoc_options: []
118
127
  require_paths:
119
128
  - lib
120
129
  required_ruby_version: !ruby/object:Gem::Requirement
130
+ none: false
121
131
  requirements:
122
132
  - - ">="
123
133
  - !ruby/object:Gem::Version
134
+ hash: 3
124
135
  segments:
125
136
  - 0
126
137
  version: "0"
127
138
  required_rubygems_version: !ruby/object:Gem::Requirement
139
+ none: false
128
140
  requirements:
129
141
  - - ">="
130
142
  - !ruby/object:Gem::Version
143
+ hash: 3
131
144
  segments:
132
145
  - 0
133
146
  version: "0"
134
147
  requirements: []
135
148
 
136
149
  rubyforge_project:
137
- rubygems_version: 1.3.6
150
+ rubygems_version: 1.8.24
138
151
  signing_key:
139
152
  specification_version: 3
140
153
  summary: Toast adds a RESTful interface to ActiveRecord models in Ruby on Rails.