json-minify 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6ca223097ab556986fe54fba09c40c6daf3654f9
4
+ data.tar.gz: 375b20f9d9cc35fb3bb55329d1eac9251e7a20f0
5
+ SHA512:
6
+ metadata.gz: d94e03273a9b097d6f4d8fb06c85bceb4ba9fe5099c0bdc9194cab7638c6c98bee6b6745c5d0d28962c2a74e39792c965b33428b3a167637dc0cd4242ff6a2b1
7
+ data.tar.gz: f05dc098243c5345af7076d82b76d1363d3b936333b2262a47d1bccd73109e6f46036c8eafab26c47837d5f31cb4e6aebd09cefac473449d1c01b8d1a96d2615
@@ -0,0 +1,17 @@
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
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in json-minify.gemspec
4
+ gemspec
@@ -0,0 +1,25 @@
1
+ Copyright (c) 2014 Geoff Youngs
2
+
3
+
4
+
5
+
6
+ MIT License
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining
9
+ a copy of this software and associated documentation files (the
10
+ "Software"), to deal in the Software without restriction, including
11
+ without limitation the rights to use, copy, modify, merge, publish,
12
+ distribute, sublicense, and/or sell copies of the Software, and to
13
+ permit persons to whom the Software is furnished to do so, subject to
14
+ the following conditions:
15
+
16
+ The above copyright notice and this permission notice shall be
17
+ included in all copies or substantial portions of the Software.
18
+
19
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
20
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
22
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
23
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
24
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
25
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,44 @@
1
+ # JSON::Minify
2
+
3
+ JSON.minify implementation
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'json-minify'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install json-minify
18
+
19
+ ## Usage
20
+
21
+ Rationale is here: https://github.com/getify/JSON.minify
22
+
23
+ Though comments are not officially part of the JSON standard, this post from
24
+ Douglas Crockford back in late 2005 helps explain the motivation behind this project.
25
+
26
+ http://tech.groups.yahoo.com/group/json/message/152
27
+
28
+ "A JSON encoder MUST NOT output comments. A JSON decoder MAY accept and ignore comments."
29
+
30
+
31
+ API is compatible with JSON.minify in the npm node-json-minify package.
32
+
33
+ JSON.minify("{ }") #=> "{}"
34
+
35
+ JSON.minify("{ /* comment */ }") #=> "{}"
36
+
37
+
38
+ ## Contributing
39
+
40
+ 1. Fork it ( http://github.com/geoffyoungs/json-minify-rb/fork )
41
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
42
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
43
+ 4. Push to the branch (`git push origin my-new-feature`)
44
+ 5. Create new Pull Request
@@ -0,0 +1,5 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new(:spec)
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'json/minify/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "json-minify"
8
+ spec.version = JSON::Minify::VERSION
9
+ spec.authors = ["Geoff Youngs\n\n\n"]
10
+ spec.email = ["git@intersect-uk.co.uk"]
11
+ spec.summary = %q{JSON.minify implementation}
12
+ spec.description = %q{Pre-parser for JSON that removes C/C++ style comments and whitespace from formatted JSON, similar to https://github.com/getify/JSON.minify.}
13
+ spec.homepage = "http://github.com/geoffyoungs/json-minify-rb"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
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"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.5"
22
+ spec.add_development_dependency "rake", '~> 10.1'
23
+ spec.add_development_dependency "rspec", "~> 2.14"
24
+ spec.add_dependency "json", "> 0"
25
+ end
@@ -0,0 +1,57 @@
1
+ require 'strscan'
2
+ require 'json'
3
+ require "json/minify/version"
4
+
5
+ module JSON
6
+ module Minify
7
+ def self.included(mod)
8
+ mod.send(:extend, self)
9
+ end
10
+ def minify(str)
11
+ ss, buf = StringScanner.new(str), ''
12
+
13
+ until ss.eos?
14
+ # Remove whitespace
15
+ if s = ss.scan(/\s+/)
16
+
17
+ # Scan punctuation
18
+ elsif s = ss.scan(/[{},:\]\[]/)
19
+ buf << s
20
+
21
+ # Scan strings
22
+ elsif s = ss.scan(/"(.*?[^\\])?"/)
23
+ buf << s
24
+
25
+ # Scan reserved words
26
+ elsif s = ss.scan(/(true|false|null)/)
27
+ buf << s
28
+
29
+ # Scan numbers
30
+ elsif s = ss.scan(/-?\d+([.]\d+)?([eE][-+]?[0-9]+)?/)
31
+ buf << s
32
+
33
+ # Remove C++ style comments
34
+ elsif s = ss.scan(%r<//>)
35
+ ss.scan_until(/(\r?\n|$)/)
36
+
37
+ # Remove C style comments
38
+ elsif s = ss.scan(%r'/[*]')
39
+ ss.scan_until(%r'[*]/') or raise SyntaxError, "Unterminated /*...*/ comment - #{ss.rest}"
40
+
41
+ # Anything else is invalid JSON
42
+ else
43
+ raise SyntaxError, "Unable to pre-scan string: #{ss.rest}"
44
+ end
45
+ end
46
+ buf
47
+ end
48
+
49
+ def minify_parse(buf)
50
+ JSON.parse(minify(buf))
51
+ end
52
+ end
53
+ end
54
+
55
+ module JSON
56
+ include JSON::Minify
57
+ end
@@ -0,0 +1,5 @@
1
+ module JSON
2
+ module Minify
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ $: << File.dirname(__FILE__)+"../lib"
2
+
3
+ require 'json/minify'
4
+
5
+ describe JSON::Minify do
6
+ it "should remove whitespace from JSON" do
7
+ expect(JSON.minify("{ }")).to eql("{}")
8
+ expect(JSON.minify(%Q<{"foo": "bar"\n}\n>)).to eql(%Q<{"foo":"bar"}>)
9
+ end
10
+
11
+ it "should remove comments from JSON" do
12
+ expect(JSON.minify("{ /* foo */ } /* bar */")).to eql("{}")
13
+ expect(JSON.minify(%Q<{"foo": "bar"\n}\n // this is a comment>)).to eql(%Q<{"foo":"bar"}>)
14
+ end
15
+
16
+ it "should throw a SyntaxError on invalid JSON" do
17
+ expect { JSON.minify("{ /* foo */ } /* bar ") }.to raise_error(SyntaxError)
18
+ expect { JSON.minify(%Q<{ "foo": new Date(1023) }>) }.to raise_error(SyntaxError)
19
+ end
20
+
21
+ it "should cope with the example from https://github.com/getify/JSON.minify" do
22
+ expect(JSON.minify( %Q'{ /* comment */ "foo": 42 \n }' )).to eql('{"foo":42}')
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,114 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: json-minify
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - |+
8
+ Geoff Youngs
9
+
10
+
11
+ autorequire:
12
+ bindir: bin
13
+ cert_chain: []
14
+ date: 2014-02-26 00:00:00.000000000 Z
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: bundler
18
+ requirement: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ~>
21
+ - !ruby/object:Gem::Version
22
+ version: '1.5'
23
+ type: :development
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ version: '1.5'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rake
32
+ requirement: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ~>
35
+ - !ruby/object:Gem::Version
36
+ version: '10.1'
37
+ type: :development
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '10.1'
44
+ - !ruby/object:Gem::Dependency
45
+ name: rspec
46
+ requirement: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ~>
49
+ - !ruby/object:Gem::Version
50
+ version: '2.14'
51
+ type: :development
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ~>
56
+ - !ruby/object:Gem::Version
57
+ version: '2.14'
58
+ - !ruby/object:Gem::Dependency
59
+ name: json
60
+ requirement: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - '>'
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - '>'
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ description: Pre-parser for JSON that removes C/C++ style comments and whitespace
73
+ from formatted JSON, similar to https://github.com/getify/JSON.minify.
74
+ email:
75
+ - git@intersect-uk.co.uk
76
+ executables: []
77
+ extensions: []
78
+ extra_rdoc_files: []
79
+ files:
80
+ - .gitignore
81
+ - Gemfile
82
+ - LICENSE.txt
83
+ - README.md
84
+ - Rakefile
85
+ - json-minify.gemspec
86
+ - lib/json/minify.rb
87
+ - lib/json/minify/version.rb
88
+ - spec/minify_spec.rb
89
+ homepage: http://github.com/geoffyoungs/json-minify-rb
90
+ licenses:
91
+ - MIT
92
+ metadata: {}
93
+ post_install_message:
94
+ rdoc_options: []
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ required_rubygems_version: !ruby/object:Gem::Requirement
103
+ requirements:
104
+ - - '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
107
+ requirements: []
108
+ rubyforge_project:
109
+ rubygems_version: 2.2.1
110
+ signing_key:
111
+ specification_version: 4
112
+ summary: JSON.minify implementation
113
+ test_files:
114
+ - spec/minify_spec.rb