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 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,6 @@
1
+ require 'factory_boy'
2
+ require 'factory_boy/factory_callbacks'
3
+ require 'factory_boy/factory_customizer'
4
+ require 'factory_boy/factory_declarator'
5
+ require 'factory_boy/factory_instance'
6
+ require 'factory_boy/factory'
@@ -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
@@ -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: []