fabrication 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.markdown CHANGED
@@ -80,6 +80,10 @@ Sometimes you don't actually need to save an option when it is created but just
80
80
 
81
81
  Fabricate.build(:company, :name => "Hashrocket")
82
82
 
83
+ You can also fabricate the object as an attribute hash instead of an actual instance. This is useful for controller or API testing where the receiver wants a hash representation of the object. If you have activesupport it will be a HashWithIndifferentAccess, otherwise it will be a regular Ruby Hash.
84
+
85
+ Fabricate.attributes_for(:company)
86
+
83
87
  ### Sequences ###
84
88
 
85
89
  Sometimes you need a sequence of numbers while you're generating data. Fabrication provides you with an easy and flexible means for keeping track of sequences.
@@ -100,12 +104,12 @@ And in a semi-real use case, it would look something like this:
100
104
 
101
105
  Fabricate(:person) do
102
106
  ssn { Fabricate.sequence :ssn, 111111111 }
103
- email { Fabricate.sequence :email { |i| "user#{i}@example.com" } }
107
+ email { Fabricate.sequence(:email) { |i| "user#{i}@example.com" } }
104
108
  end
105
109
 
106
110
  ### Contributing ###
107
111
 
108
- I (paulelliott) am actively maintaining this project. If you would like contribute, please fork the project, make your changes on a feature branch, and submit a pull request.
112
+ I (paulelliott) am actively maintaining this project. If you would like to contribute, please fork the project, make your changes on a feature branch, and submit a pull request.
109
113
 
110
114
  To run rake successfully:
111
115
 
data/lib/fabrication.rb CHANGED
@@ -44,6 +44,14 @@ module Fabrication
44
44
  end
45
45
  end
46
46
 
47
+ def attributes_for(name, options)
48
+ hash = defined?(HashWithIndifferentAccess) ? HashWithIndifferentAccess.new : {}
49
+ fetch_schematic(name).attributes.inject(hash) do |hash, attribute|
50
+ value = attribute.value.respond_to?(:call) ? attribute.value.call : attribute.value
51
+ hash.merge(attribute.name => value)
52
+ end.merge(options)
53
+ end
54
+
47
55
  def find_definitions
48
56
  fabricator_file_paths = [
49
57
  File.join('test', 'fabricators'),
@@ -79,6 +87,17 @@ module Fabrication
79
87
 
80
88
  @@fabricators = nil
81
89
 
90
+ def fetch_schematic(name)
91
+ if fabricator = fabricators[name]
92
+ fabricator.schematic
93
+ else
94
+ # force finding definitions after setting @@fabricators to an empty array
95
+ Fabrication.send(:class_variable_set, :@@fabricators, nil) if Fabrication.fabricators.empty?
96
+ build(name)
97
+ fetch_schematic(name)
98
+ end
99
+ end
100
+
82
101
  end
83
102
 
84
103
  end
@@ -93,12 +112,20 @@ end
93
112
 
94
113
  class Fabricate
95
114
 
96
- def self.build(name, options={}, &block)
97
- Fabrication.generate(name, {:save => false}, options, &block)
98
- end
115
+ class << self
116
+
117
+ def build(name, options={}, &block)
118
+ Fabrication.generate(name, {:save => false}, options, &block)
119
+ end
120
+
121
+ def sequence(name, start=0, &block)
122
+ Fabrication.sequence(name, start, &block)
123
+ end
124
+
125
+ def attributes_for(name, options={})
126
+ Fabrication.attributes_for(name, options)
127
+ end
99
128
 
100
- def self.sequence(name, start=0, &block)
101
- Fabrication.sequence(name, start, &block)
102
129
  end
103
130
 
104
131
  end
@@ -19,7 +19,7 @@ class Fabrication::Generator::ActiveRecord < Fabrication::Generator::Base
19
19
  instance.instance_eval %<
20
20
  def #{method_name}
21
21
  original_value = @__#{method_name}_original.call
22
- if @__#{method_name}_block.present?
22
+ if @__#{method_name}_block
23
23
  if #{count} \>= 1
24
24
  original_value = #{method_name}= (1..#{count}).map { |i| @__#{method_name}_block.call(self, i) }
25
25
  else
@@ -35,7 +35,7 @@ class Fabrication::Schematic
35
35
 
36
36
  def method_missing(method_name, *args, &block)
37
37
  method_name = parse_method_name(method_name, args)
38
- if (attr = attribute(method_name)).present?
38
+ if (attr = attribute(method_name))
39
39
  if block_given?
40
40
  attr.params = args.first
41
41
  attr.value = block
@@ -3,7 +3,7 @@ class Fabrication::Support
3
3
  class << self
4
4
 
5
5
  def fabricatable?(name)
6
- Fabrication.fabricators.has_key?(name) || class_for(name).present?
6
+ Fabrication.fabricators.has_key?(name) || class_for(name)
7
7
  end
8
8
 
9
9
  def class_for(class_or_to_s)
@@ -1,3 +1,3 @@
1
1
  module Fabrication
2
- VERSION = '0.5.0'
2
+ VERSION = '0.6.0'
3
3
  end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'processing speed' do
4
+
5
+ context 'with activerecord objects' do
6
+
7
+ before do
8
+ # Fabricator(
9
+ end
10
+ end
11
+ end
@@ -333,4 +333,25 @@ describe Fabrication do
333
333
 
334
334
  end
335
335
 
336
+ describe "Fabricate.attributes_for" do
337
+
338
+ before(:all) do
339
+ Fabricator(:person) do
340
+ first_name "Paul"
341
+ last_name { "Elliott" }
342
+ end
343
+ end
344
+
345
+ let(:person) { Fabricate.attributes_for(:person) }
346
+
347
+ it 'has the first name as a parameter' do
348
+ person['first_name'].should == "Paul"
349
+ end
350
+
351
+ it 'has the last name as a parameter' do
352
+ person[:last_name].should == "Elliott"
353
+ end
354
+
355
+ end
356
+
336
357
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fabrication
3
3
  version: !ruby/object:Gem::Version
4
- hash: 11
4
+ hash: 7
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 5
8
+ - 6
9
9
  - 0
10
- version: 0.5.0
10
+ version: 0.6.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Paul Elliott
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-29 00:00:00 -04:00
18
+ date: 2010-07-31 00:00:00 -04:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -133,6 +133,7 @@ files:
133
133
  - lib/fabrication/support.rb
134
134
  - lib/fabrication/version.rb
135
135
  - lib/fabrication.rb
136
+ - spec/benchmark_spec.rb
136
137
  - spec/fabrication_spec.rb
137
138
  - spec/fabricator_spec.rb
138
139
  - spec/generator/active_record_spec.rb