Merge pull request #36 from dblock/grape-10

Added support for Grape 0.10.x
This commit is contained in:
Siong 2015-01-13 15:35:31 -08:00
commit cc6389f0ca
8 changed files with 66 additions and 28 deletions

15
.travis.yml Normal file
View file

@ -0,0 +1,15 @@
language: ruby
sudo: false
rvm:
- 2.1.1
- 1.9.3
- rbx-2.2.10
- jruby-19mode
env:
- GRAPE_VERSION=0.8.0
- GRAPE_VERSION=0.9.0
- GRAPE_VERSION=0.10.1
- GRAPE_VERSION=HEAD

View file

@ -1,3 +1,10 @@
source 'https://rubygems.org' source 'https://rubygems.org'
gemspec gemspec
case version = ENV['GRAPE_VERSION'] || '~> 0.10.0'
when 'HEAD'
gem 'grape', github: 'intridea/grape'
else
gem 'grape', version
end

View file

@ -180,6 +180,10 @@ Enjoy :)
## Changelog ## Changelog
#### Next
* Adds support for Grape 0.10.x
#### v1.2.1 #### v1.2.1
* Adds support for active model serializer 0.9.x * Adds support for active model serializer 0.9.x

View file

@ -16,7 +16,7 @@ Gem::Specification.new do |gem|
gem.version = Grape::ActiveModelSerializers::VERSION gem.version = Grape::ActiveModelSerializers::VERSION
gem.licenses = ['MIT'] gem.licenses = ['MIT']
gem.add_dependency "grape", "~> 0.3" gem.add_dependency "grape"
gem.add_dependency "active_model_serializers", ">= 0.9.0" gem.add_dependency "active_model_serializers", ">= 0.9.0"
gem.add_development_dependency "rspec" gem.add_development_dependency "rspec"

View file

@ -9,12 +9,20 @@ module Grape
attr_accessor :controller_name attr_accessor :controller_name
def namespace_options def namespace_options
if self.respond_to?(:inheritable_setting)
inheritable_setting.namespace
else
settings[:namespace] ? settings[:namespace].options : {} settings[:namespace] ? settings[:namespace].options : {}
end end
end
def route_options def route_options
if self.respond_to?(:inheritable_setting)
inheritable_setting.route
else
options[:route_options] options[:route_options]
end end
end
def self.included(base) def self.included(base)
mattr_accessor :_serialization_scope mattr_accessor :_serialization_scope
@ -39,13 +47,9 @@ module Grape
private private
def set_meta_and_meta_key(meta) def set_meta_and_meta_key(meta)
if meta.has_key?(:meta)
Formatter::ActiveModelSerializers.meta = meta[:meta] Formatter::ActiveModelSerializers.meta = meta[:meta]
if meta.has_key?(:meta_key)
Formatter::ActiveModelSerializers.meta_key = meta[:meta_key] Formatter::ActiveModelSerializers.meta_key = meta[:meta_key]
end end
end
end
end end
Endpoint.send(:include, EndpointExtension) Endpoint.send(:include, EndpointExtension)

View file

@ -26,25 +26,19 @@ module Grape
def other_options def other_options
options = {} options = {}
if @meta_content_items meta = Formatter::ActiveModelSerializers.meta.delete(:meta)
if @meta_key meta_key = Formatter::ActiveModelSerializers.meta_key.delete(:meta_key)
key_option = @meta_key[:meta_key] options[:meta_key] = meta_key if meta && meta_key
@meta_key.delete(:meta_key) options[meta_key || :meta] = meta if meta
options[:meta_key] = key_option if key_option
end
meta_option = @meta_content_items[:meta]
@meta_content_items.delete(:meta)
options[key_option || :meta] = meta_option if meta_option
end
options options
end end
def meta def meta
@meta_content_items || {} @meta || {}
end end
def meta=(meta_content) def meta=(value)
@meta_content_items = { meta: meta_content } if meta_content @meta = value ? { meta: value } : nil
end end
def meta_key def meta_key
@ -52,7 +46,7 @@ module Grape
end end
def meta_key=(key) def meta_key=(key)
@meta_key = { meta_key: key } if key @meta_key = key ? { meta_key: key } : nil
end end
def build_options_from_endpoint(endpoint) def build_options_from_endpoint(endpoint)
@ -62,10 +56,14 @@ module Grape
# array root is the innermost namespace name ('space') if there is one, # array root is the innermost namespace name ('space') if there is one,
# otherwise the route name (e.g. get 'name') # otherwise the route name (e.g. get 'name')
def default_root(endpoint) def default_root(endpoint)
innermost_scope = endpoint.settings.peek innermost_scope = if endpoint.respond_to?(:namespace_stackable)
endpoint.namespace_stackable(:namespace).last
else
endpoint.settings.peek[:namespace]
end
if innermost_scope[:namespace] if innermost_scope
innermost_scope[:namespace].space innermost_scope.space
else else
endpoint.options[:path][0].to_s.split('/')[-1] endpoint.options[:path][0].to_s.split('/')[-1]
end end

View file

@ -2,7 +2,11 @@ require 'spec_helper'
describe 'Grape::EndpointExtension' do describe 'Grape::EndpointExtension' do
if Grape::Util.const_defined?('InheritableSetting')
subject { Grape::Endpoint.new(Grape::Util::InheritableSetting.new, {path: '/', method: 'foo'}) }
else
subject { Grape::Endpoint.new({}, {path: '/', method: 'foo'}) } subject { Grape::Endpoint.new({}, {path: '/', method: 'foo'}) }
end
let(:serializer) { Grape::Formatter::ActiveModelSerializers } let(:serializer) { Grape::Formatter::ActiveModelSerializers }

View file

@ -34,7 +34,13 @@ describe Grape::Formatter::ActiveModelSerializers do
describe '.fetch_serializer' do describe '.fetch_serializer' do
let(:user) { User.new(first_name: 'John') } let(:user) { User.new(first_name: 'John') }
if Grape::Util.const_defined?('InheritableSetting')
let(:endpoint) { Grape::Endpoint.new(Grape::Util::InheritableSetting.new, {path: '/', method: 'foo'}) }
else
let(:endpoint) { Grape::Endpoint.new({}, {path: '/', method: 'foo'}) } let(:endpoint) { Grape::Endpoint.new({}, {path: '/', method: 'foo'}) }
end
let(:env) { { 'api.endpoint' => endpoint } } let(:env) { { 'api.endpoint' => endpoint } }
before do before do