introspective_grape 0.3.3 → 0.3.5

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: de6a41c1400168ecda38b06734cdd3678071328a
4
- data.tar.gz: ce20e1fc247df07463068dade8bc7e6ccfeb4e7c
3
+ metadata.gz: 7a3c90f61cd6c0cfcc681b4c4c37f1b888bfe7fd
4
+ data.tar.gz: 26e6dcb9a96899eaaf5c298d9ffe7c48e6d43ea4
5
5
  SHA512:
6
- metadata.gz: 6cd190fef2c67c05f7e6f472458686d347f1e70d64960f3909439203b032627e899ecdce9966a81046e08eb164007b91cf13a35b62555cf144c43e3d3b9f2c0e
7
- data.tar.gz: 256ae7c47d140a34431bdb400b24ae703d25a48ded09e8639c54a4ca5cacf7f3f5ea50602226b8bb2510f15013df90763a9d56e141f9fcef1683d944b30e99be
6
+ metadata.gz: a11bec2f1cde26753b08898c14ba54339f6a984be48f1eea1090c4f585146d2db4c35980481852f02b4f1c1a78090a7ff0da25238dd4b27da76281c1ae0e9080
7
+ data.tar.gz: d1e1a33bbab8952ca376c1ebc52a9c55c379405698c2479af8898500ff924437578fedb37b1743dc3494674fa5fc6b81d8486d7dfbbcb2637515afe05c2e51e2
@@ -1,4 +1,14 @@
1
1
 
2
+ 0.3.5 09/14/2018
3
+ ================
4
+
5
+ Restrict IntrospectiveGrape to Rails <5.0 and Pundit <2.0. We aren't Rails 5 compat until either schema_plus is or we find an alternative. Pundit 2.0 very strangely makes 'authorize' a protected method and we haven't made time to investigate.
6
+
7
+ The big update in 0.3 is that the PUT/POST actions used to reload the model on presentation (hooks elsewhere may leave a model that's been updated out of sync with the database, so the overhead seems to be necessary) without using the default_includes for eager loading, causing some N+1 problems that could be alleviated.
8
+
9
+ The general strategy of passing the params of a nested endpoint to the root model and then reloading it and burrowing down to the leaf for presentation, while simpler to implement, was really not optimal and creates a lot of unnecessary overhead like that.
10
+
11
+
2
12
  0.2.9 04/06/2017
3
13
  ================
4
14
 
@@ -20,14 +20,16 @@ Gem::Specification.new do |s|
20
20
 
21
21
  s.required_ruby_version = '~> 2.0'
22
22
 
23
- s.add_dependency "rails", '>= 3.0.0'
23
+ # not yet 5+ compatible
24
+ s.add_dependency "rails", '>= 3.0.0', '<5.0'
24
25
 
25
26
  s.add_dependency 'grape' #, '~> 0.16.2'
26
27
  s.add_dependency 'grape-entity' #, '< 0.5.0'
27
28
  s.add_dependency 'grape-swagger' #, '~>0.11.0'
28
29
  s.add_dependency 'kaminari', '< 1.0' # There's a version 1.0.0 out there that breaks everything
29
30
  s.add_dependency 'grape-kaminari'
30
- s.add_dependency 'pundit'
31
+ # Pundit 2.0 mysteriously made authorize a protected method...
32
+ s.add_dependency 'pundit', '<2.0'
31
33
  s.add_dependency 'camel_snake_keys', '>0.0.4'
32
34
 
33
35
  if RUBY_PLATFORM == 'java'
@@ -225,8 +225,10 @@ module IntrospectiveGrape
225
225
  authorize @model, :update?
226
226
 
227
227
  @model.update_attributes!( safe_params(params).permit(klass.whitelist) )
228
+
229
+ default_includes = routes.first.klass.default_includes(routes.first.model)
228
230
 
229
- present klass.find_leaf(routes, @model.reload, params), with: "#{klass}::#{model}Entity".constantize
231
+ present klass.find_leaf(routes, @model.class.includes(default_includes).find(@model.id), params), with: "#{klass}::#{model}Entity".constantize
230
232
  end
231
233
  end
232
234
 
@@ -252,9 +254,9 @@ module IntrospectiveGrape
252
254
  # 2) For nested endpoints convert the params hash into Rails-compliant nested
253
255
  # attributes, to be passed to the root instance for update. This keeps
254
256
  # behavior consistent between bulk and single record updates.
257
+
255
258
  if params[root.key]
256
- default_includes = routes.size > 1 ? [] : klass.default_includes(root.model)
257
- @model = root.model.includes( default_includes ).find(params[root.key])
259
+ @model = root.model.includes( klass.default_includes(root.model) ).find(params[root.key])
258
260
  end
259
261
 
260
262
  if routes.size > 1
@@ -15,7 +15,12 @@ module IntrospectiveGrape
15
15
  model = routes.first.model.new( dsl.send(:safe_params,params).permit(whitelist) )
16
16
  dsl.authorize model, :create?
17
17
  model.save!
18
- find_leaves(routes, model.reload, params)
18
+
19
+ # reload the model with eager loading
20
+ default_includes = routes.first.klass.default_includes(routes.first.model)
21
+ model = model.class.includes(default_includes).find(model.id) if model.persisted?
22
+
23
+ find_leaves(routes, model, params)
19
24
  end
20
25
 
21
26
  end
@@ -1,3 +1,3 @@
1
1
  module IntrospectiveGrape
2
- VERSION = "0.3.3".freeze
2
+ VERSION = "0.3.5".freeze
3
3
  end
@@ -3,7 +3,7 @@ require 'paperclip'
3
3
  class Image < ActiveRecord::Base
4
4
  belongs_to :imageable, polymorphic: true
5
5
 
6
- has_attached_file :file, styles: {medium: "300x300>", thumb: "100x100"},
6
+ has_attached_file :file, #styles: {medium: "300x300>", thumb: "100x100"},
7
7
  url: "/system/:imageable_type/:imageable_id/:id/:style/:filename"
8
8
 
9
9
  validates_attachment :file, content_type: {content_type: ["image/jpeg", "image/png", "image/gif"]}
@@ -156,6 +156,7 @@ describe Dummy::UserAPI, type: :request do
156
156
 
157
157
  put "/api/v1/users/#{user.id}", params
158
158
 
159
+ p response.body
159
160
  response.should be_success
160
161
  json['avatar_url'].should eq Image.last.file.url(:medium)
161
162
  user.avatar.should eq Image.last
@@ -167,6 +168,7 @@ describe Dummy::UserAPI, type: :request do
167
168
 
168
169
  post "/api/v1/users/#{user.id}/avatars", params
169
170
 
171
+ p response.body
170
172
  response.should be_success
171
173
  user.avatar.should == Image.last
172
174
  user.avatar_url.should == Image.last.file.url(:medium)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: introspective_grape
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josh Buermann
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-07 00:00:00.000000000 Z
11
+ date: 2018-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -17,6 +17,9 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 3.0.0
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -24,6 +27,9 @@ dependencies:
24
27
  - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: 3.0.0
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: grape
29
35
  requirement: !ruby/object:Gem::Requirement
@@ -98,16 +104,16 @@ dependencies:
98
104
  name: pundit
99
105
  requirement: !ruby/object:Gem::Requirement
100
106
  requirements:
101
- - - ">="
107
+ - - "<"
102
108
  - !ruby/object:Gem::Version
103
- version: '0'
109
+ version: '2.0'
104
110
  type: :runtime
105
111
  prerelease: false
106
112
  version_requirements: !ruby/object:Gem::Requirement
107
113
  requirements:
108
- - - ">="
114
+ - - "<"
109
115
  - !ruby/object:Gem::Version
110
- version: '0'
116
+ version: '2.0'
111
117
  - !ruby/object:Gem::Dependency
112
118
  name: camel_snake_keys
113
119
  requirement: !ruby/object:Gem::Requirement
@@ -431,7 +437,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
431
437
  version: '0'
432
438
  requirements: []
433
439
  rubyforge_project:
434
- rubygems_version: 2.6.8
440
+ rubygems_version: 2.5.1
435
441
  signing_key:
436
442
  specification_version: 4
437
443
  summary: Introspectively configure deeply nested RESTful Grape APIs for ActiveRecord