factory_factory_girl 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +10 -0
- data/.rspec +2 -0
- data/.travis.yml +6 -0
- data/Gemfile +3 -0
- data/README.md +96 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +7 -0
- data/factory_factory_girl.gemspec +38 -0
- data/lib/factory_factory_girl.rb +10 -0
- data/lib/factory_factory_girl/configuration.rb +29 -0
- data/lib/factory_factory_girl/generators/model_generator.rb +79 -0
- data/lib/factory_factory_girl/railtie.rb +20 -0
- data/lib/factory_factory_girl/version.rb +3 -0
- metadata +170 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: fb2510f65b12bb72ee573d36244d2cbcb0528ba0
|
4
|
+
data.tar.gz: 2ee54ba5a30a7cc760cbf8a45290cd29e2ed2ca2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a68e11ad3489ff6146a914f4ad7fae2a7641dc8d3a08160d8dbbf1ada53ff812cb74321cee2126d5c45ab06bc42a641cb04a4363d6eb5468c55718d2eb402bce
|
7
|
+
data.tar.gz: aa283839221ba96bc7aec64fc73f69c25b0335c493201598e1a127335b4e83b42699c5cfac32cb1ad50f139fe7fcf578beb3eb6c46b6100e9b21c9f4cae9dd10
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
[![Build Status](https://travis-ci.org/st0012/factory_factory_girl.svg?branch=master)](https://travis-ci.org/st0012/factory_factory_girl)
|
2
|
+
[![Code Climate](https://codeclimate.com/github/st0012/factory_factory_girl/badges/gpa.svg)](https://codeclimate.com/github/st0012/factory_factory_girl)
|
3
|
+
|
4
|
+
# FactoryFactoryGirl
|
5
|
+
|
6
|
+
## Notice!!! This gem is still under development, it's very buggy!!!!!
|
7
|
+
|
8
|
+
## Mission
|
9
|
+
|
10
|
+
FactoryGirl is a very useful gem, which lets us generate test data more efficiently. However, if you start new projects very frequently, you will feel painful writing every project's factory, especially when most of them have some common attributes.
|
11
|
+
|
12
|
+
For example, you use `FFaker::Job.title` to generate all your `name` or `title`'s value, and use `FFaker::Lorem.paragraph` to generate the `description` or `content`'s value. Then you just need to cope & paste those methods in serveral columns, in serveral model's factories, or even in serveral project's factories.
|
13
|
+
|
14
|
+
So the mission of this gem is helping people generate their factory more quikly, with some pre-defined rules like:
|
15
|
+
|
16
|
+
```ruby
|
17
|
+
FactoryFactoryGirl.configure do |config|
|
18
|
+
config.match(/name|title/, function: "FFaker::Job.title")
|
19
|
+
config.match(/content|descripton/, function: "FFaker::Lorem.paragraph")
|
20
|
+
end
|
21
|
+
```
|
22
|
+
|
23
|
+
And type:
|
24
|
+
|
25
|
+
```
|
26
|
+
$ rails g factory_factory_girl:model post
|
27
|
+
|
28
|
+
# or
|
29
|
+
|
30
|
+
$ rails g factory_factory_girl:model job
|
31
|
+
```
|
32
|
+
|
33
|
+
Then you will see you factory file have some pre-defined value.
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
FactoryGirl.define do
|
37
|
+
........
|
38
|
+
name { FFaker::Job.title }
|
39
|
+
content { FFaker::Lorem.paragraph }
|
40
|
+
.......
|
41
|
+
end
|
42
|
+
```
|
43
|
+
|
44
|
+
I think this is great because the rule you defined here, can be use in any other projects, and you won't need to copy & paste the setting of those frequently seen column's.
|
45
|
+
|
46
|
+
|
47
|
+
## Installation
|
48
|
+
|
49
|
+
Add this line to your application's Gemfile:
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
gem 'factory_factory_girl'
|
53
|
+
```
|
54
|
+
|
55
|
+
And then execute:
|
56
|
+
|
57
|
+
$ bundle
|
58
|
+
|
59
|
+
Or install it yourself as:
|
60
|
+
|
61
|
+
$ gem install factory_factory_girl
|
62
|
+
|
63
|
+
## Usage
|
64
|
+
|
65
|
+
Set your generation rule in `initializers/factory_factory_girl` like
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
FactoryFactoryGirl.configure do |config|
|
69
|
+
config.match(/name|title/, function: "FFaker::Job.title")
|
70
|
+
config.match(/content|descripton/, function: "FFaker::Lorem.paragraph")
|
71
|
+
config.match(/id/, value: "10")
|
72
|
+
end
|
73
|
+
```
|
74
|
+
|
75
|
+
And run
|
76
|
+
|
77
|
+
```
|
78
|
+
$ rails g factory_factory_girl:model YOUR_MODEL
|
79
|
+
```
|
80
|
+
|
81
|
+
Notice that the default directory is `test/factories` (this is inherit from `factory_girl_rails`), so if you put your factories somewhere else, you need to specify it like
|
82
|
+
|
83
|
+
```
|
84
|
+
$ rails g factory_factory_girl:model YOUR_MODEL --dir=spec/factories
|
85
|
+
```
|
86
|
+
|
87
|
+
## Development
|
88
|
+
|
89
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
90
|
+
|
91
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
92
|
+
|
93
|
+
## Contributing
|
94
|
+
|
95
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/factory_factory_girl.
|
96
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "factory_factory_girl"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "pry"
|
14
|
+
Pry.start
|
data/bin/setup
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'factory_factory_girl/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "factory_factory_girl"
|
8
|
+
spec.version = FactoryFactoryGirl::VERSION
|
9
|
+
spec.authors = ["Stan Low"]
|
10
|
+
spec.email = ["stan001212@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{A gem that helps you generate your factory files.}
|
13
|
+
spec.description = %q{A gem that helps you generate your factory files.}
|
14
|
+
spec.homepage = "https://github.com/st0012/factory_factory_girl"
|
15
|
+
|
16
|
+
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
|
17
|
+
# delete this section to allow pushing this gem to any host.
|
18
|
+
# if spec.respond_to?(:metadata)
|
19
|
+
# spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
|
20
|
+
# else
|
21
|
+
# raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
|
22
|
+
# end
|
23
|
+
|
24
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
25
|
+
spec.bindir = "exe"
|
26
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
27
|
+
spec.require_paths = ["lib"]
|
28
|
+
|
29
|
+
spec.add_dependency "factory_girl_rails", ">= 4.5.0"
|
30
|
+
spec.add_dependency('railties', '>= 3.0.0')
|
31
|
+
|
32
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
33
|
+
spec.add_development_dependency "rspec", ">= 3.0"
|
34
|
+
spec.add_development_dependency "generator_spec"
|
35
|
+
spec.add_development_dependency "pry"
|
36
|
+
spec.add_development_dependency "activerecord", ">= 3.0"
|
37
|
+
spec.add_development_dependency "sqlite3"
|
38
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require "rails/generators"
|
2
|
+
|
3
|
+
require "factory_factory_girl/version"
|
4
|
+
require "factory_factory_girl/configuration"
|
5
|
+
require "factory_factory_girl/railtie"
|
6
|
+
require "factory_factory_girl/generators/model_generator"
|
7
|
+
|
8
|
+
module FactoryFactoryGirl
|
9
|
+
# Your code goes here...
|
10
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module FactoryFactoryGirl
|
2
|
+
class << self
|
3
|
+
attr_accessor :configuration
|
4
|
+
|
5
|
+
def configure
|
6
|
+
self.configuration ||= Configuration.new
|
7
|
+
yield(configuration) if block_given?
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Configuration
|
12
|
+
attr_accessor :rules, :rails_options
|
13
|
+
|
14
|
+
def initialize
|
15
|
+
@rules = []
|
16
|
+
@rails_options = {}
|
17
|
+
end
|
18
|
+
|
19
|
+
def match(rule, value: nil, function: nil)
|
20
|
+
raise "Need to give attribute or process" if value.nil? && function.nil?
|
21
|
+
|
22
|
+
if value
|
23
|
+
rules << { rule: rule, value: value }
|
24
|
+
else
|
25
|
+
rules << { rule: rule, function: function }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
require "factory_girl_rails"
|
3
|
+
require 'generators/factory_girl/model/model_generator'
|
4
|
+
|
5
|
+
module FactoryFactoryGirl
|
6
|
+
module Generators
|
7
|
+
class ModelGenerator < FactoryGirl::Generators::ModelGenerator
|
8
|
+
SKIPED_COLUMN = %w{id created_at updated_at}
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def factory_attributes
|
13
|
+
class_name.constantize.columns.map do |attribute|
|
14
|
+
unless SKIPED_COLUMN.include? attribute.name
|
15
|
+
"#{attribute.name} #{set_column(attribute)}"
|
16
|
+
end
|
17
|
+
end.compact.join("\n")
|
18
|
+
end
|
19
|
+
|
20
|
+
def set_column(attribute)
|
21
|
+
match_results = rules.map do |rule|
|
22
|
+
if attribute.name.match(rule[:rule])
|
23
|
+
rule
|
24
|
+
end
|
25
|
+
end.compact
|
26
|
+
|
27
|
+
if applied_rule = match_results.first
|
28
|
+
if applied_rule[:value]
|
29
|
+
transfer_value_type(applied_rule[:value], attribute.type.to_s)
|
30
|
+
else
|
31
|
+
"{ #{applied_rule[:function]} }"
|
32
|
+
end
|
33
|
+
else
|
34
|
+
default_value(attribute)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def transfer_value_type(value, type)
|
39
|
+
case type
|
40
|
+
when "string" || "text"
|
41
|
+
"\"#{value}\""
|
42
|
+
when "integer"
|
43
|
+
value.to_i
|
44
|
+
else
|
45
|
+
value
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def default_value(attribute)
|
50
|
+
if attribute.default
|
51
|
+
attribute.default
|
52
|
+
else
|
53
|
+
case attribute.type.to_s
|
54
|
+
when "string"
|
55
|
+
"\"MyString\""
|
56
|
+
when "integer"
|
57
|
+
1
|
58
|
+
when "text"
|
59
|
+
"\"MyText\""
|
60
|
+
when "boolean"
|
61
|
+
true
|
62
|
+
when "datetime"
|
63
|
+
"\"#{Time.now}\""
|
64
|
+
else
|
65
|
+
nil
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def rules
|
71
|
+
if @rules
|
72
|
+
@rules
|
73
|
+
else
|
74
|
+
FactoryFactoryGirl.configuration.rules
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'factory_girl'
|
2
|
+
require 'factory_factory_girl/configuration'
|
3
|
+
require 'rails'
|
4
|
+
|
5
|
+
module FactoryGirl
|
6
|
+
class Railtie < Rails::Railtie
|
7
|
+
|
8
|
+
initializer "factory_factory_girl.get_test_framework" do
|
9
|
+
FactoryFactoryGirl.configure do |c|
|
10
|
+
c.rails_options = if config.respond_to?(:app_generators)
|
11
|
+
config.app_generators.options[:rails]
|
12
|
+
else
|
13
|
+
config.generators.options[:rails]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
|
metadata
ADDED
@@ -0,0 +1,170 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: factory_factory_girl
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.5
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Stan Low
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: factory_girl_rails
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 4.5.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 4.5.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: railties
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.0.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: generator_spec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: activerecord
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: sqlite3
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: A gem that helps you generate your factory files.
|
126
|
+
email:
|
127
|
+
- stan001212@gmail.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".gitignore"
|
133
|
+
- ".rspec"
|
134
|
+
- ".travis.yml"
|
135
|
+
- Gemfile
|
136
|
+
- README.md
|
137
|
+
- Rakefile
|
138
|
+
- bin/console
|
139
|
+
- bin/setup
|
140
|
+
- factory_factory_girl.gemspec
|
141
|
+
- lib/factory_factory_girl.rb
|
142
|
+
- lib/factory_factory_girl/configuration.rb
|
143
|
+
- lib/factory_factory_girl/generators/model_generator.rb
|
144
|
+
- lib/factory_factory_girl/railtie.rb
|
145
|
+
- lib/factory_factory_girl/version.rb
|
146
|
+
homepage: https://github.com/st0012/factory_factory_girl
|
147
|
+
licenses: []
|
148
|
+
metadata: {}
|
149
|
+
post_install_message:
|
150
|
+
rdoc_options: []
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
requirements: []
|
164
|
+
rubyforge_project:
|
165
|
+
rubygems_version: 2.4.5
|
166
|
+
signing_key:
|
167
|
+
specification_version: 4
|
168
|
+
summary: A gem that helps you generate your factory files.
|
169
|
+
test_files: []
|
170
|
+
has_rdoc:
|