mirror of
https://github.com/thoughtbot/factory_bot.git
synced 2022-11-09 11:43:51 -05:00
parent
58e75bcb3f
commit
450dbb2c5c
7 changed files with 25 additions and 60 deletions
17
Gemfile.lock
17
Gemfile.lock
|
@ -2,6 +2,7 @@ PATH
|
|||
remote: .
|
||||
specs:
|
||||
factory_girl (2.1.1)
|
||||
activesupport
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
|
@ -28,31 +29,31 @@ GEM
|
|||
cucumber (>= 1.0.2)
|
||||
rdiscount (>= 1.6.8)
|
||||
rspec (>= 2.6.0)
|
||||
bcat (0.6.1)
|
||||
bcat (0.6.2)
|
||||
rack (~> 1.0)
|
||||
bcrypt-ruby (3.0.0)
|
||||
bcrypt-ruby (3.0.1)
|
||||
bluecloth (2.1.0)
|
||||
bourne (1.0)
|
||||
mocha (= 0.9.8)
|
||||
builder (3.0.0)
|
||||
childprocess (0.2.2)
|
||||
ffi (~> 1.0.6)
|
||||
cucumber (1.0.2)
|
||||
cucumber (1.0.6)
|
||||
builder (>= 2.1.2)
|
||||
diff-lcs (>= 1.1.2)
|
||||
gherkin (~> 2.4.5)
|
||||
gherkin (~> 2.4.18)
|
||||
json (>= 1.4.6)
|
||||
term-ansicolor (>= 1.0.5)
|
||||
term-ansicolor (>= 1.0.6)
|
||||
diff-lcs (1.1.3)
|
||||
ffi (1.0.9)
|
||||
gherkin (2.4.16)
|
||||
gherkin (2.4.21)
|
||||
json (>= 1.4.6)
|
||||
i18n (0.6.0)
|
||||
json (1.5.4)
|
||||
json (1.6.1)
|
||||
mocha (0.9.8)
|
||||
rake
|
||||
multi_json (1.0.3)
|
||||
rack (1.3.2)
|
||||
rack (1.3.3)
|
||||
rake (0.9.2)
|
||||
rcov (0.9.10)
|
||||
rdiscount (1.6.8)
|
||||
|
|
|
@ -20,6 +20,8 @@ Gem::Specification.new do |s|
|
|||
s.email = %q{jferris@thoughtbot.com}
|
||||
s.homepage = "https://github.com/thoughtbot/factory_girl"
|
||||
|
||||
s.add_dependency("activesupport")
|
||||
|
||||
s.add_development_dependency("rspec", "~> 2.0")
|
||||
s.add_development_dependency("cucumber", "~> 1.0.0")
|
||||
s.add_development_dependency("timecop")
|
||||
|
|
|
@ -2,6 +2,7 @@ PATH
|
|||
remote: /Users/joshuaclayton/dev/gems/factory_girl
|
||||
specs:
|
||||
factory_girl (2.1.1)
|
||||
activesupport
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
|
|
|
@ -2,6 +2,7 @@ PATH
|
|||
remote: /Users/joshuaclayton/dev/gems/factory_girl
|
||||
specs:
|
||||
factory_girl (2.1.1)
|
||||
activesupport
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
|
|
|
@ -2,6 +2,7 @@ PATH
|
|||
remote: /Users/joshuaclayton/dev/gems/factory_girl
|
||||
specs:
|
||||
factory_girl (2.1.1)
|
||||
activesupport
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
|
|
|
@ -2,6 +2,7 @@ PATH
|
|||
remote: /Users/joshuaclayton/dev/gems/factory_girl
|
||||
specs:
|
||||
factory_girl (2.1.1)
|
||||
activesupport
|
||||
|
||||
GEM
|
||||
remote: http://rubygems.org/
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
require "active_support/core_ext/hash/keys"
|
||||
require "active_support/inflector"
|
||||
|
||||
module FactoryGirl
|
||||
# Raised when a factory is defined that attempts to instantiate itself.
|
||||
class AssociationDefinitionError < RuntimeError
|
||||
|
@ -24,7 +27,7 @@ module FactoryGirl
|
|||
end
|
||||
|
||||
def build_class #:nodoc:
|
||||
@build_class ||= class_for(class_name)
|
||||
@build_class ||= class_name.to_s.camelize.constantize
|
||||
end
|
||||
|
||||
def default_strategy #:nodoc:
|
||||
|
@ -33,7 +36,7 @@ module FactoryGirl
|
|||
|
||||
def initialize(name, options = {}) #:nodoc:
|
||||
assert_valid_options(options)
|
||||
@name = factory_name_for(name)
|
||||
@name = name.to_s.underscore.to_sym
|
||||
@parent = options[:parent]
|
||||
@parent_factory = nil
|
||||
@options = options
|
||||
|
@ -94,7 +97,7 @@ module FactoryGirl
|
|||
def run(proxy_class, overrides) #:nodoc:
|
||||
proxy = proxy_class.new(build_class)
|
||||
callbacks.each { |callback| proxy.add_callback(callback) }
|
||||
overrides = symbolize_keys(overrides)
|
||||
overrides = overrides.symbolize_keys
|
||||
|
||||
attributes.each do |attribute|
|
||||
factory_overrides = overrides.select { |attr, val| attribute.aliases_for?(attr) }
|
||||
|
@ -109,7 +112,7 @@ module FactoryGirl
|
|||
end
|
||||
|
||||
def human_names
|
||||
names.map {|name| name.to_s.gsub('_', ' ') }
|
||||
names.map {|name| name.to_s.humanize.downcase }
|
||||
end
|
||||
|
||||
def associations
|
||||
|
@ -195,30 +198,9 @@ module FactoryGirl
|
|||
update_children if allow_overrides?
|
||||
end
|
||||
|
||||
def class_for (class_or_to_s)
|
||||
if class_or_to_s.respond_to?(:to_sym)
|
||||
class_name = variable_name_to_class_name(class_or_to_s)
|
||||
class_name.split('::').inject(Object) do |object, string|
|
||||
object.const_get(string)
|
||||
end
|
||||
else
|
||||
class_or_to_s
|
||||
end
|
||||
end
|
||||
|
||||
def factory_name_for(class_or_to_s)
|
||||
if class_or_to_s.respond_to?(:to_sym)
|
||||
class_or_to_s.to_sym
|
||||
else
|
||||
class_name_to_variable_name(class_or_to_s).to_sym
|
||||
end
|
||||
end
|
||||
|
||||
def assert_valid_options(options)
|
||||
invalid_keys = options.keys - [:class, :parent, :default_strategy, :aliases, :traits]
|
||||
unless invalid_keys == []
|
||||
raise ArgumentError, "Unknown arguments: #{invalid_keys.inspect}"
|
||||
end
|
||||
options.assert_valid_keys(:class, :parent, :default_strategy, :aliases, :traits)
|
||||
|
||||
if options[:default_strategy]
|
||||
assert_valid_strategy(options[:default_strategy])
|
||||
puts "WARNING: default_strategy is deprecated."
|
||||
|
@ -227,35 +209,11 @@ module FactoryGirl
|
|||
end
|
||||
|
||||
def assert_valid_strategy(strategy)
|
||||
unless Proxy.const_defined? variable_name_to_class_name(strategy)
|
||||
unless Proxy.const_defined? strategy.to_s.camelize
|
||||
raise ArgumentError, "Unknown strategy: #{strategy}"
|
||||
end
|
||||
end
|
||||
|
||||
# Based on ActiveSupport's underscore inflector
|
||||
def class_name_to_variable_name(name)
|
||||
name.to_s.gsub(/::/, '/').
|
||||
gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
|
||||
gsub(/([a-z\d])([A-Z])/,'\1_\2').
|
||||
tr("-", "_").
|
||||
downcase
|
||||
end
|
||||
|
||||
# Based on ActiveSupport's camelize inflector
|
||||
def variable_name_to_class_name(name)
|
||||
name.to_s.
|
||||
gsub(/\/(.?)/) { "::#{$1.upcase}" }.
|
||||
gsub(/(?:^|_)(.)/) { $1.upcase }
|
||||
end
|
||||
|
||||
# From ActiveSupport
|
||||
def symbolize_keys(hash)
|
||||
hash.inject({}) do |options, (key, value)|
|
||||
options[(key.to_sym rescue key) || key] = value
|
||||
options
|
||||
end
|
||||
end
|
||||
|
||||
def trait_for(name)
|
||||
@defined_traits.detect {|trait| trait.name == name }
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue