toast 0.5.0 → 0.5.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/lib/toast/association.rb +9 -9
- data/lib/toast/{root_collection.rb → collection.rb} +13 -13
- data/lib/toast/engine.rb +1 -1
- data/lib/toast/record.rb +17 -17
- data/lib/toast/resource.rb +3 -3
- metadata +4 -4
data/lib/toast/association.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module Toast
|
2
2
|
class Association < Resource
|
3
|
-
|
3
|
+
|
4
4
|
attr_reader :model
|
5
5
|
|
6
6
|
def initialize model, id, subresource_name, format
|
@@ -16,13 +16,13 @@ module Toast
|
|
16
16
|
|
17
17
|
@associate_model = Resource.get_class_by_resource_name subresource_name
|
18
18
|
@associate_model.uri_base = @model.uri_base
|
19
|
-
|
19
|
+
|
20
20
|
end
|
21
21
|
|
22
22
|
def get
|
23
23
|
result = @record.send(@assoc)
|
24
24
|
|
25
|
-
if result.is_a? Array
|
25
|
+
if result.is_a? Array
|
26
26
|
{
|
27
27
|
:json => result.map{|r|
|
28
28
|
r.exposed_attributes(:in_collection => true).
|
@@ -41,7 +41,7 @@ module Toast
|
|
41
41
|
end
|
42
42
|
|
43
43
|
def put payload
|
44
|
-
raise MethodNotAllowed
|
44
|
+
raise MethodNotAllowed
|
45
45
|
end
|
46
46
|
|
47
47
|
def post payload
|
@@ -51,7 +51,7 @@ module Toast
|
|
51
51
|
raise UnsupportedMediaType
|
52
52
|
end
|
53
53
|
|
54
|
-
begin
|
54
|
+
begin
|
55
55
|
payload = ActiveSupport::JSON.decode(payload)
|
56
56
|
rescue
|
57
57
|
raise PayloadFormatError
|
@@ -59,7 +59,7 @@ module Toast
|
|
59
59
|
|
60
60
|
unless payload.is_a? Hash
|
61
61
|
raise PayloadFormatError
|
62
|
-
end
|
62
|
+
end
|
63
63
|
|
64
64
|
|
65
65
|
# silently ignore all exposed readable, but not writable fields
|
@@ -67,16 +67,16 @@ module Toast
|
|
67
67
|
payload.delete(rof)
|
68
68
|
end
|
69
69
|
|
70
|
-
|
70
|
+
|
71
71
|
begin
|
72
72
|
record = @record.send(@assoc).create! payload
|
73
|
-
|
73
|
+
|
74
74
|
{
|
75
75
|
:json => record.exposed_attributes.merge( uri_fields(record) ),
|
76
76
|
:location => self.base_uri + record.uri_fullpath,
|
77
77
|
:status => :created
|
78
78
|
}
|
79
|
-
|
79
|
+
|
80
80
|
rescue ActiveRecord::RecordInvalid => e
|
81
81
|
# model validation failed
|
82
82
|
raise PayloadInvalid.new(e.message)
|
@@ -1,12 +1,12 @@
|
|
1
1
|
module Toast
|
2
|
-
class
|
3
|
-
|
2
|
+
class Collection < Resource
|
3
|
+
|
4
4
|
attr_reader :model
|
5
|
-
|
5
|
+
|
6
6
|
def initialize model, subresource_name, params
|
7
|
-
|
7
|
+
|
8
8
|
subresource_name ||= "all"
|
9
|
-
|
9
|
+
|
10
10
|
unless model.toast_config.collections.include? subresource_name
|
11
11
|
raise ResourceNotFound
|
12
12
|
end
|
@@ -18,8 +18,8 @@ module Toast
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def get
|
21
|
-
|
22
|
-
records = if @model.toast_config.pass_params_to.include?(@collection)
|
21
|
+
|
22
|
+
records = if @model.toast_config.pass_params_to.include?(@collection)
|
23
23
|
@model.send(@collection, @params)
|
24
24
|
else
|
25
25
|
@model.send(@collection)
|
@@ -29,9 +29,9 @@ module Toast
|
|
29
29
|
when "html"
|
30
30
|
{
|
31
31
|
:template => "resources/#{model.to_s.pluralize.underscore}",
|
32
|
-
:locals => { model.to_s.pluralize.underscore.to_sym => records }
|
32
|
+
:locals => { model.to_s.pluralize.underscore.to_sym => records }
|
33
33
|
}
|
34
|
-
when "json"
|
34
|
+
when "json"
|
35
35
|
{
|
36
36
|
:json => records.map{|r|
|
37
37
|
r.exposed_attributes(:in_collection => true).
|
@@ -59,7 +59,7 @@ module Toast
|
|
59
59
|
raise UnsupportedMediaType
|
60
60
|
end
|
61
61
|
|
62
|
-
begin
|
62
|
+
begin
|
63
63
|
payload = ActiveSupport::JSON.decode(payload)
|
64
64
|
rescue
|
65
65
|
raise PayloadFormatError
|
@@ -72,16 +72,16 @@ module Toast
|
|
72
72
|
(@model.toast_config.readables - @model.toast_config.writables + ["uri"]).each do |rof|
|
73
73
|
payload.delete(rof)
|
74
74
|
end
|
75
|
-
|
75
|
+
|
76
76
|
begin
|
77
|
-
record = @model.create! payload
|
77
|
+
record = @model.create! payload
|
78
78
|
|
79
79
|
{
|
80
80
|
:json => record.exposed_attributes.merge( uri_fields(record) ),
|
81
81
|
:location => self.base_uri + record.uri_fullpath,
|
82
82
|
:status => :created
|
83
83
|
}
|
84
|
-
|
84
|
+
|
85
85
|
rescue ActiveRecord::RecordInvalid => e
|
86
86
|
# model validation failed
|
87
87
|
raise PayloadInvalid.new(e.message)
|
data/lib/toast/engine.rb
CHANGED
data/lib/toast/record.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
module Toast
|
2
2
|
class Record < Resource
|
3
3
|
|
4
|
-
attr_reader :model
|
5
|
-
|
4
|
+
attr_reader :model
|
5
|
+
|
6
6
|
def initialize model, id, format
|
7
|
-
@model = model
|
7
|
+
@model = model
|
8
8
|
@record = model.find(id) rescue raise(ResourceNotFound.new)
|
9
9
|
@format = format
|
10
10
|
end
|
@@ -16,18 +16,18 @@ module Toast
|
|
16
16
|
# get, put, delete, post return a Hash that can be used as
|
17
17
|
# argument for ActionController#render
|
18
18
|
|
19
|
-
def put payload
|
20
|
-
|
19
|
+
def put payload
|
20
|
+
|
21
21
|
if self.media_type != @model.toast_config.media_type
|
22
22
|
raise UnsupportedMediaType
|
23
23
|
end
|
24
24
|
|
25
|
-
begin
|
25
|
+
begin
|
26
26
|
payload = ActiveSupport::JSON.decode(payload)
|
27
27
|
rescue
|
28
28
|
raise PayloadFormatError
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
unless payload.is_a? Hash
|
32
32
|
raise PayloadFormatError
|
33
33
|
end
|
@@ -37,14 +37,14 @@ module Toast
|
|
37
37
|
payload.delete(rof)
|
38
38
|
end
|
39
39
|
|
40
|
-
# set the virtual attributes
|
40
|
+
# set the virtual attributes
|
41
41
|
(payload.keys.to_set - @record.attribute_names.to_set).each do |vattr|
|
42
|
-
@record.send("#{vattr}=", payload.delete(vattr))
|
43
|
-
end
|
44
|
-
|
45
|
-
# mass-update for the rest
|
42
|
+
@record.send("#{vattr}=", payload.delete(vattr))
|
43
|
+
end
|
44
|
+
|
45
|
+
# mass-update for the rest
|
46
46
|
@record.update_attributes payload
|
47
|
-
{
|
47
|
+
{
|
48
48
|
:json => @record.exposed_attributes.merge( uri_fields(@record) ),
|
49
49
|
:status => :ok,
|
50
50
|
:location => self.base_uri + @record.uri_fullpath
|
@@ -58,12 +58,12 @@ module Toast
|
|
58
58
|
:template => "resources/#{model.to_s.underscore}",
|
59
59
|
:locals => { model.to_s.underscore.to_sym => @record } # full record, view should filter
|
60
60
|
}
|
61
|
-
when "json"
|
61
|
+
when "json"
|
62
62
|
{
|
63
|
-
:json => @record.exposed_attributes.merge( uri_fields(@record) ),
|
63
|
+
:json => @record.exposed_attributes.merge( uri_fields(@record) ),
|
64
64
|
:status => :ok
|
65
65
|
}
|
66
|
-
else
|
66
|
+
else
|
67
67
|
raise ResourceNotFound
|
68
68
|
end
|
69
69
|
end
|
@@ -77,6 +77,6 @@ module Toast
|
|
77
77
|
:status => :ok
|
78
78
|
}
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
end
|
82
82
|
end
|
data/lib/toast/resource.rb
CHANGED
@@ -7,7 +7,7 @@ module Toast
|
|
7
7
|
class UnsupportedMediaType < Exception; end
|
8
8
|
|
9
9
|
# Represents a resource. There are following resource types as sub classes:
|
10
|
-
# Record,
|
10
|
+
# Record, Collection, Association, Single
|
11
11
|
class Resource
|
12
12
|
|
13
13
|
attr_accessor :media_type, :base_uri
|
@@ -30,7 +30,7 @@ module Toast
|
|
30
30
|
rsc = if id.nil? and model.toast_config.singles.include?(subresource_name)
|
31
31
|
Toast::Single.new(model, subresource_name, params.clone)
|
32
32
|
elsif id.nil?
|
33
|
-
Toast::
|
33
|
+
Toast::Collection.new(model, subresource_name, params.clone)
|
34
34
|
elsif subresource_name.nil?
|
35
35
|
Toast::Record.new(model, id, format)
|
36
36
|
elsif model.toast_config.exposed_associations.include? subresource_name
|
@@ -40,7 +40,7 @@ module Toast
|
|
40
40
|
end
|
41
41
|
|
42
42
|
rsc.media_type = request.media_type
|
43
|
-
rsc.base_uri = request.base_url
|
43
|
+
rsc.base_uri = request.base_url + request.script_name
|
44
44
|
|
45
45
|
rsc
|
46
46
|
rescue NameError
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 5
|
8
|
-
-
|
9
|
-
version: 0.5.
|
8
|
+
- 2
|
9
|
+
version: 0.5.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Robert Annies
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2012-03-
|
17
|
+
date: 2012-03-21 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -48,11 +48,11 @@ files:
|
|
48
48
|
- lib/toast.rb
|
49
49
|
- lib/toast/active_record_extensions.rb
|
50
50
|
- lib/toast/association.rb
|
51
|
+
- lib/toast/collection.rb
|
51
52
|
- lib/toast/config_dsl.rb
|
52
53
|
- lib/toast/engine.rb
|
53
54
|
- lib/toast/record.rb
|
54
55
|
- lib/toast/resource.rb
|
55
|
-
- lib/toast/root_collection.rb
|
56
56
|
- lib/toast/single.rb
|
57
57
|
- README.md
|
58
58
|
has_rdoc: true
|