the_garage 2.4.1 → 2.6.0

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
- SHA1:
3
- metadata.gz: 40c843f3541b358a20f20fce55a9e09913d75722
4
- data.tar.gz: 17d0231446753d51c7bbebd42bcf9c5f348e49e8
2
+ SHA256:
3
+ metadata.gz: cc60156398751cb043b40c324f50cd90cd4beaf92600cb5de192a087875716df
4
+ data.tar.gz: b7421b618063e678141521822c7f4b5e1a9af1bf7edaa714889fb9f824c63be6
5
5
  SHA512:
6
- metadata.gz: f46a8245d7e9df31072d13b3607df7bdcf9e7a91b03b3e3e67460f9d2240f00086d366acf126cc580520d7073365b28a7e9e73012093eaa0b56783129c920dfb
7
- data.tar.gz: 93e345d15e4d1126e761be0e379e7346f3607d7675b77e41ff46363e5e70a0aa8a7c0f20a26595caea2510cde2a6e29d8f2488de466ea99f48c825345bac533c
6
+ metadata.gz: 771c78fdc46b938e26f6009d1a4b673afddb52632080a12dede7c906dfe1a1fde8faf2c1ba47c69b48168315106e0ef2bd5c2c9aef2d4a79837a749aa2f6282a
7
+ data.tar.gz: ebbbf30696f2e46b5c7eb34b0ab2d54d13e0d5d9c6b73666bead201c6a0be4f7f0ea412032c7e263fe30b8978514fad469c640260c63e974c12e48ad591dccc3
data/README.md CHANGED
@@ -52,7 +52,7 @@ In your controller classes:
52
52
  ```ruby
53
53
  class ApplicationController < ActionController::Base
54
54
  include Garage::ControllerHelper
55
-
55
+
56
56
  # ...
57
57
  end
58
58
 
@@ -65,6 +65,18 @@ class EmployeesController < ApplicationController
65
65
  end
66
66
  ```
67
67
 
68
+ Resources are rendered with [respond_with (responders gem)](https://github.com/heartcombo/responders).
69
+ Additional options can be passed to respond_with by implementing `respond_with_resources_options` (index action)
70
+ and `respond_with_resource_options` (show, update destroy actions).
71
+
72
+ Available options
73
+ * `:paginate` - (Boolean) Enable pagination when `true`. Paginates with the `per_page` and `page` params
74
+ * `:per_page` - (Integer) value for default number of resources per page when paginating
75
+ * `:max_per_page` - (Integer) Maximum resources per page, irrespective of requested per_page
76
+ * `:hard_limit` - (Integer) Limit of retrievable records when paginating. Also hides total records.
77
+ * `:distinct_by` - (Symbol) Specify a property to count by for total page count
78
+ * `:to_resource_options` - (Hash) Options to pass as argument to `to_resource(options)`
79
+
68
80
  ## Create decorator for your AR models
69
81
  With not small application, you may add a presentation layer to build API responses.
70
82
  Define a decorator class with `Resource` suffix and define `#to_resource` in
@@ -197,7 +209,7 @@ Currently, we support following tracers:
197
209
 
198
210
  ```ruby
199
211
  # e.g. aws-xray tracer
200
- require 'aws/xray'
212
+ require 'aws/xray/hooks/net_http'
201
213
  Garage::Tracer::AwsXrayTracer.service = 'your-auth-server-name'
202
214
  Garage.configuration.tracer = Garage::Tracer::AwsXrayTracer
203
215
  ```
@@ -9,14 +9,6 @@ jQuery ()->
9
9
  $.colorbox.close()
10
10
  ev.preventDefault()
11
11
 
12
- buildAuthorizedUrl = (base, location, token) ->
13
- url = base + location
14
- if url.indexOf('?') > 0
15
- url += '&'
16
- else
17
- url += '?'
18
- url + 'access_token=' + token
19
-
20
12
  addNewParamField = (container) ->
21
13
  nextId = "parameter-" + $('.parameter', container).length
22
14
  copy = $('.template .parameter').clone().attr('id', nextId)
@@ -52,11 +44,11 @@ jQuery ()->
52
44
  $('#api-headers').text ''
53
45
  $('#api-response').text ''
54
46
 
55
- url = buildAuthorizedUrl $('#base').val(), $('#location').val(), $('#access_token').val()
56
47
  console.log buildData($('.parameters'))
57
48
  $.ajax
58
49
  type: $('#method').val(),
59
- url: url,
50
+ url: $('#base').val() + $('#location').val(),
51
+ headers: {'Authorization': 'Bearer ' + $('#access_token').val()},
60
52
  cache: false,
61
53
  data: buildData($('.parameters')),
62
54
  dataType: 'json',
@@ -6,7 +6,7 @@
6
6
  = csrf_meta_tags
7
7
  = stylesheet_link_tag "garage/application", :media => "all"
8
8
  = javascript_include_tag "garage/application"
9
- = favicon_link_tag "favicon.ico"
9
+ = favicon_link_tag "favicon.ico", skip_pipeline: true
10
10
 
11
11
  %body{ class: action_classes }
12
12
  .navbar.navbar-default.navbar-static-top
@@ -19,7 +19,7 @@
19
19
  %li= link_to "Console", console_resources_path
20
20
  %ul.nav.navbar-nav.navbar-right
21
21
  - if _current_user
22
- %li= link_to "Signout", "/signout", method: :post
22
+ %li= link_to "Signout", Garage.configuration.docs.signout_path, method: Garage.configuration.docs.signout_request_method
23
23
 
24
24
  .main
25
25
  .container
@@ -49,11 +49,13 @@ module Garage
49
49
  end
50
50
 
51
51
  def cast_resource
52
- @cast_resource ||= proc { |resource|
52
+ @cast_resource ||= proc { |resource, options|
53
+ options ||= {}
54
+ to_resource_args = [options[:to_resource_options]].compact
53
55
  if resource.respond_to?(:map) && resource.respond_to?(:to_a)
54
- resource.map(&:to_resource)
56
+ resource.map { |r| r.to_resource(*to_resource_args) }
55
57
  else
56
- resource.to_resource
58
+ resource.to_resource(*to_resource_args)
57
59
  end
58
60
  }
59
61
  end
@@ -3,7 +3,8 @@ module Garage
3
3
  class Config
4
4
  attr_accessor :document_root, :current_user_method, :authenticate,
5
5
  :console_app_uid, :console_app_secret, :remote_server,
6
- :docs_authorization_method, :docs_cache_enabled
6
+ :docs_authorization_method, :docs_cache_enabled,
7
+ :signout_path, :signout_request_method
7
8
 
8
9
  def initialize
9
10
  reset
@@ -17,6 +18,8 @@ module Garage
17
18
  @remote_server = Proc.new {|request| "#{request.protocol}#{request.host_with_port}" }
18
19
  @docs_authorization_method = nil
19
20
  @docs_cache_enabled = true
21
+ @signout_path = '/signout'
22
+ @signout_request_method = :post
20
23
  end
21
24
 
22
25
  class Builder
@@ -55,6 +58,14 @@ module Garage
55
58
  def docs_authorization_method(&block)
56
59
  @config.docs_authorization_method = block
57
60
  end
61
+
62
+ def signout_path=(value)
63
+ @config.signout_path = value
64
+ end
65
+
66
+ def signout_request_method=(value)
67
+ @config.signout_request_method = value.to_sym
68
+ end
58
69
  end
59
70
  end
60
71
  end
@@ -24,7 +24,9 @@ module Garage
24
24
  # `#resource_identifier` or `#id`.
25
25
  def encode_to_hash(resource, *args)
26
26
  if id = get_resource_identifier(resource)
27
- cache_key = "#{resource.class.name}:#{id}"
27
+ options = args[0] || {}
28
+ selector = options[:selector] || controller.field_selector
29
+ cache_key = "#{resource.class.name}:#{id}:#{selector.canonical}"
28
30
  cache[cache_key] ||= _encode_to_hash(resource, *args)
29
31
  else
30
32
  _encode_to_hash(resource, *args)
@@ -90,7 +90,7 @@ module Garage
90
90
  links[:next] = rs.current_page + 1
91
91
  end
92
92
 
93
- unless rs.last_page? || hide_total?
93
+ unless rs.last_page? || hide_total? || rs.total_pages.zero?
94
94
  links[:last] = rs.total_pages
95
95
  end
96
96
  end
@@ -51,7 +51,7 @@ module Garage::Representer
51
51
  self.class
52
52
  end
53
53
 
54
- def to_resource
54
+ def to_resource(options = {})
55
55
  self
56
56
  end
57
57
 
@@ -6,7 +6,7 @@ module Garage::ResourceCastingResponder
6
6
 
7
7
  def display(resource, given_options={})
8
8
  if @caster
9
- resource = @caster.call(resource)
9
+ resource = @caster.call(resource, @options)
10
10
  end
11
11
  super(resource, given_options)
12
12
  end
@@ -89,6 +89,8 @@ module Garage
89
89
  'Resource-Owner-Id' => @request.headers['Resource-Owner-Id'],
90
90
  'Scopes' => @request.headers['Scopes'],
91
91
  'User-Agent' => USER_AGENT,
92
+ # ActionDispatch::Request#request_id is only available in Rails 5.0 or later.
93
+ 'X-Request-Id' => @request.uuid,
92
94
  }.reject {|_, v| v.nil? }
93
95
  end
94
96
 
@@ -1,3 +1,5 @@
1
+ require 'forwardable'
2
+
1
3
  module Garage
2
4
  module Tracer
3
5
  extend self
@@ -45,48 +47,17 @@ module Garage
45
47
  end
46
48
 
47
49
  def self.start(&block)
48
- if Aws::Xray::Context.started?
49
- Aws::Xray::Context.current.child_trace(remote: true, name: service) do |sub|
50
- if Aws::Xray::Context.current.respond_to?(:disable_trace)
51
- Aws::Xray::Context.current.disable_trace(:net_http) { yield new(sub) }
52
- else
53
- yield new(sub)
54
- end
55
- end
56
- else
57
- yield NullTracer.new
58
- end
59
- end
60
-
61
- def initialize(sub_segment)
62
- @sub = sub_segment
50
+ yield new
63
51
  end
64
52
 
65
53
  def inject_trace_context(header)
66
- header.merge('X-Amzn-Trace-Id' => @sub.generate_trace.to_header_value)
54
+ header.merge('X-Aws-Xray-Name' => self.class.service)
67
55
  end
68
56
 
69
57
  def record_http_request(method, url, user_agent)
70
- request = Aws::Xray::Request.build(method: method.to_s.upcase, url: url, user_agent: user_agent)
71
- @sub.set_http_request(request)
72
58
  end
73
59
 
74
60
  def record_http_response(status, content_length)
75
- @sub.set_http_response(status, content_length || 0)
76
-
77
- case status
78
- when 499
79
- cause = Aws::Xray::Cause.new(stack: caller, message: 'Got 499', type: 'http_request_error')
80
- @sub.set_error(error: true, throttle: true, cause: cause)
81
- when 400..498
82
- cause = Aws::Xray::Cause.new(stack: caller, message: 'Got 4xx', type: 'http_request_error')
83
- @sub.set_error(error: true, cause: cause)
84
- when 500..599
85
- cause = Aws::Xray::Cause.new(stack: caller, message: 'Got 5xx', type: 'http_request_error')
86
- @sub.set_error(fault: true, remote: true, cause: cause)
87
- else
88
- # pass
89
- end
90
61
  end
91
62
  end
92
63
  end
@@ -1,3 +1,3 @@
1
1
  module Garage
2
- VERSION = '2.4.1'
2
+ VERSION = '2.6.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: the_garage
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.1
4
+ version: 2.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tatsuhiko Miyagawa
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-09 00:00:00.000000000 Z
11
+ date: 2020-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -255,7 +255,7 @@ homepage: https://github.com/cookpad/garage
255
255
  licenses:
256
256
  - MIT
257
257
  metadata: {}
258
- post_install_message:
258
+ post_install_message:
259
259
  rdoc_options: []
260
260
  require_paths:
261
261
  - lib
@@ -270,9 +270,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
270
270
  - !ruby/object:Gem::Version
271
271
  version: '0'
272
272
  requirements: []
273
- rubyforge_project:
274
- rubygems_version: 2.6.11
275
- signing_key:
273
+ rubygems_version: 3.1.2
274
+ signing_key:
276
275
  specification_version: 4
277
276
  summary: Garage Platform Engine
278
277
  test_files: []