Skip to content

Commit

Permalink
Fix Basic::Collection parameter defaults.
Browse files Browse the repository at this point in the history
  • Loading branch information
sleepingkingstudios committed Nov 17, 2024
1 parent 810d12b commit 2d41124
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 12 deletions.
32 changes: 20 additions & 12 deletions lib/cuprum/collections/basic/collection.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,18 +26,8 @@ class Collection < Cuprum::Collections::Collection
# @option options scope
# [Cuprum::Collections::Scopes::Base, Hash, Proc, nil] the configured
# scope for the relation.
def initialize(data: [], entity_class: Hash, **parameters)
qualified_name = parameters.fetch(:qualified_name) do
next nil unless entity_class == Hash

parameters.fetch(:name, parameters[:name])
end

super(
entity_class:,
qualified_name:,
**parameters
)
def initialize(data: [], **parameters)
super(**normalize_parameters(**parameters))

@data = data
end
Expand Down Expand Up @@ -108,5 +98,23 @@ def comparable_options
def default_scope
Cuprum::Collections::Basic::Scopes::AllScope.new
end

def normalize_parameters(**parameters) # rubocop:disable Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity
return parameters if parameters.key?(:entity_class)

return parameters unless parameters[:name] || parameters[:qualified_name]

parameters = parameters.merge(entity_class: Hash)

if parameters.key?(:name) && parameters.key?(:qualified_name)
parameters
elsif parameters.key?(:name)
parameters.merge(qualified_name: parameters[:name])
elsif parameters.key?(:qualified_name)
name = parameters[:qualified_name].split('/').last

parameters.merge(name:)
end
end
end
end
22 changes: 22 additions & 0 deletions spec/cuprum/collections/basic/collection_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,19 @@
let(:query_options) { { data: } }

describe '.new' do
def call_method(**parameters)
described_class.new(data:, **parameters)
end

it 'should define the constructor' do
expect(described_class)
.to respond_to(:new)
.with(0).arguments
.and_keywords(:data, :entity_class, :name, :qualified_name)
.and_any_keywords
end

include_deferred 'should validate the Relation parameters'
end

include_deferred 'should be a Collection',
Expand All @@ -62,6 +68,22 @@
end
end

describe '#name' do
context 'when initialized with qualified_name: value' do
let(:qualified_name) { 'books' }
let(:constructor_options) { { qualified_name: } }

it { expect(collection.name).to be == 'books' }
end

context 'when initialized with qualified_name: scoped value' do
let(:qualified_name) { 'spec/scoped_books' }
let(:constructor_options) { { qualified_name: } }

it { expect(collection.name).to be == 'scoped_books' }
end
end

describe '#query' do
it 'should define the default scope' do
expect(collection.query.scope)
Expand Down

0 comments on commit 2d41124

Please sign in to comment.