File tree Expand file tree Collapse file tree 7 files changed +106
-34
lines changed
Expand file tree Collapse file tree 7 files changed +106
-34
lines changed Original file line number Diff line number Diff line change 11source 'http://rubygems.org'
22
33gemspec
4+
5+ group :development , :test do
6+ gem 'pry'
7+ gem 'guard'
8+ gem 'guard-rspec'
9+ gem 'guard-bundler'
10+ gem 'rb-fsevent'
11+ gem 'growl'
12+ end
Original file line number Diff line number Diff line change 22 remote: .
33 specs:
44 grape (0.1.5 )
5- hashie (~> 1.0 )
5+ hashie (~> 1.2 )
66 multi_json
77 multi_xml
88 rack
9- rack-jsonp
109 rack-mount
1110
1211GEM
1312 remote: http://rubygems.org/
1413 specs:
15- diff-lcs (1.1.2 )
16- guard (0.6.2 )
14+ coderay (1.0.0 )
15+ diff-lcs (1.1.3 )
16+ growl (1.0.3 )
17+ guard (0.8.8 )
1718 thor (~> 0.14.6 )
1819 guard-bundler (0.1.3 )
1920 bundler (>= 1.0.0 )
2021 guard (>= 0.2.2 )
21- guard-rspec (0.4.2 )
22- guard (>= 0.4.0 )
23- hashie (1.1.0 )
24- json_pure (1.5.2 )
22+ guard-rspec (0.5.1 )
23+ guard (>= 0.8.4 )
24+ hashie (1.2.0 )
2525 maruku (0.6.0 )
2626 syntax (>= 1.0.0 )
27+ method_source (0.6.5 )
28+ ruby_parser (>= 2.0.5 )
2729 multi_json (1.0.3 )
28- multi_xml (0.3.0 )
29- rack (1.3.0 )
30- rack-jsonp (1.2.0 )
31- rack
30+ multi_xml (0.4.1 )
31+ pry (0.9.6 )
32+ coderay (>= 0.9.8 )
33+ method_source (>= 0.6.5 )
34+ ruby_parser (>= 2.0.5 )
35+ slop (~> 2.1.0 )
36+ rack (1.3.5 )
3237 rack-mount (0.8.3 )
3338 rack (>= 1.0.0 )
34- rack-test (0.6.0 )
39+ rack-test (0.6.1 )
3540 rack (>= 1.0 )
36- rake (0.9.2 )
37- rspec (2.6.0 )
38- rspec-core (~> 2.6.0 )
39- rspec-expectations (~> 2.6.0 )
40- rspec-mocks (~> 2.6.0 )
41- rspec-core (2.6.4 )
42- rspec-expectations (2.6.0 )
41+ rake (0.9.2.2 )
42+ rb-fsevent (0.4.3.1 )
43+ rspec (2.7.0 )
44+ rspec-core (~> 2.7.0 )
45+ rspec-expectations (~> 2.7.0 )
46+ rspec-mocks (~> 2.7.0 )
47+ rspec-core (2.7.1 )
48+ rspec-expectations (2.7.0 )
4349 diff-lcs (~> 1.1.2 )
44- rspec-mocks (2.6.0 )
50+ rspec-mocks (2.7.0 )
51+ ruby_parser (2.3.1 )
52+ sexp_processor (~> 3.0 )
53+ sexp_processor (3.0.7 )
54+ slop (2.1.0 )
4555 syntax (1.0.0 )
4656 thor (0.14.6 )
47- yard (0.7.1 )
57+ yard (0.7.2 )
4858
4959PLATFORMS
5060 ruby
5161
5262DEPENDENCIES
5363 bundler
5464 grape !
65+ growl
5566 guard
5667 guard-bundler
5768 guard-rspec
58- json_pure
5969 maruku
70+ pry
6071 rack-test
6172 rake
62- rspec (~> 2.6.0 )
73+ rb-fsevent
74+ rspec (~> 2.7.0 )
6375 yard
Original file line number Diff line number Diff line change @@ -15,21 +15,17 @@ Gem::Specification.new do |s|
1515
1616 s . add_runtime_dependency 'rack'
1717 s . add_runtime_dependency 'rack-mount'
18- s . add_runtime_dependency 'rack-jsonp'
18+ # s.add_runtime_dependency 'rack-jsonp'
1919 s . add_runtime_dependency 'multi_json'
2020 s . add_runtime_dependency 'multi_xml'
21- s . add_runtime_dependency 'hashie' , '~> 1.0 '
21+ s . add_runtime_dependency 'hashie' , '~> 1.2 '
2222
2323 s . add_development_dependency 'rake'
2424 s . add_development_dependency 'maruku'
2525 s . add_development_dependency 'yard'
2626 s . add_development_dependency 'rack-test'
27- s . add_development_dependency 'rspec' , '~> 2.6.0'
28- s . add_development_dependency 'json_pure'
27+ s . add_development_dependency 'rspec' , '~> 2.7.0'
2928 s . add_development_dependency 'bundler'
30- s . add_development_dependency 'guard'
31- s . add_development_dependency 'guard-rspec'
32- s . add_development_dependency 'guard-bundler'
3329
3430 s . files = `git ls-files` . split ( "\n " )
3531 s . test_files = `git ls-files -- {test,spec,features}/*` . split ( "\n " )
Original file line number Diff line number Diff line change @@ -8,14 +8,14 @@ module Grape
88 autoload :Client , 'grape/client'
99 autoload :Route , 'grape/route'
1010 autoload :Entity , 'grape/entity'
11-
11+
1212 module Middleware
1313 autoload :Base , 'grape/middleware/base'
1414 autoload :Prefixer , 'grape/middleware/prefixer'
1515 autoload :Versioner , 'grape/middleware/versioner'
1616 autoload :Formatter , 'grape/middleware/formatter'
1717 autoload :Error , 'grape/middleware/error'
18-
18+
1919 module Auth
2020 autoload :OAuth2 , 'grape/middleware/auth/oauth2'
2121 autoload :Basic , 'grape/middleware/auth/basic'
Original file line number Diff line number Diff line change @@ -90,6 +90,33 @@ def body(value = nil)
9090 end
9191 end
9292
93+ # Allows you to make use of Grape Entities by setting
94+ # the response body to the serializable hash of the
95+ # entity provided in the `:with` option. This has the
96+ # added benefit of automatically passing along environment
97+ # and version information to the serialization, making it
98+ # very easy to do conditional exposures. See Entity docs
99+ # for more info.
100+ #
101+ # @example
102+ #
103+ # get '/users/:id' do
104+ # present User.find(params[:id]),
105+ # :with => API::Entities::User,
106+ # :admin => current_user.admin?
107+ # end
108+ def present ( object , options = { } )
109+ entity_class = options . delete ( :with )
110+
111+ if entity_class
112+ embeds = { :env => env }
113+ embeds [ :version ] = env [ 'api.version' ] if env [ 'api.version' ]
114+ body entity_class . represent ( object , embeds . merge ( options ) )
115+ else
116+ body object
117+ end
118+ end
119+
93120 def call ( env )
94121 @env = env
95122 @header = { }
Original file line number Diff line number Diff line change @@ -120,6 +120,35 @@ def memoized
120120 last_response . body . should == 'yo'
121121 end
122122
123+ describe '#present' do
124+ it 'should just set the object as the body if no options are provided' do
125+ subject . get '/example' do
126+ present ( { :abc => 'def' } )
127+ body . should == { :abc => 'def' }
128+ end
129+ get '/example'
130+ end
131+
132+ it 'should call through to the provided entity class if one is given' do
133+ subject . get '/example' do
134+ entity_mock = Object . new
135+ entity_mock . should_receive ( :represent )
136+ present Object . new , :with => entity_mock
137+ end
138+ get '/example'
139+ end
140+
141+ it 'should embed version and env when calling through to an entity' do
142+ subject . version 'v2'
143+ subject . get '/example' do
144+ entity_mock = Object . new
145+ entity_mock . should_receive ( :represent ) . with ( :version => 'v2' , :env => env )
146+ present Object . new , :with => entity_mock
147+ end
148+ get '/example'
149+ end
150+ end
151+
123152 context 'filters' do
124153 describe 'before filters' do
125154 it 'should run the before filter if set' do
Original file line number Diff line number Diff line change 77require 'bundler'
88Bundler . setup :default , :test
99
10- require 'rspec'
1110require 'rack/test'
1211
1312require 'base64'
You can’t perform that action at this time.
0 commit comments