abracadabra 1.1.4 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0f6be915a98686f681e12658208d1597ee3d0114
4
- data.tar.gz: 048b658309331f1170ba7955dee5beca1bb5cbd8
3
+ metadata.gz: ce1d95226cb46bbaea1c88bf845f2eebf5f12259
4
+ data.tar.gz: e1fa8fc9ca8fcfe6e234ffe4e3e84371b1ddc097
5
5
  SHA512:
6
- metadata.gz: 9193a97298456380a147ce104f474886a2e13f71dc4b57d035d2f799b0c98e693479094dfd6b8e08efc87c407406408ca0ca346237b4602b163ed537a0b29daf
7
- data.tar.gz: 1679b17fb3bff3d262953b039708ba54086d32831cb95b0eee2c4120483435e2cde3dc0ce2b58de2a3a58ee373acee4c0e3cdb944933e6f258772fec33bf5662
6
+ metadata.gz: 02d2c22dea7363db85fb422b9d6d07623354d2ff47ba8d3248920c569f6d243490c87122f2bbae055f72593440d2d0366efff608312d04134efe4b63640b57e2
7
+ data.tar.gz: 1242c42a402cf3d3fe94f2df519535b35ff0fff89a9a061d929224ff3ac3e4a6d36f48393ea1ec9f9a09bb76ac95f1116191077b521b42285e2b67be399bcc2a
data/README.md CHANGED
@@ -31,7 +31,13 @@ In your `application.css`, AFTER Bootstrap, include the css file:
31
31
  *= require abracadabra
32
32
  ```
33
33
 
34
- In your `application.js`, AFTER Jquery (required), include the javascript file:
34
+ OR if you're using SASS/SCSS:
35
+
36
+ ```sass
37
+ @import "abracadabra-scss";
38
+ ```
39
+
40
+ In your `application.js`, AFTER JQuery (required), include the javascript file:
35
41
 
36
42
  ```js
37
43
  //= require abracadabra
@@ -59,7 +65,7 @@ It accepts the following parameters:
59
65
  - `attribute: :name` - Specifies what attribute your text field will be updating.
60
66
 
61
67
  #### OPTIONAL
62
- - `class: "my-class"` - Class(es) to be added to the abracadabra link. The class "abracadabra" is added # either way. [*Default:* `"abracadabra"`]
68
+ - `class: "my-class"` - Class(es) to be added to the abracadabra link. The class "abracadabra" is added either way. [*Default:* `"abracadabra"`]
63
69
 
64
70
  - `id: "my-id"` - ID to be added to the abracadabra link. [*Default:* `nil`]
65
71
 
@@ -67,7 +73,7 @@ It accepts the following parameters:
67
73
 
68
74
  - `method: "patch"` - HTTP REST method to use. Use anything but "get". [*Default:* `"patch"`]
69
75
 
70
- - `buttonless: true` - Removes submit and cancel buttons, submission and cancellation is then one through the Enter/Tab and Escape keys, respectively. [*Default:* `false`]
76
+ - `buttonless: true` - Removes submit and cancel buttons. Submission and cancellation is then done through the Enter/Tab and Escape keys, respectively. [*Default:* `false`]
71
77
 
72
78
  - `remote: true` - Same as link_to's `remote: true`, form submits via AJAX. [*Default:* `true`]
73
79
 
@@ -107,6 +113,14 @@ click_to_edit @friend,
107
113
  submit_on_blur: true
108
114
  ```
109
115
 
116
+ #### REBINDING
117
+
118
+ Simply call abracadabra's jQuery function:
119
+
120
+ ```javascript
121
+ $.abracadabra();
122
+ ```
123
+
110
124
  ## Configuration
111
125
 
112
126
  Abracadabra allows some customization. If you would like to change what icon classes are used for the `submit`, `cancel`, and `delete` icons, you can change them globally.
@@ -1,233 +1,247 @@
1
1
  $(function() {
2
- abracadabraSubmissionInProgress = false;
3
- abracadabraButtonMousedown = false;
4
- abracadabraEscapeKeydown = false;
5
-
6
- function closeAbracadabra(element, destroy, valueChanged) {
7
- $element = $(element);
8
- if($element.hasClass("abracadabra-container")) {
9
- container = $element;
10
- } else {
11
- container = $element.parents(".abracadabra-container");
12
- }
13
-
14
- if(destroy) {
15
- container.siblings(".abracadabra").remove();
16
- } else {
17
- if(valueChanged == true) {
18
- value = container.find(".abracadabra-input").val();
19
- } else {
20
- value = container.find(".abracadabra-input").data("original-value");
21
- }
22
- container.siblings(".abracadabra").text(value).show();
23
- }
24
-
25
- try {
26
- container.remove();
27
- } catch (error) {}
28
- }
29
-
30
- function tabToNextAbracadabra(element, selector) {
31
- if(selector != undefined) {
32
- nextAbracadabra = $(selector);
33
2
 
34
- /* If selector isn't an ID, find the element with the class AFTER the current element */
35
- if (selector.indexOf("#") == -1) {
36
- abracadabra = $(element).parents(".abracadabra-container").siblings(".abracadabra");
37
- indexOfAbracadabra = $(selector).index(abracadabra);
38
- nextAbracadabra = $($(selector)[indexOfAbracadabra + 1]);
3
+ $.extend({
4
+ abracadabra: function() {
5
+ abracadabraSubmissionInProgress = false;
6
+ abracadabraButtonMousedown = false;
7
+ abracadabraEscapeKeydown = false;
8
+
9
+ function closeAbracadabra(element, destroy, valueChanged) {
10
+ $element = $(element);
11
+ if($element.hasClass("abracadabra-container")) {
12
+ container = $element;
13
+ } else {
14
+ container = $element.parents(".abracadabra-container");
15
+ }
16
+
17
+ if(destroy) {
18
+ container.siblings(".abracadabra").remove();
19
+ } else {
20
+ if(valueChanged == true) {
21
+ value = container.find(".abracadabra-input").val();
22
+ } else {
23
+ value = container.find(".abracadabra-input").data("original-value");
24
+ }
25
+ container.siblings(".abracadabra").text(value).show();
26
+ }
27
+
28
+ try {
29
+ container.remove();
30
+ } catch (error) {}
39
31
  }
40
- /* /If selector isn't an ID, find the element with the class AFTER the current element */
41
-
42
- closeAbracadabra(element, false, true);
43
- nextAbracadabra.click();
44
- } else {
45
- closeAbracadabra(element, false, true);
46
- }
47
- }
48
-
49
- $("body").on("submit", ".abracadabra-form", function(e) {
50
- if(abracadabraSubmissionInProgress == true || abracadabraEscapeKeydown == true) {
51
- e.preventDefault();
52
- return false;
53
- }
54
- abracadabraSubmissionInProgress = true;
55
- });
56
-
57
- $("body").on("ajax:before", ".abracadabra-delete", function() {
58
- if(abracadabraSubmissionInProgress == true) {
59
- e.preventDefault();
60
- return false;
61
- }
62
- abracadabraSubmissionInProgress = true;
63
- });
64
-
65
- $("body").on("mousedown", ".abracadabra-delete, .abracadabra-submit, .abracadabra-cancel", function() {
66
- abracadabraButtonMousedown = true;
67
- });
68
-
69
- $("body").on("ajax:success", ".abracadabra-form", function(e) {
70
- target = $(e.target);
71
- abracadabraButtonMousedown = false;
72
-
73
- /* If form is a DELETE, remove abracadabra instance, if not, call tabToNextSelector */
74
- if(target.hasClass("abracadabra-delete")) {
75
- closeAbracadabra(target, true, true);
76
- } else {
77
- input = $(target).find(".abracadabra-input");
78
- tabToNextSelector = input.data("tab-to-next-selector");
79
- tabToNextAbracadabra(target, tabToNextSelector);
80
- }
81
- /* /If form is a DELETE, remove abracadabra instance, if not, call tabToNextSelector */
82
32
 
83
- abracadabraSubmissionInProgress = false;
84
- });
85
-
86
- $("body").on("click", ".abracadabra-cancel", function() {
87
- if(abracadabraSubmissionInProgress == false) {
88
- closeAbracadabra(this, false, false);
89
- }
90
- });
91
-
92
- $("body").on("blur", ".abracadabra-input", function() {
93
- if(abracadabraSubmissionInProgress == false && abracadabraButtonMousedown == false) {
94
- if($(this).data("submit-on-blur") == true) {
95
- $(this.form).submit();
96
- } else {
97
- closeAbracadabra(this, false, false);
33
+ function tabToNextAbracadabra(element, selector) {
34
+ if(selector != undefined) {
35
+ nextAbracadabra = $(selector);
36
+
37
+ /* If selector isn't an ID, find the element with the class AFTER the current element */
38
+ if (selector.indexOf("#") == -1) {
39
+ abracadabra = $(element).parents(".abracadabra-container").siblings(".abracadabra");
40
+ indexOfAbracadabra = $(selector).index(abracadabra);
41
+ nextAbracadabra = $($(selector)[indexOfAbracadabra + 1]);
42
+ }
43
+ /* /If selector isn't an ID, find the element with the class AFTER the current element */
44
+
45
+ closeAbracadabra(element, false, true);
46
+ nextAbracadabra.click();
47
+ } else {
48
+ closeAbracadabra(element, false, true);
49
+ }
98
50
  }
99
- }
100
- });
101
51
 
102
- $("body").on("keydown", ".abracadabra-input", function(e) {
103
- /* Press Tab to submit (same function as Enter key) */
104
- if (e.keyCode == 9)
105
- {
106
- e.preventDefault();
107
- if(abracadabraSubmissionInProgress == false) {
108
- $(this.form).submit();
109
- }
110
- }
111
- /* /Press Tab to submit (same function as Enter key) */
112
-
113
- /* Press Escape to cancel */
114
- if (e.keyCode == 27)
115
- {
116
- abracadabraEscapeKeydown = true;
117
- e.preventDefault();
118
- if(abracadabraSubmissionInProgress == false) {
52
+ $("body").unbind(".abracadabra-binding")
53
+
54
+ $("body").on("submit.abracadabra-binding", ".abracadabra-form", function(e) {
55
+ if(abracadabraSubmissionInProgress == true || abracadabraEscapeKeydown == true) {
56
+ e.preventDefault();
57
+ return false;
58
+ }
59
+ abracadabraSubmissionInProgress = true;
60
+ });
61
+
62
+ $("body").on("ajax:before.abracadabra-binding", ".abracadabra-delete", function() {
63
+ if(abracadabraSubmissionInProgress == true) {
64
+ e.preventDefault();
65
+ return false;
66
+ }
67
+ abracadabraSubmissionInProgress = true;
68
+ });
69
+
70
+ $("body").on("mousedown.abracadabra-binding", ".abracadabra-delete, .abracadabra-submit, .abracadabra-cancel", function() {
71
+ abracadabraButtonMousedown = true;
72
+ });
73
+
74
+ $("body").on("ajax:success.abracadabra-binding", ".abracadabra-form", function(e) {
75
+ target = $(e.target);
76
+ abracadabraButtonMousedown = false;
77
+
78
+ /* If form is a DELETE, remove abracadabra instance, if not, call tabToNextSelector */
79
+ if(target.hasClass("abracadabra-delete")) {
80
+ closeAbracadabra(target, true, true);
81
+ } else {
82
+ input = $(target).find(".abracadabra-input");
83
+ tabToNextSelector = input.data("tab-to-next-selector");
84
+ tabToNextAbracadabra(target, tabToNextSelector);
85
+ }
86
+ /* /If form is a DELETE, remove abracadabra instance, if not, call tabToNextSelector */
87
+
88
+ abracadabraSubmissionInProgress = false;
89
+ });
90
+
91
+ $("body").on("ajax:error.abracadabra-binding", ".abracadabra-form", function() {
119
92
  closeAbracadabra(this, false, false);
120
- abracadabraEscapeKeydown = false;
121
- }
122
- }
123
- /* /Press Escape to cancel */
124
- });
125
-
126
-
127
- $("body").on("confirm:complete", ".abracadabra-delete", function(e, response) {
128
- /* If cancel is clicked in the deletable_confirm dialog, focus on the input */
129
- if(response == false) {
130
- input = $(this).parents(".abracadabra-delete-container").siblings();
131
- inputValue = input.val();
132
- input.focus().val("").val(inputValue);
93
+ $.abracadabra();
94
+ });
95
+
96
+ $("body").on("click.abracadabra-binding", ".abracadabra-cancel", function() {
97
+ if(abracadabraSubmissionInProgress == false) {
98
+ closeAbracadabra(this, false, false);
99
+ }
100
+ });
101
+
102
+ $("body").on("blur.abracadabra-binding", ".abracadabra-input", function() {
103
+ if(abracadabraSubmissionInProgress == false && abracadabraButtonMousedown == false) {
104
+ if($(this).data("submit-on-blur") == true) {
105
+ $(this.form).submit();
106
+ } else {
107
+ closeAbracadabra(this, false, false);
108
+ }
109
+ }
110
+ });
111
+
112
+ $("body").on("keydown.abracadabra-binding", ".abracadabra-input", function(e) {
113
+ /* Press Tab to submit (same function as Enter key) */
114
+ if (e.keyCode == 9)
115
+ {
116
+ e.preventDefault();
117
+ if(abracadabraSubmissionInProgress == false) {
118
+ $(this.form).submit();
119
+ }
120
+ }
121
+ /* /Press Tab to submit (same function as Enter key) */
122
+
123
+ /* Press Escape to cancel */
124
+ if (e.keyCode == 27)
125
+ {
126
+ abracadabraEscapeKeydown = true;
127
+ e.preventDefault();
128
+ if(abracadabraSubmissionInProgress == false) {
129
+ closeAbracadabra(this, false, false);
130
+ abracadabraEscapeKeydown = false;
131
+ }
132
+ }
133
+ /* /Press Escape to cancel */
134
+ });
135
+
136
+
137
+ $("body").on("confirm:complete.abracadabra-binding", ".abracadabra-delete", function(e, response) {
138
+ /* If cancel is clicked in the deletable_confirm dialog, focus on the input */
139
+ if(response == false) {
140
+ input = $(this).parents(".abracadabra-delete-container").siblings();
141
+ inputValue = input.val();
142
+ input.focus().val("").val(inputValue);
143
+ }
144
+ /* /If cancel is clicked in the deletable_confirm dialog, focus on the input */
145
+ });
146
+
147
+ $(".abracadabra").on("click", function() {
148
+ if($(".abracadabra-container:visible").length) {
149
+ return false;
150
+ }
151
+
152
+ link = $(this);
153
+ link.hide();
154
+ path = link.data("path");
155
+ attribute = link.data("attribute");
156
+ formMethod = link.data("method");
157
+ remote = ((link.data("remote") == true) ? " data-remote=\"true\"" : "");
158
+
159
+ /* Check if button classes have been manually overridden elsewhere */
160
+ if(typeof abracadabraSubmitIcon == "undefined") {
161
+ abracadabraSubmitIcon = "fa fa-check";
162
+ }
163
+
164
+ if(typeof abracadabraCancelIcon == "undefined") {
165
+ abracadabraCancelIcon = "fa fa-times";
166
+ }
167
+
168
+ if(typeof abracadabraDeleteIcon == "undefined") {
169
+ abracadabraDeleteIcon = "fa fa-times-circle-o";
170
+ }
171
+ /* /Check if button classes have been manually overridden elsewhere */
172
+
173
+ /* AJAX? */
174
+ if(remote == "") {
175
+ authToken = "<input name=\"authenticity_token\" type=\"hidden\" value=\"" + $("meta[name=\"csrf-token\"]").attr("content") + "\">";
176
+ type = "";
177
+ deletableType = "";
178
+ } else {
179
+ authToken = "";
180
+ type = " data-type=\"" + link.data("type") + "\"";
181
+ deletableType = " data-type=\"" + link.data("deletable-type") + "\"";
182
+ }
183
+ /* /AJAX? */
184
+
185
+ /* Deletable? */
186
+ if(link.data("deletable") !== false) {
187
+ deletablePath = link.data("deletable-path");
188
+ deletableConfirm = link.data("deletable");
189
+ if(deletableConfirm === true) {
190
+ deletableConfirm = "";
191
+ } else {
192
+ deletableConfirm = " data-confirm=\"" + deletableConfirm + "\"";
193
+ }
194
+ deletable = "<span class=\"abracadabra-delete-container\"><a href=\"" + deletablePath + "\" class=\"abracadabra-delete\" data-method=\"delete\"" + deletableConfirm + remote + deletableType + " rel=\"nofollow\"><i class=\"" + abracadabraDeleteIcon + "\"></i></a></span>";
195
+ } else {
196
+ deletable = "";
197
+ }
198
+ /* /Deletable? */
199
+
200
+ /* Tab to next? */
201
+ tabToNextSelector = link.data("tab-to-next");
202
+ if(tabToNextSelector !== false) {
203
+ tabToNextSelector = link.data("tab-to-next");
204
+ tabToNextSelector = " data-tab-to-next-selector=\"" + tabToNextSelector + "\"";
205
+ } else {
206
+ tabToNextSelector = "";
207
+ }
208
+ /* /Tab to next? */
209
+
210
+ /* Submit on blur? */
211
+ submitOnBlur = link.data("submit-on-blur");
212
+ if(submitOnBlur == true) {
213
+ submitOnBlur = " data-submit-on-blur=\"true\"";
214
+ } else {
215
+ submitOnBlur = "";
216
+ }
217
+ /* /Submit on blur? */
218
+
219
+ /* Show buttons? */
220
+ if(link.data("buttonless") == true) {
221
+ buttons = "";
222
+ } else {
223
+ buttons = "<button type=\"submit\" class=\"btn btn-primary abracadabra-submit\"><i class=\"" + abracadabraSubmitIcon + "\"></i></button><button type=\"button\" class=\"btn abracadabra-cancel\"><i class=\"" + abracadabraCancelIcon + "\"></i></button>";
224
+ }
225
+ /* /Show buttons? */
226
+
227
+ instanceClass = link.data("class");
228
+ inputValue = link.text().replace(/"|\\"/g, "&quot;");
229
+ inputId = instanceClass + "_" + attribute;
230
+ inputName = instanceClass + "[" + attribute + "]";
231
+
232
+ openFormTag = "<form accept-charset=\"UTF-8\" action=\"" + path + "\"" + remote + type + " class=\"form-inline abracadabra-form\" method=\"post\">";
233
+ hiddenMethodTags = "<div style=\"display:none;\"><input name=\"utf8\" type=\"hidden\" value=\"&#10003;\"><input name=\"_method\" type=\"hidden\" value=\"" + formMethod + "\">" + authToken + "</div>";
234
+ input = "<input type=\"text\" class=\"form-control abracadabra-input\" id=\"" + inputId + "\" name=\"" + inputName + "\" value=\"" + inputValue + "\" data-original-value=\"" + inputValue + "\"" + tabToNextSelector + submitOnBlur + ">";
235
+
236
+ html = "<span class=\"abracadabra-container\">" + openFormTag + hiddenMethodTags;
237
+ html += "<div class=\"control-group\"><div class=\"abracadabra-input-and-button-wrapper\"><div class=\"abracadabra-input-container\">" + input + deletable + "</div>";
238
+ html += "<div class=\"abracadabra-buttons\">" + buttons + "</div></div></form></span>";
239
+
240
+ link.after(html);
241
+ link.siblings(".abracadabra-container").find(".abracadabra-input").focus().val("").val(inputValue);
242
+ });
133
243
  }
134
- /* /If cancel is clicked in the deletable_confirm dialog, focus on the input */
135
244
  });
136
-
137
- $(".abracadabra").on("click", function() {
138
- if($(".abracadabra-container:visible").length) {
139
- return false;
140
- }
141
-
142
- link = $(this);
143
- link.hide();
144
- path = link.data("path");
145
- attribute = link.data("attribute");
146
- formMethod = link.data("method");
147
- remote = ((link.data("remote") == true) ? " data-remote=\"true\"" : "");
148
-
149
- /* Check if button classes have been manually overridden elsewhere */
150
- if(typeof abracadabraSubmitIcon == "undefined") {
151
- abracadabraSubmitIcon = "fa fa-check";
152
- }
153
-
154
- if(typeof abracadabraCancelIcon == "undefined") {
155
- abracadabraCancelIcon = "fa fa-times";
156
- }
157
-
158
- if(typeof abracadabraDeleteIcon == "undefined") {
159
- abracadabraDeleteIcon = "fa fa-times-circle-o";
160
- }
161
- /* /Check if button classes have been manually overridden elsewhere */
162
-
163
- /* AJAX? */
164
- if(remote == "") {
165
- authToken = "<input name=\"authenticity_token\" type=\"hidden\" value=\"" + $("meta[name=\"csrf-token\"]").attr("content") + "\">";
166
- type = "";
167
- deletableType = "";
168
- } else {
169
- authToken = "";
170
- type = " data-type=\"" + link.data("type") + "\"";
171
- deletableType = " data-type=\"" + link.data("deletable-type") + "\"";
172
- }
173
- /* /AJAX? */
174
-
175
- /* Deletable? */
176
- if(link.data("deletable") !== false) {
177
- deletablePath = link.data("deletable-path");
178
- deletableConfirm = link.data("deletable");
179
- if(deletableConfirm === true) {
180
- deletableConfirm = "";
181
- } else {
182
- deletableConfirm = " data-confirm=\"" + deletableConfirm + "\"";
183
- }
184
- deletable = "<span class=\"abracadabra-delete-container\"><a href=\"" + deletablePath + "\" class=\"abracadabra-delete\" data-method=\"delete\"" + deletableConfirm + remote + deletableType + " rel=\"nofollow\"><i class=\"" + abracadabraDeleteIcon + "\"></i></a></span>";
185
- } else {
186
- deletable = "";
187
- }
188
- /* /Deletable? */
189
-
190
- /* Tab to next? */
191
- tabToNextSelector = link.data("tab-to-next");
192
- if(tabToNextSelector !== false) {
193
- tabToNextSelector = link.data("tab-to-next");
194
- tabToNextSelector = " data-tab-to-next-selector=\"" + tabToNextSelector + "\"";
195
- } else {
196
- tabToNextSelector = "";
197
- }
198
- /* /Tab to next? */
199
-
200
- /* Submit on blur? */
201
- submitOnBlur = link.data("submit-on-blur");
202
- if(submitOnBlur == true) {
203
- submitOnBlur = " data-submit-on-blur=\"true\"";
204
- } else {
205
- submitOnBlur = "";
206
- }
207
- /* /Submit on blur? */
208
245
 
209
- /* Show buttons? */
210
- if(link.data("buttonless") == true) {
211
- buttons = "";
212
- } else {
213
- buttons = "<button type=\"submit\" class=\"btn btn-primary abracadabra-submit\"><i class=\"" + abracadabraSubmitIcon + "\"></i></button><button type=\"button\" class=\"btn abracadabra-cancel\"><i class=\"" + abracadabraCancelIcon + "\"></i></button>";
214
- }
215
- /* /Show buttons? */
216
-
217
- instanceClass = link.data("class");
218
- inputValue = link.text().replace(/"|\\"/g, "&quot;");
219
- inputId = instanceClass + "_" + attribute;
220
- inputName = instanceClass + "[" + attribute + "]";
221
-
222
- openFormTag = "<form accept-charset=\"UTF-8\" action=\"" + path + "\"" + remote + type + " class=\"form-inline abracadabra-form\" method=\"post\">";
223
- hiddenMethodTags = "<div style=\"display:none;\"><input name=\"utf8\" type=\"hidden\" value=\"&#10003;\"><input name=\"_method\" type=\"hidden\" value=\"" + formMethod + "\">" + authToken + "</div>";
224
- input = "<input type=\"text\" class=\"form-control abracadabra-input\" id=\"" + inputId + "\" name=\"" + inputName + "\" value=\"" + inputValue + "\" data-original-value=\"" + inputValue + "\"" + tabToNextSelector + submitOnBlur + ">";
225
-
226
- html = "<span class=\"abracadabra-container\">" + openFormTag + hiddenMethodTags;
227
- html += "<div class=\"control-group\"><div class=\"abracadabra-input-and-button-wrapper\"><div class=\"abracadabra-input-container\">" + input + deletable + "</div>";
228
- html += "<div class=\"abracadabra-buttons\">" + buttons + "</div></div></form></span>";
229
-
230
- link.after(html);
231
- link.siblings(".abracadabra-container").find(".abracadabra-input").focus().val("").val(inputValue);
232
- });
246
+ $.abracadabra();
233
247
  });
@@ -1,5 +1,5 @@
1
1
  module Abracadabra
2
2
  module Rails
3
- VERSION = "1.1.4"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: abracadabra
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.4
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Trevor Hinesley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-18 00:00:00.000000000 Z
11
+ date: 2014-06-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails