middleman 2.0.9.pre.2-x86-mingw32 → 2.0.9.pre.3-x86-mingw32

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 (105) hide show
  1. data/CHANGELOG +9 -0
  2. data/features/builder.feature +6 -0
  3. data/features/data.feature +16 -1
  4. data/features/fonts.feature +11 -0
  5. data/features/relative_assets.feature +8 -2
  6. data/features/step_definitions/middleman_steps.rb +9 -2
  7. data/fixtures/data-app/config.rb +3 -0
  8. data/fixtures/data-app/data/pages.yml +6 -0
  9. data/fixtures/data-app/source/index.html.haml +1 -0
  10. data/fixtures/data-app/source/layout.haml +3 -0
  11. data/fixtures/fonts-app/config.rb +0 -0
  12. data/fixtures/fonts-app/source/fonts/StMarie-Thin.otf +0 -0
  13. data/fixtures/fonts-app/source/stylesheets/fonts.css.sass +3 -0
  14. data/fixtures/glob-app/config.rb +1 -0
  15. data/fixtures/glob-app/source/index.html.haml +6 -0
  16. data/fixtures/glob-app/source/stylesheets/site.css.sass +1 -0
  17. data/fixtures/test-app/config.rb +1 -0
  18. data/fixtures/test-app/data/test2.json +4 -0
  19. data/fixtures/test-app/source/data3.html.erb +1 -0
  20. data/lib/middleman/base.rb +8 -3
  21. data/lib/middleman/builder.rb +61 -22
  22. data/lib/middleman/cli.rb +2 -1
  23. data/lib/middleman/core_extensions/assets.rb +1 -1
  24. data/lib/middleman/core_extensions/compass.rb +6 -2
  25. data/lib/middleman/core_extensions/data.rb +20 -3
  26. data/lib/middleman/templates/html5.rb +1 -0
  27. data/lib/middleman/templates/mobile.rb +17 -0
  28. data/lib/middleman/templates/mobile/source/404.html +38 -0
  29. data/lib/middleman/templates/mobile/source/README.markdown +64 -0
  30. data/lib/middleman/templates/mobile/source/crossdomain.xml +25 -0
  31. data/lib/middleman/templates/mobile/source/css/style.css +236 -0
  32. data/lib/middleman/templates/mobile/source/default.appcache +17 -0
  33. data/lib/middleman/templates/mobile/source/humans.txt +43 -0
  34. data/lib/middleman/templates/mobile/source/img/h/apple-touch-icon.png +0 -0
  35. data/lib/middleman/templates/mobile/source/img/h/splash.png +0 -0
  36. data/lib/middleman/templates/mobile/source/img/l/apple-touch-icon-precomposed.png +0 -0
  37. data/lib/middleman/templates/mobile/source/img/l/apple-touch-icon.png +0 -0
  38. data/lib/middleman/templates/mobile/source/img/l/splash.png +0 -0
  39. data/lib/middleman/templates/mobile/source/img/m/apple-touch-icon.png +0 -0
  40. data/lib/middleman/templates/mobile/source/index.html +95 -0
  41. data/lib/middleman/templates/mobile/source/js/libs/jquery-1.5.1.js +8316 -0
  42. data/lib/middleman/templates/mobile/source/js/libs/jquery-1.5.1.min.js +16 -0
  43. data/lib/middleman/templates/mobile/source/js/libs/modernizr-custom.js +14 -0
  44. data/lib/middleman/templates/mobile/source/js/libs/respond.min.js +7 -0
  45. data/lib/middleman/templates/mobile/source/js/mylibs/helper.js +147 -0
  46. data/lib/middleman/templates/mobile/source/js/script.js +0 -0
  47. data/lib/middleman/templates/mobile/source/robots.txt +5 -0
  48. data/lib/middleman/templates/mobile/source/sitemap.xml +10 -0
  49. data/lib/middleman/templates/mobile/source/test/index.html +31 -0
  50. data/lib/middleman/templates/mobile/source/test/qunit/qunit.css +148 -0
  51. data/lib/middleman/templates/mobile/source/test/qunit/qunit.js +1265 -0
  52. data/lib/middleman/templates/mobile/source/test/tests.js +26 -0
  53. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/Readme.PDF +0 -0
  54. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/aspx1.snippet +31 -0
  55. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/aspx2.snippet +2 -0
  56. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/ga.aspx +195 -0
  57. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/sample.aspx +44 -0
  58. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/ga.jsp +225 -0
  59. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/jsp1.snippet +35 -0
  60. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/jsp2.snippet +2 -0
  61. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/sample.jsp +51 -0
  62. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/ga.php +176 -0
  63. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/php1.snippet +30 -0
  64. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/php2.snippet +4 -0
  65. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/sample.php +44 -0
  66. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/ga.pl +195 -0
  67. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/perl1.snippet +27 -0
  68. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/perl2.snippet +1 -0
  69. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/sample.pl +38 -0
  70. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/COPYING +202 -0
  71. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/bookmark_bubble.js +559 -0
  72. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/example/example.html +43 -0
  73. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/example/example.js +57 -0
  74. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/arrow.png +0 -0
  75. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/close.png +0 -0
  76. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/generate_base64_images +33 -0
  77. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/icon_calendar.png +0 -0
  78. data/lib/middleman/templates/mobile/source/tools/wspl/README +27 -0
  79. data/lib/middleman/templates/mobile/source/tools/wspl/databasefactory.js +45 -0
  80. data/lib/middleman/templates/mobile/source/tools/wspl/dbworker.js +324 -0
  81. data/lib/middleman/templates/mobile/source/tools/wspl/dbworker_test.html +393 -0
  82. data/lib/middleman/templates/mobile/source/tools/wspl/dbworkerstarter.js +32 -0
  83. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_gears.js +595 -0
  84. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_gears_test.html +404 -0
  85. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_html5.js +203 -0
  86. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_html5_test.html +468 -0
  87. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapperapi.js +202 -0
  88. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapperapi_test.html +51 -0
  89. data/lib/middleman/templates/mobile/source/tools/wspl/gears_resultset.js +71 -0
  90. data/lib/middleman/templates/mobile/source/tools/wspl/gears_resultset_test.html +86 -0
  91. data/lib/middleman/templates/mobile/source/tools/wspl/gears_transaction.js +196 -0
  92. data/lib/middleman/templates/mobile/source/tools/wspl/gears_transaction_test.html +221 -0
  93. data/lib/middleman/templates/mobile/source/tools/wspl/gearsutils.js +94 -0
  94. data/lib/middleman/templates/mobile/source/tools/wspl/gearsutils_test.html +84 -0
  95. data/lib/middleman/templates/mobile/source/tools/wspl/global_functions.js +72 -0
  96. data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/index.html +347 -0
  97. data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/simplenotes.js +503 -0
  98. data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/styles.css +66 -0
  99. data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/template.js +75 -0
  100. data/lib/middleman/version.rb +1 -1
  101. data/middleman-x86-mingw32.gemspec +0 -1
  102. data/middleman.gemspec +3 -2
  103. metadata +103 -6
  104. data/lib/middleman/config.ru +0 -2
  105. data/lib/middleman/features/tiny_src.rb +0 -11
@@ -0,0 +1,202 @@
1
+ /*
2
+ Copyright 2009 Google Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ /**
18
+ * @fileoverview Generic Database API.
19
+ *
20
+ * A small set of classes to define how we interact with databases that can
21
+ * easily be implemented on top of HTML5 and Gears. The classes in this file
22
+ * should be extended to provide the missing method implementations and more
23
+ * sophisticated constructors where applicable.
24
+ *
25
+ */
26
+
27
+ /**
28
+ * Constructs a Statement object. A Statement is an SQL statement paired
29
+ * with the parameters needed to execute it.
30
+ *
31
+ * @constructor
32
+ * @param {!string} sql The SQL statement.
33
+ * @param {Array.<Object>?} opt_params The parameters for the SQL statement.
34
+ */
35
+ google.wspl.Statement = function(sql, opt_params) {
36
+
37
+ /**
38
+ * The SQL statement with '?' in place of parameters.
39
+ * @type {string}
40
+ */
41
+ this.sql = sql;
42
+
43
+ /**
44
+ * The parameters to use with the SQL statement.
45
+ * @type {!Array}
46
+ */
47
+ this.params = opt_params || [];
48
+ };
49
+
50
+ /**
51
+ * Returns a new statement object from the given statement with the parameters
52
+ * set as specified.
53
+ * @param {Array.<Object>} params The array of values for ? placeholders.
54
+ * @return {!google.wspl.Statement} The created Statement.
55
+ */
56
+ google.wspl.Statement.prototype.createStatement = function(params) {
57
+ return new google.wspl.Statement(this.sql, params);
58
+ };
59
+
60
+ /**
61
+ * Constructs a Transaction object. Transaction objects
62
+ * group together a series of statements into a single atomic
63
+ * action on the database.
64
+ *
65
+ * @constructor
66
+ */
67
+ google.wspl.Transaction = function() {
68
+ };
69
+
70
+ /**
71
+ * Takes a statement and an optional callback object and
72
+ * runs the statement on the database. The callback can be used to
73
+ * add more statements to the same transaction, or execute can be
74
+ * called repeatedly and the transactions will later execute in the
75
+ * order provided.
76
+ *
77
+ * @param {google.wspl.Statement} statement The statement to execute.
78
+ * @param {Object} opt_callback An object containing onSuccess and onFailure
79
+ * handlers.
80
+ */
81
+ google.wspl.Transaction.prototype.execute = function(statement,
82
+ opt_callback) {
83
+ this.executeAll([statement], opt_callback);
84
+ };
85
+
86
+ /**
87
+ * Runs an array of statements in a single database transaction.
88
+ * Invokes the onSuccess callback once for each successfully executed
89
+ * statement and once for the first failed statement. The callback can be
90
+ * used to add more statements to the same transaction, or executeAll can
91
+ * be called repeatedly and each block of statements given will execute
92
+ * in the same order as the sequence of calls to executeAll.
93
+ *
94
+ * @param {Array.<google.wspl.Statement>} statements The statements to
95
+ * execute.
96
+ * @param {Object?} opt_callback An object containing onSuccess and onFailure
97
+ * handlers.
98
+ */
99
+ google.wspl.Transaction.prototype.executeAll = function(statements,
100
+ opt_callback) {
101
+ throw Error('executeAll not implemented');
102
+ };
103
+
104
+ /**
105
+ * Constructs a Database object. Database objects are handles that allow
106
+ * access to a database (and create the corresponding database if it doesn't
107
+ * already exist). To open the database, pass the name of the needed
108
+ * database to the constructor, and then execute transactions on it using
109
+ * the execute method.
110
+ *
111
+ * @constructor
112
+ */
113
+ google.wspl.Database = function() {
114
+ };
115
+
116
+ /**
117
+ * Creates a transaction object that can execute a series of SQL statements
118
+ * atomically.
119
+ *
120
+ * @param {Function} populate A callback to run execute calls on the
121
+ * transaction.
122
+ * @param {Object?} opt_callback An optional success/failure callback that is
123
+ * called when the entire transaction is finished executing.
124
+ */
125
+ google.wspl.Database.prototype.createTransaction = function(populate,
126
+ opt_callback) {
127
+ throw Error('createTransaction not implemented');
128
+ };
129
+
130
+ /**
131
+ * Executes an array of statements on the database, invoking the optional
132
+ * callback after statement execution and the optional transactionCallback upon
133
+ * completion of the transaction.
134
+ *
135
+ * @param {google.wspl.Statement} statement the statement to execute
136
+ * @param {Object?} opt_callback object that defines onSuccess and onFailure
137
+ * @param {Object?} opt_transactionCallback object that defines onSuccess and
138
+ * onFailure
139
+ */
140
+ google.wspl.Database.prototype.execute = function(statement,
141
+ opt_callback,
142
+ opt_transactionCallback) {
143
+ this.createTransaction(function(tx) {
144
+ tx.execute(statement, opt_callback);
145
+ }, opt_transactionCallback);
146
+ };
147
+
148
+ /**
149
+ * Executes an array of statements on the database, invoking the optional
150
+ * callback for each statement in the transaction. In the case of a statement
151
+ * failure, only the first failed statement will be reported and the transaction
152
+ * will be rolled back. This method invokes the optional transactionCallback
153
+ * upon completion of the transaction.
154
+ *
155
+ * @param {Array.<google.wspl.Statement>} statements the statements to execute
156
+ * @param {Object?} opt_callback object that defines onSuccess and onFailure
157
+ * @param {Object?} opt_transactionCallback object that defines onSuccess and
158
+ * onFailure
159
+ */
160
+ google.wspl.Database.prototype.executeAll = function(statements,
161
+ opt_callback,
162
+ opt_transactionCallback) {
163
+ this.createTransaction(function(tx) {
164
+ tx.executeAll(statements, opt_callback);
165
+ }, opt_transactionCallback);
166
+ };
167
+
168
+ /**
169
+ * An immutable set of results that is returned from a single successful query
170
+ * on the database.
171
+ *
172
+ * @constructor
173
+ */
174
+ google.wspl.ResultSet = function() {
175
+ };
176
+
177
+ /**
178
+ * Returns true if next() will advance to a valid row in the result set.
179
+ *
180
+ * @return {boolean} if next() will advance to a valid row in the result set
181
+ */
182
+ google.wspl.ResultSet.prototype.isValidRow = function() {
183
+ throw Error('isValidRow not implemented');
184
+ };
185
+
186
+ /**
187
+ * Advances to the next row in the results.
188
+ */
189
+ google.wspl.ResultSet.prototype.next = function() {
190
+ throw Error('next not implemented');
191
+ };
192
+
193
+ /**
194
+ * Returns the current row as an object with a property for each field returned
195
+ * by the database. The property will have the name of the column and the value
196
+ * of the cell.
197
+ *
198
+ * @return {Object} The current row
199
+ */
200
+ google.wspl.ResultSet.prototype.getRow = function() {
201
+ throw Error('getRow not implemented');
202
+ };
@@ -0,0 +1,51 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ Copyright 2009 Google Inc.
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ -->
17
+
18
+ <html>
19
+ <head>
20
+ <title>Database wrapper api</title>
21
+ <script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
22
+ <script type="text/javascript" src="jsmock.js"></script>
23
+ <script type="text/javascript" src="global_functions.js"></script>
24
+ <script type="text/javascript" src="dbwrapperapi.js"></script>
25
+ </head>
26
+ <body>
27
+ <script type='text/javascript'>
28
+
29
+ function subStatementTest(stm) {
30
+ assertEquals('statement not set correctly', 'bar', stm.sql);
31
+ assertEquals('first param not set correctly', 1, stm.params[0]);
32
+ assertEquals('second param not set correctly', 2, stm.params[1]);
33
+ }
34
+
35
+ function testConstructStatement() {
36
+ var stm = new google.wspl.Statement('foo');
37
+ assertEquals('statement not set correctly', 'foo', stm.sql);
38
+
39
+ var stm = new google.wspl.Statement('bar', [1,2]);
40
+ subStatementTest(stm);
41
+ }
42
+
43
+ function testConstructStatementFromTemplate() {
44
+ var temp = new google.wspl.Statement('bar');
45
+ var stm = temp.createStatement([1,2]);
46
+ subStatementTest(stm);
47
+ }
48
+
49
+ </script>
50
+ </body>
51
+ </html>
@@ -0,0 +1,71 @@
1
+ /*
2
+ Copyright 2009 Google Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ /**
18
+ * @fileoverview A Gears implementation of dbwrapperapi ResultSet.
19
+ */
20
+
21
+ /**
22
+ * Creates a Gears ResultSet object.
23
+ * @see google.wspl.ResultSet#ResultSet
24
+ *
25
+ * @constructor
26
+ * @extends google.wspl.ResultSet
27
+ * @param {!Array.<Object>} resultArray An array of hash objects where the
28
+ * column names in the query are used as members of the objects.
29
+ */
30
+ google.wspl.gears.ResultSet = function(resultArray) {
31
+ google.wspl.ResultSet.call(this);
32
+
33
+ /**
34
+ * The result set as an array of hash objects.
35
+ * @type {!Array.<Object>}
36
+ * @private
37
+ */
38
+ this.resultArray_ = resultArray;
39
+ };
40
+ google.inherits(google.wspl.gears.ResultSet, google.wspl.ResultSet);
41
+
42
+ /**
43
+ * The current record in the result set.
44
+ * @type {number}
45
+ * @private
46
+ */
47
+ google.wspl.gears.ResultSet.prototype.current_ = 0;
48
+
49
+ /**
50
+ * @see google.wspl.ResultSet#isValidRow
51
+ * @inheritDoc
52
+ */
53
+ google.wspl.gears.ResultSet.prototype.isValidRow = function() {
54
+ return this.current_ < this.resultArray_.length;
55
+ };
56
+
57
+ /**
58
+ * @see google.wspl.ResultSet#next
59
+ * @inheritDoc
60
+ */
61
+ google.wspl.gears.ResultSet.prototype.next = function() {
62
+ this.current_++;
63
+ };
64
+
65
+ /**
66
+ * @see google.wspl.ResultSet#getRow
67
+ * @inheritDoc
68
+ */
69
+ google.wspl.gears.ResultSet.prototype.getRow = function() {
70
+ return this.resultArray_[this.current_];
71
+ };
@@ -0,0 +1,86 @@
1
+ <!DOCTYPE html>
2
+ <!--
3
+ Copyright 2009 Google Inc.
4
+
5
+ Licensed under the Apache License, Version 2.0 (the "License");
6
+ you may not use this file except in compliance with the License.
7
+ You may obtain a copy of the License at
8
+
9
+ http://www.apache.org/licenses/LICENSE-2.0
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the License is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the License for the specific language governing permissions and
15
+ limitations under the License.
16
+ -->
17
+
18
+ <html>
19
+ <head>
20
+ <title>Gears resultset tests</title>
21
+ <script type="text/javascript" src="../jsunit/app/jsUnitCore.js"></script>
22
+ <script type="text/javascript" src="jsmock.js"></script>
23
+ <script type="text/javascript" src="global_functions.js"></script>
24
+ <script type="text/javascript" src="dbwrapperapi.js"></script>
25
+ <script type="text/javascript" src="gears_resultset.js"></script>
26
+ </head>
27
+ <body>
28
+ <script type='text/javascript'>
29
+
30
+ var resultArray;
31
+
32
+ function setUp() {
33
+ var obj1 = {
34
+ field1: 'a',
35
+ field2: 2,
36
+ field3: 'c'
37
+ };
38
+
39
+ var obj2 = {
40
+ field1: 'd',
41
+ field2: 4,
42
+ field3: 'f'
43
+ };
44
+
45
+ var obj3 = {
46
+ field1: 'g',
47
+ field2: 6,
48
+ field3: 'i'
49
+ };
50
+
51
+ resultArray = [obj1, obj2, obj3];
52
+ }
53
+
54
+ function testResultSetNext() {
55
+ var result = new google.wspl.gears.ResultSet(resultArray);
56
+ assertEquals('incorrect value for current', 0, result.current_);
57
+ result.next();
58
+ assertEquals('incorrect value for current', 1, result.current_);
59
+ result.next();
60
+ assertEquals('incorrect value for current', 2, result.current_);
61
+ }
62
+
63
+ function testResultSetIsValidRow() {
64
+ var result = new google.wspl.gears.ResultSet(resultArray);
65
+ assertTrue('incorrect return from isValidRow', result.isValidRow());
66
+ result.next();
67
+ assertTrue('incorrect return from isValidRow', result.isValidRow());
68
+ result.next();
69
+ assertTrue('incorrect return from isValidRow', result.isValidRow());
70
+ result.next();
71
+ assertFalse('incorrect return from isValidRow', result.isValidRow());
72
+ }
73
+
74
+ function testResultSetGetRow() {
75
+ var result = new google.wspl.gears.ResultSet(resultArray);
76
+ result.next();
77
+
78
+ var row = result.getRow();
79
+ assertEquals('first field is not valid', 'd', row.field1);
80
+ assertEquals('first field is not valid', 4, row.field2);
81
+ assertEquals('first field is not valid', 'f', row.field3);
82
+ }
83
+
84
+ </script>
85
+ </body>
86
+ </html>
@@ -0,0 +1,196 @@
1
+ /*
2
+ Copyright 2009 Google Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ /**
18
+ * @fileoverview A Gears implementation of dbwrapperapi Transaction.
19
+ */
20
+
21
+ /**
22
+ * Creates a Gears Transaction object.
23
+ * @see google.wspl.ResultSet#ResultSet
24
+ *
25
+ * @constructor
26
+ * @extends google.wspl.Transaction
27
+ *
28
+ * @param {number} id The unique id for this transaction
29
+ * @param {google.wspl.gears.Database} db The Gears implementation of the
30
+ * dbwrapperapi database
31
+ */
32
+ google.wspl.gears.Transaction = function(id, db) {
33
+ google.wspl.Transaction.call(this);
34
+
35
+ /**
36
+ * The unique id for this transaction.
37
+ * @type {number}
38
+ * @private
39
+ */
40
+ this.id_ = id;
41
+
42
+ /**
43
+ * The Gears implementation of the dbwrapperapi database.
44
+ * @type {google.wspl.gears.Database}
45
+ * @private
46
+ */
47
+ this.db_ = db;
48
+
49
+ /**
50
+ * A map of statements, callback, and current statement.
51
+ * @type {Object}
52
+ * @private
53
+ */
54
+ this.activeExecutes_ = {};
55
+ };
56
+ google.inherits(google.wspl.gears.Transaction, google.wspl.Transaction);
57
+
58
+ /**
59
+ * The number of active executes.
60
+ * @type {number}
61
+ * @private
62
+ */
63
+ google.wspl.gears.Transaction.prototype.numActiveExecutes_ = 0;
64
+
65
+ /**
66
+ * The id for the next call to execute. Incremented after use.
67
+ * @type {number}
68
+ * @private
69
+ */
70
+ google.wspl.gears.Transaction.prototype.nextCallbackId_ = 1;
71
+
72
+ /**
73
+ * Whether the transaction should be rolled back or not. This property is set
74
+ * to true when a statement fails.
75
+ * @type {boolean}
76
+ * @private
77
+ */
78
+ google.wspl.gears.Transaction.prototype.needsRollback_ = false;
79
+
80
+ /**
81
+ * Begins a new transaction with the Gears database. Commits the transaction if
82
+ * all calls to executeAll for this transaction have finished receiving
83
+ * callbacks. Rolls the transaction back if a statement failed.
84
+ *
85
+ * @see google.wspl.Transaction#executeAll
86
+ * @inheritDoc
87
+ */
88
+ google.wspl.gears.Transaction.prototype.executeAll = function(statements,
89
+ opt_callback) {
90
+ if (statements.length == 0) {
91
+ throw Error('Possibly silly attempt to execute empty statement list.');
92
+ }
93
+ if (this.numActiveExecutes_ == 0) {
94
+ this.db_.doBegin(this.id_);
95
+ }
96
+
97
+ this.numActiveExecutes_++;
98
+ var callbackId = this.nextCallbackId_++;
99
+
100
+ var callback = opt_callback || {
101
+ onSuccess : function() {},
102
+ onFailure : function() {}
103
+ };
104
+
105
+ this.activeExecutes_[callbackId] = {
106
+ statements: statements,
107
+ currentStatement: 0,
108
+ callback: callback
109
+ };
110
+
111
+ this.db_.doExecute(statements, callbackId, this.id_);
112
+ };
113
+
114
+ /**
115
+ * Invokes onSuccess on the specified callback.
116
+ *
117
+ * @param {google.wspl.ResultSet} result The result of a successful statement
118
+ * @param {number} callbackId The callback to invoke
119
+ */
120
+ google.wspl.gears.Transaction.prototype.success = function(result,
121
+ callbackId) {
122
+ if (!this.needsRollback_) {
123
+ var activeExecute = this.activeExecutes_[callbackId];
124
+ activeExecute.callback.onSuccess(this, result);
125
+ }
126
+ this.endStatement_(callbackId);
127
+ };
128
+
129
+ /**
130
+ * Invokes onFailure on the specified callback.
131
+ *
132
+ * @param {Error} error The error of an unsuccessful statement
133
+ * @param {number} callbackId The callback to invoke
134
+ */
135
+ google.wspl.gears.Transaction.prototype.failure = function(error,
136
+ callbackId) {
137
+ if (!this.needsRollback_) {
138
+ this.needsRollback_ = true;
139
+ var activeExecute = this.activeExecutes_[callbackId];
140
+ activeExecute.callback.onFailure(error);
141
+ }
142
+ this.endStatement_(callbackId);
143
+ };
144
+
145
+ /**
146
+ * Handles clean up for the end of a single execution.
147
+ *
148
+ * @param {number} callbackId The callback to clean up.
149
+ * @private
150
+ */
151
+ google.wspl.gears.Transaction.prototype.endStatement_ = function(callbackId) {
152
+ var activeExecute = this.activeExecutes_[callbackId];
153
+ var statements = activeExecute.statements;
154
+ var currentStatement = ++activeExecute.currentStatement;
155
+
156
+ if (currentStatement == statements.length) {
157
+ this.endExecute_(callbackId);
158
+ }
159
+ };
160
+
161
+ /**
162
+ * Handles clean up for the end of a call to executeAll. Performs a commit or
163
+ * rollback if this is the last active execute to clean up.
164
+ *
165
+ * @param {number} callbackId The callback to clean up
166
+ * @private
167
+ */
168
+ google.wspl.gears.Transaction.prototype.endExecute_ = function(callbackId) {
169
+ delete this.activeExecutes_[callbackId];
170
+ this.numActiveExecutes_--;
171
+ if (!this.isExecuting()) {
172
+ this.endTransaction_();
173
+ }
174
+ };
175
+
176
+ /**
177
+ * Instructs the worker to commit the transaction or roll it back if a failure
178
+ * occurred and a rollback is required.
179
+ *
180
+ * @private
181
+ */
182
+ google.wspl.gears.Transaction.prototype.endTransaction_ = function() {
183
+ if (this.needsRollback_) {
184
+ this.db_.doRollback(this.id_);
185
+ } else {
186
+ this.db_.doCommit(this.id_);
187
+ }
188
+ };
189
+
190
+ /**
191
+ * @return {boolean} True if the transaction has statements executing, false
192
+ * otherwise.
193
+ */
194
+ google.wspl.gears.Transaction.prototype.isExecuting = function() {
195
+ return this.numActiveExecutes_ > 0;
196
+ };