protected void SetBuildTargets(string[] tasksAction)
{
foreach(var task in tasksAction)
BuildTasks.Add(task);
}
[Meta]
public static Expression tasks(params ReferenceExpression[] expressions)
{
var arrayExpression = new ArrayLiteralExpression();
for (var i = 0; i < expressions.Length; i++)
arrayExpression.Items.Add(new
StringLiteralExpression(expressions[i].Name));
return new MethodInvocationExpression(
new ReferenceExpression("SetBuildTargets"),
arrayExpression
);
}
On Fri, Nov 7, 2008 at 4:13 PM, Paul Cowan <[EMAIL PROTECTED]> wrote:
> but is there a reason you had to use the lambda?
>
> How could I have done that? Meta methods are static.
>
> I am interested because this is my first real stab at anything like this.
>
> Cheers
>
>
> 2008/11/7 Ayende Rahien <[EMAIL PROTECTED]>
>
>> Also works but is there a reason you had to use the lambda? Why not just
>> pass the string array directly?
>>
>>
>> On Fri, Nov 7, 2008 at 4:08 PM, Paul Cowan <[EMAIL PROTECTED]> wrote:
>>
>>> 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
-~----------~----~----~----~------~----~------~--~---