the_garage 2.4.1 → 2.6.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
- 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: []