json2html-rails 0.0.2

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3abc1d6b0c26aaee21b92b649896a5c55c996d36
4
+ data.tar.gz: 5fa3163a94ace452509f89a1154715aee57ec7af
5
+ SHA512:
6
+ metadata.gz: d91ef05505a10cdc15193af5ccc0408fb661cc4e89528cd4072c88d718a2e3cd528d291f33e9dc4bb6b1d783979bec5c80b0ee62cee6e626bdd5aef84346e45f
7
+ data.tar.gz: 5f6efced69443441201a82dcdf9a5f5b19c5a58573b578f259dac215ba9371f3df9e776b6d3b05f9c9a3e7bbd223dd2dbd96043a53837deebd5d127ca4682c3b
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ idea/
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in json2html-rails.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 rubyrider
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,54 @@
1
+ # Json2html::Rails
2
+
3
+
4
+ Instead of writing HTML templates json2html relies on JSON transforms to convert a source JSON objects to html. The benefit of using a JSON transform is that they are already readable by the browser and DO NOT require any compilation before use. In addition, json2html allows the following
5
+
6
+ Short hand notation for mapping data objects to markup
7
+ Event binding to DOM objects (exclusively with jquery.json2html)
8
+ Use of inline functions to allow for complex logic during transformation
9
+ Dynamic building of transform objects
10
+
11
+ Please checkout the original library:
12
+ https://github.com/moappi/jquery.json2html
13
+
14
+ ## Installation
15
+
16
+ Add this line to your application's Gemfile:
17
+
18
+ gem 'json2html-rails'
19
+
20
+ And then execute:
21
+
22
+ $ bundle
23
+
24
+ Or install it yourself as:
25
+
26
+ $ gem install json2html-rails
27
+
28
+ include the following line to your javascript file:
29
+
30
+ //require json2html-rails
31
+
32
+ ## Usage
33
+
34
+ ###Example of a Transform?
35
+
36
+ var transform =
37
+ {tag:'li',id:'${id}',children:[
38
+ {tag:'span',html:'${name} ${year}'}
39
+ ]};
40
+
41
+ Will render into the following html:
42
+
43
+
44
+ <li id=1123>
45
+ <span>Jack and Jill (2001)</span>
46
+ </li>
47
+
48
+ ## Contributing
49
+
50
+ 1. Fork it
51
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
52
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
53
+ 4. Push to the branch (`git push origin my-new-feature`)
54
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'json2html/rails/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "json2html-rails"
8
+ spec.version = Json2html::Rails::VERSION
9
+ spec.authors = ["rubyrider"]
10
+ spec.email = ["irfan@e-solutionpark.com"]
11
+ spec.description = %q{jquery.json2html is a jquery plug-in that implements the HTML templating engine json2html for client side browers}
12
+ spec.summary = %q{json2html is a javascript HTML templating engine which converts json object to html using json transforms. Note that this jquery.json2html package includes the latest version of json2html.}
13
+ spec.homepage = "https://github.com/rubyrider/json2html-rails"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib", "vendor"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ end
@@ -0,0 +1,7 @@
1
+ require "json2html/rails/version"
2
+
3
+ module Json2html
4
+ module Rails
5
+ # Your code goes here...
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Json2html
2
+ module Rails
3
+ VERSION = "0.0.2"
4
+ end
5
+ end
File without changes
@@ -0,0 +1,74 @@
1
+ //Copyright (c) 2013 Crystalline Technologies
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'),
4
+ // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
5
+ // and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+ //
7
+ // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+ //
9
+ // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
11
+ // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12
+
13
+ (function($){
14
+
15
+ //Main method
16
+ $.fn.json2html = function(json, transform, _options){
17
+
18
+ //Make sure we have the json2html base loaded
19
+ if(typeof json2html === 'undefined') return(undefined);
20
+
21
+ //Default Options
22
+ var options = {
23
+ 'append':true,
24
+ 'replace':false,
25
+ 'prepend':false,
26
+ 'eventData':{}
27
+ };
28
+
29
+ //Extend the options (with defaults)
30
+ if( _options !== undefined ) $.extend(options, _options);
31
+
32
+ //Insure that we have the events turned (Required)
33
+ options.events = true;
34
+
35
+ //Make sure to take care of any chaining
36
+ return this.each(function(){
37
+
38
+ //let json2html core do it's magic
39
+ var result = json2html.transform(json, transform, options);
40
+
41
+ //Attach the html(string) result to the DOM
42
+ var dom = $(document.createElement('i')).html(result.html);
43
+
44
+ //Determine if we have events
45
+ for(var i = 0; i < result.events.length; i++) {
46
+
47
+ var event = result.events[i];
48
+
49
+ //find the associated DOM object with this event
50
+ var obj = $(dom).find("[json2html-event-id-"+event.type+"='" + event.id + "']");
51
+
52
+ //Check to see if we found this element or not
53
+ if(obj.length === 0) throw 'jquery.json2html was unable to attach event ' + event.id + ' to DOM';
54
+
55
+ //remove the attribute
56
+ $(obj).removeAttr('json2html-event-id-'+event.type);
57
+
58
+ //attach the event
59
+ $(obj).on(event.type,event.data,function(e){
60
+ //attach the jquery event
61
+ e.data.event = e;
62
+
63
+ //call the appropriate method
64
+ e.data.action.call($(this),e.data);
65
+ });
66
+ }
67
+
68
+ //Append it to the appropriate element
69
+ if (options.replace) $.fn.replaceWith.call($(this),$(dom).children());
70
+ else if (options.prepend) $.fn.prepend.call($(this),$(dom).children());
71
+ else $.fn.append.call($(this),$(dom).children());
72
+ });
73
+ };
74
+ })(jQuery);
@@ -0,0 +1,2 @@
1
+ //= require json2html
2
+ //= require jquery.json2html
@@ -0,0 +1,356 @@
1
+ //Copyright (c) 2013 Crystalline Technologies
2
+ //
3
+ // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'),
4
+ // to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
5
+ // and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+ //
7
+ // The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+ //
9
+ // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
10
+ // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
11
+ // WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
12
+
13
+ var json2html = {
14
+
15
+ /* ---------------------------------------- Public Methods ------------------------------------------------ */
16
+ 'transform': function(json,transform,_options) {
17
+
18
+ //create the default output
19
+ var out = {'events':[],'html':''};
20
+
21
+ //default options (by default we don't allow events)
22
+ var options = {
23
+ 'events':false
24
+ };
25
+
26
+ //extend the options
27
+ options = json2html._extend(options,_options);
28
+
29
+ //Make sure we have a transform & json object
30
+ if( transform !== undefined || json !== undefined ) {
31
+
32
+ //Normalize strings to JSON objects if necessary
33
+ var obj = typeof json === 'string' ? JSON.parse(json) : json;
34
+
35
+ //Transform the object (using the options)
36
+ out = json2html._transform(obj, transform, options);
37
+ }
38
+
39
+ //determine if we need the events
40
+ // otherwise return just the html string
41
+ if(options.events) return(out);
42
+ else return( out.html );
43
+ },
44
+
45
+ /* ---------------------------------------- Private Methods ------------------------------------------------ */
46
+
47
+ //Extend options
48
+ '_extend':function(obj1,obj2){
49
+ var obj3 = {};
50
+ for (var attrname in obj1) { obj3[attrname] = obj1[attrname]; }
51
+ for (var attrname in obj2) { obj3[attrname] = obj2[attrname]; }
52
+ return obj3;
53
+ },
54
+
55
+ //Append results
56
+ '_append':function(obj1,obj2) {
57
+ var out = {'html':'','event':[]};
58
+ if(typeof obj1 !== 'undefined' && typeof obj2 !== 'undefined') {
59
+ out.html = obj1.html + obj2.html;
60
+
61
+ out.events = obj1.events.concat(obj2.events);
62
+ }
63
+
64
+ return(out);
65
+ },
66
+
67
+ //isArray (fix for IE prior to 9)
68
+ '_isArray':function(obj) {
69
+ return Object.prototype.toString.call(obj) === '[object Array]';
70
+ },
71
+
72
+ //Transform object
73
+ '_transform':function(json, transform, options) {
74
+
75
+ var elements = {'events':[],'html':''};
76
+
77
+ //Determine the type of this object
78
+ if(json2html._isArray(json)) {
79
+
80
+ //Itterrate through the array and add it to the elements array
81
+ var len=json.length;
82
+ for(var j=0;j<len;++j) {
83
+ //Apply the transform to this object and append it to the results
84
+ elements = json2html._append(elements,json2html._apply(json[j], transform, j, options));
85
+ }
86
+
87
+ } else if(typeof json === 'object') {
88
+
89
+ //Apply the transform to this object and append it to the results
90
+ elements = json2html._append(elements,json2html._apply(json, transform, undefined, options));
91
+ }
92
+
93
+ //Return the resulting elements
94
+ return(elements);
95
+ },
96
+
97
+ //Apply the transform at the second level
98
+ '_apply':function(obj, transform, index, options) {
99
+
100
+ var element = {'events':[],'html':''};
101
+
102
+ //Itterate through the transform and create html as needed
103
+ if(json2html._isArray(transform)) {
104
+
105
+ var t_len = transform.length;
106
+ for(var t=0; t < t_len; ++t) {
107
+ //transform the object and append it to the output
108
+ element = json2html._append(element,json2html._apply(obj, transform[t], index, options));
109
+ }
110
+
111
+ } else if(typeof transform === 'object') {
112
+
113
+ //Get the tag element of this transform
114
+ if( transform.tag !== undefined ) {
115
+
116
+ //Create a new element
117
+ element.html += '<' + transform.tag;
118
+
119
+ //Create a new object for the children
120
+ var children = {'events':[],'html':''};
121
+
122
+ //innerHTML
123
+ var html;
124
+
125
+ //Look into the properties of this transform
126
+ for (var key in transform) {
127
+
128
+ switch(key) {
129
+ case 'tag':
130
+ //Do nothing as we have already created the element from the tag
131
+ break;
132
+
133
+ case 'children':
134
+ //Add the children
135
+ if(json2html._isArray(transform.children)) {
136
+
137
+ //Apply the transform to the children
138
+ children = json2html._append(children,json2html._apply(obj, transform.children, index, options));
139
+ } else if(typeof transform.children === 'function') {
140
+
141
+ //Get the result from the function
142
+ var temp = transform.children.call(obj, obj, index);
143
+
144
+ //Make sure we have an object result with the props
145
+ // html (string), events (array)
146
+ // OR a string (then just append it to the children
147
+ if(typeof temp === 'object') {
148
+ //make sure this object is a valid json2html response object
149
+ if(temp.html !== undefined && temp.events !== undefined) children = json2html._append(children,temp);
150
+ } else if(typeof temp === 'string') {
151
+
152
+ //append the result directly to the html of the children
153
+ children.html += temp;
154
+ }
155
+ }
156
+ break;
157
+
158
+ case 'html':
159
+ //Create the html attribute for this element
160
+ html = json2html._getValue(obj,transform,'html',index);
161
+ break;
162
+
163
+ default:
164
+ //Add the property as a attribute if it's not a key one
165
+ var isEvent = false;
166
+
167
+ //Check if the first two characters are 'on' then this is an event
168
+ if( key.length > 2 )
169
+ if(key.substring(0,2).toLowerCase() == 'on') {
170
+
171
+ //Determine if we should add events
172
+ if(options.events) {
173
+
174
+ //if so then setup the event data
175
+ var data = {
176
+ 'action':transform[key],
177
+ 'obj':obj,
178
+ 'data':options.eventData,
179
+ 'index':index
180
+ };
181
+
182
+ //create a new id for this event
183
+ var id = json2html._guid();
184
+
185
+ //append the new event to this elements events
186
+ element.events[element.events.length] = {'id':id,'type':key.substring(2),'data':data};
187
+
188
+ //Insert temporary event property (json2html-event-id) into the element
189
+ element.html += " json2html-event-id-"+key.substring(2)+"='" + id + "'";
190
+ }
191
+ //this is an event
192
+ isEvent = true;
193
+ }
194
+
195
+ //If this wasn't an event AND we actually have a value then add it as a property
196
+ if( !isEvent){
197
+ //Get the value
198
+ var val = json2html._getValue(obj, transform, key, index);
199
+
200
+ //Make sure we have a value
201
+ if(val !== undefined) {
202
+ var out;
203
+
204
+ //Determine the output type of this value (wrap with quotes)
205
+ if(typeof val === 'string') out = '"' + val.replace(/"/g, '&quot;') + '"';
206
+ else out = val;
207
+
208
+ //creat the name value pair
209
+ element.html += ' ' + key + '=' + out;
210
+ }
211
+ }
212
+ break;
213
+ }
214
+ }
215
+
216
+ //close the opening tag
217
+ element.html += '>';
218
+
219
+ //add the innerHTML (if we have any)
220
+ if(html) element.html += html;
221
+
222
+ //add the children (if we have any)
223
+ element = json2html._append(element,children);
224
+
225
+ //add the closing tag
226
+ element.html += '</' + transform.tag + '>';
227
+ }
228
+ }
229
+
230
+ //Return the output object
231
+ return(element);
232
+ },
233
+
234
+ //Get a new GUID (used by events)
235
+ '_guid':function() {
236
+ var S4 = function() {
237
+ return (((1+Math.random())*0x10000)|0).toString(16).substring(1);
238
+ };
239
+ return (S4()+S4()+"-"+S4()+S4()+"-"+S4()+S4());
240
+ },
241
+
242
+ //Get the html value of the object
243
+ '_getValue':function(obj, transform, key,index) {
244
+
245
+ var out = '';
246
+
247
+ var val = transform[key];
248
+ var type = typeof val;
249
+
250
+ if (type === 'function') {
251
+ return(val.call(obj,obj,index));
252
+ } else if (type === 'string') {
253
+ var _tokenizer = new json2html._tokenizer([
254
+ /\$\{([^\}\{]+)\}/
255
+ ],function( src, real, re ){
256
+ return real ? src.replace(re,function(all,name){
257
+
258
+ //Split the string into it's seperate components
259
+ var components = name.split('.');
260
+
261
+ //Set the object we use to query for this name to be the original object
262
+ var useObj = obj;
263
+
264
+ //Output value
265
+ var outVal = '';
266
+
267
+ //Parse the object components
268
+ var c_len = components.length;
269
+ for (var i=0;i<c_len;++i) {
270
+
271
+ if( components[i].length > 0 ) {
272
+
273
+ var newObj = useObj[components[i]];
274
+ useObj = newObj;
275
+ if(useObj === null || useObj === undefined) break;
276
+ }
277
+ }
278
+
279
+ //As long as we have an object to use then set the out
280
+ if(useObj !== null && useObj !== undefined) outVal = useObj;
281
+
282
+ return(outVal);
283
+ }) : src;
284
+ });
285
+
286
+ out = _tokenizer.parse(val).join('');
287
+ } else {
288
+ out = val;
289
+ }
290
+
291
+ return(out);
292
+ },
293
+
294
+ //Tokenizer
295
+ '_tokenizer':function( tokenizers, doBuild ){
296
+
297
+ if( !(this instanceof json2html._tokenizer ) )
298
+ return new json2html._tokenizer( tokenizers, doBuild );
299
+
300
+ this.tokenizers = tokenizers.splice ? tokenizers : [tokenizers];
301
+ if( doBuild )
302
+ this.doBuild = doBuild;
303
+
304
+ this.parse = function( src ){
305
+ this.src = src;
306
+ this.ended = false;
307
+ this.tokens = [ ];
308
+ do {
309
+ this.next();
310
+ } while( !this.ended );
311
+ return this.tokens;
312
+ };
313
+
314
+ this.build = function( src, real ){
315
+ if( src )
316
+ this.tokens.push(
317
+ !this.doBuild ? src :
318
+ this.doBuild(src,real,this.tkn)
319
+ );
320
+ };
321
+
322
+ this.next = function(){
323
+ var self = this,
324
+ plain;
325
+
326
+ self.findMin();
327
+ plain = self.src.slice(0, self.min);
328
+
329
+ self.build( plain, false );
330
+
331
+ self.src = self.src.slice(self.min).replace(self.tkn,function( all ){
332
+ self.build(all, true);
333
+ return '';
334
+ });
335
+
336
+ if( !self.src )
337
+ self.ended = true;
338
+ };
339
+
340
+ this.findMin = function(){
341
+ var self = this, i=0, tkn, idx;
342
+ self.min = -1;
343
+ self.tkn = '';
344
+
345
+ while(( tkn = self.tokenizers[i++]) !== undefined ){
346
+ idx = self.src[tkn.test?'search':'indexOf'](tkn);
347
+ if( idx != -1 && (self.min == -1 || idx < self.min )){
348
+ self.tkn = tkn;
349
+ self.min = idx;
350
+ }
351
+ }
352
+ if( self.min == -1 )
353
+ self.min = self.src.length;
354
+ };
355
+ }
356
+ };
File without changes
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: json2html-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - rubyrider
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-03-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: jquery.json2html is a jquery plug-in that implements the HTML templating
42
+ engine json2html for client side browers
43
+ email:
44
+ - irfan@e-solutionpark.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - .gitignore
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.md
53
+ - Rakefile
54
+ - json2html-rails.gemspec
55
+ - lib/json2html/rails.rb
56
+ - lib/json2html/rails/version.rb
57
+ - vendor/assets/javascripts/.keep
58
+ - vendor/assets/javascripts/jquery.json2html.js
59
+ - vendor/assets/javascripts/json2html-rails.js
60
+ - vendor/assets/javascripts/json2html.js
61
+ - vendor/assets/stylesheets/.keep
62
+ homepage: https://github.com/rubyrider/json2html-rails
63
+ licenses:
64
+ - MIT
65
+ metadata: {}
66
+ post_install_message:
67
+ rdoc_options: []
68
+ require_paths:
69
+ - lib
70
+ - vendor
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.1.11
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: json2html is a javascript HTML templating engine which converts json object
87
+ to html using json transforms. Note that this jquery.json2html package includes
88
+ the latest version of json2html.
89
+ test_files: []