factory_girl_json 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NDk5ODJiZjYyZTZlMTYzZGQ5YjFkMjgzOWU1NWUyYWVjYTMyYzViNQ==
5
+ data.tar.gz: !binary |-
6
+ ZmQ4ZTY5ZDc3NmVkNzQ5YTlhMTVjYjQ0MGQxMmE5MDUxMGE1ZTQxYQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ OTUzNTA5MGFhMzM1MWUyNDg5OWE1NTRiY2I1ZjhkYWM0ZTc2ODNmOWJlODlh
10
+ NTkxZjBmOTI2ODVkOTQ4ZWIwNTkxZjJmMDMzMmZkMjNlNzE0ZjBjNjU0YTdk
11
+ YjM0ODJkNWNkZTMyZGFlNjgzNDk0M2NlYWZhYTgzOGNhOTQ2OTc=
12
+ data.tar.gz: !binary |-
13
+ MTVmZTZlMTFlZDZjMjc2ODI0YmQ3MzczNzU1NmRiNTMwZDVjNmVmYjM0ZmZh
14
+ YTZmNjA2ZGY5M2RjMWI1NzNlZGM2MmI4ODBhMjMyNzQ5MGY4ZWE4ZTE1ODQ3
15
+ NmE2NTg3ZDEzNTMwZmZiNDljNzU1NTk2MTVlYWI4NWFhN2Y1Yjk=
data/README.md CHANGED
@@ -42,7 +42,7 @@ You can add another option `json_serializer` which indicates which class will be
42
42
  age 12
43
43
  end
44
44
 
45
- factory :user_with_posts, parent: :user, json_serializer: UserSerializer do
45
+ factory :user_with_posts, parent: :user do
46
46
  after(:create) do |user|
47
47
  create :post, user: user
48
48
  end
@@ -56,59 +56,69 @@ You can add another option `json_serializer` which indicates which class will be
56
56
  end
57
57
 
58
58
  def to_json(options = {})
59
- posts = {posts: @user.posts.as_json}
60
- user = @user.as_json
61
- user['user'].merge! posts
62
- JSON.generate user
59
+ @user.to_json(include: :posts)
63
60
  end
64
61
  end
65
62
 
66
63
 
67
- Now if you run this command
64
+ There is one available rake task
68
65
 
69
- `RAILS_ENV=test bundle exec rake factory_girl_json:export['user']`
66
+ `RAILS_ENV=test bundle exec rake factory_girl_json:export[factory,size,serializer]` # Note: no space between rake arguments
70
67
 
71
- you will get a `user.json` file with data:
68
+ For example, running
69
+
70
+ `RAILS_ENV=test bundle exec rake factory_girl_json:export[user]`
71
+
72
+ will produce a `user.json` file with data:
72
73
 
73
74
  {
74
- "user": {
75
+ "age": 12,
76
+ "email": "useremail1@email.com",
77
+ "id": 1,
78
+ "name": "user name 1"
79
+ }
80
+
81
+ `RAILS_ENV=test bundle exec rake factory_girl_json:export[user,2]`
82
+
83
+ will produce a `2.user.json` file with data:
84
+
85
+ [
86
+ {
75
87
  "age": 12,
76
88
  "email": "useremail1@email.com",
77
89
  "id": 1,
78
90
  "name": "user name 1"
91
+ },
92
+ {
93
+ "age": 12,
94
+ "email": "useremail2@email.com",
95
+ "id": 2,
96
+ "name": "user name 2"
79
97
  }
80
- }
98
+ ]
81
99
 
82
- `RAILS_ENV=test bundle exec rake factory_girl_json:export['user_with_posts']`
100
+ `RAILS_ENV=test bundle exec rake factory_girl_json:export['user_with_posts',1,UserSerializer]`
83
101
 
84
- you will get a `user_with_posts.json` file with data:
102
+ you will get a `user_with_posts.user_serializer.json` file with data:
85
103
 
86
104
  {
87
- "user": {
88
- "age": 12,
89
- "email": "useremail1@email.com",
90
- "id": 1,
91
- "name": "user name 1",
92
- "posts": [
93
- {
94
- "post": {
95
- "body": "post body",
96
- "id": 1,
97
- "title": "post title",
98
- "user_id": 1
99
- }
100
- }
101
- ]
102
- }
105
+ "age": 12,
106
+ "email": "useremail1@email.com",
107
+ "id": 1,
108
+ "name": "user name 1",
109
+ "posts": [
110
+ {
111
+ "body": "post body",
112
+ "id": 1,
113
+ "title": "post title",
114
+ "user_id": 1
115
+ }
116
+ ]
103
117
  }
104
118
 
105
- ### All rake tasks
106
- rake factory_girl_json:all # Exports json fixtures for all FactoryGirl factories
107
- rake factory_girl_json:export[factory_name] # Exports json fixture for the selected FactoryGirl factory
108
- rake factory_girl_json:export_serialized # Exports json fixtures for FactoryGirl factories with the json_serializer option
109
119
 
110
120
  ### Default exporting paths
111
- if Rails is used it will write the json files to `spec\javascripts\fixtures\json` or `test\javascripts\fixtures\json`
121
+ if Rails is used it will write the json files to `spec/javascripts/fixtures/json` or `test/javascripts/fixtures/json`
112
122
  otherwise it uses the current path.
113
123
 
114
124
  ## Contributing
@@ -15,9 +15,10 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = FactoryGirlJson::VERSION
17
17
 
18
- gem.add_dependency "factory_girl"
18
+ gem.add_dependency "factory_girl", ">= 4.1"
19
19
  gem.add_dependency "json"
20
20
  gem.add_dependency "database_cleaner"
21
+ gem.add_dependency "activesupport", ">= 3"
21
22
  gem.add_development_dependency "rspec"
22
23
  gem.add_development_dependency "activerecord"
23
24
  gem.add_development_dependency "sqlite3"
@@ -1,7 +1,7 @@
1
1
  require 'factory_girl'
2
2
  require 'fileutils'
3
3
  require 'database_cleaner'
4
- require 'factory_girl_json/factory_girl_ext/valid_options'
4
+ require 'active_support/core_ext/string/inflections'
5
5
  require 'factory_girl_json/version'
6
6
  require 'factory_girl_json/exporter'
7
7
  require 'factory_girl_json/railtie' if defined? Rails
@@ -9,25 +9,14 @@ require 'factory_girl_json/railtie' if defined? Rails
9
9
  module FactoryGirlJson
10
10
  class << self
11
11
 
12
- def export(factory_name)
12
+ def export(factory_name, size = nil, serializer = nil)
13
13
  clean
14
- Exporter.new(factory_name).export
15
- end
16
-
17
- def export_all
18
- clean
19
- Exporter.new(:all).export
20
- end
21
-
22
- def export_serialized
23
- clean
24
- Exporter.new(:serialized).export
14
+ Exporter.new(factory_name, size, serializer).export
25
15
  end
26
16
 
27
17
  def clean
28
18
  DatabaseCleaner.clean_with :truncation
29
19
  DatabaseCleaner.clean
30
20
  end
31
-
32
21
  end
33
22
  end
@@ -1,73 +1,67 @@
1
1
  module FactoryGirlJson
2
2
  class Exporter
3
- def initialize(factories)
4
- @factories = find_factories(factories)
5
- $stdout.puts "Exporting factories: #{@factories.map(&:name)}"
3
+ def initialize(factory, size, serializer)
4
+ @factory = FactoryGirl.factories.find(factory.to_sym)
5
+ @size = size ? size.to_i : 1
6
+ @serializer = serializer.constantize if serializer
6
7
  end
7
8
 
8
9
  def export
9
- @factories.each do |factory|
10
- export_factory(factory)
11
- end
12
- end
13
-
14
- def export_factory(factory)
15
- $stdout.puts "Exporting factory #{factory.name}"
16
- path = file_path(factory)
10
+ $stdout.puts "Exporting factory #{@factory.name}"
11
+ path = file_path
17
12
  unless File.exists? path
18
- model = factory.run(:create, {})
19
- json = to_json(model, factory.json_serializer)
20
- write_file(json, path)
21
- else
22
- $stderr.puts "File #{factory.name}.json exists, delete file and run again to rewrite"
23
- end
24
- end
13
+ model_or_collection = if @size > 1
14
+ FactoryGirl.create_list(@factory.name.to_sym, @size)
15
+ else
16
+ @factory.run(:create, {})
17
+ end
25
18
 
26
- def to_json(model, serializer = nil)
27
- if serializer
28
- serializer.new(model).to_json
19
+ json = to_json(model_or_collection)
20
+ write_file(json, path)
29
21
  else
30
- model.to_json
22
+ $stderr.puts "File #{file_name} exists, delete file and run again to rewrite"
31
23
  end
32
24
  end
33
25
 
34
- def write_file(json, path)
35
- FileUtils.mkdir_p File.dirname(path)
36
- File.open(path, 'w') do |file|
37
- file.puts JSON.pretty_generate(JSON.parse(json))
38
- end
39
- $stdout.puts "Wrote file #{path}"
40
- end
26
+ private
41
27
 
42
- def file_path(factory)
43
- if defined? Rails
44
- if Dir.exists? Rails.root.join('spec').to_s
45
- Rails.root.join("spec/javascripts/fixtures/json/#{factory.name}.json").to_s
46
- elsif Dir.exists? Rails.root.join('test').to_s
47
- Rails.root.join("test/javascripts/fixtures/json/#{factory.name}.json").to_s
28
+ def to_json(model_or_collection)
29
+ if @serializer
30
+ @serializer.new(model_or_collection).to_json
48
31
  else
49
- "#{Dir.pwd}/#{factory.name}.json"
32
+ model_or_collection.to_json
50
33
  end
51
- else
52
- "#{Dir.pwd}/#{factory.name}.json"
53
34
  end
54
- end
55
35
 
56
- private
36
+ def write_file(json, path)
37
+ FileUtils.mkdir_p File.dirname(path)
38
+ File.open(path, 'w') do |file|
39
+ file.puts JSON.pretty_generate(JSON.parse(json))
40
+ end
41
+ $stdout.puts "Wrote file #{path}"
42
+ end
57
43
 
58
- def find_factories(factories)
59
- case factories
60
- when :all
61
- FactoryGirl.factories.to_a
62
- when :serialized
63
- FactoryGirl.factories.to_a.select { |f| f.json_serializer }
64
- else
65
- if factories.is_a? Array
66
- FactoryGirl.factories.to_a.select { |f| factories.include? f.name.to_s }
44
+ def file_path
45
+ if defined? Rails
46
+ if Dir.exists? Rails.root.join('spec').to_s
47
+ Rails.root.join("spec/javascripts/fixtures/json/#{file_name}").to_s
48
+ elsif Dir.exists? Rails.root.join('test').to_s
49
+ Rails.root.join("test/javascripts/fixtures/json/#{file_name}").to_s
50
+ else
51
+ "#{Dir.pwd}/#{file_name}"
52
+ end
67
53
  else
68
- [FactoryGirl.factories.find(factories.to_sym)]
54
+ "#{Dir.pwd}/#{file_name}"
69
55
  end
70
56
  end
71
- end
57
+
58
+ def file_name
59
+ name = ''
60
+ name << "#{@size}." if @size > 1
61
+ name << "#{@factory.name}"
62
+ name << ".#{@serializer.to_s.underscore}".gsub('/','_') if @serializer
63
+ name << '.json'
64
+ name
65
+ end
72
66
  end
73
67
  end
@@ -1,3 +1,3 @@
1
1
  module FactoryGirlJson
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -1,18 +1,7 @@
1
- namespace :factory_girl_json do
2
-
3
- desc 'Exports json fixtures for all FactoryGirl factories'
4
- task :all => :environment do
5
- FactoryGirlJson.export_all
6
- end
7
-
1
+ namespace :factory_girl_json do
8
2
  desc 'Exports json fixture for the selected FactoryGirl factory'
9
- task :export, [:factory_name] => :environment do |t, args|
10
- FactoryGirlJson.export args[:factory_name]
11
- end
12
-
13
- desc 'Exports json fixtures for FactoryGirl factories with the json_serializer option'
14
- task :export_serialized => :environment do
15
- FactoryGirlJson.export_serialized
3
+ task :export, [:factory_name, :size, :serializer] => :environment do |t, args|
4
+ FactoryGirlJson.export args[:factory_name], args[:size], args[:serializer]
16
5
  end
17
6
  end
18
7
 
@@ -5,7 +5,7 @@ FactoryGirl.define do
5
5
  age 12
6
6
  end
7
7
 
8
- factory :user_with_posts, parent: :user, json_serializer: UserSerializer do
8
+ factory :user_with_posts, parent: :user do
9
9
  after(:create) do |user|
10
10
  create :post, user: user
11
11
  end
@@ -1,58 +1,67 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe FactoryGirlJson do
3
+ describe FactoryGirlJson do
4
+ after(:each) do
5
+ Dir['*.json'].each {|f| File.delete(f) }
6
+ end
7
+
4
8
  it "should genarate a file" do
5
9
  FactoryGirlJson.export('user')
6
10
  path = "#{Dir.pwd}/user.json"
7
11
  File.exists?(path).should be_true
8
- File.delete path
9
12
  end
10
13
 
11
14
  it "should genarate a file with user json" do
12
15
  FactoryGirlJson.export('user')
13
16
  path = "#{Dir.pwd}/user.json"
14
17
  File.exists?(path).should be_true
15
- hash = JSON.parse(File.read(path))
16
- user = hash['user']
18
+ user = JSON.parse(File.read(path))
17
19
  user['id'].should_not be_nil
18
20
  user['name'].should_not be_nil
19
21
  user['email'].should_not be_nil
20
22
  user['age'].should_not be_nil
21
- File.delete path
22
23
  end
23
24
 
24
- it "should use json_serializer if present" do
25
- FactoryGirlJson.export('user_with_posts')
26
- path = "#{Dir.pwd}/user_with_posts.json"
25
+ it "should use the given serializer if present" do
26
+ FactoryGirlJson.export('user_with_posts', 1, 'UserSerializer')
27
+ path = "#{Dir.pwd}/user_with_posts.user_serializer.json"
27
28
  File.exists?(path).should be_true
28
- hash = JSON.parse(File.read(path))
29
- user = hash['user']
29
+ user = JSON.parse(File.read(path))
30
30
  user['id'].should_not be_nil
31
31
  user['name'].should_not be_nil
32
32
  user['email'].should_not be_nil
33
33
  user['age'].should_not be_nil
34
34
  user['posts'].should_not be_nil
35
- user['posts'][0]['post']['title'].should_not be_nil
36
- File.delete path
35
+ user['posts'][0]['title'].should_not be_nil
37
36
  end
38
37
 
39
-
40
- describe ".export_all" do
41
- it "should export three files" do
42
- FactoryGirlJson.export_all
43
- Dir['*.json'].size.should eq(3)
44
- Dir['*.json'].each {|f| File.delete(f) }
38
+ describe "exporting collections" do
39
+ it "should export the requested size" do
40
+ FactoryGirlJson.export('user', 4)
41
+ path = "#{Dir.pwd}/4.user.json"
42
+ File.exists?(path).should be_true
43
+ users = JSON.parse(File.read(path))
44
+ users.size.should be(4)
45
+ user = users.first
46
+ user['id'].should_not be_nil
47
+ user['name'].should_not be_nil
48
+ user['email'].should_not be_nil
49
+ user['age'].should_not be_nil
45
50
  end
46
- end
47
-
48
51
 
49
- describe ".export_serialized" do
50
- it "should export three files" do
51
- FactoryGirlJson.export_serialized
52
- Dir['*.json'].size.should eq(1)
53
- Dir['*.json'].first.should eq('user_with_posts.json')
54
- Dir['*.json'].each {|f| File.delete(f) }
52
+ it "should export the requested size with serializer" do
53
+ FactoryGirlJson.export('user_with_posts', 2, 'UserSerializer')
54
+ path = "#{Dir.pwd}/2.user_with_posts.user_serializer.json"
55
+ File.exists?(path).should be_true
56
+ users = JSON.parse(File.read(path))
57
+ users.size.should be(2)
58
+ user = users.first
59
+ user['id'].should_not be_nil
60
+ user['name'].should_not be_nil
61
+ user['email'].should_not be_nil
62
+ user['age'].should_not be_nil
63
+ user['posts'].should_not be_nil
64
+ user['posts'][0]['title'].should_not be_nil
55
65
  end
56
66
  end
57
-
58
67
  end
@@ -4,9 +4,6 @@ class UserSerializer
4
4
  end
5
5
 
6
6
  def to_json(options = {})
7
- posts = {posts: @user.posts.as_json}
8
- user = @user.as_json
9
- user['user'].merge! posts
10
- JSON.generate user
7
+ @user.to_json(include: :posts)
11
8
  end
12
9
  end
@@ -6,6 +6,8 @@ require 'serializers/user_serializer'
6
6
  require 'factories/posts'
7
7
  require 'factories/users'
8
8
 
9
+ ActiveRecord::Base.include_root_in_json = false
10
+
9
11
  ActiveRecord::Base.establish_connection(
10
12
  :adapter => 'sqlite3',
11
13
  :database => ':memory:'
@@ -26,4 +28,9 @@ ActiveRecord::Schema.define do
26
28
  t.text :body
27
29
  end
28
30
 
31
+ end
32
+
33
+ RSpec.configure do |config|
34
+ config.filter_run :focus => true
35
+ config.run_all_when_everything_filtered = true
29
36
  end
metadata CHANGED
@@ -1,36 +1,32 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factory_girl_json
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Nikos Gereoudakis
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-10-02 00:00:00.000000000 Z
11
+ date: 2013-10-13 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: factory_girl
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: '4.1'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
29
- version: '0'
26
+ version: '4.1'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: json
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: database_cleaner
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,15 +48,27 @@ dependencies:
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: activesupport
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '3'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '3'
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: rspec
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
73
  - - ! '>='
68
74
  - !ruby/object:Gem::Version
@@ -70,7 +76,6 @@ dependencies:
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
80
  - - ! '>='
76
81
  - !ruby/object:Gem::Version
@@ -78,7 +83,6 @@ dependencies:
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: activerecord
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
87
  - - ! '>='
84
88
  - !ruby/object:Gem::Version
@@ -86,7 +90,6 @@ dependencies:
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
94
  - - ! '>='
92
95
  - !ruby/object:Gem::Version
@@ -94,7 +97,6 @@ dependencies:
94
97
  - !ruby/object:Gem::Dependency
95
98
  name: sqlite3
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
101
  - - ! '>='
100
102
  - !ruby/object:Gem::Version
@@ -102,7 +104,6 @@ dependencies:
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
108
  - - ! '>='
108
109
  - !ruby/object:Gem::Version
@@ -123,7 +124,6 @@ files:
123
124
  - factory_girl_json.gemspec
124
125
  - lib/factory_girl_json.rb
125
126
  - lib/factory_girl_json/exporter.rb
126
- - lib/factory_girl_json/factory_girl_ext/valid_options.rb
127
127
  - lib/factory_girl_json/railtie.rb
128
128
  - lib/factory_girl_json/version.rb
129
129
  - lib/tasks/factory_girl_json.rake
@@ -136,27 +136,26 @@ files:
136
136
  - spec/spec_helper.rb
137
137
  homepage: https://github.com/stream7/factory_girl_json
138
138
  licenses: []
139
+ metadata: {}
139
140
  post_install_message:
140
141
  rdoc_options: []
141
142
  require_paths:
142
143
  - lib
143
144
  required_ruby_version: !ruby/object:Gem::Requirement
144
- none: false
145
145
  requirements:
146
146
  - - ! '>='
147
147
  - !ruby/object:Gem::Version
148
148
  version: '0'
149
149
  required_rubygems_version: !ruby/object:Gem::Requirement
150
- none: false
151
150
  requirements:
152
151
  - - ! '>='
153
152
  - !ruby/object:Gem::Version
154
153
  version: '0'
155
154
  requirements: []
156
155
  rubyforge_project:
157
- rubygems_version: 1.8.24
156
+ rubygems_version: 2.1.0
158
157
  signing_key:
159
- specification_version: 3
158
+ specification_version: 4
160
159
  summary: Create json fixtures from your FactoryGirl factories
161
160
  test_files:
162
161
  - spec/factories/posts.rb
@@ -1,12 +0,0 @@
1
- module FactoryGirl
2
- class Factory
3
- attr_reader :json_serializer
4
-
5
- private
6
-
7
- def assert_valid_options(options)
8
- options.assert_valid_keys(:class, :parent, :aliases, :traits, :json_serializer)
9
- @json_serializer = options[:json_serializer]
10
- end
11
- end
12
- end