Skip to content
Closed
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
Prev Previous commit
Next Next commit
Added inflection for proper camelization/underscore/pluralization
  • Loading branch information
Eric Honkanen committed Sep 27, 2014
commit cf451bce8dd77a07abd33ed90ce71cd67fa48629
16 changes: 5 additions & 11 deletions rest_framework_ember/parsers.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
"""
Parsers
"""
import inflection

from rest_framework.parsers import JSONParser
from rest_framework_ember.utils import get_resource_name
from rest_emberdata import get_resource


class EmberJSONParser(JSONParser):
Expand All @@ -22,16 +19,13 @@ class EmberJSONParser(JSONParser):
So we can work with the grain on both Ember and RestFramework,
Do some tweaks to the payload so DRF gets what it expects.
"""

def parse(self, stream, media_type=None, parser_context=None):
"""
Parses the incoming bytestream as JSON and returns the resulting data
"""
result = super(EmberJSONParser, self).parse(
stream, media_type=None, parser_context=None)

resource_name = get_resource_name(parser_context.get('view', None))
data = result.get(resource_name)
data = super(EmberJSONParser, self).parse(stream, media_type=None,
parser_context=None)
data = data.get(get_resource(parser_context.get('view', None)))
for item in data:
data[inflection.underscore(item)] = data.pop(item)
return data
return data
11 changes: 5 additions & 6 deletions rest_framework_ember/renderers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,17 @@
import inflection

from rest_framework import renderers
from rest_framework_ember.utils import get_resource_name
from rest_emberdata.utils import get_resource


class JSONRenderer(renderers.JSONRenderer):
class EmberJSONRenderer(renderers.JSONRenderer):
"""
Render a JSON response the way Ember Data wants it. Such as:
{
"company": {
"resource": {
"id": 1,
"name": "nGen Works",
"slug": "ngen-works",
"date_created": "2014-03-13 16:33:37"
"field": "lorem ipsum",
"pub_date": "2014-03-13 16:33:37"
}
}
"""
Expand Down
21 changes: 8 additions & 13 deletions rest_framework_ember/utils.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
"""
Resource name utilities.
"""
import inflection

def get_resource_name(view):
"""
Return the name of a resource
"""

def get_resource(view):
"""Return the name of a resource."""
try:
# is the resource name set directly on the view?
# Check the view
resource_name = getattr(view, 'resource_name')
except AttributeError:
try:
# was it set in the serializer Meta class?
# Check the meta class
resource_name = getattr(view, 'serializer_class')\
.Meta.resource_name
except AttributeError:
# camelCase the name of the model if it hasn't been set
# in either of the other places
# Use the model
try:
name = resource_name = getattr(view, 'serializer_class')\
.Meta.model.__name__
Expand All @@ -26,7 +22,6 @@ def get_resource_name(view):
except AttributeError:
name = view.__class__.__name__

resource_name = name[:1].lower() + name[1:]
resource_name = inflection.camelize(name, False)

return resource_name