collection_json_rails 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 240dd9d091a8eb659286c677b94d636751e337aa
4
- data.tar.gz: 147e1d601de30be39add7146439d904f16d690e8
3
+ metadata.gz: 6ab90519f79112bd980f33d380daf05a4867014d
4
+ data.tar.gz: 48c259e4f6c18972ac7b2ffb580dddfe360d1041
5
5
  SHA512:
6
- metadata.gz: 8a726a16a1b3090e749d53bb2e35b21de897c98615aa1124a6193db1141c88e0fa0f2048a6983b76584af30e891e5f06ce1481119b89dc2cebe060478d6e0c8b
7
- data.tar.gz: c51c2ceca97f4348e4404a029d78cd914471121553c78e22c22f9090f6145231fe0e09a6a2f5afbc6bd7a438378f120706f2c94ae8f36b9f2cee2081b47107e0
6
+ metadata.gz: a3c761a6aafae6e0f7df96485777cb414dce60bfc9b9e34631780781e67d060cc6e4d1fc181ae1f9756ba2810e5aba1178e840a96058ee37dea46546cbb482df
7
+ data.tar.gz: 4cc3269cac6da54a697dba4d7f9bf8ac1843b7f20004a59f8419b17aad3e0a62ab897d3c187c9140779a917f6034b2670892d43929de8bdb9de87193d48c8386
data/README.md CHANGED
@@ -25,11 +25,18 @@ class PostsController < ApplicationController
25
25
  end
26
26
  ```
27
27
 
28
- ## TO-DO Features
29
28
 
30
29
  #### One step serialization:
31
30
 
31
+ You can respond with Collection+JSON witho no effort, using `render`.
32
+
32
33
  ```ruby
34
+ class PostSerializer < CollectionJson::Serializer
35
+ items do
36
+ attributes :title, :body
37
+ end
38
+ end
39
+
33
40
  class PostsController < ApplicationController
34
41
  include CollectionJson::Rails::Render
35
42
 
@@ -38,8 +45,11 @@ class PostsController < ApplicationController
38
45
 
39
46
  render json: @posts, status: :ok
40
47
  end
48
+ end
41
49
  ```
42
50
 
51
+ ## TO-DO Features
52
+
43
53
  #### Generators:
44
54
 
45
55
  ```bash
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.summary = %q{Collection+JSON Serializers with the Rails touch}
12
12
  spec.description = %q{Adds Rails specific funcionalitaties for an enjoyable
13
13
  experience}
14
- spec.homepage = ""
14
+ spec.homepage = "https://github.com/carlesjove/collection_json_rails"
15
15
  spec.license = "MIT"
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0")
@@ -19,10 +19,12 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
21
21
 
22
+ spec.add_runtime_dependency "collection_json_serializer", "~> 0.3"
23
+
22
24
  spec.add_dependency "actionpack", "~> 4.0"
23
25
  spec.add_dependency "railties", "~> 4.0"
24
26
 
25
27
  spec.add_development_dependency "bundler", "~> 1.7"
26
28
  spec.add_development_dependency "rake", "~> 10.0"
27
- spec.add_development_dependency "minitest"
29
+ spec.add_development_dependency "minitest", "~> 5.0"
28
30
  end
@@ -1,4 +1,7 @@
1
+ require "collection_json_serializer"
2
+
1
3
  require "collection_json_rails/version"
2
4
 
3
5
  require "collection_json_rails/action_controller/accept_template"
6
+ require "collection_json_rails/action_controller/render"
4
7
 
@@ -0,0 +1,47 @@
1
+ module CollectionJson::Rails
2
+ module Render
3
+
4
+ def render(options)
5
+ super options_for_render(options)
6
+ end
7
+
8
+ private
9
+
10
+ def options_for_render(options)
11
+ result = options
12
+ if options[:json]
13
+ result[:json] = serialize(options[:json])
14
+ result[:status] = options[:status] || :ok
15
+ end
16
+
17
+ result
18
+ end
19
+
20
+ def serialize(resource)
21
+ serializer_class = serializer_class_of(resource)
22
+
23
+ if serializer_class.respond_to?(:new)
24
+ serializer = serializer_class.new(resource)
25
+ collection = CollectionJson::Serializer::Builder.new(serializer)
26
+ collection.pack
27
+ else
28
+ resource
29
+ end
30
+ end
31
+
32
+ # This should probably live at CollectionJson::Serializer
33
+ def serializer_for(resource)
34
+ if resource.respond_to?(:to_ary)
35
+ resource.first.class.name
36
+ else
37
+ resource.class.name
38
+ end
39
+ end
40
+
41
+ def serializer_class_of(resource)
42
+ resource_class = serializer_for(resource)
43
+ "#{resource_class}Serializer".safe_constantize
44
+ end
45
+ end
46
+ end
47
+
@@ -1,5 +1,5 @@
1
1
  module CollectionJson
2
2
  module Rails
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
@@ -0,0 +1,68 @@
1
+ require 'minitest_helper'
2
+
3
+ class Post
4
+ attr_accessor :title, :body
5
+ end
6
+
7
+ class PostSerializer < CollectionJson::Serializer
8
+ items do
9
+ attributes :title, :body
10
+ end
11
+ end
12
+
13
+ class PostsController < ActionController::Base
14
+ include CollectionJson::Rails::Render
15
+
16
+ def index
17
+ post = Post.new
18
+ post.title = "My title"
19
+ post.body = "My first post"
20
+
21
+ render json: post, status: :ok
22
+ end
23
+
24
+ def without_serializer
25
+ render json: { my_hash: "should be jsonified too" }
26
+ end
27
+
28
+ def without_json
29
+ render nothing: true
30
+ end
31
+ end
32
+
33
+ class TestRender < ActionController::TestCase
34
+ tests PostsController
35
+
36
+ def test_that_cj_responses_are_rendered
37
+ expected = {
38
+ collection: {
39
+ version: "1.0",
40
+ items: [
41
+ {
42
+ data: [
43
+ { name: "title", value: "My title" },
44
+ { name: "body", value: "My first post" }
45
+ ]
46
+ }
47
+ ]
48
+ }
49
+ }
50
+
51
+ get :index, {}
52
+
53
+ assert_equal expected.to_json, response.body
54
+ end
55
+
56
+ def test_that_objects_without_serializer_are_rendered_as_plain_json
57
+ get :without_serializer
58
+
59
+ assert_response :ok
60
+ end
61
+
62
+ def test_that_render_behaves_as_usual
63
+ get :without_json
64
+
65
+ assert_response :ok
66
+ end
67
+ end
68
+
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: collection_json_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carles Jove i Buxeda
@@ -10,6 +10,20 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2015-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: collection_json_serializer
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.3'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.3'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: actionpack
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -70,16 +84,16 @@ dependencies:
70
84
  name: minitest
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ">="
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '0'
89
+ version: '5.0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
- - - ">="
94
+ - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '0'
96
+ version: '5.0'
83
97
  description: |-
84
98
  Adds Rails specific funcionalitaties for an enjoyable
85
99
  experience
@@ -98,10 +112,12 @@ files:
98
112
  - collection_json_rails.gemspec
99
113
  - lib/collection_json_rails.rb
100
114
  - lib/collection_json_rails/action_controller/accept_template.rb
115
+ - lib/collection_json_rails/action_controller/render.rb
101
116
  - lib/collection_json_rails/version.rb
102
117
  - test/controller/accept_template_test.rb
118
+ - test/controller/render_test.rb
103
119
  - test/minitest_helper.rb
104
- homepage: ''
120
+ homepage: https://github.com/carlesjove/collection_json_rails
105
121
  licenses:
106
122
  - MIT
107
123
  metadata: {}
@@ -127,5 +143,6 @@ specification_version: 4
127
143
  summary: Collection+JSON Serializers with the Rails touch
128
144
  test_files:
129
145
  - test/controller/accept_template_test.rb
146
+ - test/controller/render_test.rb
130
147
  - test/minitest_helper.rb
131
148
  has_rdoc: