api_me 0.8.3 → 0.9.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: a0e54aaed7c4f43cf317932557e98703dd0f92a1
4
- data.tar.gz: f8378de47b162e3d4d5af42b5e2b7cff0b4c32c8
3
+ metadata.gz: 645e13a4bad82a3438471c239b114e274c8359f8
4
+ data.tar.gz: 4fd73fa2d420709e31ed318f3b8811c67c93f7e6
5
5
  SHA512:
6
- metadata.gz: 4a18e146f973884145a49abcd430fcc649ef383dec0cc2d5b0b14d7dd55fdc93121d34698c275c01f9b6ac32578904f147d95ea84af17bfadedafe9d187162f1
7
- data.tar.gz: 3635a11745a173d844c6fb3703d5acf673b87404713ce0c45be9eaa18b9f3f71ab1382e734ed38bab31af26515c5798e17d2f0d417f9d590a002f6156792a602
6
+ metadata.gz: 22cb87900699c9c798aba454a68f55dcd089a4eab02a7256bb165ab41690950ec6a426dcbd88b4fea165fa1c228273c3daac6788b494b472d4ad50e988d32405
7
+ data.tar.gz: bf3d38090a2960accb601856c2f372719fbcd8410087df49f262074496f555d8b85fbe7c1df2b1d983e1e822c6e0f7de159146f24c8103ded53495a91232869e
data/Gemfile CHANGED
@@ -3,12 +3,9 @@ source 'https://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  group :test do
6
- gem 'pry'
7
- gem 'activerecord'
8
- gem 'activesupport'
9
- gem 'actionpack' # action_controller, action_view
10
- gem 'combustion', '~> 0.5.2'
11
- gem 'rack-test'
12
- gem 'pundit'
6
+ gem 'actionpack'
13
7
  gem 'active_model_serializers', '~> 0.10.0'
8
+ gem 'combustion', '~> 0.5.2'
9
+ gem 'pry'
10
+ gem 'rack-test', '~> 0.6.2'
14
11
  end
data/Gemfile.lock CHANGED
@@ -1,119 +1,138 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- api_me (0.8.3)
4
+ api_me (0.9.0)
5
5
  active_model_serializers (~> 0.10.0)
6
- activerecord (>= 3.2.0)
7
- activesupport (>= 3.2.0)
6
+ activerecord (>= 4.1.16)
7
+ activesupport (>= 4.1.16)
8
8
  kaminari (~> 0.16.3)
9
- pundit (~> 1.0)
9
+ pundit (~> 1.1.0)
10
10
  search_object (~> 1.0)
11
11
 
12
12
  GEM
13
13
  remote: https://rubygems.org/
14
14
  specs:
15
- actionpack (4.1.6)
16
- actionview (= 4.1.6)
17
- activesupport (= 4.1.6)
18
- rack (~> 1.5.2)
15
+ actionpack (4.2.10)
16
+ actionview (= 4.2.10)
17
+ activesupport (= 4.2.10)
18
+ rack (~> 1.6)
19
19
  rack-test (~> 0.6.2)
20
- actionview (4.1.6)
21
- activesupport (= 4.1.6)
20
+ rails-dom-testing (~> 1.0, >= 1.0.5)
21
+ rails-html-sanitizer (~> 1.0, >= 1.0.2)
22
+ actionview (4.2.10)
23
+ activesupport (= 4.2.10)
22
24
  builder (~> 3.1)
23
25
  erubis (~> 2.7.0)
24
- active_model_serializers (0.10.2)
26
+ rails-dom-testing (~> 1.0, >= 1.0.5)
27
+ rails-html-sanitizer (~> 1.0, >= 1.0.3)
28
+ active_model_serializers (0.10.7)
25
29
  actionpack (>= 4.1, < 6)
26
30
  activemodel (>= 4.1, < 6)
27
- jsonapi (~> 0.1.1.beta2)
28
- railties (>= 4.1, < 6)
29
- activemodel (4.1.6)
30
- activesupport (= 4.1.6)
31
+ case_transform (>= 0.2)
32
+ jsonapi-renderer (>= 0.1.1.beta1, < 0.3)
33
+ activemodel (4.2.10)
34
+ activesupport (= 4.2.10)
31
35
  builder (~> 3.1)
32
- activerecord (4.1.6)
33
- activemodel (= 4.1.6)
34
- activesupport (= 4.1.6)
35
- arel (~> 5.0.0)
36
- activesupport (4.1.6)
37
- i18n (~> 0.6, >= 0.6.9)
38
- json (~> 1.7, >= 1.7.7)
36
+ activerecord (4.2.10)
37
+ activemodel (= 4.2.10)
38
+ activesupport (= 4.2.10)
39
+ arel (~> 6.0)
40
+ activesupport (4.2.10)
41
+ i18n (~> 0.7)
39
42
  minitest (~> 5.1)
40
- thread_safe (~> 0.1)
43
+ thread_safe (~> 0.3, >= 0.3.4)
41
44
  tzinfo (~> 1.1)
42
- arel (5.0.1.20140414130214)
43
- ast (2.0.0)
44
- astrolabe (1.3.0)
45
- parser (>= 2.2.0.pre.3, < 3.0)
46
- builder (3.2.2)
47
- coderay (1.1.0)
45
+ arel (6.0.4)
46
+ ast (2.4.0)
47
+ builder (3.2.3)
48
+ case_transform (0.2)
49
+ activesupport
50
+ coderay (1.1.2)
48
51
  colored (1.2)
49
- combustion (0.5.2)
52
+ combustion (0.5.5)
50
53
  activesupport (>= 3.0.0)
51
54
  railties (>= 3.0.0)
52
55
  thor (>= 0.14.6)
53
- diff-lcs (1.2.5)
56
+ concurrent-ruby (1.0.5)
57
+ crass (1.0.3)
58
+ diff-lcs (1.3)
54
59
  erubis (2.7.0)
55
- i18n (0.6.11)
56
- json (1.8.1)
57
- jsonapi (0.1.1.beta2)
58
- json (~> 1.8)
60
+ i18n (0.9.5)
61
+ concurrent-ruby (~> 1.0)
62
+ jsonapi-renderer (0.2.0)
59
63
  kaminari (0.16.3)
60
64
  actionpack (>= 3.0.0)
61
65
  activesupport (>= 3.0.0)
62
- method_source (0.8.2)
63
- minitest (5.4.2)
64
- parser (2.2.0.pre.8)
65
- ast (>= 1.1, < 3.0)
66
- slop (~> 3.4, >= 3.4.5)
67
- powerpack (0.0.9)
68
- pry (0.10.3)
66
+ loofah (2.2.2)
67
+ crass (~> 1.0.2)
68
+ nokogiri (>= 1.5.9)
69
+ method_source (0.9.0)
70
+ mini_portile2 (2.3.0)
71
+ minitest (5.11.3)
72
+ nokogiri (1.8.2)
73
+ mini_portile2 (~> 2.3.0)
74
+ parallel (1.12.1)
75
+ parser (2.5.0.4)
76
+ ast (~> 2.4.0)
77
+ powerpack (0.1.1)
78
+ pry (0.11.3)
69
79
  coderay (~> 1.1.0)
70
- method_source (~> 0.8.1)
71
- slop (~> 3.4)
72
- pundit (1.0.1)
80
+ method_source (~> 0.9.0)
81
+ pundit (1.1.0)
73
82
  activesupport (>= 3.0.0)
74
- rack (1.5.2)
75
- rack-test (0.6.2)
83
+ rack (1.6.9)
84
+ rack-test (0.6.3)
76
85
  rack (>= 1.0)
77
- railties (4.1.6)
78
- actionpack (= 4.1.6)
79
- activesupport (= 4.1.6)
86
+ rails-deprecated_sanitizer (1.0.3)
87
+ activesupport (>= 4.2.0.alpha)
88
+ rails-dom-testing (1.0.9)
89
+ activesupport (>= 4.2.0, < 5.0)
90
+ nokogiri (~> 1.6)
91
+ rails-deprecated_sanitizer (>= 1.0.1)
92
+ rails-html-sanitizer (1.0.3)
93
+ loofah (~> 2.0)
94
+ railties (4.2.10)
95
+ actionpack (= 4.2.10)
96
+ activesupport (= 4.2.10)
80
97
  rake (>= 0.8.7)
81
98
  thor (>= 0.18.1, < 2.0)
82
- rainbow (2.0.0)
83
- rake (10.3.2)
99
+ rainbow (3.0.0)
100
+ rake (12.3.1)
84
101
  rake-notes (0.2.0)
85
102
  colored
86
103
  rake
87
- rspec-core (3.1.7)
88
- rspec-support (~> 3.1.0)
89
- rspec-expectations (3.1.2)
104
+ rspec-core (3.7.1)
105
+ rspec-support (~> 3.7.0)
106
+ rspec-expectations (3.7.0)
107
+ diff-lcs (>= 1.2.0, < 2.0)
108
+ rspec-support (~> 3.7.0)
109
+ rspec-mocks (3.7.0)
90
110
  diff-lcs (>= 1.2.0, < 2.0)
91
- rspec-support (~> 3.1.0)
92
- rspec-mocks (3.1.3)
93
- rspec-support (~> 3.1.0)
94
- rspec-rails (3.1.0)
111
+ rspec-support (~> 3.7.0)
112
+ rspec-rails (3.7.2)
95
113
  actionpack (>= 3.0)
96
114
  activesupport (>= 3.0)
97
115
  railties (>= 3.0)
98
- rspec-core (~> 3.1.0)
99
- rspec-expectations (~> 3.1.0)
100
- rspec-mocks (~> 3.1.0)
101
- rspec-support (~> 3.1.0)
102
- rspec-support (3.1.2)
103
- rubocop (0.28.0)
104
- astrolabe (~> 1.3)
105
- parser (>= 2.2.0.pre.7, < 3.0)
106
- powerpack (~> 0.0.6)
107
- rainbow (>= 1.99.1, < 3.0)
108
- ruby-progressbar (~> 1.4)
109
- ruby-progressbar (1.7.0)
116
+ rspec-core (~> 3.7.0)
117
+ rspec-expectations (~> 3.7.0)
118
+ rspec-mocks (~> 3.7.0)
119
+ rspec-support (~> 3.7.0)
120
+ rspec-support (3.7.1)
121
+ rubocop (0.54.0)
122
+ parallel (~> 1.10)
123
+ parser (>= 2.5)
124
+ powerpack (~> 0.1)
125
+ rainbow (>= 2.2.2, < 4.0)
126
+ ruby-progressbar (~> 1.7)
127
+ unicode-display_width (~> 1.0, >= 1.0.1)
128
+ ruby-progressbar (1.9.0)
110
129
  search_object (1.2.0)
111
- slop (3.6.0)
112
- sqlite3 (1.3.9)
113
- thor (0.19.1)
114
- thread_safe (0.3.4)
115
- tzinfo (1.2.2)
130
+ sqlite3 (1.3.13)
131
+ thor (0.20.0)
132
+ thread_safe (0.3.6)
133
+ tzinfo (1.2.5)
116
134
  thread_safe (~> 0.1)
135
+ unicode-display_width (1.3.0)
117
136
 
118
137
  PLATFORMS
119
138
  ruby
@@ -121,14 +140,14 @@ PLATFORMS
121
140
  DEPENDENCIES
122
141
  actionpack
123
142
  active_model_serializers (~> 0.10.0)
124
- activerecord
125
- activesupport
126
143
  api_me!
127
144
  combustion (~> 0.5.2)
128
145
  pry
129
- pundit
130
- rack-test
146
+ rack-test (~> 0.6.2)
131
147
  rake-notes (>= 0.2.0)
132
148
  rspec-rails (~> 3)
133
- rubocop (>= 0.27.0)
149
+ rubocop (~> 0.49)
134
150
  sqlite3 (~> 1.3.7)
151
+
152
+ BUNDLED WITH
153
+ 1.16.1
data/README.md CHANGED
@@ -121,6 +121,45 @@ return this.store.query('some-model', {
121
121
  });
122
122
  ````
123
123
 
124
+ ### Pagination
125
+
126
+ To enable pagination just pass `page` in your request with `size` and `offset`.
127
+
128
+ Ember Example
129
+ ````js
130
+ return this.store.query('some-model', {
131
+ filters: {
132
+ cool_models_only: true
133
+ },
134
+ sort: {
135
+ criteria: 'createdAt', // Property to sort on.
136
+ reverse: false, // True reverses the sort.
137
+ },
138
+ page: {
139
+ size: 50, // Size of a page. Number of results per page.
140
+ offset: false, /* The page number you want to see.
141
+ Imagine 103 records are available.
142
+ If the size of 50 is given as a parameter
143
+ then valid inputs to offset would be 1, 2, and 3. */
144
+ }
145
+ });
146
+ ````
147
+
148
+
149
+ Your response will contain a meta object with the following data:
150
+ ```js
151
+ meta: {
152
+ size: n // Size input above
153
+ offset: m // Offset input above
154
+ record_count: i /* The number of records in the page.
155
+ In the `offset` example above pages 1 and 2
156
+ would have a record_count of 50 while page 3
157
+ would have a record count of 3. */
158
+ total_records: j // Total number of records accessible
159
+ total_pages: k // Total number of pages accessible
160
+ }
161
+ ```
162
+
124
163
  ### Overrides
125
164
  Overriding the default model class, serializer class, filter class, and filter parameter can be done like so:
126
165
 
data/Rakefile CHANGED
@@ -17,7 +17,7 @@ end
17
17
  task default: 'reports:all'
18
18
 
19
19
  namespace :reports do
20
- task all: [:fixme_notes, :rubocop, :spec]
20
+ task all: %i[fixme_notes rubocop spec]
21
21
 
22
22
  task :rubocop do
23
23
  system 'bundle exec rubocop --rails --display-cop-names'
data/api_me.gemspec CHANGED
@@ -18,9 +18,9 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- {spec}/*`.split("\n")
19
19
  s.require_paths = %w(lib app)
20
20
 
21
- s.add_runtime_dependency 'activerecord', '>= 3.2.0'
22
- s.add_runtime_dependency 'activesupport', '>= 3.2.0'
23
- s.add_runtime_dependency 'pundit', '~> 1.0'
21
+ s.add_runtime_dependency 'activerecord', '>= 4.1.16'
22
+ s.add_runtime_dependency 'activesupport', '>= 4.1.16'
23
+ s.add_runtime_dependency 'pundit', '~> 1.1.0'
24
24
  s.add_runtime_dependency 'active_model_serializers', '~> 0.10.0'
25
25
  s.add_runtime_dependency 'search_object', '~> 1.0'
26
26
  s.add_runtime_dependency 'kaminari', '~> 0.16.3'
@@ -28,6 +28,6 @@ Gem::Specification.new do |s|
28
28
  s.add_development_dependency 'combustion', '~> 0.5.1'
29
29
  s.add_development_dependency 'rspec-rails', '~> 3'
30
30
  s.add_development_dependency 'sqlite3', '~> 1.3.7'
31
- s.add_development_dependency 'rubocop', '>= 0.27.0'
31
+ s.add_development_dependency 'rubocop', '~> 0.49'
32
32
  s.add_development_dependency 'rake-notes', '>= 0.2.0'
33
33
  end
data/lib/api_me.rb CHANGED
@@ -18,11 +18,11 @@ module ApiMe
18
18
  end
19
19
 
20
20
  module ClassMethods
21
- def model(klass) # rubocop:disable TrivialAccessors
21
+ def model(klass)
22
22
  @model_klass = klass
23
23
  end
24
24
 
25
- def serializer(klass) # rubocop:disable TrivialAccessors
25
+ def serializer(klass)
26
26
  @serializer_klass = klass
27
27
  end
28
28
 
@@ -68,7 +68,7 @@ module ApiMe
68
68
  def index
69
69
  @policy_scope = policy_scope(resource_scope)
70
70
  @filter_scope = filter_scope(@policy_scope)
71
- @sorted_scope = sort_scope(@filter_scope, sort_params)
71
+ @sorted_scope = sort_scope(@filter_scope)
72
72
  @pagination_object = paginate_scope(@sorted_scope, page_params)
73
73
 
74
74
  render json: @pagination_object.results, root: collection_root_key, each_serializer: serializer_klass, meta: { page: @pagination_object.page_meta }
@@ -162,19 +162,26 @@ module ApiMe
162
162
  self.class.filter_klass
163
163
  end
164
164
 
165
+ def sort_klass
166
+ ApiMe::Sorting
167
+ end
168
+
165
169
  def resource_scope
166
170
  model_klass.all
167
171
  end
168
172
 
169
173
  def filter_scope(scope)
170
174
  filter_klass.new(
171
- scope: scope,
172
- filters: filters_hash
175
+ scope: scope,
176
+ filters: filters_hash
173
177
  ).results
174
178
  end
175
179
 
176
- def sort_scope(scope, params)
177
- ApiMe::Sorting.new(scope: scope, sort_params: params).results
180
+ def sort_scope(scope)
181
+ sort_klass.new(
182
+ scope: scope,
183
+ sort_params: sort_hash
184
+ ).results
178
185
  end
179
186
 
180
187
  def paginate_scope(scope, params)
@@ -194,6 +201,14 @@ module ApiMe
194
201
  params[:filters]
195
202
  end
196
203
 
204
+ def sort_hash
205
+ sort_params
206
+ end
207
+
208
+ def sort_params
209
+ params[:sort]
210
+ end
211
+
197
212
  def find_resource
198
213
  model_klass.find_by_id!(params[:id])
199
214
  end
data/lib/api_me/engine.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  begin
2
- require "active_model_serializers"
2
+ require 'active_model_serializers'
3
3
  rescue LoadError
4
4
  puts "Could not load 'active_model_serializers'"
5
5
  exit
@@ -16,7 +16,7 @@ module ApiMe
16
16
  end
17
17
 
18
18
  def page_meta
19
- return Hash.new unless paging?
19
+ return {} unless paging?
20
20
  {
21
21
  size: page_size.nil? ? default_page_size : page_size,
22
22
  offset: page_offset,
@@ -29,14 +29,12 @@ module ApiMe
29
29
  protected
30
30
 
31
31
  def page
32
- self.scope = scope.page(self.page_offset ? page_offset : 1)
32
+ self.scope = scope.page(page_offset ? page_offset : 1)
33
33
  self
34
34
  end
35
35
 
36
36
  def per
37
- if page_size
38
- self.scope = scope.per(page_size)
39
- end
37
+ self.scope = scope.per(page_size) if page_size
40
38
  self
41
39
  end
42
40
 
@@ -49,6 +47,5 @@ module ApiMe
49
47
  def paging?
50
48
  page_size || page_offset
51
49
  end
52
-
53
50
  end
54
51
  end
@@ -15,35 +15,34 @@ module ApiMe
15
15
  end
16
16
 
17
17
  def sort_meta
18
- return Hash.new unless sorting?
18
+ return {} unless sorting?
19
19
  {
20
- criteria: sort_criteria.is_blank? || sort_criteria === "" ? default_sort_criteria : sort_criteria,
20
+ criteria: sort_criteria.is_blank? || sort_criteria === '' ? default_sort_criteria : sort_criteria,
21
21
  reverse: sort_reverse,
22
22
  record_count: scope.size,
23
- total_records: scope.total_count,
23
+ total_records: scope.total_count
24
24
  }
25
25
  end
26
26
 
27
27
  protected
28
28
 
29
29
  def sort(criteria = default_sort_criteria)
30
- if sort_reverse === "true"
31
- self.scope = scope.order(criteria => :desc)
32
- else
33
- self.scope = scope.order(criteria => :asc)
34
- end
30
+ self.scope = if sort_reverse === 'true'
31
+ scope.order(criteria => :desc)
32
+ else
33
+ scope.order(criteria => :asc)
34
+ end
35
35
  self
36
36
  end
37
37
 
38
38
  private
39
39
 
40
40
  def default_sort_criteria
41
- sort_criteria = "id"
41
+ sort_criteria = 'id'
42
42
  end
43
43
 
44
44
  def sorting?
45
45
  sort_criteria || sort_reverse
46
46
  end
47
-
48
47
  end
49
48
  end
@@ -1,3 +1,3 @@
1
1
  module ApiMe
2
- VERSION = '0.8.3'
2
+ VERSION = '0.9.0'.freeze
3
3
  end
@@ -1,7 +1,7 @@
1
1
  module ApiMe
2
2
  module Generators
3
3
  class ControllerGenerator < ::Rails::Generators::NamedBase
4
- source_root File.expand_path('../templates', __FILE__)
4
+ source_root File.expand_path('templates', __dir__)
5
5
  check_class_collision suffix: 'Controller'
6
6
 
7
7
  argument :attributes, type: :array, default: [], banner: 'field field'
@@ -33,7 +33,7 @@ module ApiMe
33
33
  end
34
34
 
35
35
  def attributes_names
36
- [:id] + attributes.select { |attr| !attr.reference? }.map { |a| a.name.to_sym }
36
+ [:id] + attributes.reject(&:reference?).map { |a| a.name.to_sym }
37
37
  end
38
38
 
39
39
  def associations
@@ -41,19 +41,19 @@ module ApiMe
41
41
  end
42
42
 
43
43
  def nonpolymorphic_attribute_names
44
- associations.select { |attr| attr.type.in?([:belongs_to, :references]) }
45
- .reject { |attr| attr.attr_options.fetch(:polymorphic, false) }
46
- .map { |attr| "#{attr.name}_id".to_sym }
44
+ associations.select { |attr| attr.type.in?(%i[belongs_to references]) }
45
+ .reject { |attr| attr.attr_options.fetch(:polymorphic, false) }
46
+ .map { |attr| "#{attr.name}_id".to_sym }
47
47
  end
48
48
 
49
49
  def polymorphic_attribute_names
50
- associations.select { |attr| attr.type.in?([:belongs_to, :references]) }
51
- .select { |attr| attr.attr_options.fetch(:polymorphic, false) }
52
- .map { |attr| ["#{attr.name}_id".to_sym, "#{attr.name}_type".to_sym] }.flatten
50
+ associations.select { |attr| attr.type.in?(%i[belongs_to references]) }
51
+ .select { |attr| attr.attr_options.fetch(:polymorphic, false) }
52
+ .map { |attr| ["#{attr.name}_id".to_sym, "#{attr.name}_type".to_sym] }.flatten
53
53
  end
54
54
 
55
55
  def association_attribute_names
56
- nonpolymorphic_attribute_names + (polymorphic_attribute_names)
56
+ nonpolymorphic_attribute_names + polymorphic_attribute_names
57
57
  end
58
58
 
59
59
  def strong_parameters
@@ -1,7 +1,7 @@
1
1
  module ApiMe
2
2
  module Generators
3
3
  class FilterGenerator < ::Rails::Generators::NamedBase
4
- source_root File.expand_path('../templates', __FILE__)
4
+ source_root File.expand_path('templates', __dir__)
5
5
  check_class_collision suffix: 'Filter'
6
6
 
7
7
  argument :attributes, type: :array, default: [], banner: 'field field'
@@ -17,7 +17,7 @@ module ApiMe
17
17
  end
18
18
 
19
19
  def attributes_names
20
- attributes.select { |attr| !attr.reference? }.map { |a| a.name.to_sym }
20
+ attributes.reject(&:reference?).map { |a| a.name.to_sym }
21
21
  end
22
22
 
23
23
  def associations
@@ -25,19 +25,19 @@ module ApiMe
25
25
  end
26
26
 
27
27
  def nonpolymorphic_attribute_names
28
- associations.select { |attr| attr.type.in?([:belongs_to, :references]) }
29
- .reject { |attr| attr.attr_options.fetch(:polymorphic, false) }
30
- .map { |attr| "#{attr.name}_id".to_sym }
28
+ associations.select { |attr| attr.type.in?(%i[belongs_to references]) }
29
+ .reject { |attr| attr.attr_options.fetch(:polymorphic, false) }
30
+ .map { |attr| "#{attr.name}_id".to_sym }
31
31
  end
32
32
 
33
33
  def polymorphic_attribute_names
34
- associations.select { |attr| attr.type.in?([:belongs_to, :references]) }
35
- .select { |attr| attr.attr_options.fetch(:polymorphic, false) }
36
- .map { |attr| ["#{attr.name}_id".to_sym, "#{attr.name}_type".to_sym] }.flatten
34
+ associations.select { |attr| attr.type.in?(%i[belongs_to references]) }
35
+ .select { |attr| attr.attr_options.fetch(:polymorphic, false) }
36
+ .map { |attr| ["#{attr.name}_id".to_sym, "#{attr.name}_type".to_sym] }.flatten
37
37
  end
38
38
 
39
39
  def association_attribute_names
40
- nonpolymorphic_attribute_names + (polymorphic_attribute_names)
40
+ nonpolymorphic_attribute_names + polymorphic_attribute_names
41
41
  end
42
42
 
43
43
  def strong_parameters
@@ -1,7 +1,7 @@
1
1
  module ApiMe
2
2
  module Generators
3
3
  class PolicyGenerator < ::Rails::Generators::NamedBase
4
- source_root File.expand_path('../templates', __FILE__)
4
+ source_root File.expand_path('templates', __dir__)
5
5
  check_class_collision suffix: 'Policy'
6
6
 
7
7
  argument :attributes, type: :array, default: [], banner: 'field field'
@@ -17,7 +17,7 @@ module ApiMe
17
17
  end
18
18
 
19
19
  def attributes_names
20
- attributes.select { |attr| !attr.reference? }.map { |a| a.name.to_sym }
20
+ attributes.reject(&:reference?).map { |a| a.name.to_sym }
21
21
  end
22
22
 
23
23
  def associations
@@ -25,19 +25,19 @@ module ApiMe
25
25
  end
26
26
 
27
27
  def nonpolymorphic_attribute_names
28
- associations.select { |attr| attr.type.in?([:belongs_to, :references]) }
29
- .reject { |attr| attr.attr_options.fetch(:polymorphic, false) }
30
- .map { |attr| "#{attr.name}_id".to_sym }
28
+ associations.select { |attr| attr.type.in?(%i[belongs_to references]) }
29
+ .reject { |attr| attr.attr_options.fetch(:polymorphic, false) }
30
+ .map { |attr| "#{attr.name}_id".to_sym }
31
31
  end
32
32
 
33
33
  def polymorphic_attribute_names
34
- associations.select { |attr| attr.type.in?([:belongs_to, :references]) }
35
- .select { |attr| attr.attr_options.fetch(:polymorphic, false) }
36
- .map { |attr| ["#{attr.name}_id".to_sym, "#{attr.name}_type".to_sym] }.flatten
34
+ associations.select { |attr| attr.type.in?(%i[belongs_to references]) }
35
+ .select { |attr| attr.attr_options.fetch(:polymorphic, false) }
36
+ .map { |attr| ["#{attr.name}_id".to_sym, "#{attr.name}_type".to_sym] }.flatten
37
37
  end
38
38
 
39
39
  def association_attribute_names
40
- nonpolymorphic_attribute_names + (polymorphic_attribute_names)
40
+ nonpolymorphic_attribute_names + polymorphic_attribute_names
41
41
  end
42
42
 
43
43
  def strong_parameters
@@ -4,7 +4,7 @@ module ApiMe
4
4
  def run_generators
5
5
  params = @_initializer[0]
6
6
  invoke 'model', params
7
- invoke 'serializer', params + %w(created_at updated_at)
7
+ invoke 'serializer', params + %w[created_at updated_at]
8
8
  invoke 'api_me:policy', params
9
9
  invoke 'api_me:controller', params
10
10
  end
@@ -23,7 +23,6 @@ describe 'Posts API' do
23
23
  get '/api/v1/posts?page%5Boffset%5D=1'
24
24
  json = JSON.parse(last_response.body)
25
25
  expect(json['posts'].length).to eq(25)
26
-
27
26
  end
28
27
 
29
28
  it 'is page offset of 2 working for size of 40 default page size of 25' do
@@ -34,11 +33,10 @@ describe 'Posts API' do
34
33
  get '/api/v1/posts?page%5Boffset%5D=2'
35
34
  json = JSON.parse(last_response.body)
36
35
  expect(json['posts'].length).to eq(15)
37
-
38
36
  end
39
37
 
40
38
  it 'is page offset of -1 working for size of 40 default page size of 25' do
41
- #min page offset is 1, anything less gets converted to 1 and results in page size records
39
+ # min page offset is 1, anything less gets converted to 1 and results in page size records
42
40
  40.times do
43
41
  Post.create(name: 'page item')
44
42
  end
@@ -46,11 +44,10 @@ describe 'Posts API' do
46
44
  get '/api/v1/posts?page%5Boffset%5D=-1'
47
45
  json = JSON.parse(last_response.body)
48
46
  expect(json['posts'].length).to eq(25)
49
-
50
47
  end
51
48
 
52
49
  it 'is page offset of 3 working for size of 40 default page size of 25' do
53
- #overflow on page offset will result in 0 records
50
+ # overflow on page offset will result in 0 records
54
51
  40.times do
55
52
  Post.create(name: 'page item')
56
53
  end
@@ -61,7 +58,7 @@ describe 'Posts API' do
61
58
  end
62
59
 
63
60
  it 'is page size of 10 working for default offset of 1' do
64
- #overflow on page offset will result in 0 records
61
+ # overflow on page offset will result in 0 records
65
62
  40.times do
66
63
  Post.create(name: 'page item')
67
64
  end
@@ -69,11 +66,10 @@ describe 'Posts API' do
69
66
  get '/api/v1/posts?page%5Bsize%5D=10'
70
67
  json = JSON.parse(last_response.body)
71
68
  expect(json['posts'].length).to eq(10)
72
-
73
69
  end
74
70
 
75
71
  it 'is page size working when the value is negative' do
76
- #overflow on page offset will result in 0 records
72
+ # overflow on page offset will result in 0 records
77
73
  40.times do
78
74
  Post.create(name: 'page item')
79
75
  end
@@ -81,11 +77,10 @@ describe 'Posts API' do
81
77
  get '/api/v1/posts?page%5Bsize%5D=-10'
82
78
  json = JSON.parse(last_response.body)
83
79
  expect(json['posts'].length).to eq(25)
84
-
85
80
  end
86
81
 
87
82
  it 'is page size working when the value is higher than the total record count' do
88
- #overflow on page offset will result in 0 records
83
+ # overflow on page offset will result in 0 records
89
84
  40.times do
90
85
  Post.create(name: 'page item')
91
86
  end
@@ -96,7 +91,7 @@ describe 'Posts API' do
96
91
  end
97
92
 
98
93
  it 'is the result all records when no page paramas are sent' do
99
- #overflow on page offset will result in 0 records
94
+ # overflow on page offset will result in 0 records
100
95
  100.times do
101
96
  Post.create(name: 'page item')
102
97
  end
@@ -104,7 +99,6 @@ describe 'Posts API' do
104
99
  get '/api/v1/posts'
105
100
  json = JSON.parse(last_response.body)
106
101
  expect(json['posts'].length).to eq(100)
107
-
108
102
  end
109
103
 
110
104
  it 'restricts page_size when max_per_page config is less' do
@@ -129,7 +123,7 @@ describe 'Posts API' do
129
123
  filtered_posts = [all_posts[0], all_posts[2]]
130
124
 
131
125
  get '/api/v1/posts?ids%5B%5D=' + filtered_posts[0].id.to_s +
132
- '&ids%5B%5D=' + filtered_posts[1].id.to_s
126
+ '&ids%5B%5D=' + filtered_posts[1].id.to_s
133
127
 
134
128
  expect(last_response.status).to eq(200)
135
129
  json = JSON.parse(last_response.body)
@@ -9,8 +9,7 @@ class TestModel < ActiveModelSerializers::Model
9
9
  @created ||= false
10
10
  end
11
11
 
12
- def initialize(*_args)
13
- end
12
+ def initialize(*_args); end
14
13
 
15
14
  def save!(*_args)
16
15
  TestModel.create
@@ -1,6 +1,6 @@
1
1
  class UserPolicy < ApplicationPolicy
2
2
  def permitted_attributes
3
- [:id, :username]
3
+ %i[id username]
4
4
  end
5
5
 
6
6
  class Scope < ApplicationPolicy::Scope
@@ -1,12 +1,12 @@
1
1
  ActiveRecord::Schema.define do
2
2
  create_table :users, force: true do |t|
3
3
  t.string :username
4
- t.timestamps
4
+ t.timestamps null: false
5
5
  end
6
6
 
7
7
  create_table :posts, force: true do |t|
8
8
  t.string :name
9
9
  t.belongs_to :user, foreign_key: true
10
- t.timestamps
10
+ t.timestamps null: false
11
11
  end
12
12
  end
data/spec/spec_helper.rb CHANGED
@@ -21,5 +21,4 @@ RSpec.configure do |config|
21
21
  config.use_transactional_fixtures = true
22
22
 
23
23
  config.include ApiHelper
24
-
25
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: api_me
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.3
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Clopton
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-09-28 00:00:00.000000000 Z
12
+ date: 2018-03-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -17,42 +17,42 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: 3.2.0
20
+ version: 4.1.16
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- version: 3.2.0
27
+ version: 4.1.16
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: activesupport
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - ">="
33
33
  - !ruby/object:Gem::Version
34
- version: 3.2.0
34
+ version: 4.1.16
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - ">="
40
40
  - !ruby/object:Gem::Version
41
- version: 3.2.0
41
+ version: 4.1.16
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: pundit
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - "~>"
47
47
  - !ruby/object:Gem::Version
48
- version: '1.0'
48
+ version: 1.1.0
49
49
  type: :runtime
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - "~>"
54
54
  - !ruby/object:Gem::Version
55
- version: '1.0'
55
+ version: 1.1.0
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: active_model_serializers
58
58
  requirement: !ruby/object:Gem::Requirement
@@ -141,16 +141,16 @@ dependencies:
141
141
  name: rubocop
142
142
  requirement: !ruby/object:Gem::Requirement
143
143
  requirements:
144
- - - ">="
144
+ - - "~>"
145
145
  - !ruby/object:Gem::Version
146
- version: 0.27.0
146
+ version: '0.49'
147
147
  type: :development
148
148
  prerelease: false
149
149
  version_requirements: !ruby/object:Gem::Requirement
150
150
  requirements:
151
- - - ">="
151
+ - - "~>"
152
152
  - !ruby/object:Gem::Version
153
- version: 0.27.0
153
+ version: '0.49'
154
154
  - !ruby/object:Gem::Dependency
155
155
  name: rake-notes
156
156
  requirement: !ruby/object:Gem::Requirement