stepford 0.0.6 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -8,7 +8,13 @@ Stepford is a CLI to create starter [Factory Girl][factory_girl] factories for a
8
8
  FactoryGirl.define do
9
9
 
10
10
  factory :item do
11
+ ignore do
12
+ subpart_count 2
13
+ end
11
14
  association :created_by, factory: :user
15
+ after(:create) do |item, evaluator|
16
+ FactoryGirl.create_list :subparts, evaluator.subpart_count, item: item
17
+ end
12
18
  created_at { 2.weeks.ago }
13
19
  name 'Test Name'
14
20
  price 1.23
@@ -3,8 +3,8 @@ require 'stepford/common'
3
3
  module Stepford
4
4
  class FactoryGirl
5
5
  def self.generate_factories(options={})
6
+ # guard against circular references
6
7
  factories = {}
7
-
8
8
  expected = {}
9
9
  Dir[File.join('app','models','*.rb').to_s].each do |filename|
10
10
  model_name = File.basename(filename).sub(/.rb$/, '')
@@ -14,7 +14,36 @@ module Stepford
14
14
  factory = (factories[model_name.to_sym] ||= [])
15
15
  primary_keys = Array.wrap(model_class.primary_key).collect{|pk|pk.to_sym}
16
16
  foreign_keys = []
17
- model_class.reflections.collect {|a,b| (expected[b.class_name.underscore.to_sym] ||= []) << model_name; foreign_keys << b.foreign_key.to_sym; "association #{b.name.to_sym.inspect}, factory: #{b.class_name.underscore.to_sym.inspect}"}.sort.each {|l|factory << l}
17
+ ignored = []
18
+ after_create = []
19
+ association_lines = model_class.reflections.collect {|association_name, reflection|
20
+ (expected[reflection.class_name.underscore.to_sym] ||= []) << model_name
21
+ foreign_keys << reflection.foreign_key.to_sym
22
+ assc_sym = reflection.name.to_sym
23
+ clas_sym = reflection.class_name.underscore.to_sym
24
+ if reflection.macro == :has_many
25
+ ignored << clas_sym
26
+ after_create << "FactoryGirl.create_list #{assc_sym.inspect}, evaluator.#{clas_sym}_count, #{model_name}: #{model_name}"
27
+ nil
28
+ else
29
+ "association #{assc_sym.inspect}#{assc_sym != clas_sym ? ", factory: #{clas_sym.inspect}" : ''}"
30
+ end
31
+ }.compact.sort
32
+ if ignored.size > 0
33
+ factory << 'ignore do'
34
+ ignored.each do |name|
35
+ factory << " #{name}_count 2"
36
+ end
37
+ factory << 'end'
38
+ end
39
+ association_lines.each {|l|factory << l}
40
+ if after_create.size > 0
41
+ factory << "after(:create) do |#{model_name}, evaluator|"
42
+ after_create.each do |line|
43
+ factory << " #{line}"
44
+ end
45
+ factory << 'end'
46
+ end
18
47
  model_class.columns.collect {|c| "#{c.name.to_sym} #{Stepford::Common.value_for(c.name, c.type)}" unless foreign_keys.include?(c.name.to_sym) || primary_keys.include?(c.name.to_sym)}.compact.sort.each {|l|factory << l}
19
48
  end
20
49
 
@@ -1,3 +1,3 @@
1
1
  module Stepford
2
- VERSION = '0.0.6'
2
+ VERSION = '0.1.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stepford
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-01 00:00:00.000000000 Z
12
+ date: 2012-11-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor