collection_json_rails 0.0.1 → 0.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.
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: