restfulness 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cfa898034332002c6aca448027bc52cf29abfbd7
4
- data.tar.gz: 17961f1c4475131c07321a775575b7c32f66360a
3
+ metadata.gz: 4f2ec8e38fd8c7293981c340ac6e925b976f4a99
4
+ data.tar.gz: e74639ca882ffea8494af1f6dc2e0a7c970b5957
5
5
  SHA512:
6
- metadata.gz: 493a6d814a922764739e3698bea3a8bf16573bb207f940b0f240f7e70a27c50a9607cc2a3e5d7ad2053ddad95593109fd8370e591e07669cbbd0f6ec23d6185c
7
- data.tar.gz: a62d90e70f22d2db78e0df083ecaf77c8fa769b6c2372874ad0b88b544cd963a95d8d5ac35d6d064f2aac6d6c56afcba6a7ce1969f20f27b493394c4723ae109
6
+ metadata.gz: bc120a4ca69100131aef149de8e0029611c2e1d5ed584a94a3adabbf50e598ab52463088884c6844e5008c375632cb64cb3df7a69afbf7f4b62a38cbe64bdf01
7
+ data.tar.gz: 19e0694cd4b9f4b609762c70abdd07c9d2df487b65bb4884ccf8097b3c3ae59423cc6a0b4e13f496a7109b84162caa618ba96fade17c5b07a9e26f70cca686ad
data/README.md CHANGED
@@ -59,8 +59,10 @@ Restfulness takes a different approach. The following example attempts to show h
59
59
  class TwitterAPI < Restfullness::Application
60
60
  routes do
61
61
  add 'status', StatusResource
62
- add 'timeline', 'public', PublicTimelineResource
63
- add 'timeline', 'home', HomeTimelineResource
62
+ scope 'timeline' do
63
+ add 'public', Timelines::PublicResource
64
+ add 'home', Timelines::HomeResource
65
+ end
64
66
  end
65
67
  end
66
68
 
@@ -70,19 +72,21 @@ class StatusResource < Restfulness::Resource
70
72
  end
71
73
  end
72
74
 
73
- class PublicTimelineResource < Restfulness::Resource
74
- def get
75
- Status.limit(20)
75
+ module Timelines
76
+ class PublicResource < Restfulness::Resource
77
+ def get
78
+ Status.limit(20)
79
+ end
76
80
  end
77
- end
78
81
 
79
- # Authentication requires more cowbell, so assume the ApplicationResource is already defined
80
- class HomeTimelineResource < ApplicationResource
81
- def authorized?
82
- authenticate!
83
- end
84
- def get
85
- current_user.statuses.limit(20)
82
+ # Authentication requires more cowbell, so assume the ApplicationResource is already defined
83
+ class HomeResource < ApplicationResource
84
+ def authorized?
85
+ authenticate!
86
+ end
87
+ def get
88
+ current_user.statuses.limit(20)
89
+ end
86
90
  end
87
91
  end
88
92
 
@@ -156,19 +160,31 @@ The aim of routes in Restfulness are to be stupid simple. These are the basic ru
156
160
  * Strings are matched directly.
157
161
  * Symbols match anything, and are accessible as path attributes.
158
162
  * Every route automically gets an :id parameter at the end, that may or may not have a null value.
163
+ * Scopes save repeating shared route array entries.
159
164
 
160
165
  Lets see a few examples:
161
166
 
162
167
  ```ruby
163
168
  routes do
164
- # Simple route to access a project, access with:
165
- # * PUT /project
166
- # * GET /project/1234
167
- add 'project', ProjectResource
168
-
169
- # Parameters are also supported.
170
- # Access the project id using `request.path[:project_id]`
171
- add 'project', :project_id, 'status', ProjectStatusResource
169
+ scope 'api' do
170
+ # Simple route to access a project, access with:
171
+ # * PUT /api/project
172
+ # * GET /api/project/1234
173
+ add 'project', ProjectResource
174
+
175
+ # Parameters are also supported.
176
+ # Access the project id using `request.path[:project_id]`
177
+ add 'project', :project_id, 'status', ProjectStatusResource
178
+
179
+ # Scope's can be embedded
180
+ scope 'journeys' do
181
+ add 'active', Journeys::ActiveResource
182
+ add 'terminated', Journeys::TerminatedResource
183
+ end
184
+
185
+ # Add a general purpose list resource *after* scope
186
+ add 'journeys', Journeys::ListResource
187
+ end
172
188
  end
173
189
  ```
174
190
 
@@ -589,6 +605,10 @@ Restfulness is still a work in progress but at Cabify we are using it in product
589
605
 
590
606
  ## History
591
607
 
608
+ ### 0.2.5 - March 7, 2014
609
+
610
+ * Added support for scope in routes. (@samlown)
611
+
592
612
  ### 0.2.4 - February 7, 2014
593
613
 
594
614
  * Added I18n support with the help of the http_accept_language gem. (@samlown)
@@ -3,15 +3,23 @@ module Restfulness
3
3
 
4
4
  class Router
5
5
 
6
- attr_accessor :routes
6
+ attr_accessor :routes, :current_scope
7
7
 
8
8
  def initialize(&block)
9
9
  self.routes = []
10
+ self.current_scope = []
10
11
  instance_eval(&block) if block_given?
11
12
  end
12
13
 
13
14
  def add(*args)
14
- routes << Route.new(*args)
15
+ routes << Route.new(*(current_scope + args))
16
+ end
17
+
18
+ def scope(*args, &block)
19
+ old_scope = current_scope
20
+ self.current_scope += args
21
+ instance_eval(&block) if block_given?
22
+ self.current_scope = old_scope
15
23
  end
16
24
 
17
25
  def route_for(path)
@@ -1,3 +1,3 @@
1
1
  module Restfulness
2
- VERSION = "0.2.4"
2
+ VERSION = "0.2.5"
3
3
  end
@@ -22,7 +22,6 @@ describe Restfulness::Router do
22
22
  end
23
23
 
24
24
  it "should prepare routes with instance eval block" do
25
- block = lambda {}
26
25
  obj = klass.new do
27
26
  @foo = 'bar'
28
27
  end
@@ -42,6 +41,47 @@ describe Restfulness::Router do
42
41
  end
43
42
  end
44
43
 
44
+ describe "#scope" do
45
+ it "should append to the current_scope attribute in block and reset" do
46
+ obj = klass.new
47
+ subscope = nil # Can't use rspec inside instance eval!
48
+ obj.scope 'api' do
49
+ subscope = current_scope
50
+ end
51
+ subscope.should eql(['api'])
52
+ obj.current_scope.should eql([])
53
+ end
54
+
55
+ it "should add scope properties to add call" do
56
+ obj = klass.new
57
+ res = resource
58
+ obj.scope 'api' do
59
+ add 'projects', res
60
+ end
61
+ route = obj.routes.first
62
+ route.path.should eql(['api', 'projects'])
63
+ end
64
+
65
+ it "should allow for scopes within scopes" do
66
+ obj = klass.new
67
+ res = resource
68
+ subscope = nil
69
+ subsubscope = nil
70
+ obj.scope 'api' do
71
+ scope 'projects' do
72
+ add 'active', res
73
+ subsubscope = current_scope
74
+ end
75
+ subscope = current_scope
76
+ end
77
+ subsubscope.should eql(['api', 'projects'])
78
+ subscope.should eql(['api'])
79
+ obj.current_scope.should eql([])
80
+ route = obj.routes.first
81
+ route.path.should eql(['api', 'projects', 'active'])
82
+ end
83
+ end
84
+
45
85
  describe "#route_for" do
46
86
  let :obj do
47
87
  res = resource
metadata CHANGED
@@ -1,111 +1,111 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restfulness
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.2.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Lown
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-07 00:00:00.000000000 Z
11
+ date: 2014-03-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.4'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: multi_json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ~>
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
33
  version: '1.8'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ~>
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '1.8'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: activesupport
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - '>='
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
47
  version: '3.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - '>='
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: http_accept_language
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ~>
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
61
  version: '2.0'
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ~>
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: '2.0'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ~>
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
75
  version: '1.3'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ~>
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '1.3'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rake
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - '>='
87
+ - - ">="
88
88
  - !ruby/object:Gem::Version
89
89
  version: '0'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - '>='
94
+ - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rspec
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - '>='
101
+ - - ">="
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - '>='
108
+ - - ">="
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  description: Simple REST server that focuses on resources instead of routes.
@@ -115,8 +115,8 @@ executables: []
115
115
  extensions: []
116
116
  extra_rdoc_files: []
117
117
  files:
118
- - .gitignore
119
- - .travis.yml
118
+ - ".gitignore"
119
+ - ".travis.yml"
120
120
  - Gemfile
121
121
  - LICENSE.txt
122
122
  - README.md
@@ -164,17 +164,17 @@ require_paths:
164
164
  - lib
165
165
  required_ruby_version: !ruby/object:Gem::Requirement
166
166
  requirements:
167
- - - '>='
167
+ - - ">="
168
168
  - !ruby/object:Gem::Version
169
169
  version: '0'
170
170
  required_rubygems_version: !ruby/object:Gem::Requirement
171
171
  requirements:
172
- - - '>='
172
+ - - ">="
173
173
  - !ruby/object:Gem::Version
174
174
  version: '0'
175
175
  requirements: []
176
176
  rubyforge_project:
177
- rubygems_version: 2.0.3
177
+ rubygems_version: 2.2.2
178
178
  signing_key:
179
179
  specification_version: 4
180
180
  summary: Use to create a powerful, yet simple REST API in your application.