toast 0.8.11 → 0.8.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cf0454352fbfd4570f9e2cca9b22b5a5af6a6b33
4
+ data.tar.gz: 1d65521194dce398e9f7de27f5f1f80f4596e748
5
+ SHA512:
6
+ metadata.gz: 4cd09d5aa85eb63cbe58161704b1ef5c5931f85820451e543619b81428d06be48919a190d0ad2076f0ec2ae4b84546941d5e3711459ada3d104175808ebd2a3e
7
+ data.tar.gz: 3e1e2ead0049b65abe1998431af105ee4e09a26f2c64dc45cb5c9850970d50d99243bc79742ed5b19510a95d9032a747e396e744a0f1077fad34219877d565a3
data/README.md CHANGED
@@ -1,3 +1,5 @@
1
+ [![Gem Version](https://badge.fury.io/rb/toast.png)](http://badge.fury.io/rb/toast)
2
+
1
3
  Summary
2
4
  =======
3
5
 
@@ -16,8 +18,8 @@ Its main features are:
16
18
 
17
19
  Toast works with
18
20
 
19
- * Ruby on Rails >= 3.1.0 (currently tested up to 3.2.11)
20
- * Ruby 1.8.7 and 1.9.3
21
+ * Ruby on Rails >= 3.1.0 (currently tested up to 3.2.16)
22
+ * Ruby 1.8.7, 1.9.3, 2.0.0
21
23
 
22
24
  See the [User Manual](https://github.com/robokopp/toast/wiki/User-Manual) for a detailed description.
23
25
 
@@ -8,7 +8,6 @@ module Toast
8
8
  def acts_as_resource &block
9
9
 
10
10
  @toast_configs ||= Array.new
11
-
12
11
  @toast_configs << Toast::ConfigDSL::Base.new(self)
13
12
 
14
13
  Blockenspiel.invoke( block, @toast_configs.last)
@@ -30,6 +29,11 @@ module Toast
30
29
  tc.media_type == media_type || tc.in_collection.media_type == media_type
31
30
  end || @toast_configs.first
32
31
  end
32
+
33
+ def toast_resource_uri_prefix
34
+ @toast_resource_uri_prefix ||= self.to_s.pluralize.underscore
35
+ end
36
+
33
37
  end
34
38
 
35
39
  # add instance methods
@@ -37,7 +41,7 @@ module Toast
37
41
  # Return the path segment of the URI of this record
38
42
  def uri_path
39
43
  "/" +
40
- self.class.to_s.pluralize.underscore + "/" +
44
+ self.class.toast_resource_uri_prefix + "/" +
41
45
  self.id.to_s
42
46
  end
43
47
 
@@ -72,9 +76,10 @@ module Toast
72
76
  def resourceful_model_options
73
77
  nil
74
78
  end
75
- def resource_names
76
- @@all_resourceful_resource_names
77
- end
79
+ end
80
+
81
+ def self.resourceful_models
82
+ Module.constants.select{ |c| (eval c).respond_to?(:toast_config)}.sort.map{|c| c.constantize}
78
83
  end
79
84
 
80
85
  end
@@ -9,6 +9,7 @@ module Toast
9
9
  @model = model
10
10
  @readables = []
11
11
  @writables = []
12
+ @field_comments = {}
12
13
  @collections = []
13
14
  @singles = []
14
15
  @deletable = false
@@ -16,6 +17,7 @@ module Toast
16
17
  @pass_params_to = []
17
18
  @in_collection = ConfigDSL::InCollection.new model, self
18
19
  @media_type = "application/json"
20
+ @apidoc = {}
19
21
 
20
22
  @model.attr_accessible []
21
23
  end
@@ -31,7 +33,8 @@ module Toast
31
33
  end
32
34
 
33
35
  def readables= arg
34
- @readables.push *ConfigDSL.sanitize(arg,"readables")
36
+ @field_comments.merge! ConfigDSL.get_comments(arg, 'ro')
37
+ @readables.push *ConfigDSL.normalize(arg,"readables")
35
38
  end
36
39
 
37
40
  # args: Array or :all, :except => Array
@@ -42,7 +45,8 @@ module Toast
42
45
 
43
46
  def writables= arg
44
47
  @model.attr_accessible *arg
45
- @writables.push *ConfigDSL.sanitize(arg,"writables")
48
+ @field_comments.merge! ConfigDSL.get_comments(arg, 'rw')
49
+ @writables.push *ConfigDSL.normalize(arg,"writables")
46
50
  end
47
51
 
48
52
  # args: Array or :all, :except => Array
@@ -68,7 +72,7 @@ module Toast
68
72
  end
69
73
 
70
74
  def pass_params_to= arg
71
- @pass_params_to.push *ConfigDSL.sanitize(arg,"pass_params_to")
75
+ @pass_params_to.push *ConfigDSL.normalize(arg,"pass_params_to")
72
76
  end
73
77
 
74
78
  def pass_params_to *arg
@@ -77,7 +81,7 @@ module Toast
77
81
  end
78
82
 
79
83
  def collections= collections=[]
80
- @collections = ConfigDSL.sanitize(collections, "collections")
84
+ @collections = ConfigDSL.normalize(collections, "collections")
81
85
  end
82
86
 
83
87
  def collections *arg
@@ -86,7 +90,7 @@ module Toast
86
90
  end
87
91
 
88
92
  def singles= singles=[]
89
- @singles = ConfigDSL.sanitize(singles, "singles")
93
+ @singles = ConfigDSL.normalize(singles, "singles")
90
94
  end
91
95
 
92
96
  def singles *arg
@@ -102,8 +106,18 @@ module Toast
102
106
  end
103
107
  end
104
108
 
109
+ def apidoc arg=nil
110
+ return(@apidoc) if arg.nil?
111
+ raise "Toast Config Error (#{model.class}): apidoc argument must be a Hash." unless arg.is_a?(Hash)
112
+ @apidoc = arg
113
+ end
114
+
105
115
  # non DSL methods
106
116
  dsl_methods false
117
+
118
+ def field_comments
119
+ @field_comments
120
+ end
107
121
  end
108
122
 
109
123
  class InCollection
@@ -120,7 +134,7 @@ module Toast
120
134
 
121
135
  def readables= readables
122
136
  @writables = [] # forget inherited writables
123
- @readables = ConfigDSL.sanitize(readables,"readables")
137
+ @readables = ConfigDSL.normalize(readables,"readables")
124
138
  end
125
139
 
126
140
  def readables *arg
@@ -158,26 +172,51 @@ module Toast
158
172
  (@readables + @writables).uniq.select{|f| assocs.include?(f)}
159
173
  end
160
174
 
161
- end
162
-
175
+ end # class InCollection
163
176
 
164
177
  # Helper
165
178
 
166
179
  # checks if list is made of symbols and strings
167
180
  # converts a single value to an Array
168
181
  # converts all symbols to strings
169
- def self.sanitize list, name
182
+ def self.normalize list, name
183
+ # make single element list
184
+ list = [list] unless list.is_a? Array
185
+
186
+ # remove all comments
187
+ list = list.map{|x| x.is_a?(Array) ? x.first : x}
188
+
189
+ # flatten
170
190
  list = [list].flatten
171
191
 
192
+ # check class and stringify
172
193
  list.map do |x|
173
194
  if (!x.is_a?(Symbol) && !x.is_a?(String))
174
- raise "Toast Config Error: '#{name}' should be a list of Symbols or Strings"
195
+ raise "Toast Config Error: '#{name}' should be a list of Symbols"
175
196
  else
176
197
  x.to_s
177
198
  end
178
199
  end
179
200
  end
180
201
 
202
+ # fields (readables and writables) can have comments , if passed by Arrays of the form:
203
+ # [symbol, comment]
204
+ # returns a Hash of all commented or uncommented fields as:
205
+ # { FIELD_NAME => {:comment => COMMENT, :type => type } }
206
+ def self.get_comments arg, access
207
+ comments = {}
208
+
209
+ if arg.is_a? Array
210
+ arg.each do |f|
211
+ if f.is_a? Array
212
+ comments[ f.first.to_s ] = {:comment => f[1].to_s, :access => access, :type => f[2]}
213
+ else
214
+ comments[ f.to_s ] = {:comment => '[ no comment ]', :access => access, :type => nil}
215
+ end
216
+ end
217
+ end
181
218
 
219
+ comments
220
+ end
182
221
  end
183
222
  end
@@ -1,3 +1,3 @@
1
1
  module Toast
2
- VERSION = '0.8.11'
2
+ VERSION = '0.8.12'
3
3
  end
metadata CHANGED
@@ -1,87 +1,81 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: toast
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 8
8
- - 11
9
- version: 0.8.11
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.12
10
5
  platform: ruby
11
- authors:
12
- - "robokopp (Robert Anni\xC3\xA9s)"
6
+ authors:
7
+ - robokopp (Robert Anniés)
13
8
  autorequire:
14
9
  bindir: bin
15
10
  cert_chain: []
16
-
17
- date: 2013-09-17 00:00:00 +02:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
11
+ date: 2014-02-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
21
14
  name: rails
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- segments:
28
- - 3
29
- - 1
30
- - 0
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
31
19
  version: 3.1.0
32
20
  type: :runtime
33
- version_requirements: *id001
34
- - !ruby/object:Gem::Dependency
35
- name: blockenspiel
36
21
  prerelease: false
37
- requirement: &id002 !ruby/object:Gem::Requirement
38
- requirements:
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: 3.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: blockenspiel
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
39
31
  - - ~>
40
- - !ruby/object:Gem::Version
41
- segments:
42
- - 0
43
- - 4
44
- - 2
32
+ - !ruby/object:Gem::Version
45
33
  version: 0.4.2
46
34
  type: :runtime
47
- version_requirements: *id002
48
- - !ruby/object:Gem::Dependency
49
- name: rack-accept-media-types
50
35
  prerelease: false
51
- requirement: &id003 !ruby/object:Gem::Requirement
52
- requirements:
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
53
38
  - - ~>
54
- - !ruby/object:Gem::Version
55
- segments:
56
- - 0
57
- - 9
58
- version: "0.9"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.4.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: rack-accept-media-types
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
59
48
  type: :runtime
60
- version_requirements: *id003
61
- - !ruby/object:Gem::Dependency
62
- name: ffaker
63
49
  prerelease: false
64
- requirement: &id004 !ruby/object:Gem::Requirement
65
- requirements:
66
- - - ">="
67
- - !ruby/object:Gem::Version
68
- segments:
69
- - 0
70
- version: "0"
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.9'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ffaker
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
71
62
  type: :runtime
72
- version_requirements: *id004
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
73
69
  description: |-
74
70
  Toast is an extension to Ruby on Rails that lets you expose any
75
71
  ActiveRecord model as a resource according to the REST paradigm via a generic controller. The default
76
72
  representation format is JSON or can be anything
77
73
  email: robokopp@fernwerk.net
78
74
  executables: []
79
-
80
75
  extensions: []
81
-
82
- extra_rdoc_files:
76
+ extra_rdoc_files:
83
77
  - README.md
84
- files:
78
+ files:
85
79
  - app/controller/toast_controller.rb
86
80
  - config/routes.rb
87
81
  - lib/toast.rb
@@ -95,35 +89,27 @@ files:
95
89
  - lib/toast/resource.rb
96
90
  - lib/toast/single.rb
97
91
  - README.md
98
- has_rdoc: true
99
92
  homepage: https://github.com/robokopp/toast
100
93
  licenses: []
101
-
94
+ metadata: {}
102
95
  post_install_message:
103
96
  rdoc_options: []
104
-
105
- require_paths:
97
+ require_paths:
106
98
  - lib
107
- required_ruby_version: !ruby/object:Gem::Requirement
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- segments:
112
- - 0
113
- version: "0"
114
- required_rubygems_version: !ruby/object:Gem::Requirement
115
- requirements:
116
- - - ">="
117
- - !ruby/object:Gem::Version
118
- segments:
119
- - 0
120
- version: "0"
99
+ required_ruby_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ required_rubygems_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
121
109
  requirements: []
122
-
123
110
  rubyforge_project:
124
- rubygems_version: 1.3.6
111
+ rubygems_version: 2.0.3
125
112
  signing_key:
126
- specification_version: 3
113
+ specification_version: 4
127
114
  summary: Toast adds a RESTful interface to ActiveRecord models in Ruby on Rails.
128
115
  test_files: []
129
-