roar-rails 1.0.2 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.markdown +11 -3
- data/README.markdown +0 -2
- data/lib/roar/rails/json_api.rb +2 -7
- data/lib/roar/rails/version.rb +1 -1
- data/roar-rails.gemspec +3 -2
- data/test/consume_test.rb +12 -7
- data/test/json_api_renderer_test.rb +12 -6
- data/test/responder_test.rb +5 -5
- metadata +22 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ace7c60c6e76e0b30246d345fa21e8187e2007b9
|
4
|
+
data.tar.gz: ac4249bc4fcb3d309ba932e1850c6e17baa0e991
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71c22671c3d5bfecebb9b1f2984f1a04bb5c853ca5db85f39e62f4ae32b2711f9ebd85942cea807751b56f995d675df4692c12612b18d3f55c04873c82174222
|
7
|
+
data.tar.gz: d77de20f05521b69c45d9d32c0832ed9338f638c42211a96583ded54778c709558cc9095c938b367f3329bd299bfdb6e18ddf7c37ce2373a5c3bdef81ae15225
|
data/CHANGES.markdown
CHANGED
@@ -1,7 +1,15 @@
|
|
1
|
+
## 1.1.0
|
2
|
+
|
3
|
+
**Roar 1.1 (and Representable 3.0) support** (see [Roar CHANGES](https://github.com/trailblazer/roar/blob/master/CHANGES.markdown#110))
|
4
|
+
|
5
|
+
* Require Roar >= 1.1.0.
|
6
|
+
* Improved support for JSON API (now requires separate [roar-jsonapi](https://github.com/trailblazer/roar-jsonapi) gem).
|
7
|
+
* Fix Uber version requirement.
|
8
|
+
|
1
9
|
## 1.0.2
|
2
10
|
|
3
11
|
* Make Roar version requirement stricter: restrict to 1.0.x series.
|
4
|
-
* Initial support for Rails 5
|
12
|
+
* Initial support for Rails 5.
|
5
13
|
|
6
14
|
## 1.0.1
|
7
15
|
|
@@ -12,7 +20,7 @@
|
|
12
20
|
## 1.0.0
|
13
21
|
|
14
22
|
* Requires Roar >= 1.0.0.
|
15
|
-
* In `#consume!` roar-rails now finds the correct representer for the `Content-type:` header. In former version the representer name was
|
23
|
+
* In `#consume!` roar-rails now finds the correct representer for the `Content-type:` header. In former version the representer name was inferred using the `Accept:` header, which was totally wrong. Thanks to @pgaertig for fixing that.
|
16
24
|
|
17
25
|
## 0.1.6
|
18
26
|
|
@@ -47,7 +55,7 @@
|
|
47
55
|
## 0.1.0
|
48
56
|
|
49
57
|
* `ActiveRecord::Relation` is now detected as a collection and the appropriate representer should be found.
|
50
|
-
* Entity (singular) representers are now correctly
|
58
|
+
* Entity (singular) representers are now correctly inferred even if you only specified `collection:` in `::represents`. That works by querying the model.
|
51
59
|
* Entity representers are now *namespaced* when guessed (i.e., when you didn't specify them explicitly in `::represents`) as it works with collection representers already. If you have a namespaced controller and it suddenly doesn't find its entity representer anymore, either namespace the representer or specify its name in `::represents`.
|
52
60
|
|
53
61
|
## 0.0.14
|
data/README.markdown
CHANGED
@@ -5,8 +5,6 @@ _Makes using Roar's representers in your Rails app fun._
|
|
5
5
|
[![Build Status](https://travis-ci.org/apotonick/roar-rails.svg?branch=master)](https://travis-ci.org/apotonick/roar-rails)
|
6
6
|
[![Gem Version](https://badge.fury.io/rb/roar-rails.svg)](http://badge.fury.io/rb/roar-rails)
|
7
7
|
|
8
|
-
**IMPORTANT NOTE: roar-rails 1.0.2 does not support Roar 1.1**. Support is still under development and will be released as part of roar-rails 1.1. See [#130](https://github.com/apotonick/roar-rails/issues/130).
|
9
|
-
|
10
8
|
_roar-rails development will be discontinued in the future and we will encourage users to begin migrating to [Trailblazer](trailblazer.to) (and [trailblazer-rails](https://github.com/trailblazer/trailblazer-rails))._
|
11
9
|
|
12
10
|
---
|
data/lib/roar/rails/json_api.rb
CHANGED
@@ -1,12 +1,7 @@
|
|
1
1
|
require 'roar/json/json_api'
|
2
2
|
|
3
|
-
Roar
|
3
|
+
# FIXME: Hack. Add another module to Roar JSON API to hook into.
|
4
|
+
Roar::JSON::JSONAPI::Document.class_eval do
|
4
5
|
def to_json_api(*args); to_json(*args); end
|
5
6
|
def from_json_api(*args); from_json(*args); end
|
6
7
|
end
|
7
|
-
|
8
|
-
# allow the same for collections.
|
9
|
-
Roar::JSON::JSONAPI::Document::Collection.class_eval do
|
10
|
-
def to_json_api(*args); to_json(*args); end
|
11
|
-
def from_json_api(*args); from_json(*args); end
|
12
|
-
end
|
data/lib/roar/rails/version.rb
CHANGED
data/roar-rails.gemspec
CHANGED
@@ -18,16 +18,17 @@ Gem::Specification.new do |s|
|
|
18
18
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
19
|
s.require_paths = ["lib"]
|
20
20
|
|
21
|
-
s.add_runtime_dependency "roar", '~> 1.0
|
21
|
+
s.add_runtime_dependency "roar", '~> 1.1.0'
|
22
22
|
s.add_runtime_dependency "test_xml", ">= 0.1.6" # TODO: remove dependency as most people don't use XML.
|
23
23
|
s.add_runtime_dependency "actionpack"
|
24
24
|
s.add_runtime_dependency "railties", ">= 3.0.0"
|
25
|
-
s.add_runtime_dependency "uber", "
|
25
|
+
s.add_runtime_dependency "uber", "< 0.2.0"
|
26
26
|
s.add_runtime_dependency "responders"
|
27
27
|
|
28
28
|
s.add_development_dependency 'minitest-rails'
|
29
29
|
s.add_development_dependency 'minitest'
|
30
30
|
|
31
|
+
s.add_development_dependency "roar-jsonapi", '>= 0.0.3'
|
31
32
|
s.add_development_dependency "activemodel"
|
32
33
|
s.add_development_dependency "activerecord"
|
33
34
|
s.add_development_dependency "sqlite3"
|
data/test/consume_test.rb
CHANGED
@@ -130,12 +130,17 @@ end
|
|
130
130
|
class ConsumeJsonApiTest < ActionController::TestCase
|
131
131
|
include Roar::Rails::TestCase
|
132
132
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
property :name
|
137
|
-
end
|
133
|
+
Band = Struct.new(:name, :id)
|
134
|
+
Singer = Struct.new(:name, :id)
|
135
|
+
Musician = Struct.new(:name, :id)
|
138
136
|
|
137
|
+
class MusicianRepresenter < Roar::Decorator
|
138
|
+
include Roar::JSON::JSONAPI.resource :singer
|
139
|
+
|
140
|
+
attributes do
|
141
|
+
property :name
|
142
|
+
end
|
143
|
+
end
|
139
144
|
|
140
145
|
class SingersController < ActionController::Base
|
141
146
|
include Roar::Rails::ControllerAdditions
|
@@ -151,9 +156,9 @@ class ConsumeJsonApiTest < ActionController::TestCase
|
|
151
156
|
|
152
157
|
test "#consume parses JSON-API document and updates the model" do
|
153
158
|
@request.env['CONTENT_TYPE'] = 'application/vnd.api+json'
|
154
|
-
post :consume_json_api, "{
|
159
|
+
post :consume_json_api, %({"data":{"attributes":{"name":"Bumi"},"type":"song"}})
|
155
160
|
|
156
|
-
assert_equal %{#<struct Singer name="Bumi">}, @response.body
|
161
|
+
assert_equal %{#<struct ConsumeJsonApiTest::Singer name="Bumi", id=nil>}, @response.body
|
157
162
|
end
|
158
163
|
end
|
159
164
|
|
@@ -3,11 +3,17 @@ require 'test_helper'
|
|
3
3
|
class JsonApiRendererTest < ActionController::TestCase
|
4
4
|
include Roar::Rails::TestCase
|
5
5
|
|
6
|
+
Band = Struct.new(:name, :id)
|
7
|
+
Singer = Struct.new(:name, :id)
|
8
|
+
Musician = Struct.new(:name, :id)
|
9
|
+
|
6
10
|
class SingersController < ActionController::Base
|
7
|
-
|
8
|
-
include Roar::JSON::JSONAPI
|
9
|
-
|
10
|
-
|
11
|
+
class SingerRepresenter < Roar::Decorator
|
12
|
+
include Roar::JSON::JSONAPI.resource :song
|
13
|
+
|
14
|
+
attributes do
|
15
|
+
property :name
|
16
|
+
end
|
11
17
|
|
12
18
|
link(:self) { "//self"}
|
13
19
|
end
|
@@ -33,14 +39,14 @@ class JsonApiRendererTest < ActionController::TestCase
|
|
33
39
|
test "should render single model correctly in response to a application/vnd.api+json" do
|
34
40
|
get :show, :id => "1", :format => :json_api
|
35
41
|
|
36
|
-
response.body.must_equal "{
|
42
|
+
response.body.must_equal %({"data":{"attributes":{"name":"Bumi"},"type":"song","links":{"self":"//self"}}})
|
37
43
|
end
|
38
44
|
|
39
45
|
test "should render collection of models correctly in response to a application/vnd.api+json" do
|
40
46
|
get :index, :format => :json_api
|
41
47
|
# assert_body '{"people":[{"first_name":"Chad"},{"first_name":"Fremont"}]}'
|
42
48
|
|
43
|
-
response.body.must_equal
|
49
|
+
response.body.must_equal %({"data":[{"attributes":{"name":"Bumi"},"type":"song","links":{"self":"//self"}},{"attributes":{"name":"Chad"},"type":"song","links":{"self":"//self"}}]})
|
44
50
|
end
|
45
51
|
|
46
52
|
test "should have a content_type of application/vnd.api+json for a single model" do
|
data/test/responder_test.rb
CHANGED
@@ -298,8 +298,8 @@ class ResponderTest < ActionController::TestCase
|
|
298
298
|
# FIXME: should be in generic roar-rails test.
|
299
299
|
module DynamicSingerRepresenter
|
300
300
|
include Roar::JSON
|
301
|
-
property :name, :setter => lambda { |
|
302
|
-
:getter => lambda { |opts| "#{opts[:title]} #{name}" }
|
301
|
+
property :name, :setter => lambda { |opts| self.name = "#{opts[:user_options][:title]} #{opts[:fragment]}" },
|
302
|
+
:getter => lambda { |opts| "#{opts[:user_options][:title]} #{name}" }
|
303
303
|
end
|
304
304
|
class MusicianController < BaseController
|
305
305
|
represents :json, :entity => DynamicSingerRepresenter, :collection => SingersRepresenter
|
@@ -310,7 +310,7 @@ class ResponderTest < ActionController::TestCase
|
|
310
310
|
test "passes options to entity representer" do
|
311
311
|
get do
|
312
312
|
singer = Singer.new("Bumi")
|
313
|
-
respond_with singer, :title
|
313
|
+
respond_with singer, user_options: { title: "Mr." }
|
314
314
|
end
|
315
315
|
|
316
316
|
@response.body.must_equal("{\"name\":\"Mr. Bumi\"}")
|
@@ -318,7 +318,7 @@ class ResponderTest < ActionController::TestCase
|
|
318
318
|
|
319
319
|
test "passes options to explicit collection representer" do
|
320
320
|
get do
|
321
|
-
respond_with [Singer.new("Bumi"), Singer.new("Iggy")], :title
|
321
|
+
respond_with [Singer.new("Bumi"), Singer.new("Iggy")], user_options: { title: "Mr." }, :represent_items_with => DynamicSingerRepresenter
|
322
322
|
end
|
323
323
|
|
324
324
|
@response.body.must_equal("[{\"name\":\"Mr. Bumi\"},{\"name\":\"Mr. Iggy\"}]")
|
@@ -330,7 +330,7 @@ class ResponderTest < ActionController::TestCase
|
|
330
330
|
@request.env['CONTENT_TYPE'] = 'application/json'
|
331
331
|
|
332
332
|
put singer.to_json do
|
333
|
-
created_singer = consume!(Singer.new, :title
|
333
|
+
created_singer = consume!(Singer.new, user_options: { title: "Mr." })
|
334
334
|
respond_with created_singer
|
335
335
|
end
|
336
336
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roar-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nick Sutterer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: roar
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 1.0
|
19
|
+
version: 1.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 1.0
|
26
|
+
version: 1.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: test_xml
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,16 +70,16 @@ dependencies:
|
|
70
70
|
name: uber
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "<"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 0.0
|
75
|
+
version: 0.2.0
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "<"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 0.0
|
82
|
+
version: 0.2.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: responders
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: roar-jsonapi
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 0.0.3
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.0.3
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: activemodel
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|