toast 0.8.1 → 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -2,7 +2,7 @@ Summary
2
2
  =======
3
3
 
4
4
  Toast is an extension to Ruby on Rails to build web services with low
5
- programming effort in a coherent way. Toast exends ActiveRecord such
5
+ programming effort in a coherent way. Toast extends ActiveRecord such
6
6
  that each model can be declared to be a web resource, exposing defined
7
7
  attributes for reading and writing using HTTP.
8
8
 
@@ -11,14 +11,16 @@ Its main features are:
11
11
  * declaration of web resources based on ActiveRecord models
12
12
  * generic controller handles all actions
13
13
  * automated routing
14
- * exposing data values with JSON maps
14
+ * exposing data values with JSON maps
15
15
  * exposing associations by links (URLs)
16
16
 
17
- Toast works with
17
+ Toast works with
18
18
 
19
- * Ruby on Rails >= 3.1.0 (currently tested up to 3.2.6)
19
+ * Ruby on Rails >= 3.1.0 (currently tested up to 3.2.8)
20
20
  * Ruby 1.8.7 and 1.9.3
21
21
 
22
+ See the [User Manual](https://github.com/robokopp/toast/wiki/User-Manual) for a detailed description.
23
+
22
24
  WARNING
23
25
  =======
24
26
 
@@ -28,7 +30,7 @@ enabled serving the annotated model's data records.
28
30
 
29
31
  Version 1.0.0 of Toast is planned to be a production-ready implementation,
30
32
  which will be finished within 2012. Until then API/DSL changes must
31
- be expected with each minor update.
33
+ be expected with each minor update.
32
34
 
33
35
  Example
34
36
  =======
@@ -47,14 +49,14 @@ and let a corresponding model class have a *acts_as_resource* annotation:
47
49
  class Banana < ActiveRecord::Base
48
50
  belongs_to :apple
49
51
  has_many :coconuts
50
-
52
+
51
53
  scope :less_than_100, where("number < 100")
52
54
 
53
55
  acts_as_resource do
54
56
  # exposed attributes or association names
55
57
  readables :coconuts, :apple
56
- writables :name, :number
57
-
58
+ writables :name, :number
59
+
58
60
  # exposed class methods of Banana returning an Array of Banana records
59
61
  collections :less_than_100, :all
60
62
  end
@@ -130,7 +132,7 @@ With bundler from (rubygems.org)
130
132
 
131
133
  the latest Git:
132
134
 
133
- gem "toast", :git => "https://github.com/robokopp/toast.git"
135
+ gem "toast", :git => "https://github.com/robokopp/toast.git"
134
136
 
135
137
  Remarks
136
138
  =======
@@ -48,8 +48,8 @@ module Toast
48
48
  props = {}
49
49
 
50
50
  attr_names.each do |name|
51
- unless self.respond_to?(name) && self.method(name).arity == 0
52
- raise "Toast Error: Connot find instance method '#{self.class}##{name}' of arity 0"
51
+ unless self.respond_to?(name)
52
+ raise "Toast Error: Connot find instance method '#{self.class}##{name}'"
53
53
  end
54
54
  props[name] = self.send(name)
55
55
  end
@@ -88,8 +88,16 @@ module Toast
88
88
  end
89
89
 
90
90
  begin
91
- record = @record.send(@assoc).create! payload
91
+ reflection = @model.reflect_on_association(@assoc.to_sym)
92
92
 
93
+ if(@config.pass_params_to.include?(@assoc) and
94
+ reflection.options[:extend] and
95
+ reflection.options[:extend].detect{|e| e.method_defined? :create!})
96
+
97
+ record = @record.send(@assoc).create! payload, @params
98
+ else
99
+ record = @record.send(@assoc).create! payload
100
+ end
93
101
  {
94
102
  :json => record.represent( @associate_config_out.exposed_attributes,
95
103
  @associate_config_out.exposed_associations,
@@ -116,9 +124,18 @@ module Toast
116
124
  link_model = Resource.get_class_by_resource_name(link_resource_name)
117
125
  link_record = link_model.find(link_id)
118
126
 
119
- if @model.reflect_on_association(@assoc.to_sym).collection?
127
+ reflection = @model.reflect_on_association(@assoc.to_sym)
128
+
129
+ if(reflection.collection? )
120
130
  # has_many, hbtm
121
- @record.send(@assoc) << link_record
131
+ if( @config.pass_params_to.include?(@assoc) and
132
+ reflection.options[:extend] and
133
+ reflection.options[:extend].detect{|e| e.method_defined? :<<})
134
+
135
+ @record.send(@assoc).<<(link_record,@params)
136
+ else
137
+ @record.send(@assoc) << link_record
138
+ end
122
139
  else
123
140
  # has_one, belongs_to
124
141
  @record.send(@assoc+"=",link_record)
@@ -1,3 +1,3 @@
1
1
  module Toast
2
- VERSION = '0.8.1'
2
+ VERSION = '0.8.2'
3
3
  end
metadata CHANGED
@@ -1,95 +1,72 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: toast
3
- version: !ruby/object:Gem::Version
4
- hash: 61
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.2
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 8
9
- - 1
10
- version: 0.8.1
11
6
  platform: ruby
12
- authors:
13
- - "robokopp (Robert Anni\xC3\xA9s)"
7
+ authors:
8
+ - robokopp (Robert Anniés)
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-08-21 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-08-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: rails
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70309039444400 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 3
29
- segments:
30
- - 3
31
- - 1
32
- - 0
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
33
21
  version: 3.1.0
34
22
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: blockenspiel
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70309039444400
25
+ - !ruby/object:Gem::Dependency
26
+ name: blockenspiel
27
+ requirement: &70309039443900 !ruby/object:Gem::Requirement
40
28
  none: false
41
- requirements:
29
+ requirements:
42
30
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 11
45
- segments:
46
- - 0
47
- - 4
48
- - 2
31
+ - !ruby/object:Gem::Version
49
32
  version: 0.4.2
50
33
  type: :runtime
51
- version_requirements: *id002
52
- - !ruby/object:Gem::Dependency
53
- name: rack-accept-media-types
54
34
  prerelease: false
55
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *70309039443900
36
+ - !ruby/object:Gem::Dependency
37
+ name: rack-accept-media-types
38
+ requirement: &70309039443440 !ruby/object:Gem::Requirement
56
39
  none: false
57
- requirements:
40
+ requirements:
58
41
  - - ~>
59
- - !ruby/object:Gem::Version
60
- hash: 25
61
- segments:
62
- - 0
63
- - 9
64
- version: "0.9"
42
+ - !ruby/object:Gem::Version
43
+ version: '0.9'
65
44
  type: :runtime
66
- version_requirements: *id003
67
- - !ruby/object:Gem::Dependency
68
- name: ffaker
69
45
  prerelease: false
70
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *70309039443440
47
+ - !ruby/object:Gem::Dependency
48
+ name: ffaker
49
+ requirement: &70309039443060 !ruby/object:Gem::Requirement
71
50
  none: false
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- hash: 3
76
- segments:
77
- - 0
78
- version: "0"
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
79
55
  type: :runtime
80
- version_requirements: *id004
81
- description: |-
82
- Toast is an extension to Ruby on Rails that lets you expose any
83
- ActiveRecord model as a resource according to the REST paradigm via a generic controller. The default
84
- representation format is JSON or can be anything
56
+ prerelease: false
57
+ version_requirements: *70309039443060
58
+ description: ! 'Toast is an extension to Ruby on Rails that lets you expose any
59
+
60
+ ActiveRecord model as a resource according to the REST paradigm via a generic controller.
61
+ The default
62
+
63
+ representation format is JSON or can be anything'
85
64
  email: robokopp@fernwerk.net
86
65
  executables: []
87
-
88
66
  extensions: []
89
-
90
- extra_rdoc_files:
67
+ extra_rdoc_files:
91
68
  - README.md
92
- files:
69
+ files:
93
70
  - app/controller/toast_controller.rb
94
71
  - config/routes.rb
95
72
  - lib/toast.rb
@@ -105,36 +82,26 @@ files:
105
82
  - README.md
106
83
  homepage: https://github.com/robokopp/toast
107
84
  licenses: []
108
-
109
85
  post_install_message:
110
86
  rdoc_options: []
111
-
112
- require_paths:
87
+ require_paths:
113
88
  - lib
114
- required_ruby_version: !ruby/object:Gem::Requirement
89
+ required_ruby_version: !ruby/object:Gem::Requirement
115
90
  none: false
116
- requirements:
117
- - - ">="
118
- - !ruby/object:Gem::Version
119
- hash: 3
120
- segments:
121
- - 0
122
- version: "0"
123
- required_rubygems_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
96
  none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- hash: 3
129
- segments:
130
- - 0
131
- version: "0"
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
132
101
  requirements: []
133
-
134
102
  rubyforge_project:
135
- rubygems_version: 1.8.24
103
+ rubygems_version: 1.8.17
136
104
  signing_key:
137
105
  specification_version: 3
138
106
  summary: Toast adds a RESTful interface to ActiveRecord models in Ruby on Rails.
139
107
  test_files: []
140
-