factory_boy_ruby 0.1.2.2
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.
- checksums.yaml +7 -0
- data/Manifest +11 -0
- data/README.rdoc +0 -0
- data/Rakefile +14 -0
- data/factory_boy_ruby.gemspec +21 -0
- data/init.rb +6 -0
- data/lib/factory_boy/factory.rb +31 -0
- data/lib/factory_boy/factory_callbacks.rb +27 -0
- data/lib/factory_boy/factory_customizer.rb +34 -0
- data/lib/factory_boy/factory_declarator.rb +39 -0
- data/lib/factory_boy/factory_instance.rb +31 -0
- data/lib/factory_boy.rb +11 -0
- metadata +65 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8420825c255b907c90c09df941b605a5472aa226
|
4
|
+
data.tar.gz: 020ab8ee9f7b3fdad8e218f5c51441fc55ab33fe
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 641d0d950458d6856db011118282bb10c5891aad2423d0d0240799dc4c6a5f12c1cf71d69e253caf0b8b51642aee9a08c4d9bfcb2ec530346d305c350d9fa52e
|
7
|
+
data.tar.gz: 8f954a0830330ba198dd314ca58b9e8c698a51388338663849a1d167d9b7d7fca028bb5a21afb1e45f1415f85e22437c1be63066d5d5139537b9717db84c9a38
|
data/Manifest
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
Manifest
|
2
|
+
README.rdoc
|
3
|
+
Rakefile
|
4
|
+
factory_boy_ruby.gemspec
|
5
|
+
init.rb
|
6
|
+
lib/factory_boy.rb
|
7
|
+
lib/factory_boy/factory.rb
|
8
|
+
lib/factory_boy/factory_callbacks.rb
|
9
|
+
lib/factory_boy/factory_customizer.rb
|
10
|
+
lib/factory_boy/factory_declarator.rb
|
11
|
+
lib/factory_boy/factory_instance.rb
|
data/README.rdoc
ADDED
File without changes
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('factory_boy_ruby', '0.1.2.2') do |p|
|
6
|
+
p.description = "Generate testing instances for the non-model classes "
|
7
|
+
p.url = "http://github.com/ma7modx/factory_boy-ruby"
|
8
|
+
p.author = "Mahmoud Afify"
|
9
|
+
p.email = "ma7modx@gmail.com"
|
10
|
+
p.ignore_pattern = ["tmp/*", "script/*"]
|
11
|
+
p.development_dependencies = []
|
12
|
+
end
|
13
|
+
|
14
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# stub: factory_boy_ruby 0.1.2.2 ruby lib
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "factory_boy_ruby"
|
6
|
+
s.version = "0.1.2.2"
|
7
|
+
|
8
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
9
|
+
s.require_paths = ["lib"]
|
10
|
+
s.authors = ["Mahmoud Afify"]
|
11
|
+
s.date = "2016-11-30"
|
12
|
+
s.description = "Generate testing instances for the non-model classes\t"
|
13
|
+
s.email = "ma7modx@gmail.com"
|
14
|
+
s.extra_rdoc_files = ["README.rdoc", "lib/factory_boy.rb", "lib/factory_boy/factory.rb", "lib/factory_boy/factory_callbacks.rb", "lib/factory_boy/factory_customizer.rb", "lib/factory_boy/factory_declarator.rb", "lib/factory_boy/factory_instance.rb"]
|
15
|
+
s.files = ["Manifest", "README.rdoc", "Rakefile", "factory_boy_ruby.gemspec", "init.rb", "lib/factory_boy.rb", "lib/factory_boy/factory.rb", "lib/factory_boy/factory_callbacks.rb", "lib/factory_boy/factory_customizer.rb", "lib/factory_boy/factory_declarator.rb", "lib/factory_boy/factory_instance.rb"]
|
16
|
+
s.homepage = "http://github.com/ma7modx/factory_boy-ruby"
|
17
|
+
s.rdoc_options = ["--line-numbers", "--title", "Factory_boy_ruby", "--main", "README.rdoc"]
|
18
|
+
s.rubyforge_project = "factory_boy_ruby"
|
19
|
+
s.rubygems_version = "2.5.1"
|
20
|
+
s.summary = "Generate testing instances for the non-model classes"
|
21
|
+
end
|
data/init.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative 'factory_customizer'
|
2
|
+
|
3
|
+
module FactoryBoy
|
4
|
+
class Factory
|
5
|
+
include FactoryCustomizer
|
6
|
+
|
7
|
+
attr_reader :linked_class_name, :factory_name
|
8
|
+
|
9
|
+
def initialize(class_name, factory_name)
|
10
|
+
@factory_name = factory_name
|
11
|
+
@linked_class_name = class_name
|
12
|
+
yield if block_given?
|
13
|
+
end
|
14
|
+
|
15
|
+
def linked_class
|
16
|
+
eval("#{@linked_class_name}")
|
17
|
+
end
|
18
|
+
def method_missing(name, *args, &block)
|
19
|
+
if block || (args[0] && args[0][:return])
|
20
|
+
set_method(name, args[0] || {}, &block)
|
21
|
+
else
|
22
|
+
if self.methods.include?(name)
|
23
|
+
self.send(name, *args, &block)
|
24
|
+
else
|
25
|
+
linked_class.send(name)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module FactoryCallbacks
|
2
|
+
@@callbacks ||= {}
|
3
|
+
|
4
|
+
def register_callback(factory_name, execution_precedence, on_call, &block)
|
5
|
+
@@callbacks[factory_name] ||= {}
|
6
|
+
@@callbacks[factory_name][execution_precedence] ||= {}
|
7
|
+
@@callbacks[factory_name][execution_precedence][on_call] = block
|
8
|
+
end
|
9
|
+
|
10
|
+
def get_callback(factory_name, execution_precedence, on_call)
|
11
|
+
if @@callbacks.try(:[], factory_name).try(:[], execution_precedence).try(:[], on_call)
|
12
|
+
@@callbacks[factory_name][execution_precedence][on_call]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def run_callback(factory_name, execution_precedence, on_call, block_scope)
|
17
|
+
callback = get_callback(factory_name, execution_precedence, on_call)
|
18
|
+
block_scope.instance_eval(&callback) if callback
|
19
|
+
end
|
20
|
+
|
21
|
+
def callback(factory_name, on_call, block_scope, &block)
|
22
|
+
run_callback(factory_name, :before, on_call, block_scope)
|
23
|
+
block.call
|
24
|
+
run_callback(factory_name, :after, on_call, block_scope)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative '../factory_boy'
|
2
|
+
|
3
|
+
module FactoryCustomizer
|
4
|
+
def set_method(name, options = {}, &method_return_block)
|
5
|
+
method_return_block ||= Proc.new { options[:return] }
|
6
|
+
proc = Proc.new { |name, method_return|
|
7
|
+
self.define_singleton_method(name) do
|
8
|
+
method_return.call
|
9
|
+
end
|
10
|
+
}
|
11
|
+
self.instance_exec(name, method_return_block, &proc)
|
12
|
+
end
|
13
|
+
|
14
|
+
def factory_girl(name, options = {}, &block)
|
15
|
+
build_or_create = !options[:create]
|
16
|
+
factory_name = options[:factory] || name
|
17
|
+
factory_call = Proc.new {
|
18
|
+
build_or_create ? FactoryGirl.build(factory_name) : FactoryGirl.create(factory_name)
|
19
|
+
}
|
20
|
+
set_method(name, {}, &(block || factory_call))
|
21
|
+
end
|
22
|
+
|
23
|
+
def register_callback(execution_precedence, *on_calls, &block)
|
24
|
+
on_calls.each do |on_call|
|
25
|
+
FactoryBoy.register_callback(self.factory_name, execution_precedence, on_call, &block)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
[:after, :before].each { |execution_precedence|
|
30
|
+
define_method(execution_precedence) do |*on_calls, &block|
|
31
|
+
register_callback(execution_precedence, *on_calls, &block)
|
32
|
+
end
|
33
|
+
}
|
34
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require_relative 'factory'
|
2
|
+
require_relative 'factory_instance'
|
3
|
+
|
4
|
+
module FactoryDeclarator
|
5
|
+
@@factories ||= {}
|
6
|
+
|
7
|
+
def define(&block)
|
8
|
+
self.instance_eval(&block)
|
9
|
+
end
|
10
|
+
|
11
|
+
def factory(factory_name, hash = {}, &block)
|
12
|
+
class_name = hash[:class] || factory_name.to_s.capitalize
|
13
|
+
@@factories[factory_name] = FactoryBoy::Factory.new(class_name, factory_name)
|
14
|
+
@@factories[factory_name].instance_eval(&block) if block
|
15
|
+
end
|
16
|
+
|
17
|
+
def build(factory_name, options = {})
|
18
|
+
factory = @@factories[factory_name]
|
19
|
+
klass = factory.linked_class
|
20
|
+
initialize_parameters = klass.instance_method(:initialize).parameters.map(&:last)
|
21
|
+
args = initialize_parameters.map do |param|
|
22
|
+
function_output = options[param]
|
23
|
+
function_output ||= factory.send(param) # may have problems optional params
|
24
|
+
function_output
|
25
|
+
end
|
26
|
+
|
27
|
+
factory_instance = FactoryBoy::FactoryInstance.new( factory_name, Hash[initialize_parameters.zip(args)] )
|
28
|
+
|
29
|
+
callback(factory_name, :build, factory_instance) do
|
30
|
+
factory_instance.activate_object
|
31
|
+
end
|
32
|
+
|
33
|
+
factory_instance.linked_object
|
34
|
+
end
|
35
|
+
|
36
|
+
def factories
|
37
|
+
@@factories
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative '../factory_boy'
|
2
|
+
|
3
|
+
module FactoryBoy
|
4
|
+
class FactoryInstance
|
5
|
+
attr_reader :factory_name, :object_inputs, :linked_object
|
6
|
+
|
7
|
+
def initialize(factory_name, object_inputs)
|
8
|
+
@factory_name = factory_name
|
9
|
+
@object_inputs = object_inputs
|
10
|
+
|
11
|
+
@object_inputs.each { |method_name, val|
|
12
|
+
define_singleton_method(method_name) do
|
13
|
+
val
|
14
|
+
end
|
15
|
+
}
|
16
|
+
end
|
17
|
+
|
18
|
+
def activate_object
|
19
|
+
klass = FactoryBoy.factories[@factory_name].linked_class
|
20
|
+
@linked_object = klass.new(*@object_inputs.values)
|
21
|
+
end
|
22
|
+
|
23
|
+
def method_missing(name, *args, &block)
|
24
|
+
if @linked_object.methods.include?(name)
|
25
|
+
@linked_object.send(name, *args, &block)
|
26
|
+
else
|
27
|
+
super
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/factory_boy.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
require_relative 'factory_boy/factory_declarator'
|
2
|
+
require_relative 'factory_boy/factory_callbacks'
|
3
|
+
|
4
|
+
module FactoryBoy
|
5
|
+
extend FactoryDeclarator
|
6
|
+
extend FactoryCallbacks
|
7
|
+
|
8
|
+
require_relative 'factory_boy/factory'
|
9
|
+
require_relative 'factory_boy/factory_instance'
|
10
|
+
end
|
11
|
+
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: factory_boy_ruby
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mahmoud Afify
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-11-30 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: "Generate testing instances for the non-model classes\t"
|
14
|
+
email: ma7modx@gmail.com
|
15
|
+
executables: []
|
16
|
+
extensions: []
|
17
|
+
extra_rdoc_files:
|
18
|
+
- README.rdoc
|
19
|
+
- lib/factory_boy.rb
|
20
|
+
- lib/factory_boy/factory.rb
|
21
|
+
- lib/factory_boy/factory_callbacks.rb
|
22
|
+
- lib/factory_boy/factory_customizer.rb
|
23
|
+
- lib/factory_boy/factory_declarator.rb
|
24
|
+
- lib/factory_boy/factory_instance.rb
|
25
|
+
files:
|
26
|
+
- Manifest
|
27
|
+
- README.rdoc
|
28
|
+
- Rakefile
|
29
|
+
- factory_boy_ruby.gemspec
|
30
|
+
- init.rb
|
31
|
+
- lib/factory_boy.rb
|
32
|
+
- lib/factory_boy/factory.rb
|
33
|
+
- lib/factory_boy/factory_callbacks.rb
|
34
|
+
- lib/factory_boy/factory_customizer.rb
|
35
|
+
- lib/factory_boy/factory_declarator.rb
|
36
|
+
- lib/factory_boy/factory_instance.rb
|
37
|
+
homepage: http://github.com/ma7modx/factory_boy-ruby
|
38
|
+
licenses: []
|
39
|
+
metadata: {}
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options:
|
42
|
+
- "--line-numbers"
|
43
|
+
- "--title"
|
44
|
+
- Factory_boy_ruby
|
45
|
+
- "--main"
|
46
|
+
- README.rdoc
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '1.2'
|
59
|
+
requirements: []
|
60
|
+
rubyforge_project: factory_boy_ruby
|
61
|
+
rubygems_version: 2.5.1
|
62
|
+
signing_key:
|
63
|
+
specification_version: 4
|
64
|
+
summary: Generate testing instances for the non-model classes
|
65
|
+
test_files: []
|