ngi 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +164 -0
- data/Rakefile +2 -0
- data/bin/ngi +35 -0
- data/lib/config/angular_init.config.json +100 -0
- data/lib/config/backup.angular_init.config.json +72 -0
- data/lib/dep/json.rb +62 -0
- data/lib/dep/json/add/bigdecimal.rb +28 -0
- data/lib/dep/json/add/complex.rb +28 -0
- data/lib/dep/json/add/core.rb +11 -0
- data/lib/dep/json/add/date.rb +34 -0
- data/lib/dep/json/add/date_time.rb +50 -0
- data/lib/dep/json/add/exception.rb +31 -0
- data/lib/dep/json/add/ostruct.rb +31 -0
- data/lib/dep/json/add/range.rb +29 -0
- data/lib/dep/json/add/rational.rb +27 -0
- data/lib/dep/json/add/regexp.rb +30 -0
- data/lib/dep/json/add/struct.rb +30 -0
- data/lib/dep/json/add/symbol.rb +25 -0
- data/lib/dep/json/add/time.rb +38 -0
- data/lib/dep/json/common.rb +484 -0
- data/lib/dep/json/ext.rb +21 -0
- data/lib/dep/json/ext/.keep +0 -0
- data/lib/dep/json/generic_object.rb +70 -0
- data/lib/dep/json/pure.rb +21 -0
- data/lib/dep/json/pure/generator.rb +522 -0
- data/lib/dep/json/pure/parser.rb +359 -0
- data/lib/dep/json/version.rb +8 -0
- data/lib/ngi.rb +16 -0
- data/lib/ngi/configure.rb +165 -0
- data/lib/ngi/delegate.rb +24 -0
- data/lib/ngi/generator.rb +199 -0
- data/lib/ngi/utils/command_parser.rb +104 -0
- data/lib/ngi/utils/jser.rb +46 -0
- data/lib/ngi/utils/utils.rb +30 -0
- data/lib/ngi/version.rb +3 -0
- data/lib/templates/markup/html/default/index.html +11 -0
- data/lib/templates/script/coffee/default/basic.js +23 -0
- data/lib/templates/script/coffee/default/config.js +12 -0
- data/lib/templates/script/coffee/default/constant.js +7 -0
- data/lib/templates/script/coffee/default/module.js +7 -0
- data/lib/templates/script/es5/default/basic.js +29 -0
- data/lib/templates/script/es5/default/config.js +13 -0
- data/lib/templates/script/es5/default/constant.js +7 -0
- data/lib/templates/script/es5/default/module.js +7 -0
- data/ngi.gemspec +23 -0
- metadata +129 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 119801cbccb57371891100b9178b947823859d00
|
4
|
+
data.tar.gz: b129e85c5cc365c3e4fc2f2672fe1c0e40ca7506
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 255746a7d8b4dcf7c23f38cae6829adba8631860c9c8da90c48583ffd446889c541f362456d5237d3a2c63c1b51f7084832b37439610f39d907f9492bce3ac19
|
7
|
+
data.tar.gz: e6fd90484636fc1a66ec48dfe7082022c8f80795edf6538701af40fa68cbaebea07ae53a3b72723a0820ab01fa3409f54249056efeefbd554315bc90e7b4ad03
|
data/.gitignore
ADDED
@@ -0,0 +1,23 @@
|
|
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
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
23
|
+
.DS_Store
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2015 Joshua Beam
|
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.
|
data/README.md
ADDED
@@ -0,0 +1,164 @@
|
|
1
|
+
# angular_init 0.2.0
|
2
|
+
|
3
|
+
<a href="http://joshbeam.github.io/angular_init">Website</a>
|
4
|
+
|
5
|
+
**What's different?**
|
6
|
+
- Install it as a gem (`gem install ngi`)
|
7
|
+
- You can now make an `index` boilerplate HTML page (`ngi index`)
|
8
|
+
- Use `ngi -h` to see all commands
|
9
|
+
|
10
|
+
## In simple terms:
|
11
|
+
|
12
|
+
This tool (`ngi`) can make (for example) an AngularJS controller template file for you (`.js`), so that **whenever you want to make a new controller for your app, you don't have to type the same starting code over and over again** (by the way, this tool doesn't only create controllers. It does directives, filters... almost anything).
|
13
|
+
|
14
|
+
## Why use `ngi` (and not something else)?
|
15
|
+
|
16
|
+
**`ngi` has one task, and one task only, which makes it lightweight and specialized**. Most AngularJS developers are probably using the command line already (Gulp, Bower, npm, Git, etc.), so why not use the command line to streamline your code-writing too?
|
17
|
+
|
18
|
+
Type less, write more AngularJS! Use `ngi`, the simple template generator.
|
19
|
+
|
20
|
+
![Example](https://github.com/joshbeam/angular_init/blob/master/ngi_example.gif "Example")
|
21
|
+
|
22
|
+
# Table of Contents
|
23
|
+
|
24
|
+
- [Sample Usage][sample-usage]
|
25
|
+
- [Features][features]
|
26
|
+
- [Install in 1 step][install]
|
27
|
+
- [How to use it (docs)][commands]
|
28
|
+
- [FAQ][faq]
|
29
|
+
- [Technical Info][tech-info]
|
30
|
+
|
31
|
+
# Sample Usage
|
32
|
+
|
33
|
+
After you [do the 1-step installation][install] of `ngi` (the short-name for the shell script of `angular_init`), go to where your site is at (in this case, `~/MyAwesomeApp`). When you're in your site's project directory, just type `ngi <component>` to create a new JavaScript file for you!
|
34
|
+
|
35
|
+
## Command line
|
36
|
+
|
37
|
+
```shell
|
38
|
+
~/MyAwesomeApp $ ngi controller # this will create a controller!
|
39
|
+
|
40
|
+
# you'll be prompted for some quick info
|
41
|
+
[?] New file name: myAwesome.controller.js
|
42
|
+
[?] Module name: myModule
|
43
|
+
[?] Controller name: MyAwesomeController
|
44
|
+
[?] Inject (already injected $scope): $route
|
45
|
+
|
46
|
+
# all done!
|
47
|
+
```
|
48
|
+
|
49
|
+
## Output (your new boilerplate code)
|
50
|
+
|
51
|
+
```javascript
|
52
|
+
// ~/MyAwesomeApp/myAwesome.controller.js
|
53
|
+
|
54
|
+
;(function(app) {
|
55
|
+
|
56
|
+
'use strict';
|
57
|
+
|
58
|
+
app.controller('MyAwesomeController',MyAwesomeController);
|
59
|
+
|
60
|
+
MyAwesomeController.$inject = ['$route', '$scope'];
|
61
|
+
|
62
|
+
function MyAwesomeController($route, $scope) {
|
63
|
+
|
64
|
+
}
|
65
|
+
|
66
|
+
})(angular.module('myModule'));
|
67
|
+
```
|
68
|
+
|
69
|
+
By the way, the output of this little tool is meant to follow [John Papa's AngularJS Style Guide][style-guide].
|
70
|
+
|
71
|
+
# Features
|
72
|
+
|
73
|
+
## Current features
|
74
|
+
|
75
|
+
- Create a module, directive, controller, filter, run, config, "routes" config, constant, service, factory, or index HTML page by saying `ngi <component>`, where `<component>` is any of the above types (module, directive, etc.)
|
76
|
+
- Current languages that have default templates: CoffeeScript, ECMAScript5 (choose your language with `ngi --config (or -c)`)
|
77
|
+
|
78
|
+
## Coming soon
|
79
|
+
|
80
|
+
- Add custom templates and languages
|
81
|
+
|
82
|
+
Feel free to fork the project or get <a href="http://frontendcollisionblog.com/about">in touch with Josh (me)</a> with any feature requests!
|
83
|
+
|
84
|
+
# Installation (in 1 step)
|
85
|
+
|
86
|
+
**Dependencies** [Ruby 2.1.0][ruby] and [RubyGems][rubygems] (optional [Bundler][bundler])
|
87
|
+
|
88
|
+
Add this line to your application's Gemfile:
|
89
|
+
|
90
|
+
gem 'ngi'
|
91
|
+
|
92
|
+
And then execute:
|
93
|
+
|
94
|
+
$ bundle
|
95
|
+
|
96
|
+
Or install it yourself as:
|
97
|
+
|
98
|
+
$ gem install ngi
|
99
|
+
|
100
|
+
# Commands
|
101
|
+
|
102
|
+
```shell
|
103
|
+
~/MyAwesomeApp $ ngi controller # => controller
|
104
|
+
~/MyAwesomeApp $ ngi directive # => directive
|
105
|
+
~/MyAwesomeApp $ ngi factory # => factory
|
106
|
+
~/MyAwesomeApp $ ngi service # => service (same as factory)
|
107
|
+
~/MyAwesomeApp $ ngi constant # => constant
|
108
|
+
~/MyAwesomeApp $ ngi run # => a run block
|
109
|
+
~/MyAwesomeApp $ ngi config # => a config block
|
110
|
+
~/MyAwesomeApp $ ngi routes # => a config block with $routeProvider injected
|
111
|
+
~/MyAwesomeApp $ ngi module # => module (you can inject dependencies too)
|
112
|
+
~/MyAwesomeApp $ ngi filter # => filter
|
113
|
+
|
114
|
+
# or
|
115
|
+
|
116
|
+
~/MyAwesomeApp $ ngi index # => an index page in HTML
|
117
|
+
|
118
|
+
# or
|
119
|
+
|
120
|
+
# use either --options or -o
|
121
|
+
~/MyAwesomeApp $ ngi --options # => choose your language to use (CoffeeScript or ECMAScript5)
|
122
|
+
```
|
123
|
+
|
124
|
+
# FAQ
|
125
|
+
|
126
|
+
**1. Can you explain why the module name is passed as the argument to the IIFE (in the default template)?**
|
127
|
+
|
128
|
+
- If you're using a JSHint plug-in, it will only say 'angular is not defined' in one place
|
129
|
+
- Eliminates the clutter of declaring something like `var app = angular.module('myModule')`
|
130
|
+
- Something like `angular.module('myModule')` cannot be minified, but the argument `app` can (only an issue if the full module getter happens multiple time)
|
131
|
+
- Streamlines the pattern across all of the templates
|
132
|
+
|
133
|
+
**2. Why are you using `$inject`?**
|
134
|
+
|
135
|
+
Check out [John Papa's Style Guide][style-guide].
|
136
|
+
|
137
|
+
**3. Why are you following the snake-case convention (`angular_init`) and not camelCase (`angularInit`) if this is a JavaScript project?**
|
138
|
+
|
139
|
+
The command line tool itself is written in <a href="https://www.ruby-lang.org/en/">Ruby</a>, and the <a href="https://github.com/bbatsov/ruby-style-guide#snake-case-files">convention</a> is to use snake-case for class file naming.
|
140
|
+
|
141
|
+
*For other questions and comments, check out this <a href="http://www.reddit.com/r/angularjs/comments/30ydha/command_line_tool_to_create_angularjs_controllers/">Reddit discussion</a> about `ngi` (feel free to post your own question too). Or, open a new issue on GitHub.*
|
142
|
+
|
143
|
+
# Technical Information
|
144
|
+
|
145
|
+
**Version** 0.2.0
|
146
|
+
|
147
|
+
**Language** Ruby
|
148
|
+
|
149
|
+
**Requirements** Only tested with `ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0]`. Compatibility with previous versions of Ruby cannot be guaranteed.
|
150
|
+
|
151
|
+
<hr>
|
152
|
+
|
153
|
+
© 2015 Joshua Beam (MIT License) — <a href="http://frontendcollisionblog.com">Front End Collision</a>
|
154
|
+
|
155
|
+
[install]: #installation-in-1-step
|
156
|
+
[sample-usage]: #sample-usage
|
157
|
+
[features]: #features
|
158
|
+
[commands]: #commands
|
159
|
+
[faq]: #faq
|
160
|
+
[tech-info]: #technical-information
|
161
|
+
[style-guide]: https://github.com/johnpapa/angular-styleguide
|
162
|
+
[rubygems]: https://rubygems.org/pages/download
|
163
|
+
[ruby]: https://www.ruby-lang.org/en/downloads/
|
164
|
+
[bundler]: http://bundler.io/
|
data/Rakefile
ADDED
data/bin/ngi
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# angular_init (short-name: ngi)
|
4
|
+
# Copyright 2015 Joshua Beam
|
5
|
+
# github.com/joshbeam/angular_init
|
6
|
+
# MIT License
|
7
|
+
|
8
|
+
# Ngi is the main module (src/ruby/angular_init.rb)
|
9
|
+
require_relative '../lib/ngi'
|
10
|
+
require_relative '../lib/ngi/utils/utils'
|
11
|
+
|
12
|
+
class Parser
|
13
|
+
@@config = Ngi::Delegate::Configure.new.from_json
|
14
|
+
@@types = Ngi::UserInput.new(valid_inputs: @@config['global']['components'].collect{ |t| t['name'] })
|
15
|
+
|
16
|
+
def self.parse(args)
|
17
|
+
parser = Utils::CommandParser.new do |parser|
|
18
|
+
parser.name = "ngi"
|
19
|
+
parser.version = Ngi::VERSION
|
20
|
+
parser.banner << "\n(<command> can be one of the following)"
|
21
|
+
|
22
|
+
parser.on(@@types.valid_inputs, "Create a new component") do |command|
|
23
|
+
Ngi::Delegate::Generator.run(type: command, config: @@config)
|
24
|
+
end
|
25
|
+
|
26
|
+
parser.on(["-o","--options"], "Configure ngi") do
|
27
|
+
Ngi::Delegate::Configure.run()
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
parser.parse(args)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Parser.parse(ARGV)
|
@@ -0,0 +1,100 @@
|
|
1
|
+
{
|
2
|
+
"global": {
|
3
|
+
"configurable": {
|
4
|
+
"language": "language"
|
5
|
+
},
|
6
|
+
"menus": {
|
7
|
+
"options": "-options"
|
8
|
+
},
|
9
|
+
"languages": {
|
10
|
+
"script": [
|
11
|
+
"es5",
|
12
|
+
"coffee"
|
13
|
+
],
|
14
|
+
"markup": [
|
15
|
+
"html"
|
16
|
+
]
|
17
|
+
},
|
18
|
+
"language": {
|
19
|
+
"script": "es5",
|
20
|
+
"markup": "html"
|
21
|
+
},
|
22
|
+
"types": {
|
23
|
+
"script": "script",
|
24
|
+
"markup": "markup"
|
25
|
+
},
|
26
|
+
"components": [
|
27
|
+
{
|
28
|
+
"name": "directive",
|
29
|
+
"type": "script",
|
30
|
+
"using": "default",
|
31
|
+
"template": "basic.js"
|
32
|
+
},
|
33
|
+
{
|
34
|
+
"name": "controller",
|
35
|
+
"type": "script",
|
36
|
+
"using": "default",
|
37
|
+
"template": "basic.js"
|
38
|
+
},
|
39
|
+
{
|
40
|
+
"name": "factory",
|
41
|
+
"type": "script",
|
42
|
+
"using": "default",
|
43
|
+
"template": "basic.js"
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"name": "service",
|
47
|
+
"type": "script",
|
48
|
+
"using": "default",
|
49
|
+
"template": "basic.js"
|
50
|
+
},
|
51
|
+
{
|
52
|
+
"name": "config",
|
53
|
+
"type": "script",
|
54
|
+
"using": "default",
|
55
|
+
"template": "config.js"
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"name": "run",
|
59
|
+
"type": "script",
|
60
|
+
"using": "default",
|
61
|
+
"template": "config.js"
|
62
|
+
},
|
63
|
+
{
|
64
|
+
"name": "routes",
|
65
|
+
"type": "script",
|
66
|
+
"using": "default",
|
67
|
+
"template": "config.js"
|
68
|
+
},
|
69
|
+
{
|
70
|
+
"name": "filter",
|
71
|
+
"type": "script",
|
72
|
+
"using": "default",
|
73
|
+
"template": "basic.js"
|
74
|
+
},
|
75
|
+
{
|
76
|
+
"name": "module",
|
77
|
+
"type": "script",
|
78
|
+
"using": "default",
|
79
|
+
"template": "module.js"
|
80
|
+
},
|
81
|
+
{
|
82
|
+
"name": "constant",
|
83
|
+
"type": "script",
|
84
|
+
"using": "default",
|
85
|
+
"template": "constant.js"
|
86
|
+
},
|
87
|
+
{
|
88
|
+
"name": "index",
|
89
|
+
"type": "markup",
|
90
|
+
"using": "default",
|
91
|
+
"template": "index.html"
|
92
|
+
}
|
93
|
+
],
|
94
|
+
"aliases": {
|
95
|
+
"config": [
|
96
|
+
"routes"
|
97
|
+
]
|
98
|
+
}
|
99
|
+
}
|
100
|
+
}
|
@@ -0,0 +1,72 @@
|
|
1
|
+
{
|
2
|
+
"global": {
|
3
|
+
"configurable": {
|
4
|
+
"language": "language"
|
5
|
+
},
|
6
|
+
"menus": {
|
7
|
+
"options": "-options"
|
8
|
+
},
|
9
|
+
"languages": [
|
10
|
+
"es5",
|
11
|
+
"coffee"
|
12
|
+
],
|
13
|
+
"language": "es5",
|
14
|
+
"types": [
|
15
|
+
{
|
16
|
+
"name": "directive",
|
17
|
+
"source": "default",
|
18
|
+
"template": "basic.js"
|
19
|
+
},
|
20
|
+
{
|
21
|
+
"name": "controller",
|
22
|
+
"source": "default",
|
23
|
+
"template": "basic.js"
|
24
|
+
},
|
25
|
+
{
|
26
|
+
"name": "factory",
|
27
|
+
"source": "default",
|
28
|
+
"template": "basic.js"
|
29
|
+
},
|
30
|
+
{
|
31
|
+
"name": "service",
|
32
|
+
"source": "default",
|
33
|
+
"template": "basic.js"
|
34
|
+
},
|
35
|
+
{
|
36
|
+
"name": "config",
|
37
|
+
"source": "default",
|
38
|
+
"template": "config.js"
|
39
|
+
},
|
40
|
+
{
|
41
|
+
"name": "run",
|
42
|
+
"source": "default",
|
43
|
+
"template": "config.js"
|
44
|
+
},
|
45
|
+
{
|
46
|
+
"name": "routes",
|
47
|
+
"source": "default",
|
48
|
+
"template": "config.js"
|
49
|
+
},
|
50
|
+
{
|
51
|
+
"name": "filter",
|
52
|
+
"source": "default",
|
53
|
+
"template": "basic.js"
|
54
|
+
},
|
55
|
+
{
|
56
|
+
"name": "module",
|
57
|
+
"source": "default",
|
58
|
+
"template": "module.js"
|
59
|
+
},
|
60
|
+
{
|
61
|
+
"name": "constant",
|
62
|
+
"source": "default",
|
63
|
+
"template": "constant.js"
|
64
|
+
}
|
65
|
+
],
|
66
|
+
"aliases": {
|
67
|
+
"config": [
|
68
|
+
"routes"
|
69
|
+
]
|
70
|
+
}
|
71
|
+
}
|
72
|
+
}
|
data/lib/dep/json.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'json/common'
|
2
|
+
|
3
|
+
##
|
4
|
+
# = JavaScript Object Notation (JSON)
|
5
|
+
#
|
6
|
+
# JSON is a lightweight data-interchange format. It is easy for us
|
7
|
+
# humans to read and write. Plus, equally simple for machines to generate or parse.
|
8
|
+
# JSON is completely language agnostic, making it the ideal interchange format.
|
9
|
+
#
|
10
|
+
# Built on two universally available structures:
|
11
|
+
# 1. A collection of name/value pairs. Often referred to as an _object_, hash table, record, struct, keyed list, or associative array.
|
12
|
+
# 2. An ordered list of values. More commonly called an _array_, vector, sequence or list.
|
13
|
+
#
|
14
|
+
# To read more about JSON visit: http://json.org
|
15
|
+
#
|
16
|
+
# == Parsing JSON
|
17
|
+
#
|
18
|
+
# To parse a JSON string received by another application or generated within
|
19
|
+
# your existing application:
|
20
|
+
#
|
21
|
+
# require 'json'
|
22
|
+
#
|
23
|
+
# my_hash = JSON.parse('{"hello": "goodbye"}')
|
24
|
+
# puts my_hash["hello"] => "goodbye"
|
25
|
+
#
|
26
|
+
# Notice the extra quotes <tt>''</tt> around the hash notation. Ruby expects
|
27
|
+
# the argument to be a string and can't convert objects like a hash or array.
|
28
|
+
#
|
29
|
+
# Ruby converts your string into a hash
|
30
|
+
#
|
31
|
+
# == Generating JSON
|
32
|
+
#
|
33
|
+
# Creating a JSON string for communication or serialization is
|
34
|
+
# just as simple.
|
35
|
+
#
|
36
|
+
# require 'json'
|
37
|
+
#
|
38
|
+
# my_hash = {:hello => "goodbye"}
|
39
|
+
# puts JSON.generate(my_hash) => "{\"hello\":\"goodbye\"}"
|
40
|
+
#
|
41
|
+
# Or an alternative way:
|
42
|
+
#
|
43
|
+
# require 'json'
|
44
|
+
# puts {:hello => "goodbye"}.to_json => "{\"hello\":\"goodbye\"}"
|
45
|
+
#
|
46
|
+
# <tt>JSON.generate</tt> only allows objects or arrays to be converted
|
47
|
+
# to JSON syntax. <tt>to_json</tt>, however, accepts many Ruby classes
|
48
|
+
# even though it acts only as a method for serialization:
|
49
|
+
#
|
50
|
+
# require 'json'
|
51
|
+
#
|
52
|
+
# 1.to_json => "1"
|
53
|
+
#
|
54
|
+
module JSON
|
55
|
+
require 'json/version'
|
56
|
+
|
57
|
+
begin
|
58
|
+
require 'json/ext'
|
59
|
+
rescue LoadError
|
60
|
+
require 'json/pure'
|
61
|
+
end
|
62
|
+
end
|