active_record_api-rest 0.0.2 → 0.0.3

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
  SHA256:
3
- metadata.gz: 9c015d82e9d0410600e2e260782c6db5fc8da54698b171d251ddbf3fd10e2e9a
4
- data.tar.gz: 5938f8982eb5a94983d1fc0ca5aaef8009f9cba8a23a44ff823168743aa09c7e
3
+ metadata.gz: 93727d4d0d64a6537cd42c8d97ef4ef8cfdcfa1b3738f62b0e87339d1f88736b
4
+ data.tar.gz: 32626d83c89f7f6167f5b6c84920c726d4f08a2fe5be339239f91a47c3c0f467
5
5
  SHA512:
6
- metadata.gz: f34beaefc796f488a7da2141d3defacece762387663974a48591cfc0a0a8de70b49a16ba71f00bc4af21dea6663bb38b87ed1431b2cfc78f045f8ca8a2e08c37
7
- data.tar.gz: c908221b274adbd8c59c5209a5ab1576d563097a683387bf8ae0cb65880e30d975b6a102a4532fe01f832ad58efc0bac6578d80e0aa68687fd0e815220ddbcce
6
+ metadata.gz: 68e76ec59baf9cdb836aaabedda3a3945a87ca3b01851cdc4c3ab669e5c4c067afade6a886e78e2a04ff8291e49cb1bb1ba69b9e165cf4e4a34fc738cb656fb0
7
+ data.tar.gz: b2143dcebb3d5156980570cdf6d34505ecf309a8dbb71e45b50066dfac09c3c923b56e3977c777d7d5a27c083217046a4031b6bd597f3cab2878e272f4bf4545
data/Gemfile.lock CHANGED
@@ -1,11 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_record_api-rest (0.0.1)
4
+ active_record_api-rest (0.0.2)
5
5
  active_attr
6
6
  active_model_serializers
7
7
  cancancan
8
- rails (>= 5.0)
8
+ rails (>= 5.1)
9
9
 
10
10
  GEM
11
11
  remote: https://rubygems.org/
@@ -211,4 +211,4 @@ DEPENDENCIES
211
211
  webmock
212
212
 
213
213
  BUNDLED WITH
214
- 1.16.1
214
+ 1.16.2
@@ -47,12 +47,12 @@ module ActiveRecordApi
47
47
 
48
48
  def resource_params
49
49
  @resource_params ||= filtered_params.reject do |column_name|
50
- column_name == :id
50
+ column_name.to_s == 'id'
51
51
  end
52
52
  end
53
53
 
54
54
  def not_allowed_params
55
- @not_allowed_params ||= ((params.keys.map(&:to_sym) - [:controller, :action, model_klass.name.underscore.to_sym]) - resource_params.keys.map(&:to_sym))
55
+ @not_allowed_params ||= ((params.keys.map(&:to_sym) - [:controller, :action, model_klass.name.underscore.to_sym, :id]) - resource_params.keys.map(&:to_sym))
56
56
  end
57
57
 
58
58
  def initialize_model
@@ -10,10 +10,18 @@ shared_examples 'all::rest::actions' do
10
10
  let(:factory_symbol) { model_klass.to_s.underscore.to_sym }
11
11
  let(:index_non_accessible_data) { create factory_symbol, organization_id: (model.organization_id + 1) }
12
12
  let(:model_array) { [model] + create_list(factory_symbol, 4, organization_id: model.organization_id) }
13
+ let(:base_model_klass) do
14
+ if model_klass.superclass == ApplicationRecord
15
+ model_klass
16
+ else
17
+ model_klass.superclass
18
+ end
19
+ end
20
+ let(:host) { ActiveRecordApi::Rest::RequestUrlGenerator.new(request: request).micro_service_url }
13
21
  describe 'All rest actions' do
14
22
  let(:serializer) { ActiveModelSerializers::SerializableResource }
15
23
  let(:model_klass) { described_class.controller_name.classify.constantize }
16
- let(:model) { create model_klass.to_s.underscore.to_sym }
24
+ let(:model) { create factory_symbol }
17
25
  include_examples 'get::show'
18
26
  include_examples 'get::index'
19
27
  include_examples 'put::update'
@@ -40,7 +48,7 @@ shared_examples 'get::show' do
40
48
  get :show, params: { id: -1 }
41
49
  end
42
50
  it { expect(response.status).to eq 404 }
43
- it { expect(JSON.parse(response.body)['base']).to include "Couldn't find #{model_klass} with 'id'=-1" }
51
+ it { expect(JSON.parse(response.body)['base']).to eq "Couldn't find #{base_model_klass} with 'id'=-1" }
44
52
  end
45
53
  end
46
54
  context 'when not authorized' do
@@ -79,7 +87,7 @@ shared_examples 'get::index' do
79
87
  end
80
88
  it { expect(response.status).to eq 200 }
81
89
  it { expect(response.headers['x-total']).to eq model_array.length }
82
- it { expect(response.headers['x-link-next']).to eq "https://test.host/api/#{Rails.application.class.parent.to_s.underscore}#{request.path}?limit=1&previous_id=#{next_previous_id}" }
90
+ it { expect(response.headers['x-link-next']).to eq "#{host}#{request.path}?limit=1&previous_id=#{next_previous_id}" }
83
91
  it { expect(response.body).to be_json_eql model_klass.where('id > ?', previous_id).limit(1).map { |o| serializer.new(o) }.to_json }
84
92
  end
85
93
 
@@ -107,9 +115,8 @@ shared_examples 'get::index' do
107
115
  end
108
116
 
109
117
  shared_examples 'put::update' do
110
- let(:payload) { model.clone.attributes }
111
- let(:host) { ActiveRecordApi::Rest::RequestUrlGenerator.new(request: request).micro_service_url }
112
- let(:relative_url) { Rails.application.routes.url_helpers.url_for(controller: model_klass.to_s.underscore.pluralize, action: 'show', id: model.id, only_path: true) }
118
+ let(:payload) { serializer.new(model).as_json }
119
+ let(:relative_url) { Rails.application.routes.url_helpers.url_for(controller: base_model_klass.to_s.underscore.pluralize, action: 'show', id: model.id, only_path: true) }
113
120
  describe 'PUT update' do
114
121
  context 'when authorized' do
115
122
  before(:each) do
@@ -124,7 +131,7 @@ shared_examples 'put::update' do
124
131
  end
125
132
  context 'when invalid param values provided' do
126
133
  before(:each) do
127
- put :update, params: update_invalid_model.attributes.merge(id: model.id)
134
+ put :update, params: serializer.new(update_invalid_model).as_json.merge(id: model.id)
128
135
  expect(update_invalid_model.valid?).to be false
129
136
  end
130
137
  it { expect(response.status).to eq(422) }
@@ -132,7 +139,7 @@ shared_examples 'put::update' do
132
139
  end
133
140
  context 'when invalid param keys provided' do
134
141
  before(:each) do
135
- put :update, params: model.attributes.merge('foobars' => 'stuff')
142
+ put :update, params: payload.merge('foobars' => 'stuff')
136
143
  end
137
144
  it { expect(response.status).to eq(422) }
138
145
  it { expect(response.body).to be_json_eql({ base: 'Extra parameters are not allow: foobars' }.to_json) }
@@ -150,10 +157,9 @@ shared_examples 'put::update' do
150
157
  end
151
158
 
152
159
  shared_examples 'post::create' do
153
- let(:new_attributes) { model.dup.attributes }
160
+ let(:new_attributes) { serializer.new(model).as_json.except(:id) }
154
161
  let(:model_id) { model.id }
155
- let(:host) { ActiveRecordApi::Rest::RequestUrlGenerator.new(request: request).micro_service_url }
156
- let(:relative_url) { Rails.application.routes.url_helpers.url_for(controller: model_klass.to_s.underscore.pluralize, action: 'show', id: model_klass.last.id, only_path: true) }
162
+ let(:relative_url) { Rails.application.routes.url_helpers.url_for(controller: base_model_klass.to_s.underscore.pluralize, action: 'show', id: model_klass.last.id, only_path: true) }
157
163
  describe 'POST create' do
158
164
  context 'when authorized' do
159
165
  before(:each) do
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveRecordApi
4
4
  module Rest
5
- VERSION = '0.0.2'.freeze
5
+ VERSION = '0.0.3'.freeze
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_record_api-rest
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Full Measure Education
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-12 00:00:00.000000000 Z
11
+ date: 2018-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler