to_factory 0.0.3 → 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.
Files changed (67) hide show
  1. data/.gitignore +6 -0
  2. data/.rspec +2 -1
  3. data/.travis.yml +23 -0
  4. data/Gemfile +3 -13
  5. data/README.md +59 -20
  6. data/Rakefile +20 -14
  7. data/bin/ci +2 -0
  8. data/bin/spec +2 -0
  9. data/lib/to_factory/collation.rb +34 -0
  10. data/lib/to_factory/config.rb +18 -0
  11. data/lib/to_factory/definition_group.rb +47 -0
  12. data/lib/to_factory/file_sync.rb +48 -0
  13. data/lib/to_factory/file_writer.rb +39 -0
  14. data/lib/to_factory/finders/factory.rb +17 -0
  15. data/lib/to_factory/finders/model.rb +47 -0
  16. data/lib/to_factory/generation/attribute.rb +52 -0
  17. data/lib/to_factory/generation/factory.rb +74 -0
  18. data/lib/to_factory/parsing/file.rb +38 -0
  19. data/lib/to_factory/parsing/new_syntax.rb +9 -0
  20. data/lib/to_factory/parsing/old_syntax.rb +9 -0
  21. data/lib/to_factory/parsing/syntax.rb +86 -0
  22. data/lib/to_factory/version.rb +1 -1
  23. data/lib/to_factory.rb +55 -1
  24. data/spec/db/migrate/{201108201012010100_create_users.rb → 1_create_users.rb} +0 -0
  25. data/spec/db/migrate/2_create_projects.rb +13 -0
  26. data/spec/db/migrate/3_create_not_namespaced.rb +11 -0
  27. data/spec/db/migrate/4_add_birthday_to_users.rb +9 -0
  28. data/spec/example_factories/new_syntax/admin.rb +6 -0
  29. data/spec/example_factories/new_syntax/admin_with_header.rb +8 -0
  30. data/spec/example_factories/new_syntax/project_with_header.rb +7 -0
  31. data/spec/example_factories/new_syntax/user.rb +6 -0
  32. data/spec/example_factories/new_syntax/user_admin.rb +13 -0
  33. data/spec/example_factories/new_syntax/user_admin_with_header.rb +15 -0
  34. data/spec/example_factories/new_syntax/user_with_header.rb +8 -0
  35. data/spec/example_factories/old_syntax/admin.rb +6 -0
  36. data/spec/example_factories/old_syntax/project_with_header.rb +5 -0
  37. data/spec/example_factories/old_syntax/user.rb +6 -0
  38. data/spec/example_factories/old_syntax/user_admin.rb +13 -0
  39. data/spec/example_factories/old_syntax/user_admin_with_header.rb +13 -0
  40. data/spec/example_factories/old_syntax/user_with_header.rb +6 -0
  41. data/spec/integration/config_spec.rb +19 -0
  42. data/spec/integration/file_sync_spec.rb +77 -0
  43. data/spec/integration/file_writer_spec.rb +16 -0
  44. data/spec/integration/generate_class_method_spec.rb +107 -0
  45. data/spec/integration/lint_spec.rb +16 -0
  46. data/spec/spec_helper.rb +90 -14
  47. data/spec/support/match_sexp.rb +24 -0
  48. data/spec/support/models/not_active_record.rb +2 -0
  49. data/spec/support/models/project.rb +3 -0
  50. data/spec/support/models/user.rb +3 -0
  51. data/spec/support/terse_expect_syntax.rb +23 -0
  52. data/spec/unit/collation_spec.rb +35 -0
  53. data/spec/unit/definition_group_spec.rb +19 -0
  54. data/spec/unit/file_writer_spec.rb +28 -0
  55. data/spec/unit/finders/factory_spec.rb +27 -0
  56. data/spec/unit/finders/model_spec.rb +28 -0
  57. data/spec/unit/generator_spec.rb +71 -0
  58. data/spec/unit/parsing/file_spec.rb +83 -0
  59. data/tmp/.keep +0 -0
  60. data/to_factory.gemspec +49 -22
  61. metadata +225 -25
  62. data/.rvmrc +0 -1
  63. data/Gemfile.lock +0 -113
  64. data/lib/to_factory/generator.rb +0 -115
  65. data/spec/config/database.yml +0 -2
  66. data/spec/db/test.sqlite +0 -0
  67. data/spec/generator_spec.rb +0 -166
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: to_factory
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 3
10
- version: 0.0.3
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Mark Burns
@@ -15,13 +15,58 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-08-22 00:00:00 +01:00
18
+ date: 2015-01-05 00:00:00 +00:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: factory_girl_rails
22
+ name: sqlite3
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 23
30
+ segments:
31
+ - 1
32
+ - 3
33
+ - 6
34
+ version: 1.3.6
35
+ type: :development
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: ruby-debug
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :development
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: database_cleaner
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ hash: 13
60
+ segments:
61
+ - 0
62
+ - 3
63
+ version: "0.3"
64
+ type: :development
65
+ version_requirements: *id003
66
+ - !ruby/object:Gem::Dependency
67
+ name: ruby2ruby
68
+ prerelease: false
69
+ requirement: &id004 !ruby/object:Gem::Requirement
25
70
  none: false
26
71
  requirements:
27
72
  - - ">="
@@ -31,11 +76,77 @@ dependencies:
31
76
  - 0
32
77
  version: "0"
33
78
  type: :runtime
34
- version_requirements: *id001
79
+ version_requirements: *id004
35
80
  - !ruby/object:Gem::Dependency
36
- name: rails
81
+ name: deep_merge
37
82
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
83
+ requirement: &id005 !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ hash: 3
89
+ segments:
90
+ - 0
91
+ version: "0"
92
+ type: :runtime
93
+ version_requirements: *id005
94
+ - !ruby/object:Gem::Dependency
95
+ name: activerecord
96
+ prerelease: false
97
+ requirement: &id006 !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">"
101
+ - !ruby/object:Gem::Version
102
+ hash: 3
103
+ segments:
104
+ - 2
105
+ - 0
106
+ version: "2.0"
107
+ - - <
108
+ - !ruby/object:Gem::Version
109
+ hash: 27
110
+ segments:
111
+ - 4
112
+ - 0
113
+ version: "4.0"
114
+ type: :runtime
115
+ version_requirements: *id006
116
+ - !ruby/object:Gem::Dependency
117
+ name: i18n
118
+ prerelease: false
119
+ requirement: &id007 !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - <
123
+ - !ruby/object:Gem::Version
124
+ hash: 5
125
+ segments:
126
+ - 0
127
+ - 7
128
+ version: "0.7"
129
+ type: :runtime
130
+ version_requirements: *id007
131
+ - !ruby/object:Gem::Dependency
132
+ name: factory_girl
133
+ prerelease: false
134
+ requirement: &id008 !ruby/object:Gem::Requirement
135
+ none: false
136
+ requirements:
137
+ - - <
138
+ - !ruby/object:Gem::Version
139
+ hash: 3
140
+ segments:
141
+ - 2
142
+ - 0
143
+ version: "2.0"
144
+ type: :development
145
+ version_requirements: *id008
146
+ - !ruby/object:Gem::Dependency
147
+ name: rspec
148
+ prerelease: false
149
+ requirement: &id009 !ruby/object:Gem::Requirement
39
150
  none: false
40
151
  requirements:
41
152
  - - ~>
@@ -45,9 +156,24 @@ dependencies:
45
156
  - 3
46
157
  - 0
47
158
  version: "3.0"
48
- type: :runtime
49
- version_requirements: *id002
50
- description: This gem gives the object.to_factory method to give a formatted string version of an ActiveRecord object that can be used by factory_girl
159
+ type: :development
160
+ version_requirements: *id009
161
+ - !ruby/object:Gem::Dependency
162
+ name: rake
163
+ prerelease: false
164
+ requirement: &id010 !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ~>
168
+ - !ruby/object:Gem::Version
169
+ hash: 35
170
+ segments:
171
+ - 10
172
+ - 0
173
+ version: "10.0"
174
+ type: :development
175
+ version_requirements: *id010
176
+ description: ActiveRecord::Base#to_factory method to create factory_girl definitions from real data
51
177
  email:
52
178
  - markthedeveloper@gmail.com
53
179
  executables: []
@@ -59,24 +185,68 @@ extra_rdoc_files: []
59
185
  files:
60
186
  - .gitignore
61
187
  - .rspec
62
- - .rvmrc
188
+ - .travis.yml
63
189
  - Gemfile
64
- - Gemfile.lock
65
190
  - README.md
66
191
  - Rakefile
192
+ - bin/ci
193
+ - bin/spec
67
194
  - lib/to_factory.rb
68
- - lib/to_factory/generator.rb
195
+ - lib/to_factory/collation.rb
196
+ - lib/to_factory/config.rb
197
+ - lib/to_factory/definition_group.rb
198
+ - lib/to_factory/file_sync.rb
199
+ - lib/to_factory/file_writer.rb
200
+ - lib/to_factory/finders/factory.rb
201
+ - lib/to_factory/finders/model.rb
202
+ - lib/to_factory/generation/attribute.rb
203
+ - lib/to_factory/generation/factory.rb
204
+ - lib/to_factory/parsing/file.rb
205
+ - lib/to_factory/parsing/new_syntax.rb
206
+ - lib/to_factory/parsing/old_syntax.rb
207
+ - lib/to_factory/parsing/syntax.rb
69
208
  - lib/to_factory/version.rb
70
- - spec/config/database.yml
71
- - spec/db/migrate/201108201012010100_create_users.rb
72
- - spec/db/test.sqlite
73
- - spec/generator_spec.rb
209
+ - spec/db/migrate/1_create_users.rb
210
+ - spec/db/migrate/2_create_projects.rb
211
+ - spec/db/migrate/3_create_not_namespaced.rb
212
+ - spec/db/migrate/4_add_birthday_to_users.rb
213
+ - spec/example_factories/new_syntax/admin.rb
214
+ - spec/example_factories/new_syntax/admin_with_header.rb
215
+ - spec/example_factories/new_syntax/project_with_header.rb
216
+ - spec/example_factories/new_syntax/user.rb
217
+ - spec/example_factories/new_syntax/user_admin.rb
218
+ - spec/example_factories/new_syntax/user_admin_with_header.rb
219
+ - spec/example_factories/new_syntax/user_with_header.rb
220
+ - spec/example_factories/old_syntax/admin.rb
221
+ - spec/example_factories/old_syntax/project_with_header.rb
222
+ - spec/example_factories/old_syntax/user.rb
223
+ - spec/example_factories/old_syntax/user_admin.rb
224
+ - spec/example_factories/old_syntax/user_admin_with_header.rb
225
+ - spec/example_factories/old_syntax/user_with_header.rb
226
+ - spec/integration/config_spec.rb
227
+ - spec/integration/file_sync_spec.rb
228
+ - spec/integration/file_writer_spec.rb
229
+ - spec/integration/generate_class_method_spec.rb
230
+ - spec/integration/lint_spec.rb
74
231
  - spec/spec_helper.rb
232
+ - spec/support/match_sexp.rb
233
+ - spec/support/models/not_active_record.rb
234
+ - spec/support/models/project.rb
235
+ - spec/support/models/user.rb
236
+ - spec/support/terse_expect_syntax.rb
237
+ - spec/unit/collation_spec.rb
238
+ - spec/unit/definition_group_spec.rb
239
+ - spec/unit/file_writer_spec.rb
240
+ - spec/unit/finders/factory_spec.rb
241
+ - spec/unit/finders/model_spec.rb
242
+ - spec/unit/generator_spec.rb
243
+ - spec/unit/parsing/file_spec.rb
244
+ - tmp/.keep
75
245
  - to_factory.gemspec
76
246
  has_rdoc: true
77
247
  homepage: ""
78
- licenses: []
79
-
248
+ licenses:
249
+ - MIT
80
250
  post_install_message:
81
251
  rdoc_options: []
82
252
 
@@ -102,14 +272,44 @@ required_rubygems_version: !ruby/object:Gem::Requirement
102
272
  version: "0"
103
273
  requirements: []
104
274
 
105
- rubyforge_project: to_factory
275
+ rubyforge_project:
106
276
  rubygems_version: 1.6.2
107
277
  signing_key:
108
278
  specification_version: 3
109
279
  summary: Turn ActiveRecord instances into factories
110
280
  test_files:
111
- - spec/config/database.yml
112
- - spec/db/migrate/201108201012010100_create_users.rb
113
- - spec/db/test.sqlite
114
- - spec/generator_spec.rb
281
+ - spec/db/migrate/1_create_users.rb
282
+ - spec/db/migrate/2_create_projects.rb
283
+ - spec/db/migrate/3_create_not_namespaced.rb
284
+ - spec/db/migrate/4_add_birthday_to_users.rb
285
+ - spec/example_factories/new_syntax/admin.rb
286
+ - spec/example_factories/new_syntax/admin_with_header.rb
287
+ - spec/example_factories/new_syntax/project_with_header.rb
288
+ - spec/example_factories/new_syntax/user.rb
289
+ - spec/example_factories/new_syntax/user_admin.rb
290
+ - spec/example_factories/new_syntax/user_admin_with_header.rb
291
+ - spec/example_factories/new_syntax/user_with_header.rb
292
+ - spec/example_factories/old_syntax/admin.rb
293
+ - spec/example_factories/old_syntax/project_with_header.rb
294
+ - spec/example_factories/old_syntax/user.rb
295
+ - spec/example_factories/old_syntax/user_admin.rb
296
+ - spec/example_factories/old_syntax/user_admin_with_header.rb
297
+ - spec/example_factories/old_syntax/user_with_header.rb
298
+ - spec/integration/config_spec.rb
299
+ - spec/integration/file_sync_spec.rb
300
+ - spec/integration/file_writer_spec.rb
301
+ - spec/integration/generate_class_method_spec.rb
302
+ - spec/integration/lint_spec.rb
115
303
  - spec/spec_helper.rb
304
+ - spec/support/match_sexp.rb
305
+ - spec/support/models/not_active_record.rb
306
+ - spec/support/models/project.rb
307
+ - spec/support/models/user.rb
308
+ - spec/support/terse_expect_syntax.rb
309
+ - spec/unit/collation_spec.rb
310
+ - spec/unit/definition_group_spec.rb
311
+ - spec/unit/file_writer_spec.rb
312
+ - spec/unit/finders/factory_spec.rb
313
+ - spec/unit/finders/model_spec.rb
314
+ - spec/unit/generator_spec.rb
315
+ - spec/unit/parsing/file_spec.rb
data/.rvmrc DELETED
@@ -1 +0,0 @@
1
- rvm use ree
data/Gemfile.lock DELETED
@@ -1,113 +0,0 @@
1
- PATH
2
- remote: .
3
- specs:
4
- to_factory (0.0.2)
5
- factory_girl_rails
6
- rails (~> 3.0)
7
-
8
- GEM
9
- remote: http://rubygems.org/
10
- remote: http://gems.github.com/
11
- specs:
12
- abstract (1.0.0)
13
- actionmailer (3.0.10)
14
- actionpack (= 3.0.10)
15
- mail (~> 2.2.19)
16
- actionpack (3.0.10)
17
- activemodel (= 3.0.10)
18
- activesupport (= 3.0.10)
19
- builder (~> 2.1.2)
20
- erubis (~> 2.6.6)
21
- i18n (~> 0.5.0)
22
- rack (~> 1.2.1)
23
- rack-mount (~> 0.6.14)
24
- rack-test (~> 0.5.7)
25
- tzinfo (~> 0.3.23)
26
- activemodel (3.0.10)
27
- activesupport (= 3.0.10)
28
- builder (~> 2.1.2)
29
- i18n (~> 0.5.0)
30
- activerecord (3.0.10)
31
- activemodel (= 3.0.10)
32
- activesupport (= 3.0.10)
33
- arel (~> 2.0.10)
34
- tzinfo (~> 0.3.23)
35
- activeresource (3.0.10)
36
- activemodel (= 3.0.10)
37
- activesupport (= 3.0.10)
38
- activesupport (3.0.10)
39
- arel (2.0.10)
40
- builder (2.1.2)
41
- columnize (0.3.4)
42
- diff-lcs (1.1.2)
43
- erubis (2.6.6)
44
- abstract (>= 1.0.0)
45
- factory_girl (2.0.2)
46
- factory_girl_rails (1.1.0)
47
- factory_girl (~> 2.0.0)
48
- railties (>= 3.0.0)
49
- i18n (0.5.0)
50
- linecache (0.43)
51
- mail (2.2.19)
52
- activesupport (>= 2.3.6)
53
- i18n (>= 0.4.0)
54
- mime-types (~> 1.16)
55
- treetop (~> 1.4.8)
56
- mime-types (1.16)
57
- polyglot (0.3.2)
58
- rack (1.2.3)
59
- rack-mount (0.6.14)
60
- rack (>= 1.0.0)
61
- rack-test (0.5.7)
62
- rack (>= 1.0)
63
- rails (3.0.10)
64
- actionmailer (= 3.0.10)
65
- actionpack (= 3.0.10)
66
- activerecord (= 3.0.10)
67
- activeresource (= 3.0.10)
68
- activesupport (= 3.0.10)
69
- bundler (~> 1.0)
70
- railties (= 3.0.10)
71
- railties (3.0.10)
72
- actionpack (= 3.0.10)
73
- activesupport (= 3.0.10)
74
- rake (>= 0.8.7)
75
- rdoc (~> 3.4)
76
- thor (~> 0.14.4)
77
- rake (0.9.2)
78
- rdoc (3.9.2)
79
- rspec (2.6.0)
80
- rspec-core (~> 2.6.0)
81
- rspec-expectations (~> 2.6.0)
82
- rspec-mocks (~> 2.6.0)
83
- rspec-core (2.6.4)
84
- rspec-expectations (2.6.0)
85
- diff-lcs (~> 1.1.2)
86
- rspec-mocks (2.6.0)
87
- ruby-debug (0.10.4)
88
- columnize (>= 0.1)
89
- ruby-debug-base (~> 0.10.4.0)
90
- ruby-debug-base (0.10.4)
91
- linecache (>= 0.3)
92
- spork (0.8.5)
93
- sqlite3 (1.3.4)
94
- thor (0.14.6)
95
- treetop (1.4.10)
96
- polyglot
97
- polyglot (>= 0.3.1)
98
- tzinfo (0.3.29)
99
- wirble (0.1.3)
100
-
101
- PLATFORMS
102
- ruby
103
-
104
- DEPENDENCIES
105
- activerecord
106
- activesupport (~> 3.0)
107
- factory_girl_rails
108
- rspec
109
- ruby-debug
110
- spork
111
- sqlite3
112
- to_factory!
113
- wirble
@@ -1,115 +0,0 @@
1
- module ToFactory
2
- class MissingActiveRecordInstanceException < Exception;end
3
- class MustBeActiveRecordSubClassException < Exception;end
4
-
5
- def self.included base
6
- base.class_eval do
7
- unless self.ancestors.include? ActiveRecord::Base
8
- raise MustBeActiveRecordSubClassException
9
- end
10
-
11
- end
12
-
13
- base.instance_eval do
14
- define_method :to_factory do
15
- Generator.new(self).factory_with_attributes
16
- end
17
- end
18
- end
19
-
20
- class Generator
21
- attr_accessor :model_class, :object_instance
22
-
23
- def initialize object=nil
24
- return unless object
25
-
26
- if object.is_a? ActiveRecord::Base
27
- @model_class = object.class.to_s
28
- @object_instance = object
29
- else
30
- @model_class = object
31
- end
32
- end
33
-
34
- def factory
35
- out = "Factory.define :#{name} do |#{abbreviation}|\n"
36
- out << yield if block_given?
37
- out << "end"
38
- end
39
-
40
- def factory_with_attributes
41
- factory do
42
- to_skip = [:id, :created_at, :updated_at]
43
- attributes = object_instance.attributes.delete_if{|key, value| to_skip.include? key.to_sym}
44
-
45
- attributes.map do |attr, value|
46
- factory_attribute(attr, value)
47
- end.sort.join("\n") << "\n"
48
- end
49
- end
50
-
51
- def factory_for options
52
- @object_instance = find_from options
53
- return nil unless @object_instance
54
- factory_with_attributes
55
- end
56
-
57
- private
58
- def find_from options
59
- return model_class.find options if options.is_a? Integer
60
- unless options.is_a? Hash
61
- raise ArgumentError.new("Expected hash of attributes or integer to look up record")
62
- end
63
-
64
- options = options.with_indifferent_access
65
-
66
- if id=options['id'].to_i
67
- return model_class.find(id) if id > 0
68
- end
69
-
70
- finder, params = finder_and_params_from_options options
71
-
72
- model_class.send finder, *params
73
- end
74
-
75
- public
76
-
77
- def factory_attribute attr, value=nil
78
- raise MissingActiveRecordInstanceException unless object_instance
79
-
80
- value = object_instance.send attr unless value
81
-
82
- value = "nil" if value.nil?
83
- value = "\"#{value}\"" if value.is_a? String
84
- " #{abbreviation}.#{attr} #{value}"
85
- end
86
-
87
- def name
88
- model_class.to_s.underscore
89
- end
90
-
91
- private
92
-
93
- def finder_and_params_from_options options
94
- params =[]
95
- finder = "find_by_"
96
-
97
- options.keys.each do |k|
98
- if finder == "find_by_"
99
- finder << k
100
- else
101
- finder << "_and_#{k}"
102
- end
103
-
104
- value = options[k]
105
- params << value
106
- end
107
-
108
- [finder, params]
109
- end
110
-
111
- def abbreviation
112
- name[0..0]
113
- end
114
- end
115
- end
@@ -1,2 +0,0 @@
1
- adapter: sqlite3
2
- database: spec/db/test.sqlite
data/spec/db/test.sqlite DELETED
Binary file