hal_api-rails 1.0.0 → 1.1.4

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
- SHA256:
3
- metadata.gz: 35f7ab8e051a6d7132ecf26800670c4e56489c7371539ac92fdcc6e88fb5d280
4
- data.tar.gz: 5fd5ecbdd0ba0287c0c01e1e5ed24cd23b5cb10aa157be28224b7ec6c6c25698
2
+ SHA1:
3
+ metadata.gz: 4d1af91c55bf42a53d4ecfe0c6ed673bd2856a57
4
+ data.tar.gz: 0f0dac6e3b4e33821d9c20b0efe5fa1ead07b30e
5
5
  SHA512:
6
- metadata.gz: 653ca1b7461fd1c3b598904e85e430c4632485f6c390192deaab63dc8e0a13c3970ed4d94486d1cf749d09966edf4055602b00a71e3f54c7b83a08bdc21a57b2
7
- data.tar.gz: 11ce89bb941bf1e9f83d377fe1bc7b0da9a6e94cd7d7e93fb8b516348ceb7550e37966c2cbb6b4357f90bed927130a5a44658de12572ac0a37e1a2f270890f05
6
+ metadata.gz: 9bdfb40d56cfac300c5b2263ab25eec3b6162420cb417897c558b3e4bdfbd556acefe32da9387939ced5cb35046ad9295a6c7889881f385d996621914c0f5f3a
7
+ data.tar.gz: 5c0745b9303bae2e66046fbda5ded266b0b642350968e5bbaf409a55d6c49186770217c22a2f80813e85f4f3e4b9e58b69c6a548689e44f55dba6c8def4b3e02
@@ -0,0 +1 @@
1
+ 2.4.9
@@ -71,7 +71,9 @@ module HalApi::Controller::Actions
71
71
 
72
72
  def valid_params_for_action(action)
73
73
  (params.permit(*self.class.valid_params_list(action)) || {}).tap do |p|
74
- p[:zoom] = zoom_param if zoom_param
74
+ if zoom_param
75
+ p[:user_options] = (p[:user_options] || {}).merge(zoom: zoom_param)
76
+ end
75
77
  end.
76
78
  to_h
77
79
  end
@@ -25,11 +25,12 @@ module HalApi::Controller::Exceptions
25
25
 
26
26
  notice_error(exception) if error.status >= 500
27
27
 
28
- json = {status: error.status, message: error.message}
29
- if Rails.configuration.try(:consider_all_requests_local)
30
- json[:backtrace] = error.backtrace
31
- end
32
- render status: error.status, json: json
28
+ respond_with(
29
+ error,
30
+ status: error.status,
31
+ location: nil, # for POST requests
32
+ represent_with: HalApi::Errors::Representer
33
+ )
33
34
  end
34
35
 
35
36
  def log_error(env, wrapper)
@@ -102,7 +102,11 @@ module HalApi::Controller::Resources
102
102
  end
103
103
 
104
104
  def paged(arel)
105
- arel.page(params[:page]).per(params[:per])
105
+ if params[:per].to_i <= 0
106
+ arel.page(params[:page]).per(Kaminari.config.default_per_page)
107
+ else
108
+ arel.page(params[:page]).per(params[:per])
109
+ end
106
110
  end
107
111
 
108
112
  def scoped(res)
@@ -48,4 +48,12 @@ module HalApi::Errors
48
48
  super(msg, 400, hint)
49
49
  end
50
50
  end
51
+
52
+ module Representer
53
+ include Roar::JSON::HAL
54
+
55
+ property :status
56
+ property :message
57
+ property :backtrace, if: -> (*) { Rails.configuration.try(:consider_all_requests_local) }
58
+ end
51
59
  end
@@ -1,5 +1,5 @@
1
1
  module HalApi
2
2
  module Rails
3
- VERSION = "1.0.0"
3
+ VERSION = '1.1.4'
4
4
  end
5
5
  end
@@ -12,11 +12,11 @@ module HalApi::Representer::CollectionPaging
12
12
  embeds :items, decorator: lambda{|*| item_decorator }, class: lambda{|*| item_class }, zoom: :always
13
13
 
14
14
  link :prev do
15
- href_url_helper(params.merge(page: represented.prev_page)) unless represented.first_page?
15
+ href_url_helper(params.merge(page: represented.prev_page)) if represented.prev_page
16
16
  end
17
17
 
18
18
  link :next do
19
- href_url_helper(params.merge(page: represented.next_page)) unless represented.last_page?
19
+ href_url_helper(params.merge(page: represented.next_page)) if represented.next_page
20
20
  end
21
21
 
22
22
  link :first do
@@ -10,15 +10,6 @@ module HalApi::Representer::Embeds
10
10
  Representable::Binding.send(:include, HalApiRailsRenderPipeline) if !Representable::Binding.include?(HalApiRailsRenderPipeline)
11
11
  end
12
12
 
13
- def normalize_options!(options)
14
- propagated_options, private_options = super(options)
15
-
16
- # we want this to propogate, and be available for `skip_property?`, so don't delete
17
- private_options[:zoom] = options[:zoom] if options.key?(:zoom)
18
-
19
- [propagated_options, private_options]
20
- end
21
-
22
13
  module HalApiRailsRenderPipeline
23
14
 
24
15
  def skip_property?(binding, private_options)
@@ -37,10 +28,11 @@ module HalApi::Representer::Embeds
37
28
 
38
29
  # embed if zoomed
39
30
  def suppress_embed?(input, options)
40
- user_options = options[:options]
41
-
42
31
  binding = options[:binding]
43
32
 
33
+ # guard against non-hal representers
34
+ return false unless binding[:as].present?
35
+
44
36
  name = binding.evaluate_option(:as, input, options)
45
37
 
46
38
  embedded = binding[:embedded]
@@ -48,7 +40,8 @@ module HalApi::Representer::Embeds
48
40
  return false if !embedded
49
41
 
50
42
  ## check if it should be zoomed, suppress if not
51
- !embed_zoomed?(name, binding[:zoom], user_options[:zoom])
43
+ user_zooms = options[:options].try(:[], :user_options).try(:[], :zoom)
44
+ !embed_zoomed?(name, binding[:zoom], user_zooms)
52
45
  end
53
46
 
54
47
  def embed_zoomed?(name, zoom_def = nil, zoom_param = nil)
@@ -92,7 +85,9 @@ module HalApi::Representer::Embeds
92
85
  options[:getter] ||= ->(*) do
93
86
  cnt = send(name).count
94
87
  per = getter_per == :all ? cnt : getter_per
95
- if cnt <= per
88
+ if cnt == 0
89
+ items = send(name).page(1).per(Kaminari.config.default_per_page)
90
+ elsif cnt <= per
96
91
  items = Kaminari.paginate_array(send(name)).page(1).per(per)
97
92
  else
98
93
  items = send(name).page(1).per(per)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hal_api-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Rhoden
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2020-01-08 00:00:00.000000000 Z
12
+ date: 2020-06-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activemodel
@@ -202,6 +202,7 @@ extensions: []
202
202
  extra_rdoc_files: []
203
203
  files:
204
204
  - ".gitignore"
205
+ - ".ruby-version"
205
206
  - ".travis.yml"
206
207
  - CODE_OF_CONDUCT.md
207
208
  - Gemfile
@@ -254,7 +255,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
254
255
  - !ruby/object:Gem::Version
255
256
  version: '0'
256
257
  requirements: []
257
- rubygems_version: 3.0.3
258
+ rubyforge_project:
259
+ rubygems_version: 2.6.14.4
258
260
  signing_key:
259
261
  specification_version: 4
260
262
  summary: JSON HAL APIs on Rails in the style of PRX