frederick_api 0.3.0 → 0.3.1
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/lib/frederick_api/v2/helpers/has_many.rb +34 -0
- data/lib/frederick_api/v2/helpers/query_builder.rb +18 -0
- data/lib/frederick_api/v2/helpers/requestor.rb +16 -0
- data/lib/frederick_api/v2/resource.rb +2 -0
- data/lib/frederick_api/version.rb +1 -1
- data/lib/frederick_api.rb +3 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ba4333ebf8f9acb3b07440cceb399011c16d04e
|
4
|
+
data.tar.gz: 626edbc12159446fa20ebb8cae9a7e9e70492ae3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5176eee73f6cc0d5cc54169eb4cf7c431b249652c8b0b6f6fa0f0508b52a8b2a4321ff373a8084958245c3f8c5ed040a18a6ad445422b2aa68231bc2595e54c
|
7
|
+
data.tar.gz: 3988226a53e5b7696fe0aaed9c90feabc6b1cf535a40f86a8c2568c7c13df705c91d971f611b3fe35328dba925ffeb46b4ca254247d637708a1fa0c2b2c36367
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module FrederickAPI
|
4
|
+
module V2
|
5
|
+
module Helpers
|
6
|
+
# HasMany association that supports returning a query builder instead of a simple array
|
7
|
+
# Allows querying of the association such as `contact_list.contacts.select('properties.external_id').all`
|
8
|
+
module HasMany
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
# Class methods added to resource
|
12
|
+
module ClassMethods
|
13
|
+
def has_many(attr_name, options = {})
|
14
|
+
self.associations = self.associations + [HasMany::Association.new(attr_name, self, options)]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Class used to request data for has_many association
|
19
|
+
class Association < JsonApiClient::Associations::BaseAssociation
|
20
|
+
def query_builder(url)
|
21
|
+
association_class.query_builder.new(
|
22
|
+
association_class,
|
23
|
+
association_class.requestor_class.new(association_class, url)
|
24
|
+
)
|
25
|
+
end
|
26
|
+
|
27
|
+
def data(url)
|
28
|
+
query_builder(url)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -7,6 +7,13 @@ module FrederickAPI
|
|
7
7
|
module Helpers
|
8
8
|
# Used to convert nested params to dot notation for Frederick API
|
9
9
|
class QueryBuilder < JsonApiClient::Query::Builder
|
10
|
+
attr_reader :requestor
|
11
|
+
|
12
|
+
def initialize(klass, requestor = nil)
|
13
|
+
super(klass)
|
14
|
+
@requestor = requestor || klass.requestor
|
15
|
+
end
|
16
|
+
|
10
17
|
def params
|
11
18
|
to_dot_params(
|
12
19
|
filter_params.merge(pagination_params.merge(includes_params).merge(select_params))
|
@@ -16,6 +23,17 @@ module FrederickAPI
|
|
16
23
|
.merge(additional_params)
|
17
24
|
end
|
18
25
|
|
26
|
+
def find(args = {})
|
27
|
+
case args
|
28
|
+
when Hash
|
29
|
+
where(args)
|
30
|
+
else
|
31
|
+
@primary_key = args
|
32
|
+
end
|
33
|
+
|
34
|
+
requestor.get(params)
|
35
|
+
end
|
36
|
+
|
19
37
|
def filter_params
|
20
38
|
super_filter_params = super
|
21
39
|
|
@@ -5,6 +5,22 @@ module FrederickAPI
|
|
5
5
|
module Helpers
|
6
6
|
# Requestor for v2 client to use built on top of JsonApiClient::Query::Requestor
|
7
7
|
class Requestor < JsonApiClient::Query::Requestor
|
8
|
+
attr_reader :path
|
9
|
+
|
10
|
+
def initialize(klass, path = nil)
|
11
|
+
@klass = klass
|
12
|
+
@path = path
|
13
|
+
end
|
14
|
+
|
15
|
+
def resource_path(parameters)
|
16
|
+
base_path = path || klass.path(parameters)
|
17
|
+
if (resource_id = parameters[klass.primary_key])
|
18
|
+
File.join(base_path, encode_part(resource_id))
|
19
|
+
else
|
20
|
+
base_path
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
8
24
|
# Retry once on unhandled server errors
|
9
25
|
def request(type, path, params)
|
10
26
|
super
|
@@ -5,6 +5,8 @@ module FrederickAPI
|
|
5
5
|
# Class from which Frederick V2 Resources inherit
|
6
6
|
# Inherits functionality from JsonApiClient::Resource
|
7
7
|
class Resource < JsonApiClient::Resource
|
8
|
+
include FrederickAPI::V2::Helpers::HasMany
|
9
|
+
|
8
10
|
self.query_builder = FrederickAPI::V2::Helpers::QueryBuilder
|
9
11
|
self.paginator = FrederickAPI::V2::Helpers::Paginator
|
10
12
|
self.requestor_class = FrederickAPI::V2::Helpers::Requestor
|
data/lib/frederick_api.rb
CHANGED
@@ -2,10 +2,12 @@
|
|
2
2
|
|
3
3
|
# Third-party libs
|
4
4
|
require 'json_api_client'
|
5
|
-
require 'active_support/core_ext/class/attribute
|
5
|
+
require 'active_support/core_ext/class/attribute'
|
6
|
+
require 'active_support/concern'
|
6
7
|
|
7
8
|
# FrederickAPI libs
|
8
9
|
require 'frederick_api/configuration'
|
10
|
+
require 'frederick_api/v2/helpers/has_many'
|
9
11
|
require 'frederick_api/v2/helpers/paginator'
|
10
12
|
require 'frederick_api/v2/helpers/query_builder'
|
11
13
|
require 'frederick_api/v2/helpers/requestor'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: frederick_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Frederick Engineering
|
@@ -41,6 +41,7 @@ files:
|
|
41
41
|
- lib/frederick_api/v2/contact_list.rb
|
42
42
|
- lib/frederick_api/v2/contact_property.rb
|
43
43
|
- lib/frederick_api/v2/contact_type.rb
|
44
|
+
- lib/frederick_api/v2/helpers/has_many.rb
|
44
45
|
- lib/frederick_api/v2/helpers/paginator.rb
|
45
46
|
- lib/frederick_api/v2/helpers/query_builder.rb
|
46
47
|
- lib/frederick_api/v2/helpers/requestor.rb
|