hyperstack-org / hyperstack-org/hyperstack

add `create` method HyperModel collection class

Open
#134 0 comments 0 reactions 1 assignee Claimed by @adamcreekroad View on GitHub
enhancement good first issue
Dominant language
JavaScript
Stars
538
Forks
41
PR merge metrics
No merged PRs in 30d

Description

i.e.
```ruby
something.groups.create(name: 'new group')
# roughly the same as
new_group << Group.new(name: 'new group')
something.groups << new_group
new_group.save
```

Note that Hyperstack currently **does not save** an item when its pushed onto a collection, *unless* the collection is a `has_many :through` relationship, hence the final save above.

Like the AR create method this should return a promise / take a block that is resolved when the save completes.

Roughly code:

```ruby
def create(args = {})
args = [args] unless args.is_a? Array
items_to_save =
if (through_association = @association&.through_association)
args.collect do |attributes|
through_association.klass.new(
@association.inverse_of => @owner,
@association.source => @association.klass.new(attributes)
)
end
else
args.collect do |attributes|
@association.klass.new(attributes).tap { |item| _internal_push(item) }
end
end
Promise.new.tap do |promise|
Promise.when(items_to_save.collect(&:save)).then do
promise.resolve(items_to_save)
yield *items_to_save if block_given?
end
end
end
```

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.