Skip to content

Commit

Permalink
Merge pull request #3 from HireFrederick/fix_filters_for_arrays
Browse files Browse the repository at this point in the history
Fix filters for arrays
  • Loading branch information
dgreenbe77 committed Aug 25, 2017
2 parents 4bab854 + 0f1ff90 commit 7c69e2b
Show file tree
Hide file tree
Showing 8 changed files with 281 additions and 225 deletions.
4 changes: 3 additions & 1 deletion .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -160,4 +160,6 @@ Metrics/ModuleLength:
- '**/*'
Metrics/BlockLength:
Exclude:
- 'spec/**/*'
- 'spec/**/*'
RSpec/MessageSpies:
Enabled: false
16 changes: 16 additions & 0 deletions lib/frederick_api/v2/helpers/query_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,22 @@ def params
.merge(additional_params)
end

def filter_params
super_filter_params = super

if (filters = super_filter_params[:filter])
filters.each do |filter_name, filter_val|
filters[filter_name] = filter_val.join(',') if filter_val.is_a?(Array)
end
end

super_filter_params
end

def all_records
self.all.pages.all_records
end

def to_dot_params(object, prefix = nil)
return {} if object == {}

Expand Down
12 changes: 10 additions & 2 deletions lib/frederick_api/v2/resource.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,16 @@ def initialize(params = {})
super
end

def self.all_records
self.all.pages.all_records
end

def self.top_level_namespace
self.to_s.split('::').first.constantize
end

def self.site
"#{FrederickAPI.config.base_url}/v2/"
"#{top_level_namespace.config.base_url}/v2/"
end

def self.with_access_token(token)
Expand All @@ -27,7 +35,7 @@ def self.with_access_token(token)
end

def self.custom_headers
super.merge(x_api_key: FrederickAPI.config.api_key)
super.merge(x_api_key: top_level_namespace.config.api_key)
end
end
end
Expand Down
2 changes: 1 addition & 1 deletion lib/frederick_api/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

module FrederickAPI
# Current gem version
VERSION = '0.1.5'
VERSION = '0.1.6'
end
2 changes: 0 additions & 2 deletions spec/frederick_api/v2/helpers/paginator_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,14 +40,12 @@
rs
end

# rubocop:disable RSpec/MessageSpies
before do
expect(paginator).to receive(:current_page).with(no_args).and_return(current_page)
expect(paginator).to receive(:total_pages).with(no_args).and_return(total_pages)
expect(paginator).to receive(:next).with(no_args).and_return(new_result_set)
expect(paginator).to receive(:next).with(no_args).and_return(new_result_set2)
end
# rubocop:enable RSpec/MessageSpies

it 'aggregates all the remaining pages' do
expect(paginator.all_records).to eq(result + result2 + result3)
Expand Down
26 changes: 25 additions & 1 deletion spec/frederick_api/v2/helpers/query_builder_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

require 'spec_helper'

RSpec.describe FrederickAPI::V2::Helpers::QueryBuilder do
describe FrederickAPI::V2::Helpers::QueryBuilder do
let(:query_builder) { described_class.new('klass') }

describe '#params' do
Expand Down Expand Up @@ -30,6 +30,30 @@
end
end

describe '#filter_params' do
let(:filter_array) { ['b', 1] }
let(:filters) { { foo: 'bar', c: true, a: filter_array } }
let(:query_builder) { FrederickAPI::V2::User.where(filters) }

it 'transforms arrays into comma delimited strings' do
expect(query_builder.filter_params).to eq(filter: filters.merge(a: filter_array.join(',')))
end
end

describe '#all_records' do
let(:result_set) { JsonApiClient::ResultSet.new }
let(:paginator) { FrederickAPI::V2::Helpers::Paginator.new(result_set, {}) }
let(:all_records) { 'all_records' }

after { expect(query_builder.all_records).to eq all_records }

it 'call right method chain' do
expect(query_builder).to receive(:all).with(no_args).and_return(result_set).ordered
expect(result_set).to receive(:pages).with(no_args).and_return(paginator).ordered
expect(paginator).to receive(:all_records).with(no_args).and_return(all_records).ordered
end
end

describe '#to_dot_params' do
let(:filter_params) { { filter: { name: 'name' } } }
let(:sort_params) { { page: { number: 2, size: 30 } } }
Expand Down
104 changes: 60 additions & 44 deletions spec/frederick_api/v2/resource_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,65 +2,81 @@

require 'spec_helper'

module FrederickAPI::V2
RSpec.describe Resource do
let(:subclass) do
Class.new(Resource)
describe FrederickAPI::V2::Resource do
let(:subclass) { FrederickAPI::V2::User }
let(:instance) { subclass.new }

describe 'superclass' do
it 'inherits from JsonApiClient::Resource' do
expect(described_class.superclass).to eq JsonApiClient::Resource
end
let(:instance) { subclass.new }
end

describe 'superclass' do
it 'inherits from JsonApiClient::Resource' do
expect(described_class.superclass).to eq JsonApiClient::Resource
end
describe '.query_builder' do
it 'FrederickAPI::V2::Helpers::QueryBuilder' do
expect(described_class.query_builder).to be FrederickAPI::V2::Helpers::QueryBuilder
end
end

describe '.query_builder' do
it 'FrederickAPI::V2::Helpers::QueryBuilder' do
expect(described_class.query_builder).to be FrederickAPI::V2::Helpers::QueryBuilder
end
describe '.paginator' do
it 'FrederickAPI::V2::Helpers::Paginator' do
expect(described_class.paginator).to be FrederickAPI::V2::Helpers::Paginator
end
end

describe '.paginator' do
it 'FrederickAPI::V2::Helpers::Paginator' do
expect(described_class.paginator).to be FrederickAPI::V2::Helpers::Paginator
end
describe '.requestor_class' do
it 'FrederickAPI::V2::Helpers::Requestor' do
expect(described_class.requestor_class).to be FrederickAPI::V2::Helpers::Requestor
end
end

describe '.requestor_class' do
it 'FrederickAPI::V2::Helpers::Requestor' do
expect(described_class.requestor_class).to be FrederickAPI::V2::Helpers::Requestor
end
describe 'methods' do
it 'responds to #create' do
expect(subclass).to respond_to('create')
end
it 'responds to #find' do
expect(subclass).to respond_to('find')
end
it 'responds to #all' do
expect(subclass).to respond_to('all')
end
it 'responds to #where' do
expect(subclass).to respond_to('where')
end
end

describe 'methods' do
it 'responds to #create' do
expect(subclass).to respond_to('create')
end
it 'responds to #find' do
expect(subclass).to respond_to('find')
end
it 'responds to #all' do
expect(subclass).to respond_to('all')
end
it 'responds to #where' do
expect(subclass).to respond_to('where')
end
describe '.all_records' do
let(:result_set) { JsonApiClient::ResultSet.new }
let(:paginator) { FrederickAPI::V2::Helpers::Paginator.new(result_set, {}) }
let(:all_records) { 'all_records' }

after { expect(subclass.all_records).to eq all_records }

it 'call right method chain' do
expect(subclass).to receive(:all).with(no_args).and_return(result_set).ordered
expect(result_set).to receive(:pages).with(no_args).and_return(paginator).ordered
expect(paginator).to receive(:all_records).with(no_args).and_return(all_records).ordered
end
end

describe '.top_level_namespace' do
it 'eqs right constant' do
expect(subclass.top_level_namespace).to eq FrederickAPI
end
end

describe '.custom_headers' do
before { allow(subclass).to receive(:_header_store).and_return(existing: 'headers') }
describe '.custom_headers' do
before { allow(subclass).to receive(:_header_store).and_return(existing: 'headers') }

it 'merges api key' do
expect(subclass.custom_headers[:x_api_key]).to eq('1234-5678-8765-4321')
end
it 'merges api key' do
expect(subclass.custom_headers[:x_api_key]).to eq('1234-5678-8765-4321')
end
end

describe '@@site' do
context 'config base_url is set' do
it 'is assigned correctly' do
expect(described_class.site).to eq 'http://test.host/v2/'
end
describe '.site' do
context 'config base_url is set' do
it 'is assigned correctly' do
expect(described_class.site).to eq 'http://test.host/v2/'
end
end
end
Expand Down
Loading

0 comments on commit 7c69e2b

Please sign in to comment.