lebowski 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. data/History.md +17 -1
  2. data/Manifest.txt +8 -0
  3. data/README.md +6 -0
  4. data/lib/lebowski/foundation/application.rb +340 -74
  5. data/lib/lebowski/foundation/core.rb +23 -0
  6. data/lib/lebowski/foundation/dom_element.rb +15 -0
  7. data/lib/lebowski/foundation/errors/timeout.rb +5 -0
  8. data/lib/lebowski/foundation/mixins/collection_item_view_support.rb +5 -0
  9. data/lib/lebowski/foundation/mixins/define_paths_support.rb +318 -0
  10. data/lib/lebowski/foundation/mixins/delegate_support.rb +5 -0
  11. data/lib/lebowski/foundation/mixins/frame_application_context_support.rb +37 -0
  12. data/lib/lebowski/foundation/mixins/inline_text_field_support.rb +5 -0
  13. data/lib/lebowski/foundation/mixins/key_check.rb +5 -0
  14. data/lib/lebowski/foundation/mixins/list_item_view_support.rb +5 -0
  15. data/lib/lebowski/foundation/mixins/positioned_element.rb +24 -0
  16. data/lib/lebowski/foundation/mixins/stall_support.rb +5 -0
  17. data/lib/lebowski/foundation/mixins/user_actions.rb +37 -8
  18. data/lib/lebowski/foundation/mixins/wait_actions.rb +5 -0
  19. data/lib/lebowski/foundation/object_array.rb +96 -1
  20. data/lib/lebowski/foundation/proxy_factory.rb +2 -0
  21. data/lib/lebowski/foundation/proxy_object.rb +128 -130
  22. data/lib/lebowski/foundation/views/select_button.rb +69 -0
  23. data/lib/lebowski/foundation/views/view.rb +10 -0
  24. data/lib/lebowski/foundation/views/web.rb +26 -0
  25. data/lib/lebowski/foundation.rb +10 -0
  26. data/lib/lebowski/runtime/errors/remote_control_command_execution_error.rb +5 -0
  27. data/lib/lebowski/runtime/errors/remote_control_command_timeout_error.rb +5 -0
  28. data/lib/lebowski/runtime/errors/remote_control_error.rb +5 -0
  29. data/lib/lebowski/runtime/errors/selenium_server_error.rb +5 -0
  30. data/lib/lebowski/runtime/object_encoder.rb +5 -0
  31. data/lib/lebowski/runtime/sprout_core_driver.rb +5 -0
  32. data/lib/lebowski/runtime/sprout_core_extensions.rb +114 -0
  33. data/lib/lebowski/runtime.rb +5 -0
  34. data/lib/lebowski/scui/mixins/link_support.rb +32 -0
  35. data/lib/lebowski/scui/mixins/node_item_view_support.rb +50 -13
  36. data/lib/lebowski/scui/mixins/terminal_view_support.rb +30 -0
  37. data/lib/lebowski/scui/views/color_well.rb +48 -0
  38. data/lib/lebowski/scui/views/combo_box.rb +90 -87
  39. data/lib/lebowski/scui/views/content_editable.rb +422 -0
  40. data/lib/lebowski/scui/views/date_picker.rb +70 -58
  41. data/lib/lebowski/scui/views/linkit.rb +8 -0
  42. data/lib/lebowski/scui/views/select_field_tab.rb +30 -0
  43. data/lib/lebowski/scui.rb +18 -0
  44. data/lib/lebowski/version.rb +2 -2
  45. data/resources/user-extensions.js +293 -11
  46. metadata +69 -25
@@ -2,7 +2,7 @@
2
2
  // Project: Lebowski Framework - The SproutCore Test Automation Framework
3
3
  // License: Licensed under MIT license (see License.txt)
4
4
  // ==========================================================================
5
- /*globals Selenium PageBot selenium */
5
+ /*globals Selenium PageBot selenium eval_css*/
6
6
 
7
7
  /**
8
8
  This file contains all Lebowski framework extensions for the Selenium Core framework.
@@ -716,6 +716,87 @@ ScExt.CollectionView = {
716
716
 
717
717
  };
718
718
 
719
+ ScExt.RangeGenerator = {
720
+
721
+ generate: function(params) {
722
+ var startElementSelector = params['startElementSelector'];
723
+ var startElementIndex = params['startElementIndex'];
724
+ var startOffset = params['startOffset'];
725
+ var startBefore = params['startBefore'];
726
+ var startAfter = params['startAfter'];
727
+ var endElementSelector = params['endElementSelector'];
728
+ var endElementIndex = params['endElementIndex'];
729
+ var endOffset = params['endOffset'];
730
+ var endBefore = params['endBefore'];
731
+ var endAfter = params['endAfter'];
732
+ var collapseToStart = params['collapseToStart'];
733
+ var collapseToEnd = params['collapseToEnd'];
734
+
735
+ var startElement = eval_css(startElementSelector, selenium.browserbot.getDocument())[startElementIndex];
736
+ var endElement = eval_css(endElementSelector, selenium.browserbot.getDocument())[endElementIndex];
737
+
738
+ var startElemOffset = this._parseRangeElementOffset(startElement, startOffset);
739
+ var endElemOffset = this._parseRangeElementOffset(endElement, endOffset);
740
+
741
+ var range = selenium.browserbot.getDocument().createRange();
742
+
743
+ if (startBefore) {
744
+ range.setStartBefore(startElemOffset[0]);
745
+ } else if (startAfter) {
746
+ range.setStartAfter(startElemOffset[0]);
747
+ } else {
748
+ range.setStart(startElemOffset[0], startElemOffset[1]);
749
+ }
750
+
751
+ if (endBefore) {
752
+ range.setEndBefore(endElemOffset[0]);
753
+ } else if (endAfter) {
754
+ range.setEndAfter(endElemOffset[0]);
755
+ } else {
756
+ range.setEnd(endElemOffset[0], endElemOffset[1]);
757
+ }
758
+
759
+ if (collapseToStart === true) {
760
+ range.collapse(true);
761
+ } else if (collapseToEnd === true) {
762
+ range.collapse(false);
763
+ }
764
+
765
+ return range;
766
+ },
767
+
768
+ _parseRangeElementOffset: function(element, offset) {
769
+ if (element.childNodes.length === 0) {
770
+ return [element, 0];
771
+ }
772
+
773
+ else if (typeof offset === 'number') {
774
+ return [element, offset];
775
+ }
776
+
777
+ // @tnN-M
778
+ else if (typeof offset === 'string') {
779
+ var matches = offset.match(/@tn(\d+)-(\d+)/i);
780
+ if (matches && matches.length === 3) {
781
+ var tnPos = matches[1]*1;
782
+ var tnOffset = matches[2]*1;
783
+ var tnCounter = 0;
784
+ for (var i = 0; i < element.childNodes.length; i++) {
785
+ var node = element.childNodes[i];
786
+ if (node.nodeName === "#text") {
787
+ if (tnPos === tnCounter) {
788
+ return [node, tnOffset];
789
+ }
790
+ tnCounter = tnCounter + 1;
791
+ }
792
+ }
793
+ }
794
+ }
795
+
796
+ return [element, 0];
797
+ }
798
+ };
799
+
719
800
  ///////////////////// Selenium Core API Extensions - Actions for Testing ////////////////////////////////////
720
801
 
721
802
  /**
@@ -802,16 +883,15 @@ Selenium.prototype.doOpenScApplication = function(appRootPath, timeoutInSeconds)
802
883
 
803
884
  if (win.location.href !== loc) win.location.href = loc;
804
885
 
805
- // First set up closure
806
- var appName = this._sc_applicationName;
886
+ return this.doUpdateScApplicationContext(this._sc_applicationName, timeoutInSeconds);
887
+ };
888
+
889
+ Selenium.prototype.doUpdateScApplicationContext = function(appName, timeoutInSeconds) {
890
+
891
+ if (typeof(appName) !== "string" || appName.length === 0) appName = this._sc_applicationName;
807
892
 
808
893
  var timeout = timeoutInSeconds ? (parseInt(timeoutInSeconds, 10) * 1000) : Selenium.DEFAULT_TIMEOUT;
809
894
 
810
- // Now run the wait function which will keep checking until
811
- // either the SproutCore framework and application are found or
812
- // the time out is reached. The function will also set up some
813
- // core global variables to make it easier to program againt
814
- // the SC framework and application
815
895
  return Selenium.decorateFunctionWithTimeout(function () {
816
896
 
817
897
  var win = selenium.browserbot.getCurrentWindow();
@@ -827,6 +907,7 @@ Selenium.prototype.doOpenScApplication = function(appRootPath, timeoutInSeconds)
827
907
 
828
908
  return true;
829
909
  }, timeout, this);
910
+
830
911
  };
831
912
 
832
913
  ///////////////////// Selenium Core API Extensions - Actions ////////////////////////////////////
@@ -835,7 +916,8 @@ Selenium.prototype.doOpenScApplication = function(appRootPath, timeoutInSeconds)
835
916
  Move the application window to a given x-y coordinate
836
917
  */
837
918
  Selenium.prototype.doScWindowMoveTo = function(x, y) {
838
- var win = selenium.browserbot.getCurrentWindow();
919
+ var win = this.browserbot.getCurrentWindow();
920
+ win.focus();
839
921
  win.moveTo(x*1, y*1);
840
922
  };
841
923
 
@@ -843,7 +925,8 @@ Selenium.prototype.doScWindowMoveTo = function(x, y) {
843
925
  Resize the application window by a width and height
844
926
  */
845
927
  Selenium.prototype.doScWindowResizeTo = function(width, height) {
846
- var win = selenium.browserbot.getCurrentWindow();
928
+ var win = this.browserbot.getCurrentWindow();
929
+ win.focus();
847
930
  win.resizeTo(width*1, height*1);
848
931
  };
849
932
 
@@ -851,11 +934,130 @@ Selenium.prototype.doScWindowResizeTo = function(width, height) {
851
934
  Maximizes the applicaiton window
852
935
  */
853
936
  Selenium.prototype.doScWindowMaximize = function() {
854
- var win = selenium.browserbot.getCurrentWindow();
937
+ var win = this.browserbot.getCurrentWindow();
938
+ win.focus();
855
939
  win.resizeTo(window.screen.availWidth, window.screen.availHeight);
856
940
  win.moveTo(1,1); // Slight offset from origin so that Firefox will actually move the window
857
941
  };
858
942
 
943
+ /**
944
+ Used to select an open window based on locator values. The window that is selected will
945
+ become the current context is which all commands there after are directed towards.
946
+
947
+ Expected input:
948
+
949
+ {
950
+ locatorType: "location" | "title" | "name" | "top"
951
+ locatorValue: string | regex
952
+ }
953
+
954
+ To select the main application window, just set the locationType to be "top", no locator
955
+ value is needed.
956
+
957
+ @see #_getScOpenedWindow
958
+ */
959
+ Selenium.prototype.doScSelectWindow = function(params) {
960
+ var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
961
+ var locatorType = decodedParams['locatorType'];
962
+ var locatorValue = decodedParams['locatorValue'];
963
+
964
+ if (locatorType === "top") {
965
+ this.browserbot._selectTopWindow();
966
+ } else {
967
+ var name = this._getScOpenedWindowName(locatorType, locatorValue);
968
+ this.browserbot._selectWindowByName(name);
969
+ }
970
+
971
+ var win = this.browserbot.getCurrentWindow();
972
+ if (win) win.focus();
973
+ };
974
+
975
+ /**
976
+ Closes an opened window based on a matching locator type and value
977
+ */
978
+ Selenium.prototype.doScCloseOpenedWindow = function(params) {
979
+ var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
980
+ var locatorType = decodedParams['locatorType'];
981
+ var locatorValue = decodedParams['locatorValue'];
982
+
983
+ var win = this._getScOpenedWindow(locatorType, locatorValue);
984
+ delete this.browserbot.openedWindows[win.name];
985
+ if (win) win.close();
986
+ };
987
+
988
+ /**
989
+ Checks if there is a opened window matching a given locator strategy. Expected input:
990
+
991
+ {
992
+ locatorType: "location" | "title" | "name"
993
+ locatorValue: string | regex
994
+ }
995
+
996
+ @see #_getScOpenedWindow
997
+ */
998
+ Selenium.prototype.isScOpenedWindow = function(params) {
999
+ var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
1000
+ var locatorType = decodedParams['locatorType'];
1001
+ var locatorValue = decodedParams['locatorValue'];
1002
+
1003
+ // This is a hack for the Safari browser. I'm not sure why this is happening, but if you
1004
+ // open a window using window.open, call this method, and then call window.open
1005
+ // again, and where you supply the exact same name to open, Selenium's console window
1006
+ // will get redirect to the url supplied to the open method. It's really weird. I'm
1007
+ // sure it has something to do with how selenium has changed the default open method.
1008
+ // In any case, by updating the openedWindows object it, for whatever reason, fixes
1009
+ // the problem. I don't like this hack, but I can't think of what the root cause is.
1010
+ // Requires further investigation with the Selenium framework.
1011
+ var safariHack = '__safari_hack__' + Math.round(100000 * Math.random());
1012
+ this.browserbot.openedWindows[safariHack] = {};
1013
+ delete this.browserbot.openedWindows[safariHack];
1014
+
1015
+ var name = this._getScOpenedWindowName(locatorType, locatorValue);
1016
+ return name !== null;
1017
+ };
1018
+
1019
+ /**
1020
+ Returns an opened window matching a given locator type and value. The locator type
1021
+ can either be 'name', 'title', or 'location'. The locator value can either be a string
1022
+ or a regular expression. The assigned name of the first window that matches the locator
1023
+ will be returned, otherwise null is returned.
1024
+ */
1025
+ Selenium.prototype._getScOpenedWindowName = function(locatorType, locatorValue) {
1026
+ var openedWindows = this.browserbot.openedWindows;
1027
+ var win = null;
1028
+ var value = null;
1029
+
1030
+ for (name in openedWindows) {
1031
+ win = openedWindows[name];
1032
+ if (!win || this.browserbot._windowClosed(win)) continue;
1033
+ if (locatorType === 'location') {
1034
+ value = win.location.href;
1035
+ } else if (locatorType === 'title') {
1036
+ try { value = win.document.title; } catch (e) { /* swallow any permission denied errors here */ }
1037
+ } else if (locatorType === 'name') {
1038
+ value = name;
1039
+ } else {
1040
+ return null;
1041
+ }
1042
+
1043
+ if (typeof locatorValue === "string" && locatorValue === value) {
1044
+ return name;
1045
+ } else if (locatorValue instanceof RegExp && value.match(locatorValue)) {
1046
+ return name;
1047
+ }
1048
+ }
1049
+
1050
+ return null;
1051
+ };
1052
+
1053
+ Selenium.prototype._getScOpenedWindow = function(locatorType, locatorValue) {
1054
+ var name = this._getScOpenedWindowName(locatorType, locatorValue);
1055
+ //var win = this.browserbot.getWindowByName(name, true);
1056
+ var win = this.browserbot.openedWindows[name];
1057
+ if (!win) return null;
1058
+ return win;
1059
+ };
1060
+
859
1061
  /**
860
1062
  Action to call a view's scrollToVisible method. The path must point
861
1063
  to an actual SC view object.
@@ -1018,6 +1220,58 @@ Selenium.prototype.doScCoreQueryDone = function(handle) {
1018
1220
  this._unregisterCoreQueryObject(handle);
1019
1221
  };
1020
1222
 
1223
+ /**
1224
+ Used to select a range in a DOM structure
1225
+ */
1226
+ Selenium.prototype.doSelectRange = function(params) {
1227
+ var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
1228
+ var range = ScExt.RangeGenerator.generate(decodedParams);
1229
+
1230
+ var selection = this.browserbot.getCurrentWindow().getSelection();
1231
+ selection.removeAllRanges();
1232
+ selection.addRange(range);
1233
+ };
1234
+
1235
+ /**
1236
+ Used to delete content within a given range
1237
+ */
1238
+ Selenium.prototype.doRangeDeleteContent = function(params) {
1239
+ var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
1240
+ var range = ScExt.RangeGenerator.generate(decodedParams);
1241
+
1242
+ var selection = this.browserbot.getCurrentWindow().getSelection();
1243
+ selection.removeAllRanges();
1244
+ selection.addRange(range);
1245
+ range.deleteContents();
1246
+
1247
+ if (!$SC.browser.mozilla) {
1248
+ range = this.browserbot.getDocument().createRange();
1249
+ selection.removeAllRanges();
1250
+ selection.addRange(range);
1251
+ }
1252
+ };
1253
+
1254
+ /**
1255
+ Used to insert content at the beginning of a given range
1256
+ */
1257
+ Selenium.prototype.doRangeInsertContent = function(params) {
1258
+ var decodedParams = ScExt.ObjectDecoder.decodeHash(params);
1259
+ var range = ScExt.RangeGenerator.generate(decodedParams);
1260
+ range.collapse(true);
1261
+
1262
+ var content = decodedParams['content'];
1263
+ var doc = this.browserbot.getDocument();
1264
+ var selection = this.browserbot.getCurrentWindow().getSelection();
1265
+ selection.removeAllRanges();
1266
+ selection.addRange(range);
1267
+
1268
+ if ($SC.browser.msie) {
1269
+ doc.selection.createRange().pasteHTML(content);
1270
+ } else {
1271
+ doc.execCommand('inserthtml', false, content);
1272
+ }
1273
+ };
1274
+
1021
1275
  ///////////////////// Selenium Core API Extensions - Accessors ////////////////////////////////////
1022
1276
 
1023
1277
  /**
@@ -1141,6 +1395,14 @@ Selenium.prototype.getScObjectArrayIndexLookup = function(path, lookupParams) {
1141
1395
  return indexes;
1142
1396
  };
1143
1397
 
1398
+ /**
1399
+ Gets the count of elements that match the given CSS selector
1400
+ */
1401
+ Selenium.prototype.getCssSelectorCount = function(selector) {
1402
+ var result = this.browserbot.evaluateCssSelectorCount(selector, this.browserbot.getDocument());
1403
+ return result;
1404
+ };
1405
+
1144
1406
  /////// SC Core Query Specific Selenium Calls /////////////////
1145
1407
 
1146
1408
  /**
@@ -1310,6 +1572,16 @@ Selenium.prototype.getScCoreQueryElementTag = function(handle, elemIndex) {
1310
1572
  return elem.tagName;
1311
1573
  };
1312
1574
 
1575
+ Selenium.prototype.getElementTagName = function(selector, elemIndex) {
1576
+ var elem = eval_css(selector, selenium.browserbot.getDocument())[elemIndex];
1577
+ return elem.tagName.toLowerCase();
1578
+ };
1579
+
1580
+ Selenium.prototype.getElementChildNodesCount = function(selector, elemIndex) {
1581
+ var elem = eval_css(selector, selenium.browserbot.getDocument())[elemIndex];
1582
+ return elem.childNodes.length;
1583
+ };
1584
+
1313
1585
  /////// SC Collection View Specific Selenium Calls /////////////////
1314
1586
 
1315
1587
  Selenium.prototype.getScCollectionViewContentGroupIndexes = function(path) {
@@ -1419,3 +1691,13 @@ PageBot.prototype.locateElementByScCoreQuery = function(text) {
1419
1691
  return elem;
1420
1692
 
1421
1693
  };
1694
+
1695
+ /**
1696
+ Returns the number of DOM elements that match the given css selector.
1697
+
1698
+ (Not entirely sure why this wasn't already part of the browser bot.)
1699
+ */
1700
+ PageBot.prototype.evaluateCssSelectorCount = function(css, document) {
1701
+ var elements = eval_css(css, document);
1702
+ return elements.length;
1703
+ };
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lebowski
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ hash: 23
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ - 0
10
+ version: 0.2.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Michael Cohen
@@ -9,49 +15,73 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-06-07 00:00:00 -04:00
18
+ date: 2010-08-20 00:00:00 -04:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: selenium-client
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 59
30
+ segments:
31
+ - 1
32
+ - 2
33
+ - 18
23
34
  version: 1.2.18
24
- version:
35
+ type: :runtime
36
+ version_requirements: *id001
25
37
  - !ruby/object:Gem::Dependency
26
38
  name: rspec
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
30
42
  requirements:
31
43
  - - ">="
32
44
  - !ruby/object:Gem::Version
45
+ hash: 27
46
+ segments:
47
+ - 1
48
+ - 3
49
+ - 0
33
50
  version: 1.3.0
34
- version:
51
+ type: :runtime
52
+ version_requirements: *id002
35
53
  - !ruby/object:Gem::Dependency
36
54
  name: rubyforge
37
- type: :development
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
40
58
  requirements:
41
59
  - - ">="
42
60
  - !ruby/object:Gem::Version
61
+ hash: 7
62
+ segments:
63
+ - 2
64
+ - 0
65
+ - 4
43
66
  version: 2.0.4
44
- version:
67
+ type: :development
68
+ version_requirements: *id003
45
69
  - !ruby/object:Gem::Dependency
46
70
  name: hoe
47
- type: :development
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
71
+ prerelease: false
72
+ requirement: &id004 !ruby/object:Gem::Requirement
73
+ none: false
50
74
  requirements:
51
75
  - - ">="
52
76
  - !ruby/object:Gem::Version
53
- version: 2.6.0
54
- version:
77
+ hash: 21
78
+ segments:
79
+ - 2
80
+ - 6
81
+ - 1
82
+ version: 2.6.1
83
+ type: :development
84
+ version_requirements: *id004
55
85
  description: " \n Lebowski is a test automation framework designed for full feature, integration, \n and regression testing of SproutCore applications.\n \n"
56
86
  email:
57
87
  - michael.lee.cohen@gmail.com
@@ -94,7 +124,9 @@ files:
94
124
  - lib/lebowski/foundation/mixins/collection_item_view_support.rb
95
125
  - lib/lebowski/foundation/mixins/list_item_view_support.rb
96
126
  - lib/lebowski/foundation/mixins/inline_text_field_support.rb
127
+ - lib/lebowski/foundation/mixins/frame_application_context_support.rb
97
128
  - lib/lebowski/foundation/mixins/stall_support.rb
129
+ - lib/lebowski/foundation/mixins/define_paths_support.rb
98
130
  - lib/lebowski/foundation/proxy_object.rb
99
131
  - lib/lebowski/foundation/sc_object.rb
100
132
  - lib/lebowski/foundation/object_array.rb
@@ -115,6 +147,8 @@ files:
115
147
  - lib/lebowski/foundation/views/list.rb
116
148
  - lib/lebowski/foundation/views/list_item.rb
117
149
  - lib/lebowski/foundation/views/grid.rb
150
+ - lib/lebowski/foundation/views/web.rb
151
+ - lib/lebowski/foundation/views/select_button.rb
118
152
  - lib/lebowski/foundation/views/support/simple_item_array.rb
119
153
  - lib/lebowski/foundation/panes/pane.rb
120
154
  - lib/lebowski/foundation/panes/main.rb
@@ -131,8 +165,12 @@ files:
131
165
  - lib/lebowski/scui/views/combo_box.rb
132
166
  - lib/lebowski/scui/views/date_picker.rb
133
167
  - lib/lebowski/scui/views/linkit.rb
168
+ - lib/lebowski/scui/views/select_field_tab.rb
169
+ - lib/lebowski/scui/views/color_well.rb
170
+ - lib/lebowski/scui/views/content_editable.rb
134
171
  - lib/lebowski/scui/mixins/node_item_view_support.rb
135
172
  - lib/lebowski/scui/mixins/terminal_view_support.rb
173
+ - lib/lebowski/scui/mixins/link_support.rb
136
174
  - lib/lebowski/spec.rb
137
175
  - lib/lebowski/spec/core.rb
138
176
  - lib/lebowski/spec/util.rb
@@ -157,7 +195,7 @@ licenses: []
157
195
  post_install_message: |
158
196
  **************************************************
159
197
 
160
- Thank you for installing lebowski-0.1.1
198
+ Thank you for installing lebowski-0.2.0
161
199
 
162
200
  Please be sure to read the README.md and History.md
163
201
  for useful information on how to use this framework
@@ -173,27 +211,33 @@ post_install_message: |
173
211
 
174
212
  rdoc_options:
175
213
  - --main
176
- - README.rdoc
214
+ - README.txt
177
215
  require_paths:
178
216
  - lib
179
217
  required_ruby_version: !ruby/object:Gem::Requirement
218
+ none: false
180
219
  requirements:
181
220
  - - ">="
182
221
  - !ruby/object:Gem::Version
222
+ hash: 3
223
+ segments:
224
+ - 0
183
225
  version: "0"
184
- version:
185
226
  required_rubygems_version: !ruby/object:Gem::Requirement
227
+ none: false
186
228
  requirements:
187
229
  - - ">="
188
230
  - !ruby/object:Gem::Version
231
+ hash: 3
232
+ segments:
233
+ - 0
189
234
  version: "0"
190
- version:
191
235
  requirements: []
192
236
 
193
237
  rubyforge_project: lebowski
194
- rubygems_version: 1.3.4
238
+ rubygems_version: 1.3.7
195
239
  signing_key:
196
240
  specification_version: 3
197
- summary: lebowski 0.1.1
241
+ summary: lebowski 0.2.0
198
242
  test_files: []
199
243