jquery-serialize-json-sprockets 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f62f51cd83e40320487c0bc480ff3425207d4cf1
4
+ data.tar.gz: b5372cbae34604c647deb52d4b012e46662efe27
5
+ SHA512:
6
+ metadata.gz: eb93131cac6d034bc09968af0961ba9df8e301170a4e15753641feb0bd43c3302d912eb97e8396d44da64e8a119248c62c9f4df00d451204aa04b4638d12d891
7
+ data.tar.gz: c8503dd20dfdd87ef288941c5b7d2a00fa1784c28ad705a3f7671f925e83a6d7669b11f4688b1518b25cadfd1703d6979e9e817e5fc998be40f15fc7824e9908
@@ -0,0 +1,23 @@
1
+ module JQuery
2
+ module Serialize
3
+ module JSON
4
+ module Sprockets
5
+
6
+ def self.path
7
+ File.expand_path(File.join("..", "vendor", "assets", "javascripts"), File.dirname(__FILE__))
8
+ end
9
+
10
+ def self.load!
11
+
12
+ if defined?(::Rails)
13
+ require "jquery/serialize/json/sprockets/engine"
14
+ end
15
+
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ JQuery::Serialize::JSON::Sprockets.load!
@@ -0,0 +1,2 @@
1
+ class JQuery::Serialize::JSON::Sprockets::Engine < Rails::Engine
2
+ end
@@ -0,0 +1,166 @@
1
+ /*!
2
+ SerializeJSON jQuery plugin.
3
+ https://github.com/marioizquierdo/jquery.serializeJSON
4
+ version 2.1.0 (May, 2014)
5
+
6
+ Copyright (c) 2014 Mario Izquierdo
7
+ Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
8
+ and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
9
+ */
10
+ (function ($) {
11
+ "use strict";
12
+
13
+ // jQuery('form').serializeJSON()
14
+ $.fn.serializeJSON = function (options) {
15
+ var serializedObject, formAsArray, keys, value, f, opts;
16
+ f = $.serializeJSON;
17
+ formAsArray = this.serializeArray(); // array of objects {name, value}
18
+ opts = f.optsWithDefaults(options); // calculate values for options {parseNumbers, parseBoolens, parseNulls}
19
+
20
+ serializedObject = {};
21
+ $.each(formAsArray, function (i, input) {
22
+ keys = f.splitInputNameIntoKeysArray(input.name); // "some[deep][key]" => ['some', 'deep', 'key']
23
+ value = f.parseValue(input.value, opts); // string, number, boolean or null
24
+ if (opts.parseWithFunction) value = opts.parseWithFunction(value); // allow for custom parsing
25
+ f.deepSet(serializedObject, keys, value, opts);
26
+ });
27
+ return serializedObject;
28
+ };
29
+
30
+ // Use $.serializeJSON as namespace for the auxiliar functions
31
+ // and to define defaults
32
+ $.serializeJSON = {
33
+
34
+ defaultOptions: {
35
+ parseNumbers: false, // convert values like "1", "-2.33" to 1, -2.33
36
+ parseBooleans: false, // convert "true", "false" to true, false
37
+ parseNulls: false, // convert "null" to null
38
+ parseAll: false, // all of the above
39
+ parseWithFunction: null, // to use custom parser, use a function like: function (val) => parsed_val
40
+ useIntKeysAsArrayIndex: false // name="foo[2]" value="v" => {foo: [null, null, "v"]}, instead of {foo: ["2": "v"]}
41
+ },
42
+
43
+ // Merge options with defaults to get {parseNumbers, parseBoolens, parseNulls, useIntKeysAsArrayIndex}
44
+ optsWithDefaults: function(options) {
45
+ var f, parseAll;
46
+ if (options == null) options = {}; // arg default value = {}
47
+ f = $.serializeJSON;
48
+ parseAll = f.optWithDefaults('parseAll', options);
49
+ return {
50
+ parseNumbers: parseAll || f.optWithDefaults('parseNumbers', options),
51
+ parseBooleans: parseAll || f.optWithDefaults('parseBooleans', options),
52
+ parseNulls: parseAll || f.optWithDefaults('parseNulls', options),
53
+ parseWithFunction: f.optWithDefaults('parseWithFunction', options),
54
+ useIntKeysAsArrayIndex: f.optWithDefaults('useIntKeysAsArrayIndex', options)
55
+ }
56
+ },
57
+
58
+ optWithDefaults: function(key, options) {
59
+ return (options[key] !== false) && (options[key] || $.serializeJSON.defaultOptions[key]);
60
+ },
61
+
62
+ // Convert the string to a number, boolean or null, depending on the enable option and the string format.
63
+ parseValue: function(str, opts) {
64
+ var value, f;
65
+ f = $.serializeJSON;
66
+ if (opts.parseNumbers && f.isNumeric(str)) return Number(str); // number
67
+ if (opts.parseBooleans && (str === "true" || str === "false")) return str === "true"; // boolean
68
+ if (opts.parseNulls && str == "null") return null; // null
69
+ return str; // otherwise, keep same string
70
+ },
71
+
72
+ isObject: function(obj) { return obj === Object(obj); }, // is this variable an object?
73
+ isUndefined: function(obj) { return obj === void 0; }, // safe check for undefined values
74
+ isValidArrayIndex: function(val) { return /^[0-9]+$/.test(String(val)); }, // 1,2,3,4 ... are valid array indexes
75
+ isNumeric: function(obj) { return obj - parseFloat(obj) >= 0; }, // taken from jQuery.isNumeric implementation. Not using jQuery.isNumeric to support old jQuery and Zepto versions
76
+
77
+ // Split the input name in programatically readable keys
78
+ // "foo" => ['foo']
79
+ // "[foo]" => ['foo']
80
+ // "foo[inn][bar]" => ['foo', 'inn', 'bar']
81
+ // "foo[inn][arr][0]" => ['foo', 'inn', 'arr', '0']
82
+ // "arr[][val]" => ['arr', '', 'val']
83
+ splitInputNameIntoKeysArray: function (name) {
84
+ var keys, last, f;
85
+ f = $.serializeJSON;
86
+ if (f.isUndefined(name)) { throw new Error("ArgumentError: param 'name' expected to be a string, found undefined"); }
87
+ keys = $.map(name.split('['), function (key) {
88
+ last = key[key.length - 1];
89
+ return last === ']' ? key.substring(0, key.length - 1) : key;
90
+ });
91
+ if (keys[0] === '') { keys.shift(); } // "[foo][inn]" should be same as "foo[inn]"
92
+ return keys;
93
+ },
94
+
95
+ // Set a value in an object or array, using multiple keys to set in a nested object or array:
96
+ //
97
+ // deepSet(obj, ['foo'], v) // obj['foo'] = v
98
+ // deepSet(obj, ['foo', 'inn'], v) // obj['foo']['inn'] = v // Create the inner obj['foo'] object, if needed
99
+ // deepSet(obj, ['foo', 'inn', '123'], v) // obj['foo']['arr']['123'] = v //
100
+ //
101
+ // deepSet(obj, ['0'], v) // obj['0'] = v
102
+ // deepSet(arr, ['0'], v, {useIntKeysAsArrayIndex: true}) // arr[0] = v
103
+ // deepSet(arr, [''], v) // arr.push(v)
104
+ // deepSet(obj, ['arr', ''], v) // obj['arr'].push(v)
105
+ //
106
+ // arr = [];
107
+ // deepSet(arr, ['', v] // arr => [v]
108
+ // deepSet(arr, ['', 'foo'], v) // arr => [v, {foo: v}]
109
+ // deepSet(arr, ['', 'bar'], v) // arr => [v, {foo: v, bar: v}]
110
+ // deepSet(arr, ['', 'bar'], v) // arr => [v, {foo: v, bar: v}, {bar: v}]
111
+ //
112
+ deepSet: function (o, keys, value, opts) {
113
+ var key, nextKey, tail, lastIdx, lastVal, f;
114
+ if (opts == null) opts = {};
115
+ f = $.serializeJSON;
116
+ if (f.isUndefined(o)) { throw new Error("ArgumentError: param 'o' expected to be an object or array, found undefined"); }
117
+ if (!keys || keys.length === 0) { throw new Error("ArgumentError: param 'keys' expected to be an array with least one element"); }
118
+
119
+ key = keys[0];
120
+
121
+ // Only one key, then it's not a deepSet, just assign the value.
122
+ if (keys.length === 1) {
123
+ if (key === '') {
124
+ o.push(value); // '' is used to push values into the array (assume o is an array)
125
+ } else {
126
+ o[key] = value; // other keys can be used as object keys or array indexes
127
+ }
128
+
129
+ // With more keys is a deepSet. Apply recursively.
130
+ } else {
131
+
132
+ nextKey = keys[1];
133
+
134
+ // '' is used to push values into the array,
135
+ // with nextKey, set the value into the same object, in object[nextKey].
136
+ // Covers the case of ['', 'foo'] and ['', 'var'] to push the object {foo, var}, and the case of nested arrays.
137
+ if (key === '') {
138
+ lastIdx = o.length - 1; // asume o is array
139
+ lastVal = o[lastIdx];
140
+ if (f.isObject(lastVal) && (f.isUndefined(lastVal[nextKey]) || keys.length > 2)) { // if nextKey is not present in the last object element, or there are more keys to deep set
141
+ key = lastIdx; // then set the new value in the same object element
142
+ } else {
143
+ key = lastIdx + 1; // otherwise, point to set the next index in the array
144
+ }
145
+ }
146
+
147
+ // o[key] defaults to object or array, depending if nextKey is an array index (int or '') or an object key (string)
148
+ if (f.isUndefined(o[key])) {
149
+ if (nextKey === '') { // '' is used to push values into the array.
150
+ o[key] = [];
151
+ } else if (opts.useIntKeysAsArrayIndex && f.isValidArrayIndex(nextKey)) { // if 1, 2, 3 ... then use an array, where nextKey is the index
152
+ o[key] = [];
153
+ } else { // for anything else, use an object, where nextKey is going to be the attribute name
154
+ o[key] = {};
155
+ }
156
+ }
157
+
158
+ // Recursively set the inner object
159
+ tail = keys.slice(1);
160
+ f.deepSet(o[key], tail, value, opts);
161
+ }
162
+ }
163
+
164
+ };
165
+
166
+ }(window.jQuery || window.Zepto || window.$));
metadata ADDED
@@ -0,0 +1,61 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jquery-serialize-json-sprockets
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - shelling
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-06-10 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sprockets
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 2.11.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 2.11.0
27
+ description:
28
+ email:
29
+ - navyblueshellingford@gmail.com
30
+ executables: []
31
+ extensions: []
32
+ extra_rdoc_files: []
33
+ files:
34
+ - lib/jquery-serialize-json-sprockets.rb
35
+ - lib/jquery/serialize/json/sprockets/engine.rb
36
+ - vendor/assets/javascripts/jquery.serializejson.js
37
+ homepage: ''
38
+ licenses:
39
+ - MIT
40
+ metadata: {}
41
+ post_install_message:
42
+ rdoc_options: []
43
+ require_paths:
44
+ - lib
45
+ required_ruby_version: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '0'
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ requirements: []
56
+ rubyforge_project:
57
+ rubygems_version: 2.2.2
58
+ signing_key:
59
+ specification_version: 4
60
+ summary: the ladda button effect assets
61
+ test_files: []