1
0
Fork 0
mirror of https://github.com/awesome-print/awesome_print synced 2023-03-27 23:22:34 -04:00

Merge branch 'mongoid' of git://github.com/gudleik/awesome_print into gudleik/mongoid

This commit is contained in:
Mike Dvorkin 2011-11-08 21:48:03 -08:00
commit 02ea0da95c
3 changed files with 128 additions and 1 deletions

View file

@ -17,9 +17,10 @@ unless defined?(AwesomePrint)
require File.dirname(__FILE__) + "/awesome_print/core_ext/logger" if defined?(Logger)
require File.dirname(__FILE__) + "/awesome_print/ext/action_view" if defined?(ActionView)
# Load the following under normal circumstatnces as well as in Rails
# Load the following under normal circumstances as well as in Rails
# console when required from ~/.irbrc.
require File.dirname(__FILE__) + "/awesome_print/ext/active_record" if defined?(ActiveRecord) || (defined?(IRB) && ENV['RAILS_ENV'])
require File.dirname(__FILE__) + "/awesome_print/ext/active_support" if defined?(ActiveSupport) || (defined?(IRB) && ENV['RAILS_ENV'])
require File.dirname(__FILE__) + "/awesome_print/ext/mongo_mapper" if defined?(MongoMapper)
require File.dirname(__FILE__) + "/awesome_print/ext/mongoid" if defined?(Mongoid)
end

View file

@ -0,0 +1,34 @@
module AwesomePrint
module Mongoid
def self.included(base)
base.send :alias_method, :cast_without_mongoid, :cast
base.send :alias_method, :cast, :cast_with_mongoid
end
# Add Mongoid class names to the dispatcher pipeline.
#------------------------------------------------------------------------------
def cast_with_mongoid(object, type)
cast = cast_without_mongoid(object, type)
if defined?(::Mongoid::Document) && object.is_a?(Class) && object.ancestors.include?(::Mongoid::Document)
cast = :mongoid_class
end
cast
end
# Format Mongoid class object.
#------------------------------------------------------------------------------
def awesome_mongoid_class(object)
return object.inspect if !defined?(::ActiveSupport::OrderedHash) || !object.respond_to?(:fields)
data = object.fields.inject(::ActiveSupport::OrderedHash.new) do |hash, c|
hash[c[1].name] = (c[1].type || "undefined").to_s.underscore.intern
# hash[c[1].name] = (c[1].type || "undefined").to_s.underscore.intern rescue c[1].type
hash
end
"class #{object} < #{object.superclass} " << awesome_hash(data)
end
end
end
AwesomePrint::Formatter.send(:include, AwesomePrint::Mongoid)

92
spec/ext/mongoid_spec.rb Normal file
View file

@ -0,0 +1,92 @@
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
begin
require "mongoid"
require "awesome_print/ext/mongoid"
describe "AwesomePrint/Mongoid" do
before :all do
class MongoUser
include Mongoid::Document
field :first_name, :type => String
field :last_name, :type => String
end
end
before do
@ap = AwesomePrint::Inspector.new :plain => true, :sort_keys => true
end
it "should print class instance" do
user = MongoUser.new :first_name => "Al", :last_name => "Capone"
out = @ap.send :awesome, user
str = <<-EOS.strip
#<MongoUser:0x01234567
attr_accessor :attributes = {
"_id" => #<BSON::ObjectId:0x01234567
attr_accessor :data = [
[ 0] 42,
[ 1] 42,
[ 2] 42,
[ 3] 42,
[ 4] 42,
[ 5] 42,
[ 6] 42,
[ 7] 42,
[ 8] 42,
[ 9] 42,
[10] 42,
[11] 42
]
>,
"first_name" => "Al",
"last_name" => "Capone"
},
attr_accessor :new_record = true,
attr_reader :changed_attributes = {
"_id" => nil,
"first_name" => nil,
"last_name" => nil
},
attr_reader :pending_nested = {},
attr_reader :pending_relations = {}
>
EOS
out.gsub!(/0x([a-f\d]+)/, "0x01234567")
out.gsub!(/(\[\s?\d+\])\s\d+/, "\\1 42")
out.should eq str
end
it "should print the class" do
@ap.send(:awesome, MongoUser).should == <<-EOS.strip
class MongoUser < Object {
"_id" => :"bson/object_id",
"_type" => :string,
"first_name" => :string,
"last_name" => :string
}
EOS
end
it "should print the class when type is undefined" do
class Chamelion
include Mongoid::Document
field :last_attribute
end
@ap.send(:awesome, Chamelion).should == <<-EOS.strip
class Chamelion < Object {
"_id" => :"bson/object_id",
"_type" => :string,
"last_attribute" => :"mongoid/fields/serializable/object"
}
EOS
end
end
rescue LoadError => error
puts "Missing mongoid gem, skipping mongoid specs"
puts "Skipping mongoid specs: #{error}"
end