Created
February 11, 2014 06:03
-
-
Save bmorton/8929946 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
originally from: | |
https://gist.github.com/jlecour/9dd8022c542c9d353ed7 | |
https://github.com/braintree/curator/issues/36 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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