apify 0.4.5 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -136,12 +136,15 @@ Here is another example for a more complex schema:
136
136
  'phone' => integer,
137
137
  'phone_type' => enum(string, 'home', 'office'),
138
138
  'email' => optional(email),
139
+ 'website' => optional(url),
139
140
  'favorite' => boolean
140
141
  )
141
142
  )
142
143
  end
143
144
  end
144
145
 
146
+ Note that the schema considers an key/value pair to be "present" when the key is present, even if the value is `nil`. That means if an object entry is optional and you want to omit that entry, you need to leave out the entire key/value pair.
147
+
145
148
 
146
149
  Auto-generated API documentation
147
150
  --------------------------------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.5
1
+ 0.5.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{apify}
8
- s.version = "0.4.5"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Henning Koch"]
12
- s.date = %q{2010-10-18}
12
+ s.date = %q{2010-10-29}
13
13
  s.description = %q{Compact definition of JSON APIs for Rails applications. }
14
14
  s.email = %q{github@makandra.de}
15
15
  s.extra_rdoc_files = [
@@ -79,6 +79,7 @@ Gem::Specification.new do |s|
79
79
  "lib/apify/client.rb",
80
80
  "lib/apify/errors.rb",
81
81
  "lib/apify/exchange.rb",
82
+ "lib/apify/patterns.rb",
82
83
  "lib/apify/schema_helper.rb",
83
84
  "spec/apify/action_spec.rb",
84
85
  "spec/apify/client_spec.rb",
@@ -2,6 +2,7 @@ require 'json'
2
2
  require 'jsonschema'
3
3
 
4
4
  require 'apify/errors'
5
+ require 'apify/patterns'
5
6
  require 'apify/action'
6
7
  require 'apify/exchange'
7
8
  require 'apify/api'
@@ -0,0 +1,10 @@
1
+ module Apify
2
+ class Patterns
3
+
4
+ EMAIL = /\A[a-z0-9\+\-_\.]+@[a-z0-9]+[a-z0-9\-\.]*[a-z0-9]+\z/i
5
+ URL = /(http|https):\/\/[\w\-_]+(\.[\w\-_]+)*([\w\-\.,@?^=%&:\/~\+#]*[\w\-\@?^=%&\/~\+#])?/
6
+ SQL_DATE = /\A\d{4}-\d{2}-\d{2}\z/
7
+ SQL_DATETIME = /\A\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\z/
8
+
9
+ end
10
+ end
@@ -39,17 +39,22 @@ module Apify
39
39
 
40
40
  def sql_date
41
41
  { 'type' => 'string',
42
- 'pattern' => Patterns::SQL_DATE.source }
42
+ 'pattern' => Apify::Patterns::SQL_DATE.source }
43
43
  end
44
44
 
45
45
  def sql_datetime
46
46
  { 'type' => 'string',
47
- 'pattern' => Patterns::SQL_DATETIME.source }
47
+ 'pattern' => Apify::Patterns::SQL_DATETIME.source }
48
48
  end
49
49
 
50
50
  def email
51
51
  { 'type' => 'string',
52
- 'pattern' => Patterns::EMAIL.source }
52
+ 'pattern' => Apify::Patterns::EMAIL.source }
53
+ end
54
+
55
+ def url
56
+ { 'type' => 'string',
57
+ 'pattern' => Apify::Patterns::URL.source }
53
58
  end
54
59
 
55
60
  end
@@ -45,4 +45,28 @@ class Api < Apify::Api
45
45
  end
46
46
  end
47
47
 
48
+ get :schema_with_sql_date do
49
+ schema :args do
50
+ object('date' => sql_date)
51
+ end
52
+ end
53
+
54
+ get :schema_with_sql_datetime do
55
+ schema :args do
56
+ object('datetime' => sql_datetime)
57
+ end
58
+ end
59
+
60
+ get :schema_with_email do
61
+ schema :args do
62
+ object('email' => email)
63
+ end
64
+ end
65
+
66
+ get :schema_with_url do
67
+ schema :args do
68
+ object('url' => url)
69
+ end
70
+ end
71
+
48
72
  end
@@ -64,8 +64,11 @@ describe ApiController do
64
64
 
65
65
  describe 'argument schemas' do
66
66
 
67
- it "should validate the presence of a property" do
67
+ before :each do
68
68
  instance_exec(&authenticate)
69
+ end
70
+
71
+ it "should validate the presence of a property" do
69
72
  post :with_args_schema, :args => {}.to_json
70
73
  response.code.should == '500'
71
74
  response.body.should include('Invalid request args')
@@ -73,7 +76,6 @@ describe ApiController do
73
76
  end
74
77
 
75
78
  it "should validate value types" do
76
- instance_exec(&authenticate)
77
79
  post :with_args_schema, :args => {'string_arg' => 123}.to_json
78
80
  response.code.should == '500'
79
81
  response.body.should include('Invalid request args')
@@ -81,13 +83,11 @@ describe ApiController do
81
83
  end
82
84
 
83
85
  it "should allow requests that fit the schema" do
84
- instance_exec(&authenticate)
85
86
  post :with_args_schema, :args => {'string_arg' => 'a string'}.to_json
86
87
  response.code.should == '200'
87
88
  end
88
89
 
89
90
  it "should render the schema if requested" do
90
- instance_exec(&authenticate)
91
91
  post :with_args_schema, :schema => 'args'
92
92
  response.code.should == '200'
93
93
  JSON.parse(response.body).should == {
@@ -101,8 +101,11 @@ describe ApiController do
101
101
 
102
102
  describe 'value schemas' do
103
103
 
104
- it "should validate the presence of a property" do
104
+ before :each do
105
105
  instance_exec(&authenticate)
106
+ end
107
+
108
+ it "should validate the presence of a property" do
106
109
  post :with_value_schema, :args => {}.to_json
107
110
  response.code.should == '500'
108
111
  response.body.should include('Invalid response value')
@@ -110,7 +113,6 @@ describe ApiController do
110
113
  end
111
114
 
112
115
  it "should validate value types" do
113
- instance_exec(&authenticate)
114
116
  post :with_value_schema, :args => {'string_value' => 123}.to_json
115
117
  response.code.should == '500'
116
118
  response.body.should include('Invalid response value')
@@ -118,14 +120,12 @@ describe ApiController do
118
120
  end
119
121
 
120
122
  it "should return responses that fit the schema" do
121
- instance_exec(&authenticate)
122
123
  post :with_value_schema, :args => {'string_value' => 'a string'}.to_json
123
124
  response.code.should == '200'
124
125
  JSON.parse(response.body).should == {'string_value' => 'a string'}
125
126
  end
126
127
 
127
128
  it "should render the schema if requested" do
128
- instance_exec(&authenticate)
129
129
  post :with_value_schema, :schema => 'value'
130
130
  response.code.should == '200'
131
131
  JSON.parse(response.body).should == {
@@ -137,6 +137,75 @@ describe ApiController do
137
137
 
138
138
  end
139
139
 
140
+ describe 'schema helpers' do
141
+
142
+ before :each do
143
+ instance_exec(&authenticate)
144
+ end
145
+
146
+ describe '#sql_date helper' do
147
+
148
+ it 'should match a date as seen in SQL' do
149
+ get :schema_with_sql_date, :args => {'date' => '2011-05-01'}.to_json
150
+ response.code.should == '200'
151
+ end
152
+
153
+ it 'should not match an invalid string' do
154
+ get :schema_with_sql_date, :args => {'date' => '01.05.2011'}.to_json
155
+ response.code.should == '500'
156
+ end
157
+
158
+ end
159
+
160
+ describe '#sql_datetime helper' do
161
+
162
+ it 'should match a timestamp as seen in SQL' do
163
+ get :schema_with_sql_datetime, :args => {'datetime' => '2011-05-01 12:10:59'}.to_json
164
+ response.code.should == '200'
165
+ end
166
+
167
+ it 'should not match an invalid string' do
168
+ get :schema_with_sql_datetime, :args => {'datetime' => '2011-05-01'}.to_json
169
+ response.code.should == '500'
170
+ end
171
+
172
+ end
173
+
174
+ describe '#email helper' do
175
+
176
+ it 'should match an email address' do
177
+ get :schema_with_email, :args => {'email' => 'some.guy@some.domain.tld'}.to_json
178
+ response.code.should == '200'
179
+ end
180
+
181
+ it 'should not match an invalid string' do
182
+ get :schema_with_email, :args => {'email' => 'some.guy'}.to_json
183
+ response.code.should == '500'
184
+ end
185
+
186
+ end
187
+
188
+ describe '#url_helper' do
189
+
190
+ it 'should match a http address' do
191
+ get :schema_with_url, :args => {'url' => 'http://some.domain.tld/path/to?query=value'}.to_json
192
+ response.code.should == '200'
193
+ end
194
+
195
+ it 'should match a https address' do
196
+ get :schema_with_url, :args => {'url' => 'https://some.domain.tld/path/to?query=value'}.to_json
197
+ response.code.should == '200'
198
+ end
199
+
200
+ it 'should not match an invalid string' do
201
+ get :schema_with_url, :args => {'url' => 'foo:bar:bam'}.to_json
202
+ response.code.should == '500'
203
+ end
204
+
205
+ end
206
+
207
+ end
208
+
140
209
  describe 'auto-generated documentation' do
141
210
  integrate_views
142
211
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apify
3
3
  version: !ruby/object:Gem::Version
4
- hash: 5
4
+ hash: 11
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 4
9
8
  - 5
10
- version: 0.4.5
9
+ - 0
10
+ version: 0.5.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Henning Koch
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-10-18 00:00:00 +02:00
18
+ date: 2010-10-29 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -132,6 +132,7 @@ files:
132
132
  - lib/apify/client.rb
133
133
  - lib/apify/errors.rb
134
134
  - lib/apify/exchange.rb
135
+ - lib/apify/patterns.rb
135
136
  - lib/apify/schema_helper.rb
136
137
  - spec/apify/action_spec.rb
137
138
  - spec/apify/client_spec.rb