I ended up fixing it this way:
protected void SetBuildTargets(Func<string[]> tasksAction)
{
foreach(var task in tasksAction())
BuildTasks.Add(task);
}
[Meta]
public static Expression tasks(params ReferenceExpression[] expressions)
{
var blockExpression = new BlockExpression();
var arrayExpression = new ArrayLiteralExpression();
for (var i = 0; i < expressions.Length; i++)
arrayExpression.Items.Add(new
StringLiteralExpression(expressions[i].Name));
blockExpression.Body.Add(new ReturnStatement(arrayExpression));
return new MethodInvocationExpression(
new ReferenceExpression("SetBuildTargets"),
blockExpression
);
}
2008/11/7 Ayende Rahien <[EMAIL PROTECTED]>
> As for documentation.The best resource for that are chapter 6 & chapter
> 12.
>
>
> On Fri, Nov 7, 2008 at 1:55 PM, dagda1 <[EMAIL PROTECTED]> wrote:
>
>>
>> >> You need to create a meta method that accepts a params of
>> ReferenceExpression.this will allow you to skip the strings.
>>
>> I can get this working for one task expression
>>
>> Like this for the DSL:
>>
>> install "horn":
>> description "This is a description of horn"
>> svn "https://svnserver/trunk"
>> #buildfile default.build
>> tasks one
>>
>> And this for the meta method:
>>
>> [Meta]
>> public static Expression tasks(ReferenceExpression expression)
>> {
>> var condition = new BlockExpression();
>>
>> var taskExpression = new StringLiteralExpression(expression.Name);
>>
>> condition.Body.Add(new ReturnStatement(taskExpression));
>>
>> return new MethodInvocationExpression(
>> new ReferenceExpression("SetBuildTargets"),
>> condition
>> );
>> }
>>
>>
>> I cannot work out how to handle an array of ReferenceExpressions as I
>> can only return 1 expression.
>>
>> Do I need to use a ListExpression or something?
>>
>> By the way the lack of documentation for this kind of thing is
>> frightenning. Without Rhino.DSL I would have been lost.
>>
>> Cheers
>>
>> Paul
>>
>>
>>
>>
>> On 6 Nov, 16:31, "Ayende Rahien" <[EMAIL PROTECTED]> wrote:
>> > LOL
>> >
>> >
>> >
>> > On Thu, Nov 6, 2008 at 6:06 PM, Paul Cowan <[EMAIL PROTECTED]> wrote:
>> > > Excellent,
>> >
>> > > I'll resist the urge to say that you should write a BOOk about this,
>> I'm
>> > > guessing you may have heard it before!!!
>> >
>> > > 2008/11/6 Ayende Rahien <[EMAIL PROTECTED]>
>> >
>> > > You need to create a meta method that accepts a params of
>> > >> ReferenceExpression.this will allow you to skip the strings.
>> > >> The meta method will be responsible only for translating the call
>> from RE
>> > >> to strings, and generating a new method call to the real Tasks method
>> >
>> > >> On Thu, Nov 6, 2008 at 7:25 AM, dagda1 <[EMAIL PROTECTED]> wrote:
>> >
>> > >>> I have the following dsl with the help of rhino DSL
>> >
>> > >>> Install "component":
>> > >>> Description "blah"
>> > >>> Svn "https://server.com"
>> > >>> Tasks "one", "two", "three"
>> >
>> > >>> I am unhappy with it because I think I am over using strings.
>> >
>> > >>> Can anyone suggest a better way?
>> >
>> > >>> Also can anyone tell me how to read in the multiple values for the
>> > >>> tasks
>> > >>> Section on the last line?
>> >
>> > >>> Cheers- Hide quoted text -
>> >
>> > - Show quoted text -
>>
>>
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Rhino Tools Dev" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/rhino-tools-dev?hl=en
-~----------~----~----~----~------~----~------~--~---