Skip to content

add create method HyperModel collection class #134

Open
@catmando

Description

@catmando

i.e.

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:

    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

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions