jcompiler 0.1.0 → 0.1.1

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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -242
  3. data/jcompiler.gemspec +1 -1
  4. data/lib/jcompiler.rb +1 -1
  5. metadata +1 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9fafa319062e473193f72cb981c76accdcf02e19
4
- data.tar.gz: 79060be58ef6ca8430c42cc379844ded4f25a193
3
+ metadata.gz: 7b586684703abdda10685227528d375362f8065c
4
+ data.tar.gz: d71fb9d5b6e91a967e8f6a8b0d75776c446d787f
5
5
  SHA512:
6
- metadata.gz: d2632c6ac79c2593d668f9fa1580bed3222ea9f90f9232c9ec794f62b60e4c3a30f911fb126566ccdefa34735ae09a781be5bc97ee4743489e163b1d6f7d1634
7
- data.tar.gz: 98b827c4886357a7499c7466fde2c9133749f7b3ea4e6e0f6852edb0ceaf7a8c72f59c3fe087a20bdbd4ff8b38e3f032eea6ccc68169e40fbc1302d488cf2d2a
6
+ metadata.gz: d137b43a2fd040680ad97cbecb4d82db79fbb6eaf698fc1fbd59a7c6ec26226936de06aa4b0640099eda8381275b13b34d9768c80b628205dae4f613353dd503
7
+ data.tar.gz: 48e7d14b77471c3293a9e1098c104492ed73e110d6e81ec0f90ab1e7bfd3faf6cb73ef71ed9e5536420759bd307ef6b953e4452fbd4ec5d3444de1510d130ade
data/README.md CHANGED
@@ -1,242 +1 @@
1
- # Jbuilder
2
-
3
- [![Build Status](https://api.travis-ci.org/rails/jbuilder.svg)][travis]
4
- [![Gem Version](http://img.shields.io/gem/v/jbuilder.svg)][gem]
5
- [![Code Climate](http://img.shields.io/codeclimate/github/rails/jbuilder.svg)][codeclimate]
6
- [![Dependencies Status](http://img.shields.io/gemnasium/rails/jbuilder.svg)][gemnasium]
7
-
8
- [travis]: https://travis-ci.org/rails/jbuilder
9
- [gem]: https://rubygems.org/gems/jbuilder
10
- [codeclimate]: https://codeclimate.com/github/rails/jbuilder
11
- [gemnasium]: https://gemnasium.com/rails/jbuilder
12
-
13
- Jbuilder gives you a simple DSL for declaring JSON structures that beats
14
- massaging giant hash structures. This is particularly helpful when the
15
- generation process is fraught with conditionals and loops. Here's a simple
16
- example:
17
-
18
- ``` ruby
19
- Jbuilder.encode do |json|
20
- json.content format_content(@message.content)
21
- json.(@message, :created_at, :updated_at)
22
-
23
- json.author do
24
- json.name @message.creator.name.familiar
25
- json.email_address @message.creator.email_address_with_name
26
- json.url url_for(@message.creator, format: :json)
27
- end
28
-
29
- if current_user.admin?
30
- json.visitors calculate_visitors(@message)
31
- end
32
-
33
- json.comments @message.comments, :content, :created_at
34
-
35
- json.attachments @message.attachments do |attachment|
36
- json.filename attachment.filename
37
- json.url url_for(attachment)
38
- end
39
- end
40
- ```
41
-
42
- This will build the following structure:
43
-
44
- ``` javascript
45
- {
46
- "content": "<p>This is <i>serious</i> monkey business</p>",
47
- "created_at": "2011-10-29T20:45:28-05:00",
48
- "updated_at": "2011-10-29T20:45:28-05:00",
49
-
50
- "author": {
51
- "name": "David H.",
52
- "email_address": "'David Heinemeier Hansson' <david@heinemeierhansson.com>",
53
- "url": "http://example.com/users/1-david.json"
54
- },
55
-
56
- "visitors": 15,
57
-
58
- "comments": [
59
- { "content": "Hello everyone!", "created_at": "2011-10-29T20:45:28-05:00" },
60
- { "content": "To you my good sir!", "created_at": "2011-10-29T20:47:28-05:00" }
61
- ],
62
-
63
- "attachments": [
64
- { "filename": "forecast.xls", "url": "http://example.com/downloads/forecast.xls" },
65
- { "filename": "presentation.pdf", "url": "http://example.com/downloads/presentation.pdf" }
66
- ]
67
- }
68
- ```
69
-
70
- To define attribute and structure names dynamically, use the `set!` method:
71
-
72
- ``` ruby
73
- json.set! :author do
74
- json.set! :name, 'David'
75
- end
76
-
77
- # => "author": { "name": "David" }
78
- ```
79
-
80
- Top level arrays can be handled directly. Useful for index and other collection actions.
81
-
82
- ``` ruby
83
- # @people = People.all
84
- json.array! @people do |person|
85
- json.name person.name
86
- json.age calculate_age(person.birthday)
87
- end
88
-
89
- # => [ { "name": "David", "age": 32 }, { "name": "Jamie", "age": 31 } ]
90
- ```
91
-
92
- You can also extract attributes from array directly.
93
-
94
- ``` ruby
95
- # @people = People.all
96
- json.array! @people, :id, :name
97
-
98
- # => [ { "id": 1, "name": "David" }, { "id": 2, "name": "Jamie" } ]
99
- ```
100
-
101
- Jbuilder objects can be directly nested inside each other. Useful for composing objects.
102
-
103
- ``` ruby
104
- class Person
105
- # ... Class Definition ... #
106
- def to_builder
107
- Jbuilder.new do |person|
108
- person.(self, :name, :age)
109
- end
110
- end
111
- end
112
-
113
- class Company
114
- # ... Class Definition ... #
115
- def to_builder
116
- Jbuilder.new do |company|
117
- company.name name
118
- company.president president.to_builder
119
- end
120
- end
121
- end
122
-
123
- company = Company.new('Doodle Corp', Person.new('John Stobs', 58))
124
- company.to_builder.target!
125
-
126
- # => {"name":"Doodle Corp","president":{"name":"John Stobs","age":58}}
127
- ```
128
-
129
- You can either use Jbuilder stand-alone or directly as an ActionView template
130
- language. When required in Rails, you can create views ala show.json.jbuilder
131
- (the json is already yielded):
132
-
133
- ``` ruby
134
- # Any helpers available to views are available to the builder
135
- json.content format_content(@message.content)
136
- json.(@message, :created_at, :updated_at)
137
-
138
- json.author do
139
- json.name @message.creator.name.familiar
140
- json.email_address @message.creator.email_address_with_name
141
- json.url url_for(@message.creator, format: :json)
142
- end
143
-
144
- if current_user.admin?
145
- json.visitors calculate_visitors(@message)
146
- end
147
- ```
148
-
149
-
150
- You can use partials as well. The following will render the file
151
- `views/comments/_comments.json.jbuilder`, and set a local variable
152
- `comments` with all this message's comments, which you can use inside
153
- the partial.
154
-
155
- ```ruby
156
- json.partial! 'comments/comments', comments: @message.comments
157
- ```
158
-
159
- It's also possible to render collections of partials:
160
-
161
- ```ruby
162
- json.array! @posts, partial: 'posts/post', as: :post
163
-
164
- # or
165
-
166
- json.partial! 'posts/post', collection: @posts, as: :post
167
-
168
- # or
169
-
170
- json.partial! partial: 'posts/post', collection: @posts, as: :post
171
-
172
- # or
173
-
174
- json.comments @post.comments, partial: 'comment/comment', as: :comment
175
- ```
176
-
177
- You can explicitly make Jbuilder object return null if you want:
178
-
179
- ``` ruby
180
- json.extract! @post, :id, :title, :content, :published_at
181
- json.author do
182
- if @post.anonymous?
183
- json.null! # or json.nil!
184
- else
185
- json.first_name @post.author_first_name
186
- json.last_name @post.author_last_name
187
- end
188
- end
189
- ```
190
-
191
- Fragment caching is supported, it uses `Rails.cache` and works like caching in
192
- HTML templates:
193
-
194
- ```ruby
195
- json.cache! ['v1', @person], expires_in: 10.minutes do
196
- json.extract! @person, :name, :age
197
- end
198
- ```
199
-
200
- You can also conditionally cache a block by using `cache_if!` like this:
201
-
202
- ```ruby
203
- json.cache_if! !admin?, ['v1', @person], expires_in: 10.minutes do
204
- json.extract! @person, :name, :age
205
- end
206
- ```
207
-
208
- If you are rendering fragments for a collection of objects, have a look at
209
- `jbuilder_cache_multi` gem. It uses fetch_multi (>= Rails 4.1) to fetch
210
- mutliple keys at once.
211
-
212
- Keys can be auto formatted using `key_format!`, this can be used to convert
213
- keynames from the standard ruby_format to camelCase:
214
-
215
- ``` ruby
216
- json.key_format! camelize: :lower
217
- json.first_name 'David'
218
-
219
- # => { "firstName": "David" }
220
- ```
221
-
222
- You can set this globally with the class method `key_format` (from inside your
223
- environment.rb for example):
224
-
225
- ``` ruby
226
- Jbuilder.key_format camelize: :lower
227
- ```
228
-
229
- Faster JSON backends
230
- --------------------
231
-
232
- Jbuilder uses MultiJson, which by default will use the JSON gem. That gem is
233
- currently tangled with ActiveSupport's all-Ruby `#to_json` implementation,
234
- which is slow (fixed in Rails >= 4.1). For faster Jbuilder rendering, you can
235
- specify something like the Yajl JSON generator instead. You'll need to include
236
- the `yajl-ruby` gem in your Gemfile and then set the following configuration
237
- for MultiJson:
238
-
239
- ``` ruby
240
- require 'multi_json'
241
- MultiJson.use :yajl
242
- ```
1
+ # Jcompiler
data/jcompiler.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'jcompiler'
3
- s.version = '0.1.0'
3
+ s.version = '0.1.1'
4
4
  s.authors = ['Tetsuri Moriya']
5
5
  s.email = ['tetsuri.moriya@gmail.com']
6
6
  s.summary = 'High performance JSON view'
data/lib/jcompiler.rb CHANGED
@@ -3,7 +3,7 @@ class Jcompiler
3
3
  self.default_format = Mime::JSON
4
4
 
5
5
  def self.call(template)
6
- "{\"a\":\"b\"}"
6
+ "{\"a\"=>\"b\"}"
7
7
  end
8
8
  end
9
9
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jcompiler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tetsuri Moriya