In other niceties, using the with{} closure:

person.with {
    firstName = 'Guillaume'
    lastName = 'Laforge'
}

That can be handy too, for avoiding some repetition.

On Fri, Dec 12, 2008 at 11:57 AM, Mattias Persson
<matt...@neotechnology.com> wrote:
> Nice,
>
> That would actually be my next question :)
>
> Cool things indeed.
>
> 2008/12/12 Guillaume Laforge <glafo...@gmail.com>:
>> You can also do some fun things like:
>>
>> def myNodeName = "firstName"
>> assert person."${myNodeName}" == "firstName"
>>
>> :-)
>>
>> On Fri, Dec 12, 2008 at 11:41 AM, Mattias Persson
>> <matt...@neotechnology.com> wrote:
>>> Awesome,
>>>
>>> that takes care of that then, thanks!
>>>
>>> 2008/12/12 Guillaume Laforge <glafo...@gmail.com>:
>>>> In Groovy, you can "quote" method names and properties.
>>>>
>>>> So when you have weirdo characters, you can do that instead:
>>>>
>>>> myNode."super - funky + node / name" = "something.
>>>>
>>>>
>>>> On Fri, Dec 12, 2008 at 11:36 AM, Mattias Persson
>>>> <matt...@neotechnology.com> wrote:
>>>>> Hmm, this thread is probably dead?
>>>>>
>>>>> But, I just thought about the:
>>>>>
>>>>> myNode.name = "Mattias"
>>>>> myNode.someProperty = "Something else"
>>>>>
>>>>> Keep in mind that property keys have no restrictions as to length or
>>>>> content which means a property key can contain spaces and '='
>>>>> characters and what not. f.ex.
>>>>>
>>>>> myNode.a property with spaces in it = "Hello there"
>>>>>
>>>>> Wouldn't work, right?
>>>>>
>>>>> Could you use the real methods (setProperty/getProperty/hasProperty)
>>>>> for such keys instead?
>>>>>
>>>>> 2008/12/7 Stig Lau <stig....@gmail.com>:
>>>>>> I've tossed up a demo of Neo4J vs Groovy which shows Neo4J running in
>>>>>> Groovy with the help of some Maven magic. Sadly nough, I didn't get
>>>>>> Guillaume's propositions working, so I'm leaving the ball over to the
>>>>>> guys who know Groovy a little better than me.
>>>>>> The project is packaged as a Maven Archetype, as a test of improving
>>>>>> deployment of sourcecode. Instructions are posted on the blog. The
>>>>>> source code is hosted on Mercurial, so feel free to move it to a VCS
>>>>>> of choice, as I consider it property of the Neo4J community.
>>>>>>        -Stig,
>>>>>>
>>>>>> http://stigl.wordpress.com/groovy-does-neo4j-thanks-to-maven-simplicity
>>>>>>
>>>>>>> From: "Guillaume Laforge"
>>>>>>> Subject: [Neo] Groovy and Neo4J
>>>>>>>
>>>>>>> Hi all,
>>>>>>>
>>>>>>> I had an email exchange with Emil this morning about what Groovy could
>>>>>>> bring to using Neo4J. I think using a dynamic language with a graph
>>>>>>> database can make a lot of sense, as it's easier to work with a "less
>>>>>>> strict" language with semi structured data not requiring heavyweight
>>>>>>> set-in-stone schemas.
>>>>>>>
>>>>>>> ---------------%<--------------------------------------
>>>>>>>
>>>>>>> I haven't downloaded and tried Neo yet, but if I find some time, I'd
>>>>>>> be happy to give it a try.
>>>>>>> As you were mentioning that Groovy should probably work well with Neo,
>>>>>>> yes, I'm pretty certain it does, and I'm sure we could bring some
>>>>>>> Groovyisms into the loop to make using Neo even more seamless and
>>>>>>> nice.
>>>>>>>
>>>>>>> For instance, if I look at your quick start example:
>>>>>>>
>>>>>>> Node firstNode = neo.createNode();
>>>>>>> Node secondNode = neo.createNode();
>>>>>>> Relationship relationship = firstNode.createRelationshipTo(
>>>>>>> secondNode, MyRelationshipTypes.KNOWS );
>>>>>>>
>>>>>>> firstNode.setProperty( "message", "Hello, " );
>>>>>>> secondNode.setProperty( "message", "world!" );
>>>>>>> relationship.setProperty( "message", "brave Neo " );
>>>>>>>
>>>>>>> Groovy handles the setProperty/getProperty methods in a particular
>>>>>>> fashion, and without doing anything special, you should be able to
>>>>>>> directly use this nicer syntax in Groovy:
>>>>>>>
>>>>>>> firstNode.message = "Hello"
>>>>>>> secondNode.message = "world!"
>>>>>>> relationship.message = "brave Neo"
>>>>>>>
>>>>>>> It really gives people the impression of working with real objects,
>>>>>>> with real properties or methods.
>>>>>>>
>>>>>>> With maps or expandos in Groovy, you can already manipulate
>>>>>>> quasi-beans with that syntax, and people may potentially not need to
>>>>>>> manipulate Node or Relationship directly, but could use these maps /
>>>>>>> expandos instead, and it would only be when storing these in the graph
>>>>>>> database that you could "coerce" the type to Node or Relationship.
>>>>>>>
>>>>>>> More concretely:
>>>>>>>
>>>>>>> def firstNode = [:]
>>>>>>> firstNode.message = "Hello"
>>>>>>>
>>>>>>> And you could then just call some store() method in your APIs --
>>>>>>> although it seems in the tutorial, there's no need to "store", just
>>>>>>> creating the nodes and relationships are enough.
>>>>>>>
>>>>>>> Also for relationships, we could imagine using Groovy's native list
>>>>>>> syntax for representing such triples (and using static import for
>>>>>>> KNOWS):
>>>>>>>
>>>>>>> def relationship = [ firstNode, KNOWS, secondNode ]
>>>>>>>
>>>>>>> Combining everything:
>>>>>>>
>>>>>>> [
>>>>>>>   [name: "Neo"],
>>>>>>>   [KNOWS: [since: someDate],
>>>>>>>   [name: "Trinity"]
>>>>>>> ]
>>>>>>>
>>>>>>> I was also mentioning coercion, as you can create custom type coercion
>>>>>>> in Groovy (kind of a cast, if you wish, but you can transform
>>>>>>> something into some other type):
>>>>>>>
>>>>>>> [name: "Neo"] as Node
>>>>>>> [ firstNode, KNOWS, secondNode ] as Relationship
>>>>>>>
>>>>>>> Or simply at declaration time:
>>>>>>>
>>>>>>> Node neo = [name: "Neo"]
>>>>>>> Relationship rel =  [ firstNode, KNOWS, secondNode ]
>>>>>>>
>>>>>>> Anyway... enough brainstorming for now, but a graph database like Neo
>>>>>>> and a dynamic language like Groovy, and you can really really have
>>>>>>> fun.
>>>>>>> Congratulations for a great graph database project!
>>>>>>> Keep up the good work.
>>>>>>>
>>>>>>> --
>>>>>>> Guillaume Laforge
>>>>>>> Groovy Project Manager
>>>>>>> Head of Groovy Development at SpringSource
>>>>>>> http://www.springsource.com/g2one
>>>>>>
>>>>>> _______________________________________________
>>>>>> Neo mailing list
>>>>>> User@lists.neo4j.org
>>>>>> https://lists.neo4j.org/mailman/listinfo/user
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> Mattias Persson, [matt...@neotechnology.com]
>>>>> Neo Technology, www.neotechnology.com
>>>>> _______________________________________________
>>>>> Neo mailing list
>>>>> User@lists.neo4j.org
>>>>> https://lists.neo4j.org/mailman/listinfo/user
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Guillaume Laforge
>>>> Groovy Project Manager
>>>> Head of Groovy Development at SpringSource
>>>> http://www.springsource.com/g2one
>>>> _______________________________________________
>>>> Neo mailing list
>>>> User@lists.neo4j.org
>>>> https://lists.neo4j.org/mailman/listinfo/user
>>>>
>>>
>>>
>>>
>>> --
>>> Mattias Persson, [matt...@neotechnology.com]
>>> Neo Technology, www.neotechnology.com
>>> _______________________________________________
>>> Neo mailing list
>>> User@lists.neo4j.org
>>> https://lists.neo4j.org/mailman/listinfo/user
>>>
>>
>>
>>
>> --
>> Guillaume Laforge
>> Groovy Project Manager
>> Head of Groovy Development at SpringSource
>> http://www.springsource.com/g2one
>> _______________________________________________
>> Neo mailing list
>> User@lists.neo4j.org
>> https://lists.neo4j.org/mailman/listinfo/user
>>
>
>
>
> --
> Mattias Persson, [matt...@neotechnology.com]
> Neo Technology, www.neotechnology.com
> _______________________________________________
> Neo mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>



-- 
Guillaume Laforge
Groovy Project Manager
Head of Groovy Development at SpringSource
http://www.springsource.com/g2one
_______________________________________________
Neo mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to