challah 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. data/CHANGELOG.md +9 -2
  2. data/README.md +18 -18
  3. data/lib/challah/test.rb +22 -5
  4. data/lib/challah/version.rb +1 -1
  5. data/test/audit_test.rb +32 -32
  6. data/test/controller_test.rb +9 -9
  7. data/test/cookie_store_test.rb +25 -25
  8. data/test/factories.rb +7 -7
  9. data/test/helper.rb +14 -12
  10. data/test/permission_test.rb +14 -14
  11. data/test/restrictions_controller_test.rb +29 -30
  12. data/test/role_test.rb +26 -26
  13. data/test/session_test.rb +65 -65
  14. data/test/sessions_controller_test.rb +13 -13
  15. data/test/simple_cookie_store_test.rb +25 -25
  16. data/test/user_test.rb +79 -79
  17. data/vendor/bundle/cache/factory_girl-3.0.0.gem +0 -0
  18. data/vendor/bundle/gems/factory_girl-3.0.0/Appraisals +11 -0
  19. data/vendor/bundle/gems/factory_girl-3.0.0/CONTRIBUTION_GUIDELINES.md +10 -0
  20. data/vendor/bundle/gems/factory_girl-3.0.0/Changelog +168 -0
  21. data/vendor/bundle/gems/factory_girl-3.0.0/GETTING_STARTED.md +735 -0
  22. data/vendor/bundle/gems/factory_girl-3.0.0/Gemfile +5 -0
  23. data/vendor/bundle/gems/factory_girl-3.0.0/Gemfile.lock +95 -0
  24. data/vendor/bundle/gems/factory_girl-3.0.0/LICENSE +19 -0
  25. data/vendor/bundle/gems/factory_girl-3.0.0/README.md +70 -0
  26. data/vendor/bundle/gems/factory_girl-3.0.0/Rakefile +38 -0
  27. data/vendor/bundle/gems/factory_girl-3.0.0/cucumber.yml +1 -0
  28. data/vendor/bundle/gems/factory_girl-3.0.0/factory_girl.gemspec +38 -0
  29. data/vendor/bundle/gems/factory_girl-3.0.0/features/factory_girl_steps.feature +237 -0
  30. data/vendor/bundle/gems/factory_girl-3.0.0/features/find_definitions.feature +75 -0
  31. data/vendor/bundle/gems/factory_girl-3.0.0/features/step_definitions/database_steps.rb +42 -0
  32. data/vendor/bundle/gems/factory_girl-3.0.0/features/step_definitions/factory_girl_steps.rb +43 -0
  33. data/vendor/bundle/gems/factory_girl-3.0.0/features/support/env.rb +11 -0
  34. data/vendor/bundle/gems/factory_girl-3.0.0/features/support/factories.rb +119 -0
  35. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/2.3.gemfile +7 -0
  36. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.0.gemfile +7 -0
  37. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.0.gemfile.lock +86 -0
  38. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.1.gemfile +7 -0
  39. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.1.gemfile.lock +95 -0
  40. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.2.gemfile +7 -0
  41. data/vendor/bundle/gems/factory_girl-3.0.0/gemfiles/3.2.gemfile.lock +93 -0
  42. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl.rb +69 -0
  43. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/aliases.rb +19 -0
  44. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute.rb +40 -0
  45. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/association.rb +23 -0
  46. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/dynamic.rb +20 -0
  47. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/sequence.rb +17 -0
  48. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute/static.rb +15 -0
  49. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_assigner.rb +73 -0
  50. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/attribute_list.rb +54 -0
  51. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/callback.rb +33 -0
  52. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration.rb +22 -0
  53. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/association.rb +25 -0
  54. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/dynamic.rb +25 -0
  55. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/implicit.rb +32 -0
  56. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration/static.rb +25 -0
  57. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/declaration_list.rb +48 -0
  58. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/definition.rb +76 -0
  59. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/definition_proxy.rb +159 -0
  60. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/errors.rb +19 -0
  61. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/evaluator.rb +76 -0
  62. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/evaluator_class_definer.rb +34 -0
  63. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/factory.rb +145 -0
  64. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/factory_runner.rb +24 -0
  65. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/find_definitions.rb +25 -0
  66. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/null_factory.rb +15 -0
  67. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/null_object.rb +7 -0
  68. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/registry.rb +46 -0
  69. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/reload.rb +8 -0
  70. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/sequence.rb +24 -0
  71. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/step_definitions.rb +130 -0
  72. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy.rb +32 -0
  73. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/attributes_for.rb +12 -0
  74. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/build.rb +15 -0
  75. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/create.rb +17 -0
  76. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy/stub.rb +61 -0
  77. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/strategy_calculator.rb +29 -0
  78. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax.rb +16 -0
  79. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/blueprint.rb +42 -0
  80. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/default.rb +56 -0
  81. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/generate.rb +70 -0
  82. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/make.rb +45 -0
  83. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/methods.rb +136 -0
  84. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/sham.rb +45 -0
  85. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/syntax/vintage.rb +130 -0
  86. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/trait.rb +29 -0
  87. data/vendor/bundle/gems/factory_girl-3.0.0/lib/factory_girl/version.rb +4 -0
  88. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/aliases_spec.rb +19 -0
  89. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attribute_aliases_spec.rb +45 -0
  90. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attribute_existing_on_object_spec.rb +68 -0
  91. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attributes_for_spec.rb +89 -0
  92. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attributes_from_instance_spec.rb +53 -0
  93. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/attributes_ordered_spec.rb +51 -0
  94. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/build_list_spec.rb +41 -0
  95. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/build_spec.rb +89 -0
  96. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/build_stubbed_spec.rb +104 -0
  97. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/callbacks_spec.rb +47 -0
  98. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/create_list_spec.rb +82 -0
  99. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/create_spec.rb +117 -0
  100. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/define_child_before_parent_spec.rb +21 -0
  101. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/definition_spec.rb +26 -0
  102. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/definition_without_block_spec.rb +15 -0
  103. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/initialize_with_spec.rb +147 -0
  104. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/modify_factories_spec.rb +184 -0
  105. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/modify_inherited_spec.rb +52 -0
  106. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/nested_attributes_spec.rb +32 -0
  107. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/overrides_spec.rb +61 -0
  108. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/parent_spec.rb +90 -0
  109. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/sequence_spec.rb +33 -0
  110. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/stub_spec.rb +62 -0
  111. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/blueprint_spec.rb +34 -0
  112. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/generate_spec.rb +59 -0
  113. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/make_spec.rb +52 -0
  114. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/sham_spec.rb +43 -0
  115. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/syntax/vintage_spec.rb +217 -0
  116. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/traits_spec.rb +421 -0
  117. data/vendor/bundle/gems/factory_girl-3.0.0/spec/acceptance/transient_attributes_spec.rb +124 -0
  118. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/aliases_spec.rb +31 -0
  119. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/association_spec.rb +28 -0
  120. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/dynamic_spec.rb +52 -0
  121. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/sequence_spec.rb +16 -0
  122. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute/static_spec.rb +19 -0
  123. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute_list_spec.rb +78 -0
  124. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/attribute_spec.rb +16 -0
  125. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/callback_spec.rb +41 -0
  126. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/declaration/implicit_spec.rb +25 -0
  127. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/declaration_list_spec.rb +71 -0
  128. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/definition_proxy_spec.rb +197 -0
  129. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/definition_spec.rb +104 -0
  130. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/evaluator_class_definer_spec.rb +54 -0
  131. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/factory_spec.rb +279 -0
  132. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/find_definitions_spec.rb +110 -0
  133. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/null_factory_spec.rb +13 -0
  134. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/null_object_spec.rb +8 -0
  135. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/registry_spec.rb +81 -0
  136. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/sequence_spec.rb +47 -0
  137. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/attributes_for_spec.rb +18 -0
  138. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/build_spec.rb +7 -0
  139. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/create_spec.rb +13 -0
  140. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy/stub_spec.rb +40 -0
  141. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy_calculator_spec.rb +33 -0
  142. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl/strategy_spec.rb +21 -0
  143. data/vendor/bundle/gems/factory_girl-3.0.0/spec/factory_girl_spec.rb +22 -0
  144. data/vendor/bundle/gems/factory_girl-3.0.0/spec/spec_helper.rb +26 -0
  145. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/macros/define_constant.rb +86 -0
  146. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/callback.rb +9 -0
  147. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/declaration.rb +71 -0
  148. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/delegate.rb +44 -0
  149. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/matchers/trait.rb +9 -0
  150. data/vendor/bundle/gems/factory_girl-3.0.0/spec/support/shared_examples/strategy.rb +104 -0
  151. data/vendor/bundle/specifications/factory_girl-3.0.0.gemspec +62 -0
  152. metadata +147 -12
@@ -0,0 +1,32 @@
1
+ require "factory_girl/strategy/build"
2
+ require "factory_girl/strategy/create"
3
+ require "factory_girl/strategy/attributes_for"
4
+ require "factory_girl/strategy/stub"
5
+ require "observer"
6
+
7
+ module FactoryGirl
8
+ class Strategy #:nodoc:
9
+ include Observable
10
+
11
+ def association(runner)
12
+ raise NotImplementedError, "Strategies must return an association"
13
+ end
14
+
15
+ def result(attribute_assigner, to_create)
16
+ raise NotImplementedError, "Strategies must return a result"
17
+ end
18
+
19
+ def self.ensure_strategy_exists!(strategy)
20
+ unless Strategy.const_defined? strategy.to_s.camelize
21
+ raise ArgumentError, "Unknown strategy: #{strategy}"
22
+ end
23
+ end
24
+
25
+ private
26
+
27
+ def run_callbacks(name, result_instance)
28
+ changed
29
+ notify_observers(name, result_instance)
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,12 @@
1
+ module FactoryGirl
2
+ class Strategy #:nodoc:
3
+ class AttributesFor < Strategy #:nodoc:
4
+ def association(runner)
5
+ end
6
+
7
+ def result(attribute_assigner, to_create)
8
+ attribute_assigner.hash
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ module FactoryGirl
2
+ class Strategy #:nodoc:
3
+ class Build < Strategy #:nodoc:
4
+ def association(runner)
5
+ runner.run
6
+ end
7
+
8
+ def result(attribute_assigner, to_create)
9
+ attribute_assigner.object.tap do |result_instance|
10
+ run_callbacks(:after_build, result_instance)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ module FactoryGirl
2
+ class Strategy #:nodoc:
3
+ class Create < Strategy #:nodoc:
4
+ def association(runner)
5
+ runner.run
6
+ end
7
+
8
+ def result(attribute_assigner, to_create)
9
+ attribute_assigner.object.tap do |result_instance|
10
+ run_callbacks(:after_build, result_instance)
11
+ to_create[result_instance]
12
+ run_callbacks(:after_create, result_instance)
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,61 @@
1
+ module FactoryGirl
2
+ class Strategy
3
+ class Stub < Strategy #:nodoc:
4
+ @@next_id = 1000
5
+
6
+ def association(runner)
7
+ runner.run(Strategy::Stub)
8
+ end
9
+
10
+ def result(attribute_assigner, to_create)
11
+ attribute_assigner.object.tap do |result_instance|
12
+ stub_database_interaction_on_result(result_instance)
13
+ run_callbacks(:after_stub, result_instance)
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def next_id
20
+ @@next_id += 1
21
+ end
22
+
23
+ def stub_database_interaction_on_result(result_instance)
24
+ result_instance.id = next_id
25
+ result_instance.instance_eval do
26
+ def persisted?
27
+ !new_record?
28
+ end
29
+
30
+ def created_at
31
+ @created_at ||= Time.now
32
+ end
33
+
34
+ def new_record?
35
+ id.nil?
36
+ end
37
+
38
+ def save(*args)
39
+ raise "stubbed models are not allowed to access the database"
40
+ end
41
+
42
+ def destroy(*args)
43
+ raise "stubbed models are not allowed to access the database"
44
+ end
45
+
46
+ def connection
47
+ raise "stubbed models are not allowed to access the database"
48
+ end
49
+
50
+ def reload
51
+ raise "stubbed models are not allowed to access the database"
52
+ end
53
+
54
+ def update_attribute(*args)
55
+ raise "stubbed models are not allowed to access the database"
56
+ end
57
+ end
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,29 @@
1
+ module FactoryGirl
2
+ class StrategyCalculator
3
+ def initialize(name_or_object)
4
+ @name_or_object = name_or_object
5
+ end
6
+
7
+ def strategy
8
+ if strategy_is_object?
9
+ @name_or_object
10
+ else
11
+ strategy_name_to_object
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def strategy_is_object?
18
+ @name_or_object.is_a?(Class) && @name_or_object.ancestors.include?(::FactoryGirl::Strategy)
19
+ end
20
+
21
+ def strategy_name_to_object
22
+ case @name_or_object
23
+ when :build then Strategy::Build
24
+ when :create then Strategy::Create
25
+ else raise "unrecognized method #{@name_or_object}"
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,16 @@
1
+ require "factory_girl/syntax/methods"
2
+ require "factory_girl/syntax/default"
3
+ require "factory_girl/syntax/vintage"
4
+
5
+ module FactoryGirl
6
+ # Provides alternate syntaxes for factory_girl. If you don't like the default
7
+ # syntax for defining or using factories, look at one of the
8
+ # FactoryGirl::Syntax modules:
9
+ #
10
+ # * FactoryGirl::Syntax::Blueprint: definition syntax similar to Machinist
11
+ # * FactoryGirl::Syntax::Generate: usage syntax similar to Object Daddy
12
+ # * FactoryGirl::Syntax::Make: usage syntax similar to Machinist
13
+ # * FactoryGirl::Syntax::Sham: sequence syntax similar to Machinist
14
+ module Syntax
15
+ end
16
+ end
@@ -0,0 +1,42 @@
1
+ module FactoryGirl
2
+ module Syntax
3
+
4
+ # Extends ActiveRecord::Base to provide a make class method, which is an
5
+ # alternate syntax for defining factories.
6
+ #
7
+ # Usage:
8
+ #
9
+ # require 'factory_girl/syntax/blueprint'
10
+ #
11
+ # User.blueprint do
12
+ # name { 'Billy Bob' }
13
+ # email { 'billy@bob.example.com' }
14
+ # end
15
+ #
16
+ # FactoryGirl.create(:user, name: 'Johnny')
17
+ #
18
+ # This syntax was derived from Pete Yandell's machinist.
19
+ module Blueprint
20
+ module ActiveRecord #:nodoc:
21
+
22
+ def self.included(base) # :nodoc:
23
+ base.extend ClassMethods
24
+ end
25
+
26
+ module ClassMethods #:nodoc:
27
+
28
+ def blueprint(&block)
29
+ instance = Factory.new(name.underscore, class: self)
30
+ proxy = FactoryGirl::DefinitionProxy.new(instance)
31
+ proxy.instance_eval(&block)
32
+ FactoryGirl.register_factory(instance)
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ ActiveRecord::Base.send(:include, FactoryGirl::Syntax::Blueprint::ActiveRecord)
@@ -0,0 +1,56 @@
1
+ module FactoryGirl
2
+ module Syntax
3
+ module Default
4
+ include Methods
5
+
6
+ def define(&block)
7
+ DSL.run(block)
8
+ end
9
+
10
+ def modify(&block)
11
+ ModifyDSL.run(block)
12
+ end
13
+
14
+ class DSL
15
+ def self.run(block)
16
+ new.instance_eval(&block)
17
+ end
18
+
19
+ def factory(name, options = {}, &block)
20
+ factory = Factory.new(name, options)
21
+ proxy = FactoryGirl::DefinitionProxy.new(factory.definition)
22
+ proxy.instance_eval(&block) if block_given?
23
+
24
+ FactoryGirl.register_factory(factory)
25
+
26
+ proxy.child_factories.each do |(child_name, child_options, child_block)|
27
+ parent_factory = child_options.delete(:parent) || name
28
+ factory(child_name, child_options.merge(parent: parent_factory), &child_block)
29
+ end
30
+ end
31
+
32
+ def sequence(name, start_value = 1, &block)
33
+ FactoryGirl.register_sequence(Sequence.new(name, start_value, &block))
34
+ end
35
+
36
+ def trait(name, &block)
37
+ FactoryGirl.register_trait(Trait.new(name, &block))
38
+ end
39
+ end
40
+
41
+ class ModifyDSL
42
+ def self.run(block)
43
+ new.instance_eval(&block)
44
+ end
45
+
46
+ def factory(name, options = {}, &block)
47
+ factory = FactoryGirl.factory_by_name(name)
48
+ proxy = FactoryGirl::DefinitionProxy.new(factory.definition.overridable)
49
+ proxy.instance_eval(&block)
50
+ end
51
+ end
52
+ end
53
+ end
54
+
55
+ extend Syntax::Default
56
+ end
@@ -0,0 +1,70 @@
1
+ module FactoryGirl
2
+ module Syntax
3
+
4
+ # Extends ActiveRecord::Base to provide generation methods for factories.
5
+ #
6
+ # Usage:
7
+ #
8
+ # require 'factory_girl/syntax/generate'
9
+ #
10
+ # FactoryGirl.define do
11
+ # factory :user do
12
+ # name 'Billy Bob'
13
+ # email 'billy@bob.example.com'
14
+ # end
15
+ # end
16
+ #
17
+ # # Creates a saved instance without raising (same as saving the result
18
+ # # of FactoryGirl.build)
19
+ # User.generate(name: 'Johnny')
20
+ #
21
+ # # Creates a saved instance and raises when invalid (same as
22
+ # # FactoryGirl.create)
23
+ # User.generate!
24
+ #
25
+ # # Creates an unsaved instance (same as FactoryGirl.build)
26
+ # User.spawn
27
+ #
28
+ # # Creates an instance and yields it to the passed block
29
+ # User.generate do |user|
30
+ # # ...do something with user...
31
+ # end
32
+ #
33
+ # This syntax was derived from Rick Bradley and Yossef Mendelssohn's
34
+ # object_daddy.
35
+ module Generate
36
+ module ActiveRecord #:nodoc:
37
+
38
+ def self.included(base) # :nodoc:
39
+ base.extend ClassMethods
40
+ end
41
+
42
+ module ClassMethods #:nodoc:
43
+
44
+ def generate(overrides = {}, &block)
45
+ instance = FactoryRunner.new(name.underscore, Strategy::Build, [overrides]).run
46
+ instance.save
47
+ yield(instance) if block_given?
48
+ instance
49
+ end
50
+
51
+ def generate!(overrides = {}, &block)
52
+ instance = FactoryRunner.new(name.underscore, Strategy::Create, [overrides]).run
53
+ yield(instance) if block_given?
54
+ instance
55
+ end
56
+
57
+ def spawn(overrides = {}, &block)
58
+ instance = FactoryRunner.new(name.underscore, Strategy::Build, [overrides]).run
59
+ yield(instance) if block_given?
60
+ instance
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+ ActiveRecord::Base.send(:include, FactoryGirl::Syntax::Generate::ActiveRecord)
@@ -0,0 +1,45 @@
1
+ module FactoryGirl
2
+ module Syntax
3
+
4
+ # Extends ActiveRecord::Base to provide a make class method, which is a
5
+ # shortcut for FactoryGirl.create.
6
+ #
7
+ # Usage:
8
+ #
9
+ # require 'factory_girl/syntax/make'
10
+ #
11
+ # FactoryGirl.define do
12
+ # factory :user do
13
+ # name 'Billy Bob'
14
+ # email 'billy@bob.example.com'
15
+ # end
16
+ # end
17
+ #
18
+ # User.make(name: 'Johnny')
19
+ #
20
+ # This syntax was derived from Pete Yandell's machinist.
21
+ module Make
22
+ module ActiveRecord #:nodoc:
23
+
24
+ def self.included(base) # :nodoc:
25
+ base.extend ClassMethods
26
+ end
27
+
28
+ module ClassMethods #:nodoc:
29
+
30
+ def make(overrides = {})
31
+ FactoryRunner.new(name.underscore, Strategy::Build, [overrides]).run
32
+ end
33
+
34
+ def make!(overrides = {})
35
+ FactoryRunner.new(name.underscore, Strategy::Create, [overrides]).run
36
+ end
37
+
38
+ end
39
+
40
+ end
41
+ end
42
+ end
43
+ end
44
+
45
+ ActiveRecord::Base.send(:include, FactoryGirl::Syntax::Make::ActiveRecord)
@@ -0,0 +1,136 @@
1
+ module FactoryGirl
2
+ module Syntax
3
+ module Methods
4
+ # Generates and returns a Hash of attributes from this factory. Attributes
5
+ # can be individually overridden by passing in a Hash of attribute => value
6
+ # pairs.
7
+ #
8
+ # Arguments:
9
+ # * name: +Symbol+ or +String+
10
+ # The name of the factory that should be used.
11
+ # * traits_and_overrides: +Array+
12
+ # [+*Array+] Traits to be applied
13
+ # [+Hash+] Attributes to overwrite for this set.
14
+ # * block:
15
+ # Yields the hash of attributes.
16
+ #
17
+ # Returns: +Hash+
18
+ # A set of attributes that can be used to build an instance of the class
19
+ # this factory generates.
20
+ def attributes_for(name, *traits_and_overrides, &block)
21
+ FactoryRunner.new(name, Strategy::AttributesFor, traits_and_overrides).run(&block)
22
+ end
23
+
24
+ # Generates and returns an instance from this factory. Attributes can be
25
+ # individually overridden by passing in a Hash of attribute => value pairs.
26
+ #
27
+ # Arguments:
28
+ # * name: +Symbol+ or +String+
29
+ # The name of the factory that should be used.
30
+ # * traits_and_overrides: +Array+
31
+ # [+*Array+] Traits to be applied
32
+ # [+Hash+] Attributes to overwrite for this instance.
33
+ # * block:
34
+ # Yields the built instance.
35
+ #
36
+ # Returns: +Object+
37
+ # An instance of the class this factory generates, with generated attributes
38
+ # assigned.
39
+ def build(name, *traits_and_overrides, &block)
40
+ FactoryRunner.new(name, Strategy::Build, traits_and_overrides).run(&block)
41
+ end
42
+
43
+ # Generates, saves, and returns an instance from this factory. Attributes can
44
+ # be individually overridden by passing in a Hash of attribute => value
45
+ # pairs.
46
+ #
47
+ # Instances are saved using the +save!+ method, so ActiveRecord models will
48
+ # raise ActiveRecord::RecordInvalid exceptions for invalid attribute sets.
49
+ #
50
+ # Arguments:
51
+ # * name: +Symbol+ or +String+
52
+ # The name of the factory that should be used.
53
+ # * traits_and_overrides: +Array+
54
+ # [+*Array+] Traits to be applied
55
+ # [+Hash+] Attributes to overwrite for this instance.
56
+ # * block:
57
+ # Yields the created instance.
58
+ #
59
+ # Returns: +Object+
60
+ # A saved instance of the class this factory generates, with generated
61
+ # attributes assigned.
62
+ def create(name, *traits_and_overrides, &block)
63
+ FactoryRunner.new(name, Strategy::Create, traits_and_overrides).run(&block)
64
+ end
65
+
66
+ # Generates and returns an object with all attributes from this factory
67
+ # stubbed out. Attributes can be individually overridden by passing in a Hash
68
+ # of attribute => value pairs.
69
+ #
70
+ # Arguments:
71
+ # * name: +Symbol+ or +String+
72
+ # The name of the factory that should be used.
73
+ # * traits_and_overrides: +Array+
74
+ # [+*Array+] Traits to be applied
75
+ # [+Hash+] Attributes to overwrite for this instance.
76
+ # * block
77
+ # Yields the stubbed object.
78
+ #
79
+ # Returns: +Object+
80
+ # An object with generated attributes stubbed out.
81
+ def build_stubbed(name, *traits_and_overrides, &block)
82
+ FactoryRunner.new(name, Strategy::Stub, traits_and_overrides).run(&block)
83
+ end
84
+
85
+ # Builds and returns multiple instances from this factory as an array. Attributes can be
86
+ # individually overridden by passing in a Hash of attribute => value pairs.
87
+ #
88
+ # Arguments:
89
+ # * name: +Symbol+ or +String+
90
+ # The name of the factory to be used.
91
+ # * amount: +Integer+
92
+ # number of instances to be built.
93
+ # * traits_and_overrides: +Array+
94
+ # [+*Array+] Traits to be applied
95
+ # [+Hash+] Attributes to overwrite for this instance.
96
+ #
97
+ # Returns: +Array+
98
+ # An array of instances of the class this factory generates, with generated attributes
99
+ # assigned.
100
+ def build_list(name, amount, *traits_and_overrides)
101
+ amount.times.map { build(name, *traits_and_overrides) }
102
+ end
103
+
104
+ # Creates and returns multiple instances from this factory as an array. Attributes can be
105
+ # individually overridden by passing in a Hash of attribute => value pairs.
106
+ #
107
+ # Arguments:
108
+ # * name: +Symbol+ or +String+
109
+ # The name of the factory to be used.
110
+ # * amount: +Integer+
111
+ # number of instances to be created.
112
+ # * traits_and_overrides: +Array+
113
+ # [+*Array+] Traits to be applied
114
+ # [+Hash+] Attributes to overwrite for this instance.
115
+ #
116
+ # Returns: +Array+
117
+ # An array of instances of the class this factory generates, with generated attributes
118
+ # assigned.
119
+ def create_list(name, amount, *traits_and_overrides)
120
+ amount.times.map { create(name, *traits_and_overrides) }
121
+ end
122
+
123
+ # Generates and returns the next value in a sequence.
124
+ #
125
+ # Arguments:
126
+ # name: (Symbol)
127
+ # The name of the sequence that a value should be generated for.
128
+ #
129
+ # Returns:
130
+ # The next value in the sequence. (Object)
131
+ def generate(name)
132
+ FactoryGirl.sequence_by_name(name).next
133
+ end
134
+ end
135
+ end
136
+ end