Skip to content

Instantly share code, notes, and snippets.

@groyoh
Last active June 17, 2016 19:57
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save groyoh/1b3776178eef5691f8caacabb5329541 to your computer and use it in GitHub Desktop.
Save groyoh/1b3776178eef5691f8caacabb5329541 to your computer and use it in GitHub Desktop.
AMS deep include
begin
require 'bundler/inline'
rescue LoadError => e
$stderr.puts 'Bundler version 1.10 or later is required. Please update your Bundler'
raise e
end
gemfile(true) do
source 'https://rubygems.org'
gem 'active_model_serializers', '~> 0.10.1'
gem 'pry-byebug'
end
class SSet < ActiveModelSerializers::Model
attr_accessor :name
end
class Exercise < ActiveModelSerializers::Model
attr_accessor :sets
end
class Workout < ActiveModelSerializers::Model
attr_accessor :exercises
end
class Routine < ActiveModelSerializers::Model
attr_accessor :workouts
end
class History < ActiveModelSerializers::Model;
attr_accessor :routine
end
class Post < ActiveModelSerializers::Model;
attr_accessor :history
end
class SSetSerializer < ActiveModel::Serializer
attribute :name
end
class ExerciseSerializer < ActiveModel::Serializer
has_many :sets, serializer: SSetSerializer
end
class WorkoutSerializer < ActiveModel::Serializer
has_many :exercises, serializer: ExerciseSerializer
end
class RoutineSerializer < ActiveModel::Serializer
has_many :workouts, serializer: WorkoutSerializer
end
class HistorySerializer < ActiveModel::Serializer
has_one :routine, serializer: RoutineSerializer
end
class PostSerializer < ActiveModel::Serializer
has_one :history, serializer: HistorySerializer
end
require 'minitest/autorun'
# Ensure backward compatibility with Minitest 4
Minitest::Test = MiniTest::Unit::TestCase unless defined?(Minitest::Test)
class BugTest < Minitest::Test
def test_deep
s = SSet.new(name: "t1")
e = Exercise.new(sets: [s])
w = Workout.new(exercises: [e])
r = Routine.new(workouts: [w])
h = History.new(routine: r)
p = Post.new(history: h)
expected = {:history=>{:routine=>{:workouts=>[{:exercises=>[{:sets=>[{:name=>"t1"}]}]}]}}}
assert_equal(expected, ActiveModelSerializers::SerializableResource.new(p, include: "*.*.*.*.*.*").as_json)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment