caprese 0.3.24 → 0.3.25
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 +4 -4
- data/CHANGELOG.md +5 -1
- data/lib/caprese/concerns/url_helpers.rb +20 -0
- data/lib/caprese/concerns/versioning.rb +71 -2
- data/lib/caprese/controller/concerns/errors.rb +1 -1
- data/lib/caprese/controller/concerns/query.rb +1 -1
- data/lib/caprese/controller/concerns/relationships.rb +5 -6
- data/lib/caprese/controller/concerns/rendering.rb +1 -1
- data/lib/caprese/controller/concerns/typing.rb +1 -1
- data/lib/caprese/controller.rb +3 -0
- data/lib/caprese/serializer/concerns/links.rb +7 -7
- data/lib/caprese/serializer/concerns/lookup.rb +2 -2
- data/lib/caprese/serializer.rb +3 -0
- data/lib/caprese/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 34252b10961eccda9b87897794f97016566a8e2d
|
|
4
|
+
data.tar.gz: f8b6e715a0cbbdbd9b71a81ef864872c09ab8aaa
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 289224faf57d9e726b555d8b10bf4114127f40d8469157f5320f7a30b6e5c01a7fdfeaf9802e61739beb4f6c2d966ead2fc7881c1ea99797c8e97ab2df2aecea
|
|
7
|
+
data.tar.gz: 525fb2eff4783c7f1c584db0ee9d4fb7ca2f0bd133661538d8ef28fb1f670898c631a965940c27b83190e86e0c29d081f4947afaa51f758de77b56cd82a33286
|
data/CHANGELOG.md
CHANGED
|
@@ -136,4 +136,8 @@
|
|
|
136
136
|
|
|
137
137
|
## 0.3.24
|
|
138
138
|
|
|
139
|
-
* Add `Caprese.config.isolated_namespace` to enable Caprese to work with isolate_namespace Engines
|
|
139
|
+
* Add `Caprese.config.isolated_namespace` to enable Caprese to work with isolate_namespace Engines by trimming the `isolated_namespace` off the front of the result of calls to `version_module`, `version_path`, `version_name`, etc.
|
|
140
|
+
|
|
141
|
+
## 0.3.25
|
|
142
|
+
|
|
143
|
+
* Add `namespaced_module` and `unnamespace` helper to Versioning that provides full module namespace when `config.isolate_namespace` is present (replaces the old functionality of `version_module` and `unversion`)
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'active_support/concern'
|
|
2
|
+
|
|
3
|
+
module Caprese
|
|
4
|
+
module UrlHelpers
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
# Returns the proper route URL helpers based on whether or not Caprese is being used in an engine's
|
|
8
|
+
# isolated_namespace or just a regular application
|
|
9
|
+
def url_helpers
|
|
10
|
+
mod =
|
|
11
|
+
if namespace = Caprese.config.isolated_namespace
|
|
12
|
+
namespace::Engine
|
|
13
|
+
else
|
|
14
|
+
Rails.application
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
mod.routes.url_helpers
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
@@ -4,7 +4,74 @@ module Caprese
|
|
|
4
4
|
module Versioning
|
|
5
5
|
extend ActiveSupport::Concern
|
|
6
6
|
|
|
7
|
+
# Get full namespaced module name of object (class)
|
|
8
|
+
#
|
|
9
|
+
# @example
|
|
10
|
+
# namespaced_module('OrdersController') => 'API::V1::OrdersController'
|
|
11
|
+
#
|
|
12
|
+
# @param [String] suffix the string to append, hypothetically a module in
|
|
13
|
+
# this namespace's module space
|
|
14
|
+
# @return [String] the namespaced modulized name of the suffix passed in
|
|
15
|
+
def namespaced_module(suffix = nil)
|
|
16
|
+
mod = (self.is_a?(Class) ? self : self.class).name.deconstantize
|
|
17
|
+
|
|
18
|
+
name = suffix || mod
|
|
19
|
+
name = name.prepend("#{mod}::") unless suffix.nil? || (/^#{mod}::\.*/).match(suffix)
|
|
20
|
+
|
|
21
|
+
name
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Get full namespaced path (url)
|
|
25
|
+
#
|
|
26
|
+
# @example
|
|
27
|
+
# namespaced_path('orders') => 'api/v1/orders'
|
|
28
|
+
#
|
|
29
|
+
# @param [String] suffix the string to append, hypothetically an extension in
|
|
30
|
+
# this namespace's path space
|
|
31
|
+
# @return [String] the full namespaced path name of the suffix passed in
|
|
32
|
+
def namespaced_path(suffix = nil)
|
|
33
|
+
namespaced_module.downcase.split('::').push(suffix).reject(&:nil?).join('/')
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Get full namespaced dot path (translations)
|
|
37
|
+
#
|
|
38
|
+
# @example
|
|
39
|
+
# namespaced_dot_path('orders') => 'api/v1/orders'
|
|
40
|
+
#
|
|
41
|
+
# @param [String] suffix the string to append, hypothetically an extension in
|
|
42
|
+
# this namespace's dot space
|
|
43
|
+
# @return [String] the full namespaced dot path of the suffix passed in
|
|
44
|
+
def namespaced_dot_path(suffix = nil)
|
|
45
|
+
namespaced_module.downcase.split('::').push(suffix).reject(&:nil?).join('.')
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Get full namespaced underscore name (routes)
|
|
49
|
+
#
|
|
50
|
+
# @example
|
|
51
|
+
# namespaced_name('orders') => 'api_v1_orders'
|
|
52
|
+
#
|
|
53
|
+
# @param [String] suffix the string to append, hypothetically a name that
|
|
54
|
+
# needs to be namespaced
|
|
55
|
+
# @return [String] the namespaced name of the suffix passed in
|
|
56
|
+
def namespaced_name(suffix = nil)
|
|
57
|
+
namespaced_module.downcase.split('::').push(suffix).reject(&:nil?).join('_')
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# Strips string to raw unnamespaced format regardless of input format
|
|
61
|
+
#
|
|
62
|
+
# @param [String] str the string to unversion
|
|
63
|
+
# @return [String] the stripped, unnamespaced name of the string passed in
|
|
64
|
+
def unnamespace(str)
|
|
65
|
+
str
|
|
66
|
+
.remove(namespaced_module(''))
|
|
67
|
+
.remove(namespaced_path(''))
|
|
68
|
+
.remove(namespaced_name(''))
|
|
69
|
+
.remove(namespaced_dot_path(''))
|
|
70
|
+
end
|
|
71
|
+
|
|
7
72
|
# Get versioned module name of object (class)
|
|
73
|
+
# @note The difference between namespaced and versioned module names is that if an isolated_namespace
|
|
74
|
+
# is present, version_module will return a module name without the isolated namespace
|
|
8
75
|
#
|
|
9
76
|
# @example
|
|
10
77
|
# version_module('OrdersController') => 'API::V1::OrdersController'
|
|
@@ -13,11 +80,11 @@ module Caprese
|
|
|
13
80
|
# this version's module space
|
|
14
81
|
# @return [String] the versioned modulized name of the suffix passed in
|
|
15
82
|
def version_module(suffix = nil)
|
|
16
|
-
name = (
|
|
83
|
+
name = namespaced_module(suffix)
|
|
17
84
|
|
|
18
85
|
name = name.gsub("#{Caprese.config.isolated_namespace}::", '') if Caprese.config.isolated_namespace
|
|
19
86
|
|
|
20
|
-
name
|
|
87
|
+
name
|
|
21
88
|
end
|
|
22
89
|
|
|
23
90
|
# Get versioned path (url)
|
|
@@ -45,6 +112,8 @@ module Caprese
|
|
|
45
112
|
end
|
|
46
113
|
|
|
47
114
|
# Get versioned underscore name (routes)
|
|
115
|
+
# @note The difference between namespaced and versioned module names is that if an isolated_namespace
|
|
116
|
+
# is present, version_module will return a module name without the isolated namespace
|
|
48
117
|
#
|
|
49
118
|
# @example
|
|
50
119
|
# version_name('orders') => 'api_v1_orders'
|
|
@@ -28,7 +28,7 @@ module Caprese
|
|
|
28
28
|
# @param [Hash] t the interpolation params to be passed into I18n.t
|
|
29
29
|
def error(field: nil, code: :invalid, t: {})
|
|
30
30
|
Error.new(
|
|
31
|
-
controller:
|
|
31
|
+
controller: unnamespace(params[:controller]),
|
|
32
32
|
action: params[:action],
|
|
33
33
|
field: field,
|
|
34
34
|
code: code,
|
|
@@ -169,7 +169,7 @@ module Caprese
|
|
|
169
169
|
# @return [Relation] the record scope of the queried controller
|
|
170
170
|
def queried_record_scope
|
|
171
171
|
unless @queried_record_scope
|
|
172
|
-
scope = record_scope(
|
|
172
|
+
scope = record_scope(unnamespace(params[:controller]).to_sym)
|
|
173
173
|
|
|
174
174
|
if scope.any? && query_params[:filter].try(:any?)
|
|
175
175
|
if (valid_filters = query_params[:filter].select { |k, _| scope.column_names.include? actual_field(k).to_s }).present?
|
|
@@ -58,11 +58,10 @@ module Caprese
|
|
|
58
58
|
links = { self: request.original_url }
|
|
59
59
|
|
|
60
60
|
if !target.respond_to?(:to_ary) &&
|
|
61
|
-
|
|
62
|
-
.respond_to?(related_url = version_name("#{params[:relationship].singularize}_url"))
|
|
61
|
+
url_helpers.respond_to?(related_url = version_name("#{params[:relationship].singularize}_url"))
|
|
63
62
|
|
|
64
63
|
links[:related] =
|
|
65
|
-
|
|
64
|
+
url_helpers.send(
|
|
66
65
|
related_url,
|
|
67
66
|
target.read_attribute(self.config.resource_primary_key),
|
|
68
67
|
host: caprese_default_url_options_host
|
|
@@ -117,10 +116,10 @@ module Caprese
|
|
|
117
116
|
links = { self: request.original_url }
|
|
118
117
|
|
|
119
118
|
# Add related link for this relationship if it exists
|
|
120
|
-
if
|
|
121
|
-
.respond_to?(related_path = "relationship_data_#{version_name(
|
|
119
|
+
if url_helpers
|
|
120
|
+
.respond_to?(related_path = "relationship_data_#{version_name(unnamespace(params[:controller]).singularize)}_url")
|
|
122
121
|
|
|
123
|
-
links[:related] =
|
|
122
|
+
links[:related] = url_helpers.send(
|
|
124
123
|
related_path,
|
|
125
124
|
params[:id],
|
|
126
125
|
params[:relationship],
|
|
@@ -66,7 +66,7 @@ module Caprese
|
|
|
66
66
|
# @return [Serializer] the serializer for the class
|
|
67
67
|
def get_serializer_for(klass)
|
|
68
68
|
begin
|
|
69
|
-
|
|
69
|
+
namespaced_module("#{klass.name}Serializer").constantize
|
|
70
70
|
rescue NameError => e
|
|
71
71
|
get_serializer_for(klass.superclass) if klass.superclass
|
|
72
72
|
end
|
|
@@ -31,7 +31,7 @@ module Caprese
|
|
|
31
31
|
#
|
|
32
32
|
# @return [Class] the record class for the current controller
|
|
33
33
|
def controller_record_class
|
|
34
|
-
record_class(
|
|
34
|
+
record_class(unnamespace(params[:controller]))
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
# Checks if a given type mismatches the controller type
|
data/lib/caprese/controller.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
require 'action_controller'
|
|
2
2
|
require 'active_support/configurable'
|
|
3
|
+
require 'caprese/concerns/url_helpers'
|
|
3
4
|
require 'caprese/concerns/versioning'
|
|
4
5
|
require 'caprese/controller/concerns/aliasing'
|
|
5
6
|
require 'caprese/controller/concerns/callbacks'
|
|
@@ -24,7 +25,9 @@ module Caprese
|
|
|
24
25
|
include Relationships
|
|
25
26
|
include Rendering
|
|
26
27
|
include Typing
|
|
28
|
+
include UrlHelpers
|
|
27
29
|
include Versioning
|
|
30
|
+
extend UrlHelpers
|
|
28
31
|
extend Versioning
|
|
29
32
|
end
|
|
30
33
|
end
|
|
@@ -13,7 +13,7 @@ module Caprese
|
|
|
13
13
|
# links = { self: '/api/v1/orders/asd27hß' }
|
|
14
14
|
link :self do
|
|
15
15
|
if(url = serializer.class.route_for(object))
|
|
16
|
-
|
|
16
|
+
serializer.url_helpers.send(
|
|
17
17
|
url,
|
|
18
18
|
object.read_attribute(Caprese.config.resource_primary_key),
|
|
19
19
|
host: serializer.class.send(:caprese_default_url_options_host)
|
|
@@ -84,9 +84,9 @@ module Caprese
|
|
|
84
84
|
|
|
85
85
|
Proc.new do |serializer|
|
|
86
86
|
link :self do
|
|
87
|
-
url = "relationship_definition_#{serializer.version_name("#{object.class.name.underscore}_url")}"
|
|
88
|
-
if
|
|
89
|
-
|
|
87
|
+
url = "relationship_definition_#{serializer.version_name("#{serializer.unnamespace(object.class.name).underscore}_url")}"
|
|
88
|
+
if serializer.url_helpers.respond_to? url
|
|
89
|
+
serializer.url_helpers.send(
|
|
90
90
|
url,
|
|
91
91
|
id: object.read_attribute(primary_key),
|
|
92
92
|
relationship: reflection_name,
|
|
@@ -96,9 +96,9 @@ module Caprese
|
|
|
96
96
|
end
|
|
97
97
|
|
|
98
98
|
link :related do
|
|
99
|
-
url = "relationship_data_#{serializer.version_name("#{object.class.name.underscore}_url")}"
|
|
100
|
-
if
|
|
101
|
-
|
|
99
|
+
url = "relationship_data_#{serializer.version_name("#{serializer.unnamespace(object.class.name).underscore}_url")}"
|
|
100
|
+
if serializer.url_helpers.respond_to? url
|
|
101
|
+
serializer.url_helpers.send(
|
|
102
102
|
url,
|
|
103
103
|
id: object.read_attribute(primary_key),
|
|
104
104
|
relationship: reflection_name,
|
|
@@ -54,7 +54,7 @@ module Caprese
|
|
|
54
54
|
# @return [Serializer] the serializer for the class
|
|
55
55
|
def get_serializer_for(klass)
|
|
56
56
|
begin
|
|
57
|
-
|
|
57
|
+
namespaced_module("#{klass.name}Serializer").constantize
|
|
58
58
|
rescue NameError => e
|
|
59
59
|
get_serializer_for(klass.superclass) if klass.superclass
|
|
60
60
|
end
|
|
@@ -68,7 +68,7 @@ module Caprese
|
|
|
68
68
|
def get_route_for(klass)
|
|
69
69
|
output = nil
|
|
70
70
|
while klass.superclass do
|
|
71
|
-
if
|
|
71
|
+
if url_helpers.respond_to?(url = version_name("#{unnamespace(klass.name).underscore}_url"))
|
|
72
72
|
output = url
|
|
73
73
|
break
|
|
74
74
|
end
|
data/lib/caprese/serializer.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
require 'active_model_serializers'
|
|
2
|
+
require 'caprese/concerns/url_helpers'
|
|
2
3
|
require 'caprese/concerns/versioning'
|
|
3
4
|
require 'caprese/serializer/concerns/aliasing'
|
|
4
5
|
require 'caprese/serializer/concerns/links'
|
|
@@ -7,7 +8,9 @@ require 'caprese/serializer/concerns/relationships'
|
|
|
7
8
|
|
|
8
9
|
module Caprese
|
|
9
10
|
class Serializer < ActiveModel::Serializer
|
|
11
|
+
extend UrlHelpers
|
|
10
12
|
extend Versioning
|
|
13
|
+
include UrlHelpers
|
|
11
14
|
include Versioning
|
|
12
15
|
include Aliasing
|
|
13
16
|
include Links
|
data/lib/caprese/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: caprese
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.3.
|
|
4
|
+
version: 0.3.25
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Nick Landgrebe
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: exe
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2017-05-
|
|
13
|
+
date: 2017-05-30 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: active_model_serializers
|
|
@@ -222,6 +222,7 @@ files:
|
|
|
222
222
|
- lib/caprese/adapter/json_api/pagination_links.rb
|
|
223
223
|
- lib/caprese/adapter/json_api/relationship.rb
|
|
224
224
|
- lib/caprese/adapter/json_api/resource_identifier.rb
|
|
225
|
+
- lib/caprese/concerns/url_helpers.rb
|
|
225
226
|
- lib/caprese/concerns/versioning.rb
|
|
226
227
|
- lib/caprese/controller.rb
|
|
227
228
|
- lib/caprese/controller/concerns/aliasing.rb
|