factory_loader 0.1.0 → 0.1.1

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 (3) hide show
  1. data/Rakefile +1 -1
  2. data/lib/factory_loader.rb +48 -23
  3. metadata +2 -2
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ desc "Generate RDoc documentation"
10
10
  Rake::RDocTask.new do |rdoc|
11
11
  rdoc.rdoc_dir = 'rdoc'
12
12
  rdoc.title = "FactoryLoader: intended to help scaling complex object creation with less pain and less refactoring."
13
- rdoc.rdoc_files.include('lib/**/*.rb', 'README','CHANGES','MIT-LICENSE')
13
+ rdoc.rdoc_files.include('lib/**/*.rb', 'README.txt','History.txt','MIT-LICENSE')
14
14
  end
15
15
 
16
16
  require 'rubygems'
@@ -3,63 +3,88 @@ require 'find'
3
3
  # FactoryLoader is intended to help scale object creation with less pain and less
4
4
  # refactoring.
5
5
  #
6
- # In the early stages of a project object creation is simple and object
6
+ # In the early stages of a project object creation is simple and
7
7
  # dependencies are kept to a minimum. As the project grows so does the
8
- # complexity of object dependencies and object creation. It doesn't make
8
+ # complexity of object creation and dependencies. It doesn't make
9
9
  # sense to create custom factory classes upfront to deal with complex
10
10
  # object construction that may not exist yet. But when those custom
11
11
  # factories are needed it is usually painful and time consuming to update
12
12
  # the code base to use them. It's also easy for developers to give-in
13
13
  # due to time constraints and start making bad decisions.
14
14
  #
15
- # This is where FactoryLoader comes into play. It automaticaly creates a Factory
15
+ # This is where FactoryLoader comes into play. It automatically creates a Factory
16
16
  # class for your objects and provides a Factory#create method which passes any arguments
17
17
  # along to your object's constructor.
18
18
  #
19
19
  # When you need to have custom factory behavior you can implement the factory
20
- # without having to update other code references (assuming you've used them
20
+ # without having to update other code references (assuming you've used the factory
21
21
  # in the rest of your application rather then direct class references).
22
22
  #
23
- # For example given a directory structure like the below:
23
+ # project/
24
+ # init.rb
25
+ # lib/
26
+ # |--things/
27
+ # |-- foo.rb
28
+ # |-- bar.rb
29
+ # |--factories/
30
+ # |-- bar_factory.rb
24
31
  #
25
- # init.rb
26
- # lib/
27
- # |--things/
28
- # |-- foo.rb
29
- # |-- bar.rb
30
- # |--factories/
31
- # |-- bar_factory.rb
32
- #
33
- # Given this project directory structure you could have the following code
32
+ # Given the above project directory structure you could have the following code
34
33
  # in init.rb:
35
34
  # factory_loader = FactoryLoader.new("lib/factories")
36
35
  # factory_loader.load("lib/things")
37
36
  #
38
37
  # The first call constructs a factory loader telling it which directory is used
39
- # to store custom factories.
38
+ # to store developer-written custom factories.
40
39
  #
41
- # The second call will create a factory for each *.rb file in the lib/things/
42
- # directory. So for the foo.rb file a FooFactory class will be created
43
- # which can be used to wrap creation of Foo objects. The generated factory
40
+ # The second call will create a in-memory factory class for each *.rb file
41
+ # in the lib/things/ directory. A FooFactory class will be created to
42
+ # correspond with the foo.rb file. The generated factory
44
43
  # will provide a #create method which will pass along all arguments to
45
44
  # the constructor of the object it wraps. So...
46
45
  # FooFactory.new.create :a => :b
47
46
  # is the same as:
48
47
  # Foo.new :a => :b
49
48
  #
50
- # A FooFactory will be created, but a BarFactory will not. This is because
49
+ # A BarFactory will NOT be created. This is because
51
50
  # we told the FactoryLoader that custom factories are storied in lib/factories/
52
- # and a bar_factory.rb exists there, so FactoryLoader assumes you want to use
53
- # a custom factory.
51
+ # and a bar_factory.rb file exists there, so FactoryLoader assumes you want to use
52
+ # a custom factory. It also assumes that the class inside of bar_factory.rb is BarFactory.
53
+ #
54
+ # FactoryLoader dynamically creates the factory classes -- they are not written
55
+ # to disk. FactoryLoader also uses file naming conventions to determine
56
+ # what to do. For example:
57
+ # foo.rb => FooFactory
58
+ # crazy_dolphins.rb => CrazyDolphinsFactory
59
+ #
60
+ # === Factory.new
61
+ # The dynamically created factories are CLASSES and create is an INSTANCE method on them. You
62
+ # have to construct a factory in order to use it. This is so the factories themselves can be easily used in dependency injection
63
+ # frameworks.
64
+ #
65
+ # === Public Git repository:
66
+ # git://github.com/zdennis/factory_loader.git
67
+ #
68
+ # === Homepage:
69
+ # http://www.continuousthinking.com/factory_loader
70
+ #
71
+ # === Author:
72
+ # * Zach Dennis at Mutually Human Software (zach.dennis@gmail.com, zdennis@mutuallyhuman.com)
54
73
  #
55
- # Author: Zach Dennis, zdennis at mutuallyhuman dot com
74
+ # === Special Thanks
75
+ # * Dave Crosby at Atomic Object
76
+ # * Ryan Fogle at Atomic Object
56
77
  class FactoryLoader
57
- VERSION = "0.1.0"
78
+ VERSION = "0.1.1"
58
79
 
80
+ # Constructs a FactoryLoader. The passed in factory_paths are searched recursively.
59
81
  def initialize(*factory_paths)
60
82
  @factory_paths = factory_paths.map{ |f| File.expand_path(f) }
61
83
  end
62
84
 
85
+ # Creates factory classes based on searching filenames in the passed in directory
86
+ # and comparing them against factory file names in the passed in factory_paths
87
+ # given to the constructor.
63
88
  def load(directory) # :nodoc:
64
89
  Dir[directory + "/**/*.rb"].each do |file|
65
90
  object_filename = File.basename(file, ".rb")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_loader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zach Dennis
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-03-17 00:00:00 -04:00
12
+ date: 2008-03-18 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency