Skip to content

Commit 99749c4

Browse files
committed
Merge pull request #1204 from marshall-lee/ditch_each_with_object
Ditch each_with_object
2 parents a9a29a4 + 526d3d1 commit 99749c4

File tree

6 files changed

+38
-24
lines changed

6 files changed

+38
-24
lines changed

benchmark/simple.rb

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
22
require 'grape'
3-
require 'benchmark'
3+
require 'benchmark/ips'
44

55
class API < Grape::API
66
prefix :api
@@ -20,12 +20,8 @@ class API < Grape::API
2020
env["HTTP_HEADER#{i}"] = '123'
2121
end
2222

23-
iters = 5000
24-
25-
Benchmark.bm do |bm|
26-
bm.report('simple') do
27-
iters.times do
28-
API.call env
29-
end
23+
Benchmark.ips do |ips|
24+
ips.report('simple') do
25+
API.call env
3026
end
3127
end

grape.gemspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ Gem::Specification.new do |s|
3333
s.add_development_dependency 'rack-contrib'
3434
s.add_development_dependency 'mime-types'
3535
s.add_development_dependency 'appraisal'
36+
s.add_development_dependency 'benchmark-ips'
3637

3738
s.files = `git ls-files`.split("\n")
3839
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")

lib/grape/formatter/serializable_hash.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@ def serialize(object)
2121
elsif object.is_a?(Array) && !object.map { |o| o.respond_to? :serializable_hash }.include?(false)
2222
object.map(&:serializable_hash)
2323
elsif object.is_a?(Hash)
24-
object.each_with_object({}) do |(k, v), h|
24+
h = {}
25+
object.each_pair do |k, v|
2526
h[k] = serialize(v)
2627
end
28+
h
2729
else
2830
object
2931
end

lib/grape/middleware/base.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@ def content_type
5555
end
5656

5757
def mime_types
58-
content_types.each_with_object({}) do |(k, v), types_without_params|
58+
types_without_params = {}
59+
content_types.each_pair do |k, v|
5960
types_without_params[v.split(';').first] = k
6061
end
62+
types_without_params
6163
end
6264
end
6365
end

lib/grape/request.rb

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,39 @@ module Grape
22
class Request < Rack::Request
33
HTTP_PREFIX = 'HTTP_'.freeze
44

5+
alias_method :rack_params, :params
6+
57
def params
6-
@params ||= begin
7-
params = Hashie::Mash.new(super)
8-
if env[Grape::Env::RACK_ROUTING_ARGS]
9-
args = env[Grape::Env::RACK_ROUTING_ARGS].dup
10-
# preserve version from query string parameters
11-
args.delete(:version)
12-
args.delete(:route_info)
13-
params.deep_merge!(args)
14-
end
15-
params
16-
end
8+
@params ||= build_params
179
end
1810

1911
def headers
20-
@headers ||= env.each_with_object({}) do |(k, v), h|
12+
@headers ||= build_headers
13+
end
14+
15+
private
16+
17+
def build_params
18+
params = Hashie::Mash.new(rack_params)
19+
if env[Grape::Env::RACK_ROUTING_ARGS]
20+
args = env[Grape::Env::RACK_ROUTING_ARGS].dup
21+
# preserve version from query string parameters
22+
args.delete(:version)
23+
args.delete(:route_info)
24+
params.deep_merge!(args)
25+
end
26+
params
27+
end
28+
29+
def build_headers
30+
headers = {}
31+
env.each_pair do |k, v|
2132
next unless k.to_s.start_with? HTTP_PREFIX
2233

2334
k = k[5..-1].split('_').each(&:capitalize!).join('-')
24-
h[k] = v
35+
headers[k] = v
2536
end
37+
headers
2638
end
2739
end
2840
end

lib/grape/util/strict_hash_configuration.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,8 @@ def self.nested_settings_methods(setting_name, new_config_class)
6464
end
6565

6666
define_method 'to_hash' do
67-
merge_hash = setting_name.keys.each_with_object({}) { |k, hash| hash[k] = send("#{k}_context").to_hash }
67+
merge_hash = {}
68+
setting_name.each_key { |k| merge_hash[k] = send("#{k}_context").to_hash }
6869

6970
@settings.to_hash.merge(
7071
merge_hash

0 commit comments

Comments
 (0)