-
Notifications
You must be signed in to change notification settings - Fork 7
/
History.txt
571 lines (362 loc) · 26.5 KB
/
History.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
== 0.9.21
* Disabled platform name in URLs. We will be using a different approach in the next version of the build tools, so this will avoid incompatible URLs from being published. You can still technically build with platforms, but that should be avoided.
* Added support for using build numbers in URL strings instead of query string parameters. This will make caches flush more reliably.
* Added support for building multiple platforms. This is to be used with mobile platforms.
* Unit tests can now be simple .js files. These files will be inserted into an html template automatically.
== 0.9.20
== 0.9.19
* back out relative-path change which breaks dev mode [Erich Ocean]
== 0.9.18
* sc-gen should give warning on incorrect usage (Ticket #52) [Alexei Svitkine]
* Regression: body.html.erb no longer works (Ticket #119) [Michael Allman]
* c[:javascript_libs] included too often (Ticket #125) [Lawrence Pit]
* sc-server has to be restarted after error in code is executed (Ticket #43) [macinjosh]
* id attribute generated twice for views (Ticket #70) [Alexei Svitkine]
* text_area_view missing 'show-hint' class (Ticket #24) [mrc]
* Sass support (Ticket #117) [Lawrence Pit]
* html tag is missing required attribute xmlns (Ticket #132) [Alexei Svitkine]
* c[:resources_relative] = true should be default in sc-config (Ticket #173) [Davide Benini]
* text_area_view's generated textarea tag does not validate (Ticket #131) [Alexei Svitkine]
* Throws error when using haml (Ticket #179) [Sindre Aarsaethe]
* sc-gen language USAGE file wrong and doesn't not generate files correctly
(Ticket #130) [Trek]
* Allow view_helpers (and templates) to call dom_id to generate a guaranteed unique
DOM id (Ticket #147) [Lawrence Pit]
* Fix memory leak in build tool (Ticket #146) [Lawrence Pit]
* require('...') doesn't accept .js extension on end of name (Ticket #144) [Lawrence Pit]
* -s and --source not working on sc-install (Tickets #143, #145) [Trek]
* Add --haml and --sass options to sc-init and sc-client (Ticket #126) [Lawrence Pit]
* Refactored rendering.... allow yield :foobar (Ticket #116) [Lawrence Pit]
* Compress CSS when build for production (Ticketss #148, #151) [Lawrence Pit]
== 0.9.17
* Fix requirements to load correct version of merb (Ticket #158) [Paul Barry]
* Proxy doesn't forward GET params with merb 0.9.4 (Ticket #124) [Lawrence Pit]
== 0.9.16
* Added requirement for hoe when installing.
* Fixed regression in build tools that would break the use of :field in view
helpers.
== 0.9.15
* Fixed bug that would sometimes convert "faked" HTTP methods sent for Rails
apps into real HTTP methods, breaking Rails. (Ticket #115) [Lawrence Pit]
* Experimental support for rendering templates using HAML (Ticket #114) [Trek, Lawrence Pit]
* During sc-build, by default the build tools will now calculate a digest
key to append to the end of URLs instead of simply using a timestamp. This
will ensure that the URLs generated are properly cacheable even when
building on different machines. [CAJ]
* regex for replacing occurrences of static_url() are no longer greedy.
(Closes #87) [nciagra]
* Added support for the autobuild config option. If specified, then the named
bundle will be skipped when you run sc-build by itself. It will still be
built if you name the bundle explictly (i.e. sc-build mybundle) or if you
pass the -r option and the bundle is required by another bundle that is also
being built.
* Along those lines, the default config was also changes so that the doc tool
and the test runner will no longer autobuild.
* Added support for the build_languages config option. If specified, then
simply runnig sc-build will automatically build all of the languages named
here, even if there are no specific locatizations for said language in your
project.
* Added support for the debug directory. Any JS files in the debug directory
will now be loaded in development mode but excluded from production builds.
You can use this to include added instrumentation and benchmarks for use
in dev mode.
* Following with the debug enhancement, the SproutCore JavaScript now includes
the unittest.js in its own debug directory so that this library will no
longer be included in production builds.
* Bundles are now reloaded on each request to the development server. This
both allows the server to recover from exceptions when building a file and
eliminates a memory leak that caused an eventual slow-down.
* Eliminated need for :outlet option. And there was much rejoicing.
== 0.9.14
* The long form of sc-build -e is not --environment. It was misspelled. (Thanks zoowar)
* Fixed README for new apps to use the correct sc-build command. (Thanks Spencer Ho!)
* Added sc-install, sc-update, and sc-remove. These utilities work with
github to automatically install and update plugin JavaScript libraries.
* [FIX] Removed warning about NO_BODY_METHOD
* Upgraded to a newer version of JSDoc that can provide a much more accurate description of the inline documentation for SproutCore.
* sc_super() now works automatically and does not require you to pass this.
* sc-server now autodetects Merb.root. This means that you can start sc-server from any directory inside of your project and it will do the right thing.
== 0.9.13
* Fixed critical bug that prevented sc-build from correctly compiling stylesheets and javascript.
== 0.9.12
* Added :include_method = :link|:import option to the stylesheets_for_client helper. This allows you to select between inclusion using link tags vs @import (which is required for OpenSocial apps) - Thanks Johannes Fahrenkrug!
* Proxy now handles posts and rewrites Location headers so they stay in the same domain. Should make this feature far more robust.
* Proxy now handles query parameters.
* Build tools now replace all occurrences of "sc_super()" with a call to arguments.callee.base.apply(). This way you don't have to remember the crazy-ass string to call super. (Thanks onitunes)
* you can now start sc-server down inside of a project and it will find the proper level to work at.
* Finally fixed all remaining known issues with using tools in Windows. Works for me in my install.
* sc-config.rb is now named sc-config. The old name will still work.
* sc-config now supports three extra options in the all config:
:minify_javascript :: name one or more modes that you want the JavaScript to be minified in. Normally JS is minified in production mode, but you can use this to turn that behavior off if necessary for debugging.
:combine_javascript :: name one or more modes that you want JavaScripts to be combined in. Normally JS is combined in production mode, but you can turn this on or off for mode as needed for debugging.
:combine_stylesheets :: name one or more modes that you want stylesheets to be combined in. Normally CSS is combined in both production and development modes, but you can turn this on or off as needed.
* [FIX] Build tools were not appending a timestamp to resource URLs like they should in order to gaurantee clean caching.
== SproutCore 0.9.11
* Build tools are now much smarter about how the they process environment
configs. Before if you imported a framework (such as sproutcore) locally
into your project you would need to import any dependent frameworks as well
AND create configs for all of them. Now you do not need to do that. The
build tools will load the most recent base environment (defined in config
:all), along with the most recent bundle-specific config (defined in config
:bundle_name) and the bundle-location details from whatever library holds
the bundle. This will avoid a whole class of head-scratching config probs
that people encountered when trying to setup their system.
* Removed unused controllers array from core.js template in client generator
* sc-server now supports the new proxy option in sc-config. You can use this
to proxy your backend services through to your front-end SproutCore clients
without having to setup a separate service.
* Changed some launch options for sc-server that will improve performance.
* JSDoc can now handle paths spaces in them.
* Build tools no longer rely on symlink in dev mode. This should improve compatibility with Windows systems.
== SproutCore 0.9.10
* The build tools can now generate bundles with relative paths. Fixes #19
* Fixed minor typos in the generated template files closed #17
* Renamed generators to sc_generators. This avoids a conflict with Rails 2.1.
* [FIX] Applied bug fixes suggested by typo_pl to make the build tool run on windows.
* [FIX] Changed default language mapping for Japanese from jp to ja.
== SproutCore 0.9.8
* [FIX] Plugged memory leak in view_helper that would cause sc-server to slow down after repeated use.
== SproutCore 0.9.7
* [FIX] build tools could puke on strings files that contains quotes. This should fix it.
* [IE] innerFrame now returns the correct value for elements without hasLayout.
* [IE] get styleWidth & styleHeight on a view will now return the same value
on all platforms. The IE version would previously include padding and borders
even though it should include only the core width.
* [FIX] Unit tests could fail to execute in IE if they ended in a comment, fixed unittest.js to avoid this problem.
* [FIX] TextFieldView could blank out content when you tabbed out of in.
== SproutCore 0.9.5
* Build Tools will now remove any loc strings from the strings.js file beginning with "@@" for the key name when building the JS file to send to the client. This allows you to include strings in the strings.js file that you only want to use for server-side localization.
* Build Tools now support the "loc()" ruby helper, which will include a server-side loc string pulled from the strings.js file for the current bundle.
* Collection View now supports selectOnMouseDown which can be turned off to provide better drag and drop behavior on SourceList. SC.SourceListView now turns this off by default.
* Requesting a resource that should be available in production mode while
running your server in dev mode will now work. Bundles now build one manifest per language/build_mode combination.
* Build tools now automatically set String.preferredLanguage to the current
build language. This will ensure we start using the current strings when you
load the loc'd interface.
* Build tools no longer automatically merge .html files into the bundle.
Instead they are treated like static resources. If you want to have your html merged into the index, name it .rhtml or .html.erb
* Initial changes to SampleControls to add a form-view demo. None of the controls are wired up yet.
* Added mongrel as a required dependency of SproutCore. If you have something
like thin installed this is technically not required, but several people were
experiencing trouble installing the gem.
* Lots of Safari-specific features for Photos just to demo some of its capabilities. Client-side storage support is also provided but currently does not save changes you make.
* SC.CollectionView now supports selectAll (Ctrl+A)
* SC.CollectionView now supports the delete key to remove items. Also added delegate methods to the collection view delegate to give you control over how deletions happen.
* SC.window can now properly capture the backspace key in Firefox. To
activate this feature you must declare SC.CAPTURE_BACKSPACE_KEY = YES in your
core.js file. Capturing the backspace key will prevent the browser from going to previous page when the user hits backspace, which can lead to data loss. To capture this key, SC.window will directly set the document.onkeypress handler.
* SC.GridView now supports dropping ON items.
* SC.ListView now supports dropping ON items.
* Removed the try/catch() that was placed around property notifiers. This is not only faster but it will make it easier to debug these exceptions in Firebug and IE.
* [FIX] SC.InlineTextFieldView was using the _frame property even though that
is used by a parent class. Changed to _optframe
* Improved some documentation here and there.
* [FIX] SC.View will recache its frames when isVisibleInWindow changes. This will help to ensure we always have the correct dimensions when bringing views on and offscreen. -- All unit tests now pass again.
* Improves Photos sample to include support for adding/deleting albums and drag and drop into albums.
* Collection View now supports dropping items ON item views as well as between
them.
* Collection Views now support a delegate object that can be used to control
drag and drop and selection behavior. See mixins/collection_view_delegate.js
for a complete description of the new methods.
* SC.ArrayController now supports the useControllersForContent property. If
set to YES, then getting an objectAt() will return a controller for the value
instead of the value itself. This is useful for those times you are using an
array controller to manage a set of objects you want to control. Previously
this feature was always used by array controllers and could not be disabled.
This is now off by default.
* [FIX] SC.ArrayController and SC.ObjectController now will properly observe
their own content, even when the content is set on init.
== SproutCore 0.9.4
* [FIX] Build system now generates index.html files for client bundles, even
if they do not include .rhtml resources.
* [FIX] Typos in the readme docs for the client generator.
* Added automaticOutletFor() that will cause a view to be configured
automatically instead of forcing you to use an outlets array. Useful for when
you are manually constructing your views.
* Initial changes required to eventually implement improved observer
notification system.
* Improved documentation for a variety of classes
* [FIX] Only fixtures ending in ".js" will now be loaded. This allows you to include fixtures named .json or whatever and actually load them via XHR.
* [FIX] The build system now ignored any rhtml files that does not appear in
an lproj directory since this is where templates are stored.
== SproutCore 0.9.3
* Basic changes to get IE working. All non-view tests now pass and the doc app and test runner both load and run in IE7. Lots of visual fixes are still required for the sc-theme as well as IE-specific perf optimization and bug fixes.
* [BUG] Default template for both client and template included a stray comma in their core.js file that breaks IE and Safari 2. This is fixed in the templates and in the clients included with the framework, though you will need to make this change manually in your own apps.
* beginInlineEdit() and endInlineEdit() on SC.LabelView were renamed to comply
with the SC.Editable protocol. Use beginEditing() and commitEditing() or
discardEditing() instead.
* Added SC.Editable mixin. This provides a standard protocol for begining
and ending keyboard editing sessions on views. SC.Editable is now used
by SC.LabelView, SC.ListItemView, SC.TextFieldView, and SC.TextareaFieldView.
* Collection view now supports the default behavior to begin editing when you
click on a selected item for a second time. If you hit return it will also
begin editing. To support this, you must set contentValueIsEditable to YES
and implement beginEditing() on your item view.
* Inline editor is now supported in both SC.ListItemView and SC.LabelView.
* Improved inline editor (now renamed SC.InlineTextFieldView for consistancy).
The new editor can be used with basically any view now in addition to just the
label view. It also automatically inherits the font size and style of any
underlying DOM element that you hand it. To work with an inline editor you
will need to implement the InlineEditorDelegate (see documentation).
* Inline editor now displays with a fixed width and grows downward as you type instead of stretching out to the end.
* Added hello world sample app.
* Updated contacts sample app. It is much nicer now.
* Add sproutcore freeze:gems command to freeze latest SproutCore in your local project.
* Updated copyright to 2008.
* Converted all uses of setTimeout() in the framework to use run loop instead.
* Added invokeLater() methods to both SC.Object and Function. These
convenience methods will create a timer to execute a method or function at a
later time. If you need to execute code later, instead of setTimeout,
consider using myObject.invokeLater(0, 'methodName') ;
* New SC.Timer class provides more efficient triggers for timeouts, etc. The
timer class now also has unit tests and really awesome docs.
* [FIX] offsetParent, frame, clippingFrame, and innerFrame would all sometimes
return the wrong values in Firefox because of a bug that returns the wrong
offsetLeft and offsetTop when a parent element has a border.
* Fixed all SC unit tests that were failing (now that I can run them again).
* Test Runner now has a "Rerun Current Test" button that will rerun the
current test.
* Added convenience method $I() (or SC.inspect()) - converts an object to a
hash and then displays its key/value pairs. Useful for debugging.
* Fixed up test templates in generators so that they check for the presence
of main() before trying to fix it up. This was causing errors on new tests when added to frameworks.
* [FIX] invokeWhile() was implemented on real Array objects but not on
SC.Array mixin. This caused the controllers/controller test to fail. Now
fixed.
* Updated test runner to use new SproutCore.
* [FIX] The JSDoc template will now try to group items based on their full path, rather than just the top-most directory. This means views stored under views/buttons, for example, now appear in the group VIEWS/BUTTONS in the UI.
* Moved the base class for collections, buttons, and fields into their respective folders. This will appear them to appear under the correct location in the Doc viewer.
* [FIX] Grouped views in the source list without a visible header will
overlapping the following group, absorbing their clicks. Now they render
the proper size.
* SC.SliderView provides a horizontal slider. No vertical slider is currently
planned since those controls are so rare. If someone really needs one, please
enhance SC.SliderView to support it!
* slider_view helper creates a slider view + html
* Add example to sample_controls
* Converted docs for drag modules to JSDoc format.
* SourceListGroupViews now automatically collapse their group title if the
group value is null. Items will still be shown; they will just appear to be
"top level"
* JSDocs template was cutting the first sentance from a class description. This is now fixed.
* Added sc-build -d option to generate docs along with the build of your code.
* Updated sc_docs to work with updated SproutCore. Also adopts new look and feel and includes support for live search on all symbols defined in the
library (try it; it's cool - visit: http://localhost:4020/sproutcore/-docs)
* JSDoc template no longer generated highlighted JS source along with ref
docs. This was slowing things down and the output wasn't really that great
anyway.
* Tweaked JSdoc's Textile support to accept '-' as a bullet characters. Since
jsdoc strips all * at the beginning of lines you could not do bulletted lists
before. Now you can using -.
* Updated design of jsdoc documentation to make it easier to read.
* Renamed buttons-sprite.png to sc-theme-sprite.png. Added
sc-theme-ysprite.png. One is now used to hold all repeat-x and non-repeating
sprites while the other is used for repeat-y sprites only.
* SC.SplitView & SC.SplitDividerView provide support for draggable and
collapsable split views.
* SC.ListView now uses SC.ListItemView as its default example view instead of
SC.LabelView (or the old SC.TextCellView)
* Optimized performance of new build system when reloading ruby helpers on
every page load
* The Source List now provides support for the disclosure triangle. A disclosure is automatically shown if you have grouping enabled and you set the
groupVisibleKey property to anything other an null. The disclosure does not
yet auto-reveal during a drag.
* SC.DisclosureView - Shows a disclosure triangle button.
* [FIX] Left over calls to SC.TextCellView. Replaced with SC.LabelView.
* SC.WorkspaceView is now removed from the framework. It was always intended
for use in Sproutit applications and it is really too specific for such a generic framework.
* SC.LabelView gets a new API! Now in line with other SC.Control based
classes. Set value for the value, content/contentValueKey to display part
of some content.
* You can add view helpers to your own projects just by dropping them into
a lib directory inside your framework or client. If you need to load your
view helpers in a certain order, use the view_helper() method. See the view helpers in SproutCore for an example usage.
* The build system now reloads view helpers each time you load a page. This
means you no longer need to restart the sc-server when you make a change to
the view helper code.
* SproutCore view helpers are now stored in the framework itself along with
the JavaScript. This will make it easier to include the latest version of
the SproutCore framework in you app without having to install a new set of
build tools. This should basically eliminate the only frequently changing
part of the build tools.
* SC.SourceList and SC.ListItemView properties now use "content..Key"
convention for naming properties. If you have built code with the old
"content..Property" conventions, you will need to update your code.
* Added hint property to text_area_view helper that is required to display ghost text.
* added new SC.CheckboxView and SC.RadioView for creating simulated checkbox
and radio buttons. These buttons have more functions than their platform
native counterparts including mixed style and full styling support.
* Moved field view subclasses to views/field directory.
* Added SC.Validatable mixin that can be applied to any view to make it work
with validators. SC.FieldView now incorporates this mixin.
* Now if you add initMixin() to a mixin, it will be called automatically
whenever an object that includes the mixin is instantiated. You can use this
to perform any setup necessary for the mixin.
* Renamed SC.Control.contentValueProperty to SC.Control.contentValueKey to
be consistent with the rest of the API.
* Added updateContentWithValueObserver to SC.Control that will relay changes
to the value property back to the content object if you use the default
implementation.
* Changed SC.Control observers for various states that were once private to
public methods. This way you can override them in your subclasses if you need
to perform some extra processing and you want to make sure you do them in the
right order. You can also just add more observers as well.
* Added JSDoc info for Validators, SC.FieldView, SC.CheckboxFieldView
* Switched some Sc Theme CSS to use sc-button-view classname instead of more
generic a.button or a.regular.
* Added new addClassName, removeClassName, setClassName and hasClassName
methods on SC.View that are 7x faster than prototype's version.
* Integrated SC.Control into SC.ButtonView
* Changed SC.ButtonView.labelText and SC.ButtonView.labelSelector to
SC.ButtonView.title and SC.ButtonView.titleSelector to be more consistant with current naming conventions.
* [FIX] Some doc tags were wrong in SC.ScrollView and others.
* Improved documentations on SC.ImageView.
* SC.ImageView now includes the SC.Control mixin and can accept either a
CSS class name or a URL as its value. This makes it easy to switch an image
from using a sprite to use a custom-generated image and back again.
* SproutCore now includes some shared standard icons that you can use in your
own application, courtesy of IconDrawer (http://www.icondrawer.com).
* Generalized SC.Control's observer so that you can now use it to observe
changes to multiple properties on content. This should capture a very common pattern requires by collection item views. Most control-list SC.Views will
eventually adopt this mixin.
* Added ListItemView which will be used for rendering content in list views
and source list views. ListViewItem can render a name, icon, and optional
unread count.
* Changed displayProperty in SC.CollectionView to contentValueKey to match the new SC.Control pattern.
* SC.Control now has built in support for a value and content property. The value property is typically the value the control displays, while content is an object that you might pull a content value from. You can determine the proeprty of the content object to use as a value by setting the 'contentValueKey'. The contentValueKey can also be provided by the displayDelegate.
* Added SC.DelegateSupport mixin that can be used to support the delegate pattern.
* [FIX] Selection management would throw exception after a drag and drop.
* [FIX] Optimization in fmt() would through an exception if you passed it a
value that did not support toString().
* Moved selection management methods from CollectionController in independent
SC.SelectionSupport mixin. This mixin is now used by both
SC.CollectionController and SC.ArrayController so you can use either one to
manage a selection state. You can also apply this mixin to your own
controllers to manage selection state if you like (though this is not required
to manage selections.)
* Began to separate CSS rules into a core.css and a theme.css. The core.css
styles are generally required by SproutCore and should apply even if you build
your own theme. The theme.css rules apply to the SproutCore theme only and
can be overriden by your own CSS.
* Added SC.SourceListView and sc-theme styles for source lists. Source lists
support grouping if you enable this feature. See the new Collections2 tab in
the SampleControls app for an example source list.
* Added SC.TableView. This feature is in progress. See the new
Collections2 tab in the SampleControls app for an example table view.
* Changed asHTML and asText properties to innerHTML and innerText to match
their DOM equivalents.
* Renamed SC.CollectionItem mixin to SC.Control mixin. SC.Control mixin now
provides some standard functionality for all interactive controls such as
handling selection states, enabled and focus states.
* Removed support for :resize_options property in view helper, since
auto-resizing is no longer supported in SC.View (it never worked right anyway
and was not functionally very usable.)
* innerText property now uses TextNodes, making it about 50% faster than
innerHTML on FireFox.
* Added view helpers for list_view, scroll_view, grid_view, source_list_view,
and table_view. Also refactored collection view helpers into their own file.
* [FIX] CollectionView is now able to render items in groups.
* [FIX] SC.ObjectController: Avoid unwanted commit when oldValue == null && newValue == ''.
== 0.9.0 2008-03-08
* 1 major enhancement:
* Initial release of the new BlueRibbon train build system