Skip to content

Instantly share code, notes, and snippets.

@bmorton
Created February 11, 2014 06:03
Show Gist options
  • Save bmorton/8929946 to your computer and use it in GitHub Desktop.
Save bmorton/8929946 to your computer and use it in GitHub Desktop.
originally from:
https://gist.github.com/jlecour/9dd8022c542c9d353ed7
https://github.com/braintree/curator/issues/36
require 'ruby-prof'
require "virtus"
require "benchmark"
require 'active_support/core_ext/hash/indifferent_access'
require "rake"
require "pp"
class GeoLocation
include Virtus.value_object
attribute :lat, BigDecimal
attribute :lng, BigDecimal
end
class RawGeoLocation
attr_reader :lat, :lng
def initialize(lat: lat, lng: lng)
@lat = BigDecimal(lat, 12)
@lng = BigDecimal(lng, 12)
end
end
class CoercedWithVirtus
include Virtus.model
attribute :hotel_id, String
attribute :name, String
attribute :address_line1, String
attribute :address_line2, String
attribute :zip, String
attribute :city, String
attribute :country_code, String
attribute :lat_lng, GeoLocation
attribute :destinations, Array[Integer]
attribute :amenities, String
attribute :badges, Array
attribute :price_min, Float
attribute :review_count, Integer
attribute :review_score, Float
attribute :rating, String
attribute :cover_picture, String
attribute :pictures_count, Integer
attribute :nb_pictures, Integer
attribute :selling_partners, Array
attribute :chains, Array
attribute :kinds, Array
attribute :hh_score, Float
attribute :fb_likes, Integer
attribute :distance, Float
end
class CoercedWithoutVirtus
attr_accessor :hotel_id, :name, :address_line1, :address_line2,
:zip, :city, :country_code, :lat_lng, :destinations,
:amenities, :badges, :price_min, :review_count, :review_score,
:rating, :cover_picture, :pictures_count, :nb_pictures,
:selling_partners, :chains, :kinds, :hh_score, :fb_likes, :distance
def initialize(attr = {})
attr = ActiveSupport::HashWithIndifferentAccess.new(attr)
@hotel_id = attr[:hotel_id] # String
@name = attr[:name] # String
@address_line1 = attr[:address_line1] # String
@address_line2 = attr[:address_line2] # String
@zip = attr[:zip] # String
@city = attr[:city] # String
@country_code = attr[:country_code] # String
@lat_lng = RawGeoLocation.new(lat: attr[:lat_lng][:lat], lng: attr[:lat_lng][:lng]) # GeoLocation
@destinations = Array(attr[:destinations]).map{|d| Integer(d)} # Array[Integer]
@amenities = Array(attr[:amenities]) # String
@badges = Array(attr[:badges]) # Array
@price_min = Float(attr[:price_min]) if attr[:price_min] # Float
@review_count = Integer(attr[:review_count]) if attr[:review_count] # Integer
@review_score = Float(attr[:review_score]) if attr[:review_score] # Float
@rating = attr[:rating] # String
@cover_picture = attr[:cover_picture] # String
@pictures_count = Integer(attr[:pictures_count]) if attr[:pictures_count] # Integer
@nb_pictures = Integer(attr[:nb_pictures]) if attr[:nb_pictures] # Integer
@selling_partners = Array(attr[:selling_partners]) # Array
@chains = Array(attr[:chains]) # Array
@kinds = Array(attr[:kinds]) # Array
@hh_score = Float(attr[:hh_score]) if attr[:hh_score] # Float
@fb_likes = Integer(attr[:fb_likes]) if # Integer
@distance = Float(attr[:distance]) if attr[:distance] # Float
end
end
task :env do
puts Time.now, RUBY_DESCRIPTION
puts
end
task :init => :env do
@init_hash = {
:hotel_id => "123456",
:name => "name",
:address_line1 => "address_line1",
:address_line2 => "address_line2",
:zip => "zip",
:city => "city",
:country_code => "FR",
:lat_lng => {"lat" => "42.123456", "lng" => "5.123456"},
:destinations => %w(1 2 3 4 5 6),
:amenities => %w(toto tata titi),
:badges => %w(toto tata titi),
:price_min => "50",
:review_count => "195",
:review_score => "8.78",
:rating => "3",
:cover_picture => "cover_picture",
:pictures_count => "12",
:nb_pictures => "13",
:selling_partners => %w(foo bar baz),
:chains => ["Hilton", "Carlton"],
:kinds => %w(FOO BAR),
:hh_score => "115",
:fb_likes => "45678",
:distance => "1.456",
}
end
task :verify => :init do
with = CoercedWithVirtus.new(@init_hash)
without = CoercedWithoutVirtus.new(@init_hash)
@init_hash.each do |k, v|
if k == :lat_lng
raise "#{k} different : #{with.send(k).lat} <> #{without.send(k).lat}" unless with.send(k).lat == without.send(k).lat
else
raise "#{k} different : #{with.send(k)} <> #{without.send(k)}" unless with.send(k) == without.send(k)
end
end
end
task :benchmark_virtus => :init do
n = 1
RubyProf.start
n.times { CoercedWithVirtus.new(@init_hash) }
result = RubyProf.stop
# Print a flat profile to text
printer = RubyProf::FlatPrinterWithLineNumbers.new(result)
printer.print(STDOUT)
# Benchmark.bmbm do |x|
# x.report("coerced_with_virtus") { n.times { CoercedWithVirtus.new(@init_hash) } }
# x.report("coerced_without_virtus") { n.times { CoercedWithoutVirtus.new(@init_hash) } }
# end
end
Rake::Task['verify'].invoke
Rake::Task['benchmark_virtus'].invoke
2014-02-10 21:56:26 -0800
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0]
Rehearsal ----------------------------------------------------------
coerced_with_virtus 1.050000 0.010000 1.060000 ( 1.055353)
coerced_without_virtus 0.100000 0.000000 0.100000 ( 0.091828)
------------------------------------------------- total: 1.160000sec
user system total real
coerced_with_virtus 1.040000 0.000000 1.040000 ( 1.038389)
coerced_without_virtus 0.080000 0.000000 0.080000 ( 0.080496)
letterbomb:~$ ruby virtus.rb
2014-02-10 21:31:07 -0800
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0]
Thread ID: 70346216758200
Fiber ID: 70346222471960
Total: 0.005530
Sort by: self_time
%self total self wait child calls name
17.25 0.002 0.001 0.000 0.001 76 *Hash#hash
called from:
16.67 0.001 0.001 0.000 0.000 1605 Kernel#hash
called from: Coercible::Coercer#[] (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer.rb:101)
5.03 0.000 0.000 0.000 0.000 10 Coercible::Coercer::String#to_integer
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/string.rb:156
called from:
3.07 0.002 0.000 0.000 0.002 66 *Array#hash
called from:
2.64 0.001 0.000 0.000 0.001 41 Virtus::Attribute::Coercer#call
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/coercer.rb:31
called from: Virtus::Attribute#coerce (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute.rb:102)
2.59 0.001 0.000 0.000 0.001 11 Array#each
called from: Virtus::AttributeSet#each (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:44)
2.51 0.000 0.000 0.000 0.000 67 Array#map
called from: Virtus::InstanceMethods#allowed_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:205)
2.26 0.003 0.000 0.000 0.003 2 *Hash#each
called from: Virtus::AttributeSet#set (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:169)
2.06 0.000 0.000 0.000 0.000 68 Kernel#method
called from: Virtus::InstanceMethods#set_default_attributes (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:183)
2.04 0.000 0.000 0.000 0.000 66 Method#to_proc
called from:
1.77 0.000 0.000 0.000 0.000 41 Coercible::Coercer#[]
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer.rb:101
called from: Virtus::Attribute::Coercer#call (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/coercer.rb:31)
1.59 0.000 0.000 0.000 0.000 109 Symbol#to_s
called from: Coercible::Coercer::Object#raise_unsupported_coercion (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:149) Coercible::Coercer::Object#method_missing (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:163)
1.57 0.000 0.000 0.000 0.000 139 Kernel#class
called from: Virtus::InstanceMethods::Constructor#initialize (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:16) Virtus::ClassInclusions::Methods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/class_inclusions.rb:31) Virtus::Attribute::Coercer#call (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/coercer.rb:31) Set#merge (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:351) Virtus::ClassInclusions::Methods#attribute_set (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/class_inclusions.rb:42) Coercible::Coercer::Object#raise_unsupported_coercion (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:149)
1.39 0.003 0.000 0.000 0.003 59 *Array#uniq
called from: Virtus::AttributeSet#each (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:44)
1.37 0.000 0.000 0.000 0.000 72 Regexp#===
called from:
1.34 0.000 0.000 0.000 0.000 26 Virtus::AttributeSet#skip_default?
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:211
called from:
1.30 0.002 0.000 0.000 0.002 26 *Virtus::Attribute::Coercible#set
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/coercible.rb:13
called from: Virtus::AttributeSet#set (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:169)
1.30 0.001 0.000 0.000 0.001 56 *Kernel#public_send
called from: Virtus::Attribute::Coercer#call (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/coercer.rb:31) Coercible::Coercer::Object#coerce_with_method (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:180) Coercible::Coercer::String#to_numeric (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/string.rb:230)
1.18 0.002 0.000 0.000 0.002 42 *Virtus::Attribute#coerce
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute.rb:102
called from: Virtus::Attribute::Coercible#set (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/coercible.rb:13) Virtus::Attribute::Collection#coerce (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/collection.rb:73)
1.14 0.000 0.000 0.000 0.000 24 Virtus::ClassInclusions::Methods#allowed_writer_methods
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/class_inclusions.rb:31
called from:
0.94 0.000 0.000 0.000 0.000 26 Virtus::Attribute::Accessor#set
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/accessor.rb:56
called from: Virtus::Attribute::Coercible#set (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/coercible.rb:13)
0.87 0.000 0.000 0.000 0.000 26 Virtus::Attribute#lazy?
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute.rb:158
called from: Virtus::AttributeSet#skip_default? (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:211)
0.87 0.000 0.000 0.000 0.000 16 String#=~
called from: Coercible::Coercer::String#to_numeric (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/string.rb:230) Coercible::Coercer::Object#method_missing (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:163)
0.83 0.000 0.000 0.000 0.000 1 Kernel#public_methods
called from: Virtus::InstanceMethods#allowed_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:205)
0.71 0.000 0.000 0.000 0.000 10 Coercible::Coercer::Object#method_missing
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:163
called from:
0.67 0.000 0.000 0.000 0.000 66 Array#push
called from:
0.65 0.000 0.000 0.000 0.000 26 Kernel#instance_variable_set
called from: Virtus::Attribute::Accessor#set (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/accessor.rb:56)
0.65 0.000 0.000 0.000 0.000 26 Method#call
called from:
0.63 0.000 0.000 0.000 0.000 26 Set#include?
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:204
called from:
0.58 0.000 0.000 0.000 0.000 25 Virtus::Extensions::AllowedWriterMethods#allowed_writer_methods
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/extensions.rb:100
called from: Virtus::ClassInclusions::Methods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/class_inclusions.rb:31) Virtus::ValueObject::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/value_object.rb:89)
0.56 0.000 0.000 0.000 0.000 26 Hash#include?
called from: Set#include? (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:204)
0.51 0.001 0.000 0.000 0.001 5 Virtus::Attribute::Collection#coerce
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/collection.rb:73
called from: Virtus::Attribute::Coercible#set (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/coercible.rb:13)
0.49 0.000 0.000 0.000 0.000 10 Coercible::Coercer::Object#to_string
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:101
called from:
0.45 0.006 0.000 0.000 0.006 1 Global#[No method]
/Users/bmorton/virtus.rb:143
called from:
0.42 0.000 0.000 0.000 0.000 6 Coercible::Coercer::String#to_numeric
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/string.rb:230
called from: Coercible::Coercer::String#to_decimal (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/string.rb:194) Coercible::Coercer::String#to_float (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/string.rb:178)
0.40 0.000 0.000 0.000 0.000 10 Coercible::Coercer::Object#coerce_with_method
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:180
called from: Coercible::Coercer::Object#to_string (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:101)
0.34 0.000 0.000 0.000 0.000 26 Kernel#instance_variable_defined?
called from: Virtus::AttributeSet#skip_default? (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:211)
0.33 0.000 0.000 0.000 0.000 10 Regexp#to_s
called from: Coercible::Coercer::String#to_integer (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/string.rb:156)
0.27 0.000 0.000 0.000 0.000 7 Set#add
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:269
called from:
0.27 0.003 0.000 0.000 0.003 3 Virtus::AttributeSet#each
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:44
called from: Virtus::AttributeSet#set_defaults (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:183)
0.25 0.000 0.000 0.000 0.000 27 Kernel#kind_of?
called from: Virtus::Attribute::EmbeddedValue::FromOpenStruct#call (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/embedded_value.rb:33) Virtus::Attribute#lazy? (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute.rb:158)
0.22 0.000 0.000 0.000 0.000 3 Set#do_with_enum
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:92
called from: Set#merge (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:351) Set#subtract (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:363)
0.20 0.000 0.000 0.000 0.000 2 Set#merge
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:351
called from: Set#initialize (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:80) Set#| (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:370)
0.20 0.000 0.000 0.000 0.000 13 Kernel#respond_to?
called from: Coercible::Coercer::Object#coerce_with_method (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:180) Set#do_with_enum (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:92)
0.20 0.000 0.000 0.000 0.000 10 String#to_i
called from: Coercible::Coercer::String#to_integer (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/string.rb:156)
0.20 0.000 0.000 0.000 0.000 1 Hash#each_key
called from: Set#each (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:261)
0.20 0.000 0.000 0.000 0.000 3 Virtus::ClassInclusions::Methods#attribute_set
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/class_inclusions.rb:42
called from: Virtus::ValueObject::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/value_object.rb:89) Virtus::InstanceMethods#set_default_attributes (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:183)
0.18 0.000 0.000 0.000 0.000 9 String#to_str
called from:
0.16 0.000 0.000 0.000 0.000 1 Coercible::Coercer::Object#raise_unsupported_coercion
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:149
called from: Coercible::Coercer::Object#coerce_with_method (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:180)
0.16 0.000 0.000 0.000 0.000 5 Enumerable#each_with_object
called from: Virtus::Attribute::Collection#coerce (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/collection.rb:73)
0.16 0.000 0.000 0.000 0.000 10 Proc#hash
called from:
0.14 0.000 0.000 0.000 0.000 5 Virtus::ClassMethods#attribute_set
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/class_methods.rb:38
called from: Virtus::InstanceMethods::Constructor#initialize (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:16) Virtus::ClassInclusions::Methods#attribute_set (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/class_inclusions.rb:42)
0.14 0.000 0.000 0.000 0.000 5 Coercible::Coercer::Object#to_array
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:61
called from:
0.14 0.000 0.000 0.000 0.000 5 Hash#delete
called from: Set#delete (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:287)
0.14 0.000 0.000 0.000 0.000 5 Set#delete
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:287
called from:
0.14 0.005 0.000 0.000 0.005 2 *Virtus::InstanceMethods::Constructor#initialize
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:16
called from:
0.14 0.003 0.000 0.000 0.003 2 Virtus::InstanceMethods#set_default_attributes
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:183
called from: Virtus::InstanceMethods::Constructor#initialize (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:16)
0.14 0.001 0.000 0.000 0.001 2 Virtus::ValueObject::AllowedWriterMethods#allowed_writer_methods
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/value_object.rb:89
called from:
0.13 0.000 0.000 0.000 0.000 5 Kernel#Array
called from: Coercible::Coercer::Object#to_array (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:61)
0.13 0.003 0.000 0.000 0.003 2 Virtus::AttributeSet#set_defaults
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:183
called from: Virtus::InstanceMethods#set_default_attributes (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:183)
0.13 0.000 0.000 0.000 0.000 4 Coercible::Coercer::String#to_float
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/string.rb:178
called from:
0.13 0.006 0.000 0.000 0.005 1 Integer#times
called from: Global#[No method] (/Users/bmorton/virtus.rb:143)
0.13 0.000 0.000 0.000 0.000 3 Enumerable#each_entry
called from: Set#do_with_enum (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:92)
0.13 0.000 0.000 0.000 0.000 3 Kernel#instance_of?
called from: Set#merge (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:351) Set#to_set (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:163)
0.13 0.000 0.000 0.000 0.000 3 Kernel#block_given?
called from: Virtus::AttributeSet#each (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:44)
0.11 0.000 0.000 0.000 0.000 1 Set#initialize
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:80
called from:
0.11 0.000 0.000 0.000 0.000 4 Kernel#freeze
called from: Set#freeze (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:108)
0.11 0.000 0.000 0.000 0.000 10 Kernel#__method__
called from: Coercible::Coercer::Object#to_string (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:101)
0.09 0.000 0.000 0.000 0.000 2 Set#freeze
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:108
called from: Virtus::Extensions::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/extensions.rb:100) Virtus::ValueObject::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/value_object.rb:89)
0.09 0.000 0.000 0.000 0.000 10 Array#first
called from: Coercible::Coercer::Object#method_missing (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:163)
0.09 0.000 0.000 0.000 0.000 2 Coercible::Coercer::String#to_decimal
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/string.rb:194
called from:
0.09 0.001 0.000 0.000 0.001 1 Virtus::Attribute::EmbeddedValue::FromOpenStruct#call
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/embedded_value.rb:33
called from: Virtus::Attribute#coerce (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute.rb:102)
0.09 0.000 0.000 0.000 0.000 1 <Class::Exception>#exception
called from:
0.09 0.000 0.000 0.000 0.000 2 Set#initialize_copy
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:104
called from:
0.09 0.000 0.000 0.000 0.000 3 String#inspect
called from:
0.09 0.000 0.000 0.000 0.000 1 Virtus::InstanceMethods#allowed_methods
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:205
called from: Virtus::Extensions::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/extensions.rb:100)
0.09 0.000 0.000 0.000 0.000 2 Kernel#instance_variable_get
called from: Set#initialize_copy (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:104)
0.09 0.000 0.000 0.000 0.000 5 Array#initialize
called from:
0.09 0.000 0.000 0.000 0.000 1 Array#inspect
called from: Coercible::Coercer::Object#raise_unsupported_coercion (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:149)
0.09 0.000 0.000 0.000 0.000 4 *Kernel#dup
called from: Set#- (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:378) Set#initialize_copy (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:104) Set#| (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:370)
0.09 0.000 0.000 0.000 0.000 2 String#to_d
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/bigdecimal/util.rb:59
called from:
0.07 0.000 0.000 0.000 0.000 4 String#to_f
called from:
0.07 0.000 0.000 0.000 0.000 1 Set#-
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:378
called from: Virtus::Extensions::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/extensions.rb:100)
0.07 0.003 0.000 0.000 0.003 28 *Virtus::AttributeSet#set
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:169
called from: Virtus::InstanceMethods::Constructor#initialize (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:16)
0.07 0.000 0.000 0.000 0.000 1 Set#subtract
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:363
called from: Set#- (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:378)
0.07 0.000 0.000 0.000 0.000 1 Set#to_set
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:163
called from: Virtus::ValueObject::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/value_object.rb:89)
0.07 0.000 0.000 0.000 0.000 1 Set#each
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:261
called from:
0.07 0.000 0.000 0.000 0.000 2 Virtus::AttributeSet#coerce
/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:195
called from: Virtus::AttributeSet#set (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:169)
0.07 0.000 0.000 0.000 0.000 2 Kernel#BigDecimal
called from: String#to_d (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/bigdecimal/util.rb:59)
0.07 0.000 0.000 0.000 0.000 1 Kernel#raise
called from: Coercible::Coercer::Object#raise_unsupported_coercion (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:149)
0.07 0.000 0.000 0.000 0.000 1 Set#|
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:370
called from: Virtus::ValueObject::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/value_object.rb:89)
0.07 0.000 0.000 0.000 0.000 4 *Kernel#initialize_dup
called from:
0.05 0.005 0.000 0.000 0.005 9 *Class#new
called from: Virtus::Attribute::EmbeddedValue::FromOpenStruct#call (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/embedded_value.rb:33) Enumerable#to_set (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:670) Set#initialize (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:80) Virtus::Attribute::Collection#coerce (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/collection.rb:73)
0.05 0.000 0.000 0.000 0.000 1 Enumerable#to_set
/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:670
called from: Virtus::Extensions::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/extensions.rb:100)
0.05 0.000 0.000 0.000 0.000 2 Hash#initialize_copy
called from:
0.05 0.000 0.000 0.000 0.000 3 Hash#values
called from: Virtus::AttributeSet#each (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:44)
0.04 0.000 0.000 0.000 0.000 2 <Class::Hash>#try_convert
called from: Virtus::AttributeSet#coerce (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute_set.rb:195)
0.04 0.000 0.000 0.000 0.000 1 Module#to_s
called from: Coercible::Coercer::Object#raise_unsupported_coercion (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:149)
0.04 0.000 0.000 0.000 0.000 1 Exception#initialize
called from:
0.04 0.000 0.000 0.000 0.000 1 Enumerable#grep
called from: Virtus::Extensions::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/extensions.rb:100)
0.04 0.000 0.000 0.000 0.000 1 Enumerable#map
called from: Virtus::ValueObject::AllowedWriterMethods#allowed_writer_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/value_object.rb:89)
0.04 0.000 0.000 0.000 0.000 1 Symbol#to_proc
called from: Virtus::InstanceMethods#allowed_methods (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/instance_methods.rb:205)
0.04 0.000 0.000 0.000 0.000 1 Kernel#respond_to_missing?
called from:
0.02 0.000 0.000 0.000 0.000 1 Hash#initialize
called from:
0.02 0.000 0.000 0.000 0.000 1 Module#===
called from: Virtus::Attribute::Coercer#call (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/coercer.rb:31)
0.02 0.000 0.000 0.000 0.000 1 Exception#backtrace
called from: Coercible::Coercer::Object#raise_unsupported_coercion (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/coercible-1.0.0/lib/coercible/coercer/object.rb:149)
0.02 0.000 0.000 0.000 0.000 2 Kernel#nil?
called from: Virtus::Attribute::EmbeddedValue::FromOpenStruct#call (/Users/bmorton/.rvm/gems/ruby-2.1.0/gems/virtus-1.0.1/lib/virtus/attribute/embedded_value.rb:33) Set#initialize (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:80)
0.02 0.000 0.000 0.000 0.000 1 NilClass#nil?
called from: Set#to_set (/Users/bmorton/.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/set.rb:163)
* indicates recursively called methods
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment