jsonify 0.0.6 → 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,15 +1,13 @@
1
1
  # Jsonify — a builder for JSON [![Build Status](http://travis-ci.org/bsiggelkow/jsonify.png)](http://travis-ci.org/bsiggelkow/jsonify)
2
2
 
3
3
  [Jsonify](https://github.com/bsiggelkow/jsonify) is to JSON as [Builder](https://github.com/jimweirich/builder) is to XML.
4
- [Jsonify-Rails](https://github.com/bsiggelkow/jsonify-rails) allows you to
5
- create Rails views using Jsonify templates.
4
+
5
+ If you want to use Jsonify for Rails templates, install [Jsonify-Rails](https://github.com/bsiggelkow/jsonify-rails).
6
6
 
7
7
  ## Goal
8
8
 
9
9
  Jsonify provides a ___builder___ style engine for creating correct JSON representations of Ruby objects.
10
10
 
11
- [Jsonify-Rails](http://github.com/bsiggelkow/jsonify-rails) hooks into Rails ActionView to allow you to create JSON view templates in much the same way that you can use Builder for XML templates.
12
-
13
11
  ## Motivation
14
12
 
15
13
  JSON and XML are without a doubt the most common representations used by RESTful applications. Jsonify was built around the notion that these representations belong in the ___view___ layer of the application.
@@ -368,12 +366,7 @@ In this case, Jsonify decides from the first line that you are creating a JSON o
368
366
 
369
367
  ## TODOs
370
368
  1. Benchmark performance
371
- 1. Clean up specs
372
-
373
- ## Roadmap
374
-
375
- 1. Split Rails template handling into separate gem
376
- 1. Add support for Sinatra and Padrino (Tilt integration?)
369
+ 1. Tilt Integration (jsonify-tilt)
377
370
 
378
371
  ## License
379
372
 
data/lib/jsonify.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'json'
2
- require 'blank_slate'
2
+ require 'jsonify/blank_slate'
3
3
  require 'jsonify/version'
4
4
  require 'jsonify/json_value'
5
5
  require 'jsonify/generate'
@@ -0,0 +1,109 @@
1
+ ######################################################################
2
+ # Jsonify::BlankSlate is based on Jim Weirich's BlankSlate.
3
+ #
4
+ # Copyright 2004, 2006 by Jim Weirich (jim@weirichhouse.org).
5
+ # All rights reserved.
6
+ #
7
+ # BlankSlate provides an abstract base class with no predefined
8
+ # methods (except for <tt>\_\_send__</tt> and <tt>\_\_id__</tt>).
9
+ # BlankSlate is useful as a base class when writing classes that
10
+ # depend upon <tt>method_missing</tt> (e.g. dynamic proxies).
11
+ #
12
+ # This Jsonify implementation of BlankSlate is identical; with the
13
+ # exception that it does not include the Kernel, Module, and Object
14
+ # patches.
15
+ #
16
+ module Jsonify
17
+ class BlankSlate
18
+ class << self
19
+
20
+ # Hide the method named +name+ in the BlankSlate class. Don't
21
+ # hide +instance_eval+ or any method beginning with "__".
22
+ def hide(name)
23
+ if instance_methods.include?(name.to_s) and
24
+ name !~ /^(__|instance_eval)/
25
+ @hidden_methods ||= {}
26
+ @hidden_methods[name.to_sym] = instance_method(name)
27
+ undef_method name
28
+ end
29
+ end
30
+
31
+ def find_hidden_method(name)
32
+ @hidden_methods ||= {}
33
+ @hidden_methods[name] || superclass.find_hidden_method(name)
34
+ end
35
+
36
+ # Redefine a previously hidden method so that it may be called on a blank
37
+ # slate object.
38
+ def reveal(name)
39
+ hidden_method = find_hidden_method(name)
40
+ fail "Don't know how to reveal method '#{name}'" unless hidden_method
41
+ define_method(name, hidden_method)
42
+ end
43
+ end
44
+
45
+ instance_methods.each { |m| hide(m) }
46
+ end
47
+ end
48
+ ######################################################################
49
+ # Since Ruby is very dynamic, methods added to the ancestors of
50
+ # BlankSlate <em>after BlankSlate is defined</em> will show up in the
51
+ # list of available BlankSlate methods. We handle this by defining a
52
+ # hook in the Object and Kernel classes that will hide any method
53
+ # defined after BlankSlate has been loaded.
54
+ #
55
+ # module Kernel
56
+ # class << self
57
+ # alias_method :blank_slate_method_added, :method_added
58
+ #
59
+ # # Detect method additions to Kernel and remove them in the
60
+ # # BlankSlate class.
61
+ # def method_added(name)
62
+ # result = blank_slate_method_added(name)
63
+ # return result if self != Kernel
64
+ # BlankSlate.hide(name)
65
+ # result
66
+ # end
67
+ # end
68
+ # end
69
+
70
+ ######################################################################
71
+ # Same as above, except in Object.
72
+ #
73
+ # class Object
74
+ # class << self
75
+ # alias_method :blank_slate_method_added, :method_added
76
+ #
77
+ # # Detect method additions to Object and remove them in the
78
+ # # BlankSlate class.
79
+ # def method_added(name)
80
+ # result = blank_slate_method_added(name)
81
+ # return result if self != Object
82
+ # BlankSlate.hide(name)
83
+ # result
84
+ # end
85
+ #
86
+ # def find_hidden_method(name)
87
+ # nil
88
+ # end
89
+ # end
90
+ # end
91
+
92
+ ######################################################################
93
+ # Also, modules included into Object need to be scanned and have their
94
+ # instance methods removed from blank slate. In theory, modules
95
+ # included into Kernel would have to be removed as well, but a
96
+ # "feature" of Ruby prevents late includes into modules from being
97
+ # exposed in the first place.
98
+ #
99
+ # class Module
100
+ # alias blankslate_original_append_features append_features
101
+ # def append_features(mod)
102
+ # result = blankslate_original_append_features(mod)
103
+ # return result if mod != Object
104
+ # instance_methods.each do |name|
105
+ # BlankSlate.hide(name)
106
+ # end
107
+ # result
108
+ # end
109
+ # end
@@ -1,3 +1,3 @@
1
1
  module Jsonify
2
- VERSION = "0.0.6"
2
+ VERSION = "0.0.7"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsonify
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-08-02 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &70134027122780 !ruby/object:Gem::Requirement
16
+ requirement: &70365091068360 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70134027122780
24
+ version_requirements: *70365091068360
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: bundler
27
- requirement: &70134027121700 !ruby/object:Gem::Requirement
27
+ requirement: &70365091067280 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70134027121700
35
+ version_requirements: *70365091067280
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rake
38
- requirement: &70134027120620 !ruby/object:Gem::Requirement
38
+ requirement: &70365091066160 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70134027120620
46
+ version_requirements: *70365091066160
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rspec
49
- requirement: &70134027119480 !ruby/object:Gem::Requirement
49
+ requirement: &70365091065240 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: '0'
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70134027119480
57
+ version_requirements: *70365091065240
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: autotest
60
- requirement: &70134027118140 !ruby/object:Gem::Requirement
60
+ requirement: &70365091063920 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70134027118140
68
+ version_requirements: *70365091063920
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: yard
71
- requirement: &70134027117300 !ruby/object:Gem::Requirement
71
+ requirement: &70365091062820 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *70134027117300
79
+ version_requirements: *70365091062820
80
80
  - !ruby/object:Gem::Dependency
81
81
  name: rdiscount
82
- requirement: &70134027116440 !ruby/object:Gem::Requirement
82
+ requirement: &70365091061600 !ruby/object:Gem::Requirement
83
83
  none: false
84
84
  requirements:
85
85
  - - ! '>='
@@ -87,7 +87,7 @@ dependencies:
87
87
  version: '0'
88
88
  type: :development
89
89
  prerelease: false
90
- version_requirements: *70134027116440
90
+ version_requirements: *70365091061600
91
91
  description: Turn Ruby objects into JSON -- correctly!
92
92
  email:
93
93
  - bsiggelkow@me.com
@@ -102,8 +102,8 @@ files:
102
102
  - README.md
103
103
  - Rakefile
104
104
  - jsonify.gemspec
105
- - lib/blank_slate.rb
106
105
  - lib/jsonify.rb
106
+ - lib/jsonify/blank_slate.rb
107
107
  - lib/jsonify/builder.rb
108
108
  - lib/jsonify/generate.rb
109
109
  - lib/jsonify/json_value.rb
@@ -127,7 +127,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
127
127
  version: '0'
128
128
  segments:
129
129
  - 0
130
- hash: 1642647922702028890
130
+ hash: -3226176864107262675
131
131
  required_rubygems_version: !ruby/object:Gem::Requirement
132
132
  none: false
133
133
  requirements:
@@ -136,7 +136,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
136
136
  version: '0'
137
137
  segments:
138
138
  - 0
139
- hash: 1642647922702028890
139
+ hash: -3226176864107262675
140
140
  requirements: []
141
141
  rubyforge_project: jsonify
142
142
  rubygems_version: 1.8.6
data/lib/blank_slate.rb DELETED
@@ -1,109 +0,0 @@
1
- #!/usr/bin/env ruby
2
- #--
3
- # Copyright 2004, 2006 by Jim Weirich (jim@weirichhouse.org).
4
- # All rights reserved.
5
-
6
- # Permission is granted for use, copying, modification, distribution,
7
- # and distribution of modified versions of this work as long as the
8
- # above copyright notice is included.
9
- #++
10
-
11
- ######################################################################
12
- # BlankSlate provides an abstract base class with no predefined
13
- # methods (except for <tt>\_\_send__</tt> and <tt>\_\_id__</tt>).
14
- # BlankSlate is useful as a base class when writing classes that
15
- # depend upon <tt>method_missing</tt> (e.g. dynamic proxies).
16
- #
17
- class BlankSlate
18
- class << self
19
-
20
- # Hide the method named +name+ in the BlankSlate class. Don't
21
- # hide +instance_eval+ or any method beginning with "__".
22
- def hide(name)
23
- if instance_methods.include?(name.to_s) and
24
- name !~ /^(__|instance_eval)/
25
- @hidden_methods ||= {}
26
- @hidden_methods[name.to_sym] = instance_method(name)
27
- undef_method name
28
- end
29
- end
30
-
31
- def find_hidden_method(name)
32
- @hidden_methods ||= {}
33
- @hidden_methods[name] || superclass.find_hidden_method(name)
34
- end
35
-
36
- # Redefine a previously hidden method so that it may be called on a blank
37
- # slate object.
38
- def reveal(name)
39
- hidden_method = find_hidden_method(name)
40
- fail "Don't know how to reveal method '#{name}'" unless hidden_method
41
- define_method(name, hidden_method)
42
- end
43
- end
44
-
45
- instance_methods.each { |m| hide(m) }
46
- end
47
-
48
- ######################################################################
49
- # Since Ruby is very dynamic, methods added to the ancestors of
50
- # BlankSlate <em>after BlankSlate is defined</em> will show up in the
51
- # list of available BlankSlate methods. We handle this by defining a
52
- # hook in the Object and Kernel classes that will hide any method
53
- # defined after BlankSlate has been loaded.
54
- #
55
- module Kernel
56
- class << self
57
- alias_method :blank_slate_method_added, :method_added
58
-
59
- # Detect method additions to Kernel and remove them in the
60
- # BlankSlate class.
61
- def method_added(name)
62
- result = blank_slate_method_added(name)
63
- return result if self != Kernel
64
- BlankSlate.hide(name)
65
- result
66
- end
67
- end
68
- end
69
-
70
- ######################################################################
71
- # Same as above, except in Object.
72
- #
73
- class Object
74
- class << self
75
- alias_method :blank_slate_method_added, :method_added
76
-
77
- # Detect method additions to Object and remove them in the
78
- # BlankSlate class.
79
- def method_added(name)
80
- result = blank_slate_method_added(name)
81
- return result if self != Object
82
- BlankSlate.hide(name)
83
- result
84
- end
85
-
86
- def find_hidden_method(name)
87
- nil
88
- end
89
- end
90
- end
91
-
92
- ######################################################################
93
- # Also, modules included into Object need to be scanned and have their
94
- # instance methods removed from blank slate. In theory, modules
95
- # included into Kernel would have to be removed as well, but a
96
- # "feature" of Ruby prevents late includes into modules from being
97
- # exposed in the first place.
98
- #
99
- class Module
100
- alias blankslate_original_append_features append_features
101
- def append_features(mod)
102
- result = blankslate_original_append_features(mod)
103
- return result if mod != Object
104
- instance_methods.each do |name|
105
- BlankSlate.hide(name)
106
- end
107
- result
108
- end
109
- end