fixtory 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9ebf2a7fb42023f44e8ca479d536328f75f5b357
4
- data.tar.gz: 73aa7cc3b9683f4a9e62d8f8c32da5ae98f96a19
3
+ metadata.gz: 1b71cfd1393a5e6b1415c655a955e42e1ce24f48
4
+ data.tar.gz: 91a35aa8e79c1a79a33d5e6656573756f35b7267
5
5
  SHA512:
6
- metadata.gz: 95f8695d3f1f839552c333ec21af6e422f80062e52574c545a3d564000e08e6faa5131c16fad5f7f615ab053ea3103fe1c5c26ce68c81cab7744efb93086429b
7
- data.tar.gz: 932c82d3f1f095f671a223692403a272fe3e82a17dff79091d793de148f00ca019144c208ec0b74f067d0010a2543960e1cb263322f795b3a51e5949f6d0ec0e
6
+ metadata.gz: b321ad0314b4ec7b64d84cd36f5564d146cb5e5443fb0c02c73ff947ee9d10cc80383b2fd574a9380bf6ac266d7f4f494c61f03cd98675b817efc86af52e9466
7
+ data.tar.gz: c105e333e3039ff54f01b393523d715100fcdb370abf4a91eada8589ccd98cd68a1dcb40f9a2c78f89193bd977cc19b84c8f7a03834711d73b4c1e00f039eb25
data/README.md CHANGED
@@ -45,7 +45,12 @@ end
45
45
 
46
46
  ### Rspec
47
47
 
48
- *Someone please write this, I don't use rspec*
48
+ ```ruby
49
+ # spec/support/fixtory.rb
50
+ RSpec.configure do |config|
51
+ config.include Fixtory::Methods
52
+ end
53
+ ```
49
54
 
50
55
  ## Usage
51
56
 
@@ -24,4 +24,5 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "rake", "~> 10.0"
25
25
  spec.add_development_dependency "database_cleaner", "~> 1.3"
26
26
  spec.add_development_dependency "sqlite3"
27
+ spec.add_development_dependency "minitest-moar", "~> 0.0.4"
27
28
  end
@@ -20,6 +20,10 @@ module Fixtory
20
20
  def self.path_for(group_name)
21
21
  File.join(path, "#{group_name}.rb")
22
22
  end
23
+
24
+ def self.identity_map
25
+ @identity_map ||= {}
26
+ end
23
27
  end
24
28
 
25
29
  require 'fixtory/dsl'
@@ -2,6 +2,7 @@ require 'fixtory/dsl/table'
2
2
 
3
3
  class Fixtory::DSL::Builder < BasicObject
4
4
  attr_accessor :_tables
5
+ attr_accessor :_inserted
5
6
 
6
7
  def initialize
7
8
  @_tables = []
@@ -25,10 +26,12 @@ class Fixtory::DSL::Builder < BasicObject
25
26
  def _insert
26
27
  _tables.each do |table|
27
28
  table._rows.each do |row|
28
- _connection.insert_fixture(row.instance_eval('@attributes'), table._name)
29
+ _connection.insert_fixture(row.instance_eval('@attributes'), table._table_name)
29
30
  row.instance_eval("@inserted = true")
30
31
  end
31
32
  end
33
+
34
+ self._inserted = true
32
35
  end
33
36
 
34
37
  def method_missing(method, *args, &block)
@@ -2,6 +2,7 @@ require 'fixtory/dsl/row'
2
2
 
3
3
  class Fixtory::DSL::Table
4
4
  attr_accessor :_name
5
+ attr_accessor :_table_name
5
6
  attr_accessor :_builder
6
7
  attr_accessor :_rows
7
8
  attr_accessor :_model_class
@@ -9,6 +10,7 @@ class Fixtory::DSL::Table
9
10
 
10
11
  def initialize(name, builder, &block)
11
12
  @_name = name.to_s
13
+ @_table_name = _model_class.table_name
12
14
  @_builder = builder
13
15
  @_rows = []
14
16
  @_block = block
@@ -19,7 +21,11 @@ class Fixtory::DSL::Table
19
21
  end
20
22
 
21
23
  def _row(name, &block)
22
- _rows << ::Fixtory::DSL::Row.new(name, self, &block)
24
+ row = ::Fixtory::DSL::Row.new(name, self, &block)
25
+ if _sti_table?
26
+ row.instance_eval('@attributes')['type'] = _name.singularize.camelize
27
+ end
28
+ _rows << row
23
29
  end
24
30
 
25
31
  def method_missing(method, *args, &block)
@@ -48,4 +54,10 @@ class Fixtory::DSL::Table
48
54
  end
49
55
  end
50
56
  end
57
+
58
+ private
59
+
60
+ def _sti_table?
61
+ _name != _table_name
62
+ end
51
63
  end
@@ -2,8 +2,19 @@ require 'fixtory/dsl'
2
2
 
3
3
  module Fixtory::Methods
4
4
  def fixtory(group_name)
5
- builder = Fixtory::DSL.build_from(Fixtory.path_for(group_name))
6
- builder._insert
7
- builder
5
+ group_name = group_name.to_s
6
+
7
+ if Fixtory.identity_map.key?(group_name)
8
+ builder = Fixtory.identity_map[group_name]
9
+ unless builder._inserted
10
+ builder._insert
11
+ end
12
+ builder
13
+ else
14
+ builder = Fixtory::DSL.build_from(Fixtory.path_for(group_name))
15
+ Fixtory.identity_map[group_name] = builder
16
+ builder._insert
17
+ builder
18
+ end
8
19
  end
9
20
  end
@@ -1,3 +1,3 @@
1
1
  module Fixtory
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,22 @@
1
+ owners do
2
+ brian do
3
+ name 'Brian'
4
+ age 35
5
+ end
6
+ end
7
+
8
+ beagles do
9
+ snoopy do
10
+ name 'Snoopy'
11
+ age 1.5
12
+ owner owners.brian
13
+ end
14
+ end
15
+
16
+ great_danes do
17
+ marmaduke do
18
+ name 'Marmaduke'
19
+ age 12
20
+ owner owners.brian
21
+ end
22
+ end
@@ -1,6 +1,10 @@
1
1
  require 'test_helper'
2
2
 
3
3
  describe 'Fixtories' do
4
+ after do
5
+ Fixtory.instance_variable_set(:@identity_map, {})
6
+ end
7
+
4
8
  it 'allows access to specific rows from builder' do
5
9
  path = File.expand_path('test/fixtories/test_1.rb')
6
10
  builder = Fixtory::DSL.build_from(path)
@@ -53,4 +57,27 @@ describe 'Fixtories' do
53
57
 
54
58
  refute_equal Owner.count, count
55
59
  end
60
+
61
+ it 'supports STI' do
62
+ test_group = fixtory(:test_4)
63
+ snoopy = test_group.beagles.snoopy
64
+ marmaduke = test_group.great_danes.marmaduke
65
+
66
+ assert_equal snoopy.type, 'Beagle'
67
+ assert_equal marmaduke.type, 'GreatDane'
68
+ [snoopy, marmaduke].each do |dog|
69
+ assert_includes test_group.owners.brian.dogs, dog
70
+ end
71
+ end
72
+
73
+ it 'caches data for future use rather than reading from disk twice' do
74
+ build_from = Fixtory::DSL.method(:build_from)
75
+
76
+ stub Fixtory::DSL, :build_from, build_from, Fixtory.path_for(:test_1) do
77
+ fixtory(:test_1)
78
+ fixtory(:test_1)
79
+ end
80
+
81
+ refute_called Fixtory::DSL, :build_from, 2
82
+ end
56
83
  end
@@ -4,6 +4,7 @@ require 'fixtory/methods'
4
4
  require 'byebug'
5
5
  require 'active_record'
6
6
  require 'database_cleaner'
7
+ require 'minitest/moar'
7
8
 
8
9
  DatabaseCleaner.strategy = :truncation
9
10
 
@@ -25,7 +26,7 @@ ActiveRecord::Base.establish_connection(
25
26
  )
26
27
 
27
28
  ActiveRecord::Base.connection.execute(%{CREATE TABLE owners (id INTEGER PRIMARY KEY, name TEXT, age DOUBLE);})
28
- ActiveRecord::Base.connection.execute(%{CREATE TABLE dogs (id INTEGER PRIMARY KEY, name TEXT, age DOUBLE, owner_id INTEGER);})
29
+ ActiveRecord::Base.connection.execute(%{CREATE TABLE dogs (id INTEGER PRIMARY KEY, name TEXT, age DOUBLE, owner_id INTEGER, type TEXT);})
29
30
  ActiveRecord::Base.connection.execute(%{CREATE TABLE books (isbn INTEGER PRIMARY KEY, name TEXT, owner_id INTEGER);})
30
31
 
31
32
  class Owner < ActiveRecord::Base
@@ -39,3 +40,9 @@ end
39
40
 
40
41
  class Book < ActiveRecord::Base
41
42
  end
43
+
44
+ class Beagle < Dog
45
+ end
46
+
47
+ class GreatDane < Dog
48
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fixtory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Cardarella
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-19 00:00:00.000000000 Z
11
+ date: 2014-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: minitest-moar
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.0.4
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.0.4
83
97
  description: Fixtures and Factories living together, mass hysterica
84
98
  email:
85
99
  - bcardarella@gmail.com
@@ -104,6 +118,7 @@ files:
104
118
  - test/fixtories/test_1.rb
105
119
  - test/fixtories/test_2.rb
106
120
  - test/fixtories/test_3.rb
121
+ - test/fixtories/test_4.rb
107
122
  - test/fixtory_test.rb
108
123
  - test/test_helper.rb
109
124
  homepage: https://github.com/dockyard/fixtory
@@ -134,5 +149,6 @@ test_files:
134
149
  - test/fixtories/test_1.rb
135
150
  - test/fixtories/test_2.rb
136
151
  - test/fixtories/test_3.rb
152
+ - test/fixtories/test_4.rb
137
153
  - test/fixtory_test.rb
138
154
  - test/test_helper.rb