stepford 0.0.6 → 0.1.0

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.
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