lebowski 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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