diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..a1d0072 --- /dev/null +++ b/.travis.yml @@ -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 diff --git a/Gemfile b/Gemfile index fa75df1..4a6b68d 100644 --- a/Gemfile +++ b/Gemfile @@ -1,3 +1,10 @@ source 'https://rubygems.org' gemspec + +case version = ENV['GRAPE_VERSION'] || '~> 0.10.0' +when 'HEAD' + gem 'grape', github: 'intridea/grape' +else + gem 'grape', version +end diff --git a/README.md b/README.md index a010507..9b3a796 100644 --- a/README.md +++ b/README.md @@ -180,6 +180,10 @@ Enjoy :) ## Changelog +#### Next +* Adds support for Grape 0.10.x + + #### v1.2.1 * Adds support for active model serializer 0.9.x diff --git a/grape-active_model_serializers.gemspec b/grape-active_model_serializers.gemspec index 0ab28a8..21a209b 100644 --- a/grape-active_model_serializers.gemspec +++ b/grape-active_model_serializers.gemspec @@ -16,7 +16,7 @@ Gem::Specification.new do |gem| gem.version = Grape::ActiveModelSerializers::VERSION gem.licenses = ['MIT'] - gem.add_dependency "grape", "~> 0.3" + gem.add_dependency "grape" gem.add_dependency "active_model_serializers", ">= 0.9.0" gem.add_development_dependency "rspec" diff --git a/lib/grape-active_model_serializers/endpoint_extension.rb b/lib/grape-active_model_serializers/endpoint_extension.rb index 9573e45..d3b1d4a 100644 --- a/lib/grape-active_model_serializers/endpoint_extension.rb +++ b/lib/grape-active_model_serializers/endpoint_extension.rb @@ -9,11 +9,19 @@ module Grape attr_accessor :controller_name def namespace_options - settings[:namespace] ? settings[:namespace].options : {} + if self.respond_to?(:inheritable_setting) + inheritable_setting.namespace + else + settings[:namespace] ? settings[:namespace].options : {} + end end def route_options - options[:route_options] + if self.respond_to?(:inheritable_setting) + inheritable_setting.route + else + options[:route_options] + end end def self.included(base) @@ -39,12 +47,8 @@ module Grape private def set_meta_and_meta_key(meta) - if meta.has_key?(:meta) - Formatter::ActiveModelSerializers.meta = meta[:meta] - if meta.has_key?(:meta_key) - Formatter::ActiveModelSerializers.meta_key = meta[:meta_key] - end - end + Formatter::ActiveModelSerializers.meta = meta[:meta] + Formatter::ActiveModelSerializers.meta_key = meta[:meta_key] end end diff --git a/lib/grape-active_model_serializers/formatter.rb b/lib/grape-active_model_serializers/formatter.rb index 1db63bb..d20dc44 100644 --- a/lib/grape-active_model_serializers/formatter.rb +++ b/lib/grape-active_model_serializers/formatter.rb @@ -26,25 +26,19 @@ module Grape def other_options options = {} - if @meta_content_items - if @meta_key - key_option = @meta_key[:meta_key] - @meta_key.delete(:meta_key) - 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 + meta = Formatter::ActiveModelSerializers.meta.delete(:meta) + meta_key = Formatter::ActiveModelSerializers.meta_key.delete(:meta_key) + options[:meta_key] = meta_key if meta && meta_key + options[meta_key || :meta] = meta if meta options end def meta - @meta_content_items || {} + @meta || {} end - def meta=(meta_content) - @meta_content_items = { meta: meta_content } if meta_content + def meta=(value) + @meta = value ? { meta: value } : nil end def meta_key @@ -52,7 +46,7 @@ module Grape end def meta_key=(key) - @meta_key = { meta_key: key } if key + @meta_key = key ? { meta_key: key } : nil end def build_options_from_endpoint(endpoint) @@ -62,10 +56,14 @@ module Grape # array root is the innermost namespace name ('space') if there is one, # otherwise the route name (e.g. get 'name') 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] - innermost_scope[:namespace].space + if innermost_scope + innermost_scope.space else endpoint.options[:path][0].to_s.split('/')[-1] end diff --git a/spec/grape-active_model_serializers/endpoint_extension_spec.rb b/spec/grape-active_model_serializers/endpoint_extension_spec.rb index 0052e7f..dec8151 100644 --- a/spec/grape-active_model_serializers/endpoint_extension_spec.rb +++ b/spec/grape-active_model_serializers/endpoint_extension_spec.rb @@ -2,7 +2,11 @@ require 'spec_helper' describe 'Grape::EndpointExtension' do - subject { Grape::Endpoint.new({}, {path: '/', method: 'foo'}) } + 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'}) } + end let(:serializer) { Grape::Formatter::ActiveModelSerializers } diff --git a/spec/grape-active_model_serializers/formatter_spec.rb b/spec/grape-active_model_serializers/formatter_spec.rb index bed4a93..68c3edc 100644 --- a/spec/grape-active_model_serializers/formatter_spec.rb +++ b/spec/grape-active_model_serializers/formatter_spec.rb @@ -34,7 +34,13 @@ describe Grape::Formatter::ActiveModelSerializers do describe '.fetch_serializer' do let(:user) { User.new(first_name: 'John') } - let(:endpoint) { Grape::Endpoint.new({}, {path: '/', method: 'foo'}) } + + 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'}) } + end + let(:env) { { 'api.endpoint' => endpoint } } before do