This is not an API method, but I believe refers to the example method I posted here …
That method does NOT return the group’s component definition, … it returns the group instance who’s name matches the 2nd argument.
(Again, a group is a special kind of component instance, who’s definition has the #group? flag set to true and is hidden from the “In Model” collection Component Inspector / Browser panel.)
You yourself prove that the returned object is a group instance by later calling grpDef.transformation upon it. The #transformation method is an instance method of the Sketchup::Group and Sketchup::ComponentInstance classes.
The Sketchup::ComponentDefinition class does not have a #transformation method.
This does NOT create a new component !
compDef = Sketchup.active_model.definitions["Dan"]
compDef.inspect
#=> nil
The Sketchup::DefinitionList#[] method is a lookup method only.
Use the Sketchup::DefinitionList#add factory method to create a new component definition in the model’s definitions collection.
You likely do not understand that Sketchup::Group#entities is an old “wrapper” method, that is shorthand for … group.definition.entities.
The API authors tried to mask the fact that a group was a component instance, and make it appear to act like a definition object. So they did not have a #defintion method defined for the Sketchup::Group for many versions until SketchUp v2015.
News Flash: Component Instances (and Groups) do not “own” an entities collection. Their definitions do.
So, … since v2015 you can just go ahead and call group.definition instead of the “clunky” group.entities.parent call.
It is working just fine. You are confused is all. It looks better this way …
grpInst = find_group_by_name(grpName)
compInst = grpInst.to_component
compInst.definition.name = compName # give new definition a better name
compInst.name = instName # give the new instance a better name