representative_view 1.0.0 → 1.1.0
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.
- data/Gemfile +3 -3
- data/README.markdown +11 -0
- data/lib/representative_view/action_pack_2_handler.rb +1 -1
- data/lib/representative_view/action_pack_3_handler.rb +2 -6
- data/lib/representative_view/configuration.rb +13 -0
- data/lib/representative_view/version.rb +1 -1
- data/lib/representative_view/view_helpers.rb +16 -19
- data/lib/representative_view.rb +1 -0
- data/spec/representative_view/template_handler_spec.rb +39 -1
- metadata +14 -9
data/Gemfile
CHANGED
data/README.markdown
CHANGED
@@ -55,3 +55,14 @@ Representative View happily supports the use of partials, as long as they're als
|
|
55
55
|
r.element :published do
|
56
56
|
r.element :by
|
57
57
|
end
|
58
|
+
|
59
|
+
Configuration
|
60
|
+
-------------
|
61
|
+
|
62
|
+
Output can be controlled somewhat setting `json_options` or `xml_options` on the RepresentativeView module; these options will be passed when initialising the appropriate Representative::Nokogiri or Representative::JSON object.
|
63
|
+
|
64
|
+
For example, setting:
|
65
|
+
|
66
|
+
RepresentativeView.json_options = {:naming_strategy => :camelCase}
|
67
|
+
|
68
|
+
causes JSON to be output with camelCase (rather than snake_case) labels.
|
@@ -10,7 +10,7 @@ module RepresentativeView
|
|
10
10
|
require 'representative/json'
|
11
11
|
require 'representative/nokogiri'
|
12
12
|
<<-RUBY
|
13
|
-
representative_view(#{template.format.inspect}) do |r|
|
13
|
+
representative_view(#{template.format.inspect} || template_format) do |r|
|
14
14
|
#{template.source}
|
15
15
|
end
|
16
16
|
RUBY
|
@@ -6,17 +6,13 @@ module RepresentativeView
|
|
6
6
|
|
7
7
|
include ActionView::Template::Handlers::Compilable
|
8
8
|
|
9
|
-
self.default_format =
|
9
|
+
self.default_format = nil
|
10
10
|
|
11
11
|
def compile(template)
|
12
12
|
require 'representative/json'
|
13
13
|
require 'representative/nokogiri'
|
14
|
-
|
15
|
-
format = template.formats.first
|
16
|
-
format = nil if Mime[format] == default_format
|
17
|
-
|
18
14
|
<<-RUBY
|
19
|
-
representative_view(#{
|
15
|
+
representative_view(#{template.formats.first.inspect}) do |r|
|
20
16
|
#{template.source}
|
21
17
|
end
|
22
18
|
RUBY
|
@@ -4,35 +4,32 @@ module RepresentativeView
|
|
4
4
|
|
5
5
|
module ViewHelpers
|
6
6
|
|
7
|
-
def
|
8
|
-
if
|
9
|
-
|
7
|
+
def representative_view(format)
|
8
|
+
if defined?(@_representative)
|
9
|
+
yield @_representative # included
|
10
10
|
else
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
raise "unrecognised format #{format_extension.inspect}"
|
11
|
+
@_representative = create_representative(format)
|
12
|
+
yield @_representative
|
13
|
+
@_representative.to_s
|
15
14
|
end
|
16
15
|
end
|
17
16
|
|
18
|
-
|
19
|
-
|
17
|
+
private
|
18
|
+
|
19
|
+
def create_representative(format)
|
20
|
+
mime_type = Mime::Type.lookup_by_extension(format) || begin
|
21
|
+
raise ArgumentError, "unrecognised format: #{format.inspect}"
|
22
|
+
end
|
23
|
+
case mime_type.to_s
|
20
24
|
when /xml/
|
21
|
-
::Representative::Nokogiri
|
25
|
+
::Representative::Nokogiri.new(nil, RepresentativeView.xml_options)
|
22
26
|
when /json/
|
23
|
-
::Representative::JSON
|
27
|
+
::Representative::JSON.new(nil, RepresentativeView.json_options)
|
24
28
|
else
|
25
|
-
raise "
|
29
|
+
raise "Representative cannot generate #{format}"
|
26
30
|
end
|
27
31
|
end
|
28
32
|
|
29
|
-
def representative_view(format = nil)
|
30
|
-
included = defined?(@_representative)
|
31
|
-
@_representative ||= appropriate_representative_class(format).new
|
32
|
-
yield @_representative
|
33
|
-
@_representative.to_s unless included
|
34
|
-
end
|
35
|
-
|
36
33
|
end
|
37
34
|
|
38
35
|
end
|
data/lib/representative_view.rb
CHANGED
@@ -9,6 +9,8 @@ describe "a Representative template" do
|
|
9
9
|
r.element :title
|
10
10
|
end
|
11
11
|
RUBY
|
12
|
+
RepresentativeView.json_options = {}
|
13
|
+
RepresentativeView.xml_options = {}
|
12
14
|
end
|
13
15
|
|
14
16
|
it "can generate XML" do
|
@@ -122,4 +124,40 @@ describe "a Representative template" do
|
|
122
124
|
JSON
|
123
125
|
end
|
124
126
|
|
125
|
-
|
127
|
+
it "allows configuration of json_options" do
|
128
|
+
RepresentativeView.json_options = {:naming_strategy => :upcase}
|
129
|
+
render("books", :json, :books => Books.all).should == undent(<<-JSON)
|
130
|
+
[
|
131
|
+
{
|
132
|
+
"TITLE": "Sailing for old dogs"
|
133
|
+
},
|
134
|
+
{
|
135
|
+
"TITLE": "On the horizon"
|
136
|
+
},
|
137
|
+
{
|
138
|
+
"TITLE": "The Little Blue Book of VHS Programming"
|
139
|
+
}
|
140
|
+
]
|
141
|
+
JSON
|
142
|
+
end
|
143
|
+
|
144
|
+
it "allows configuration of xml_options" do
|
145
|
+
|
146
|
+
RepresentativeView.xml_options = {:naming_strategy => :upcase}
|
147
|
+
render("books", :xml, :books => Books.all).should == undent(<<-XML)
|
148
|
+
<?xml version="1.0"?>
|
149
|
+
<BOOKS TYPE="array">
|
150
|
+
<BOOK>
|
151
|
+
<TITLE>Sailing for old dogs</TITLE>
|
152
|
+
</BOOK>
|
153
|
+
<BOOK>
|
154
|
+
<TITLE>On the horizon</TITLE>
|
155
|
+
</BOOK>
|
156
|
+
<BOOK>
|
157
|
+
<TITLE>The Little Blue Book of VHS Programming</TITLE>
|
158
|
+
</BOOK>
|
159
|
+
</BOOKS>
|
160
|
+
XML
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: representative_view
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 1.
|
5
|
+
version: 1.1.0
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Mike Williams
|
@@ -10,12 +10,10 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
14
|
-
default_executable:
|
13
|
+
date: 2011-05-28 00:00:00 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: representative
|
18
|
-
prerelease: false
|
19
17
|
requirement: &id001 !ruby/object:Gem::Requirement
|
20
18
|
none: false
|
21
19
|
requirements:
|
@@ -23,10 +21,10 @@ dependencies:
|
|
23
21
|
- !ruby/object:Gem::Version
|
24
22
|
version: 0.3.1
|
25
23
|
type: :runtime
|
24
|
+
prerelease: false
|
26
25
|
version_requirements: *id001
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
27
|
name: actionpack
|
29
|
-
prerelease: false
|
30
28
|
requirement: &id002 !ruby/object:Gem::Requirement
|
31
29
|
none: false
|
32
30
|
requirements:
|
@@ -37,10 +35,10 @@ dependencies:
|
|
37
35
|
- !ruby/object:Gem::Version
|
38
36
|
version: 4.0.0
|
39
37
|
type: :runtime
|
38
|
+
prerelease: false
|
40
39
|
version_requirements: *id002
|
41
40
|
- !ruby/object:Gem::Dependency
|
42
41
|
name: nokogiri
|
43
|
-
prerelease: false
|
44
42
|
requirement: &id003 !ruby/object:Gem::Requirement
|
45
43
|
none: false
|
46
44
|
requirements:
|
@@ -48,10 +46,10 @@ dependencies:
|
|
48
46
|
- !ruby/object:Gem::Version
|
49
47
|
version: 1.4.2
|
50
48
|
type: :runtime
|
49
|
+
prerelease: false
|
51
50
|
version_requirements: *id003
|
52
51
|
- !ruby/object:Gem::Dependency
|
53
52
|
name: json
|
54
|
-
prerelease: false
|
55
53
|
requirement: &id004 !ruby/object:Gem::Requirement
|
56
54
|
none: false
|
57
55
|
requirements:
|
@@ -59,6 +57,7 @@ dependencies:
|
|
59
57
|
- !ruby/object:Gem::Version
|
60
58
|
version: 1.4.5
|
61
59
|
type: :runtime
|
60
|
+
prerelease: false
|
62
61
|
version_requirements: *id004
|
63
62
|
description:
|
64
63
|
email: mdub@dogbiscuit.org
|
@@ -76,13 +75,13 @@ files:
|
|
76
75
|
- lib/representative_view.rb
|
77
76
|
- lib/representative_view/action_pack_2_handler.rb
|
78
77
|
- lib/representative_view/action_pack_3_handler.rb
|
78
|
+
- lib/representative_view/configuration.rb
|
79
79
|
- lib/representative_view/version.rb
|
80
80
|
- lib/representative_view/view_helpers.rb
|
81
81
|
- representative_view.gemspec
|
82
82
|
- spec/fixtures/books.rb
|
83
83
|
- spec/representative_view/template_handler_spec.rb
|
84
84
|
- spec/spec_helper.rb
|
85
|
-
has_rdoc: true
|
86
85
|
homepage: http://github.com/mdub/representative_view
|
87
86
|
licenses: []
|
88
87
|
|
@@ -96,17 +95,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
96
95
|
requirements:
|
97
96
|
- - ">="
|
98
97
|
- !ruby/object:Gem::Version
|
98
|
+
hash: 738900437358486891
|
99
|
+
segments:
|
100
|
+
- 0
|
99
101
|
version: "0"
|
100
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
103
|
none: false
|
102
104
|
requirements:
|
103
105
|
- - ">="
|
104
106
|
- !ruby/object:Gem::Version
|
107
|
+
hash: 738900437358486891
|
108
|
+
segments:
|
109
|
+
- 0
|
105
110
|
version: "0"
|
106
111
|
requirements: []
|
107
112
|
|
108
113
|
rubyforge_project:
|
109
|
-
rubygems_version: 1.
|
114
|
+
rubygems_version: 1.7.2
|
110
115
|
signing_key:
|
111
116
|
specification_version: 3
|
112
117
|
summary: Builds XML and JSON from a single view template
|