collection_json_rails 0.1.0 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ab90519f79112bd980f33d380daf05a4867014d
4
- data.tar.gz: 48c259e4f6c18972ac7b2ffb580dddfe360d1041
3
+ metadata.gz: 151057d40027eadc3ffb330c66b6be7b0f19f01b
4
+ data.tar.gz: e66f5b0774f6a3282b27f26ac27e38e10541f7b7
5
5
  SHA512:
6
- metadata.gz: a3c761a6aafae6e0f7df96485777cb414dce60bfc9b9e34631780781e67d060cc6e4d1fc181ae1f9756ba2810e5aba1178e840a96058ee37dea46546cbb482df
7
- data.tar.gz: 4cc3269cac6da54a697dba4d7f9bf8ac1843b7f20004a59f8419b17aad3e0a62ab897d3c187c9140779a917f6034b2670892d43929de8bdb9de87193d48c8386
6
+ metadata.gz: dcb421e998e2710e24104ee5ca1c7caffe59b5eb8be631151ae6353910291d4868cd8d56956c95632a6f92ef3585bc3a64b4b127830dc6ddbb585dbeceb907aa
7
+ data.tar.gz: e545172d45e37f9d45f9e66d5ed6b1e608090bc931fb533ae61c8e89d11bc69bc9e73b81ec5bf1f47833a1daeab1c6d97242b616a0eec6015d94f69ec3fac1dc
data/README.md CHANGED
@@ -1,42 +1,47 @@
1
- CollectionJson Rails
1
+ Collection+Json Rails
2
2
  ====================
3
3
 
4
- This gem will add Rails specific features to [CollectionJson
4
+ Add Rails specific features to [CollectionJson
5
5
  Serializer](https://github.com/carlesjove/collection_json_serializer).
6
6
 
7
- ## Features
8
-
9
- #### Parsing of incoming templates:
7
+ ## Installation
10
8
 
11
- It integrates with strong parameters. `accept_template!` accepts one argument:
12
- the name of the model. That is what you would usually pass at the `require()`
13
- method of strong parameters. This will parse the incoming template as params,
14
- and return the result of `params.require(:model)`. Then, you can just proceed as
15
- usual.
9
+ Add this line to your application's Gemfile:
16
10
 
17
11
  ```ruby
18
- class PostsController < ApplicationController
19
- include CollectionJson::Rails::AcceptTemplate
12
+ gem 'collection_json_rails'
13
+ ```
20
14
 
21
- private
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install collection_json_rails
22
22
 
23
- def post_params
24
- accept_template!(:post).permit(:title)
25
- end
26
- ```
27
23
 
24
+ That's all you need. CollectionJson::Serializer is included ;-)
28
25
 
29
- #### One step serialization:
26
+ ## Usage
30
27
 
31
- You can respond with Collection+JSON witho no effort, using `render`.
28
+ You just need to create serializers for your models. Here's an example:
32
29
 
33
30
  ```ruby
34
31
  class PostSerializer < CollectionJson::Serializer
35
32
  items do
36
33
  attributes :title, :body
37
34
  end
35
+
36
+ template :title, :body
38
37
  end
38
+ ```
39
39
 
40
+ #### Responding with Collection+JSON
41
+
42
+ Now you can respond with Collection+JSON using the regular `render`:
43
+
44
+ ```ruby
40
45
  class PostsController < ApplicationController
41
46
  include CollectionJson::Rails::Render
42
47
 
@@ -48,45 +53,56 @@ class PostsController < ApplicationController
48
53
  end
49
54
  ```
50
55
 
51
- ## TO-DO Features
52
-
53
- #### Generators:
54
56
 
55
- ```bash
56
- $ rails g cj:serializer post
57
- # => app/serializers/post_serializer.rb
58
- ```
57
+ #### Accepting templates:
59
58
 
60
- Wonder: should be invocated by scaffold, models, etc. generators?
59
+ Collection+JSON supports write templates (YEAH!). You can accept them easily by using `accept_template!` in a similar fashion as you'd use strong parameters.
61
60
 
62
- #### URLs helpers
61
+ `accept_template!` takes one argument: the name of the model (that's what you'd usually pass to `require` when using strong parameters). Then, you can proceed as usual and whitelist attributes with `permit`.
63
62
 
64
- No more fighting with routes generation:
63
+ Note: Noticed the exclamation mark? This means that `accept_template!` rewrites
64
+ `params`. Should `params[:model]` be present, it'd be rewritten with template's
65
+ attributes. All other attributes of `params` are untouched.
65
66
 
66
67
  ```ruby
67
- class PostSerializer < CollectionJson::Serializer
68
- href :posts_url
68
+ class PostsController < ApplicationController
69
+ include CollectionJson::Rails::AcceptTemplate
69
70
 
70
- items do
71
- href :post_url, :self
71
+ private
72
+
73
+ def post_params
74
+ accept_template!(:post).permit(:title, :body)
75
+ end
72
76
  ```
73
77
 
74
- ## Installation
78
+ #### Generators:
75
79
 
76
- Add this line to your application's Gemfile:
80
+ `$ rails g cj serializer post title body`
77
81
 
78
82
  ```ruby
79
- gem 'collection_json_rails'
83
+ # app/serializers/post_serializer.rb
84
+
85
+ class PostSerializer < CollectionJson::Serializer
86
+ items do
87
+ attributes :title, :body
88
+ end
89
+ end
80
90
  ```
81
91
 
82
- And then execute:
83
92
 
84
- $ bundle
93
+ ## TO-DO Features
85
94
 
86
- Or install it yourself as:
95
+ #### URLs helpers
87
96
 
88
- $ gem install collection_json_rails
97
+ No more fighting with routes generation:
89
98
 
99
+ ```ruby
100
+ class PostSerializer < CollectionJson::Serializer
101
+ href :posts_url
102
+
103
+ items do
104
+ href :post_url, :self
105
+ ```
90
106
 
91
107
  ## Contributing
92
108
 
@@ -0,0 +1,25 @@
1
+ require 'rails/generators'
2
+
3
+ module Rails
4
+ module Generators
5
+ class SerializerGenerator < NamedBase
6
+ source_root File.expand_path("../templates", __FILE__)
7
+ namespace "cj"
8
+
9
+ argument :attributes, type: :array, default: [], banner: "field"
10
+
11
+ def create_serializer
12
+ template "serializer.rb",
13
+ File.join("app/serializers", class_path,
14
+ "#{file_name}_serializer.rb")
15
+ end
16
+
17
+ private
18
+
19
+ def item_attributes
20
+ attributes.map { |a| ":#{a.name}" }
21
+ end
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,8 @@
1
+ class <%= class_name %>Serializer < CollectionJson::Serializer
2
+ <% if attributes.any? -%>
3
+ items do
4
+ attributes <%= item_attributes.join(', ') %>
5
+ end
6
+ <% end -%>
7
+ end
8
+
@@ -1,5 +1,5 @@
1
1
  module CollectionJson
2
2
  module Rails
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
@@ -5,3 +5,5 @@ require "collection_json_rails/version"
5
5
  require "collection_json_rails/action_controller/accept_template"
6
6
  require "collection_json_rails/action_controller/render"
7
7
 
8
+ require "collection_json_rails/generators/serializer/serializer_generator"
9
+
@@ -0,0 +1,33 @@
1
+ require 'minitest_helper'
2
+ require 'rails/generators'
3
+
4
+ class SerializerGeneratorTest < Rails::Generators::TestCase
5
+ destination File.expand_path("../tmp", __FILE__)
6
+ setup :prepare_destination
7
+ tests Rails::Generators::SerializerGenerator
8
+
9
+ def test_that_a_serializer_is_generated
10
+ run_generator %w(user)
11
+
12
+ assert_file "app/serializers/user_serializer.rb",
13
+ /class UserSerializer < CollectionJson::Serializer/
14
+ end
15
+
16
+ def test_that_attributes_can_be_passed
17
+ run_generator %w(user first_name email)
18
+
19
+ assert_file "app/serializers/user_serializer.rb" do |serializer|
20
+ assert_match /items do/, serializer
21
+ assert_match /attributes :first_name, :email/, serializer
22
+ assert_match /end/, serializer
23
+ end
24
+ end
25
+
26
+ def test_that_a_serializer_can_be_generated_in_a_namespace
27
+ run_generator %w(admin/user)
28
+
29
+ assert_file "app/serializers/admin/user_serializer.rb",
30
+ /class Admin::UserSerializer < CollectionJson::Serializer/
31
+ end
32
+ end
33
+
@@ -0,0 +1,6 @@
1
+ class UserSerializer < CollectionJson::Serializer
2
+ items do
3
+ attributes :first_name, :email
4
+ end
5
+ end
6
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: collection_json_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carles Jove i Buxeda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-02 00:00:00.000000000 Z
11
+ date: 2015-02-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: collection_json_serializer
@@ -113,9 +113,13 @@ files:
113
113
  - lib/collection_json_rails.rb
114
114
  - lib/collection_json_rails/action_controller/accept_template.rb
115
115
  - lib/collection_json_rails/action_controller/render.rb
116
+ - lib/collection_json_rails/generators/serializer/serializer_generator.rb
117
+ - lib/collection_json_rails/generators/serializer/templates/serializer.rb
116
118
  - lib/collection_json_rails/version.rb
117
119
  - test/controller/accept_template_test.rb
118
120
  - test/controller/render_test.rb
121
+ - test/generators/serializer_generator_test.rb
122
+ - test/generators/tmp/app/serializers/user_serializer.rb
119
123
  - test/minitest_helper.rb
120
124
  homepage: https://github.com/carlesjove/collection_json_rails
121
125
  licenses:
@@ -144,5 +148,7 @@ summary: Collection+JSON Serializers with the Rails touch
144
148
  test_files:
145
149
  - test/controller/accept_template_test.rb
146
150
  - test/controller/render_test.rb
151
+ - test/generators/serializer_generator_test.rb
152
+ - test/generators/tmp/app/serializers/user_serializer.rb
147
153
  - test/minitest_helper.rb
148
154
  has_rdoc: