Skip to content
This repository was archived by the owner on Apr 20, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
e0de65e
Try to optionally use Graphiti
caseyprovost Nov 2, 2018
d584c9d
Update railtie.rb
caseyprovost Nov 2, 2018
615dfea
Update railtie.rb
caseyprovost Nov 2, 2018
57bf66a
Update railtie.rb
caseyprovost Nov 2, 2018
7708b82
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
9930576
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
9dafc61
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
bf0edd5
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
21c29a1
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
5d05d39
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
a42b009
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
b6305d1
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
b09365c
Try to optionally use Graphiti
caseyprovost Nov 2, 2018
f630152
Update railtie.rb
caseyprovost Nov 2, 2018
64b00f1
Update railtie.rb
caseyprovost Nov 2, 2018
9d7b072
Update railtie.rb
caseyprovost Nov 2, 2018
3c3eeed
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
d05f502
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
28a93c4
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
309e51a
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
d12d353
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
0c9b589
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
94b4437
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
45b50af
Update jsonapi_serializable_ext.rb
caseyprovost Nov 2, 2018
f40bf64
Merge branch 'master' of https://github.com/caseyprovost/graphiti
caseyprovost Nov 20, 2018
ee5f2b5
Merge remote-tracking branch 'upstream/master'
caseyprovost Dec 9, 2018
9cd6908
debugging
caseyprovost Dec 9, 2018
06948a9
working through bugs
caseyprovost Dec 10, 2018
fc0bebb
reverting changes
caseyprovost Dec 10, 2018
d2b87e3
working through compatibility
caseyprovost Dec 10, 2018
4a60843
maybe prepend is the direction we want to go
caseyprovost Dec 10, 2018
0750f11
add debug info
caseyprovost Dec 10, 2018
a167a76
pry debugging
caseyprovost Dec 10, 2018
64051af
work around JSONAPI-RAILS
caseyprovost Dec 10, 2018
37e7d1e
remove comments
caseyprovost Dec 10, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 41 additions & 17 deletions lib/graphiti/jsonapi_serializable_ext.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,13 @@ module JsonapiSerializableExt
module RendererOverrides
def _build(object, exposures, klass)
resource = object.instance_variable_get(:@__graphiti_resource)
klass = object.instance_variable_get(:@__graphiti_serializer)
klass.new(exposures.merge(object: object, resource: resource))

if resource.present?
klass = object.instance_variable_get(:@__graphiti_serializer)
klass.new(exposures.merge(object: object, resource: resource))
else
super(object, exposures, klass)
end
end
end

Expand All @@ -18,26 +23,45 @@ module RelationshipOverrides
def data
@_resources_block = proc do
resources = yield
if resources.nil?
nil
elsif resources.respond_to?(:to_ary)
Array(resources).map do |obj|
klass = obj.instance_variable_get(:@__graphiti_serializer)
resource = obj.instance_variable_get(:@__graphiti_resource)
klass.new(@_exposures.merge(object: obj, resource: resource))
end

if resources.nil? || Array(resources)[0].instance_variable_get(:@__graphiti_resource)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we do resources = Array(resources) here so we don't have to do it further down the line?

graphiti_data(resources)
else
klass = resources.instance_variable_get(:@__graphiti_serializer)
resource = resources.instance_variable_get(:@__graphiti_resource)
klass.new(@_exposures.merge(object: resources, resource: resource))
jsonapi_data(resources)
end
end
end

def graphiti_data(resources)
if resources.nil?
nil
elsif resources.respond_to?(:to_ary)
Array(resources).map do |obj|
klass = obj.instance_variable_get(:@__graphiti_serializer)
resource = obj.instance_variable_get(:@__graphiti_resource)
klass.new(@_exposures.merge(object: obj, resource: resource))
end
else
klass = resources.instance_variable_get(:@__graphiti_serializer)
resource = resources.instance_variable_get(:@__graphiti_resource)
klass.new(@_exposures.merge(object: resources, resource: resource))
end
end

def jsonapi_data(resources)
if resources.nil?
nil
elsif resources.respond_to?(:to_ary)
Array(resources).map do |obj|
@_class[obj.class.name.to_sym].new(@_exposures.merge(object: obj))
end
else
@_class[resources.class.name.to_sym].new(@_exposures.merge(object: resources))
end
end
end

JSONAPI::Serializable::Relationship
.send(:prepend, RelationshipOverrides)
JSONAPI::Serializable::Renderer
.send(:prepend, RendererOverrides)
JSONAPI::Serializable::Relationship.send(:prepend, RelationshipOverrides)
JSONAPI::Serializable::Renderer.send(:prepend, RendererOverrides)
end
end
18 changes: 9 additions & 9 deletions lib/graphiti/railtie.rb
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ class Railtie < ::Rails::Railtie
end
end

if Mime[:jsonapi].nil? # rails 4
Mime::Type.register('application/vnd.api+json', :jsonapi)
if Mime[:graphiti].nil? # rails 4
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it is OK to make this a configuration option, but not a default. The majority of our users do not run both gems at the same time, and I think :jsonapi makes a lot more sense for these users. Could we make this configurable?

Mime::Type.register('application/vnd.api+json', :graphiti)
end
register_parameter_parser
register_renderers
Expand All @@ -39,22 +39,22 @@ class Railtie < ::Rails::Railtie
# from jsonapi-rails
PARSER = lambda do |body|
data = JSON.parse(body)
data[:format] = :jsonapi
data[:format] = :graphiti
data.with_indifferent_access
end

def register_parameter_parser
if ::Rails::VERSION::MAJOR >= 5
ActionDispatch::Request.parameter_parsers[:jsonapi] = PARSER
ActionDispatch::Request.parameter_parsers[:graphiti] = PARSER
else
ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime[:jsonapi]] = PARSER
ActionDispatch::ParamsParser::DEFAULT_PARSERS[Mime[:graphiti]] = PARSER
end
end

def register_renderers
ActiveSupport.on_load(:action_controller) do
::ActionController::Renderers.add(:jsonapi) do |proxy, options|
self.content_type ||= Mime[:jsonapi]
::ActionController::Renderers.add(:graphiti) do |proxy, options|
self.content_type ||= Mime[:graphiti]

opts = {}
if respond_to?(:default_jsonapi_render_options)
Expand All @@ -70,8 +70,8 @@ def register_renderers
end

ActiveSupport.on_load(:action_controller) do
::ActionController::Renderers.add(:jsonapi_errors) do |proxy, options|
self.content_type ||= Mime[:jsonapi]
::ActionController::Renderers.add(:graphiti_errors) do |proxy, options|
self.content_type ||= Mime[:graphiti]

validation = GraphitiErrors::Serializers::Validation.new \
proxy.data, proxy.payload.relationships
Expand Down