rom_factory 0.1.4 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c5ac450487482db00a4f6ba28454409e86441ac4
4
- data.tar.gz: 3aa5e4ee48c68be0afb9e5e3afc61d16295af506
3
+ metadata.gz: 4d7f88e94fe99eaadc2cbb839963787530887f7f
4
+ data.tar.gz: 0da62949cdf773cdd64a28668d743e0cfb6f9c85
5
5
  SHA512:
6
- metadata.gz: 29ef6d2648714d2c987d6c1944a46224a89287b650e9bbb6cad5564ad65741f4efce5ef7f67f0d79ea63e465976de8e42ca51ab44c154984277d5bbeab191ef8
7
- data.tar.gz: 71cbbf7ae86f88bfd4debbb6bc86c928a322060685a994a5f76cb32b3f66fa355a5711896cca593613caa2109b95c17ebebf27e78cd6a98d6172bb1dc55dacf9
6
+ metadata.gz: f46be1666a758535f5019b7143f2a62ca09e45bb68fe3d9d9df950c3579b8eb2e700f604430192e944f0fb390e8a90ada9662af95d467d7877b13062179a227f
7
+ data.tar.gz: f174b5ef4097aabbb85d2b070ba40913d0f6beccc3abb9b85498a61f9db9197cb2d189f81f027796de66c1812120d94cee18c2c8e4a140a30c3f786c5ee13138
data/README.md CHANGED
@@ -40,6 +40,7 @@ RomFactory::Config.configure do |config|
40
40
  config.container = container
41
41
  end
42
42
  ```
43
+
43
44
  ## Simple use case
44
45
 
45
46
  After configuration is done, you can define the factory as follows:
@@ -73,6 +74,25 @@ user = RomFactory::Builder.create(:user)
73
74
  user.created_at #=> 2016-08-27 18:17:08 -0500
74
75
  ```
75
76
 
77
+ ### Sequencing
78
+
79
+ If you want attributes to be unique each time you build a factory, you can use sequence to achieve that:
80
+ ```ruby
81
+ RomFactory::Builder.define do |b|
82
+ b.factory(relation: :users, name: :user) do |f|
83
+ f.first_name "Janis"
84
+ f.last_name "Miezitis"
85
+ f.sequence :email do |n|
86
+ "janjiss#{n}@gmail.com"
87
+ end
88
+ end
89
+ end
90
+ user = RomFactory::Builder.create(:user)
91
+ user.email #=> janjiss1@gmail.com
92
+ user2 = RomFactory::Builder.create(:user)
93
+ user2.email #=> janjiss2@gmail.com
94
+ ```
95
+
76
96
  ## License
77
97
 
78
98
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/lib/rom_factory.rb CHANGED
@@ -4,6 +4,10 @@ require "dry-container"
4
4
  require "rom_factory/version"
5
5
  require "rom_factory/config"
6
6
  require "rom_factory/builder"
7
+ require "rom_factory/factory"
8
+ require "rom_factory/attributes/callable"
9
+ require "rom_factory/attributes/regular"
10
+ require "rom_factory/attributes/sequence"
7
11
 
8
12
  module RomFactory
9
13
  # Your code goes here...
@@ -0,0 +1,13 @@
1
+ module RomFactory
2
+ module Attributes
3
+ class Callable
4
+ def initialize(block)
5
+ @block = block
6
+ end
7
+
8
+ def call
9
+ @block.call
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module RomFactory
2
+ module Attributes
3
+ class Regular
4
+ def initialize(value)
5
+ @value = value
6
+ end
7
+
8
+ def call
9
+ @value
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,14 @@
1
+ module RomFactory
2
+ module Attributes
3
+ class Sequence
4
+ def initialize(&block)
5
+ @count = 0
6
+ @block = block
7
+ end
8
+
9
+ def call
10
+ @block.call(@count += 1)
11
+ end
12
+ end
13
+ end
14
+ end
@@ -7,7 +7,7 @@ module RomFactory
7
7
  end
8
8
 
9
9
  def self.define(&block)
10
- factory = new(&block)
10
+ factory = Factory.new(&block)
11
11
  raise ArgumentError, "Factory with key #{factory._name} already present" if container.key?(factory._name)
12
12
  container.register(factory._name, factory)
13
13
  end
@@ -17,47 +17,5 @@ module RomFactory
17
17
  factory = container.resolve(name)
18
18
  factory.create(attrs)
19
19
  end
20
-
21
- def initialize
22
- yield(self)
23
- end
24
-
25
- def factory(name:, relation:, &block)
26
- @_relation = RomFactory::Config.config.container.relations.fetch(relation)
27
- @_name = name
28
- @_schema = {}
29
- define_methods_from_relation
30
- yield(self)
31
- end
32
-
33
- def create(attrs)
34
- values = _schema.merge(attrs).map do |k, v|
35
- if v.respond_to?(:call)
36
- [k, v.call]
37
- else
38
- [k, v]
39
- end
40
- end
41
- record_id = _relation.insert(values.to_h)
42
- OpenStruct.new(_relation.where(id: record_id).one)
43
- end
44
-
45
- attr_reader :_name
46
-
47
- private
48
-
49
- attr_reader :_relation, :_schema
50
-
51
- def define_methods_from_relation
52
- _relation.attributes.each do |a|
53
- define_singleton_method a, Proc.new {|v = nil, &block|
54
- if block
55
- _schema[a] = block
56
- else
57
- _schema[a] = v
58
- end
59
- }
60
- end
61
- end
62
20
  end
63
21
  end
@@ -0,0 +1,62 @@
1
+ module RomFactory
2
+ class Factory
3
+ def initialize
4
+ yield(self)
5
+ end
6
+
7
+ def factory(name:, relation:, &block)
8
+ @_relation = RomFactory::Config.config.container.relations.fetch(relation)
9
+ @_name = name
10
+ @_schema = {}
11
+ yield(self)
12
+ end
13
+
14
+ def create(attrs)
15
+ values = _schema.merge(wrap_attributes_to_callable(attrs)).map {|k, v| [k, v.call]}
16
+ record_id = _relation.insert(values.to_h)
17
+ OpenStruct.new(values.to_h.merge(id: record_id))
18
+ end
19
+
20
+ def sequence(method_id, &block)
21
+ if _relation.attributes.include?(method_id)
22
+ define_sequence_method(method_id, block)
23
+ end
24
+ self.send(method_id)
25
+ end
26
+
27
+ attr_reader :_name
28
+
29
+ private
30
+
31
+ attr_reader :_relation, :_schema
32
+
33
+ def wrap_attributes_to_callable(attrs)
34
+ attrs.map {|k, v| [k, RomFactory::Attributes::Regular.new(v)]}.to_h
35
+ end
36
+
37
+ def method_missing(method_id, *arguments, &block)
38
+ if _relation.attributes.include?(method_id)
39
+ define_regular_method(method_id)
40
+ self.send(method_id, *arguments, &block)
41
+ else
42
+ super
43
+ end
44
+ end
45
+
46
+ def define_sequence_method(method_id, block)
47
+ self.define_singleton_method method_id, ->(){
48
+ _schema[method_id] = RomFactory::Attributes::Sequence.new(&block)
49
+ }
50
+ end
51
+
52
+ def define_regular_method(method_id)
53
+ define_singleton_method method_id, Proc.new {|v = nil, &block|
54
+ if block
55
+ _schema[method_id] = RomFactory::Attributes::Callable.new(block)
56
+ else
57
+ _schema[method_id] = RomFactory::Attributes::Regular.new(v)
58
+ end
59
+ }
60
+ end
61
+ end
62
+ end
@@ -1,3 +1,3 @@
1
1
  module RomFactory
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
data/rom_factory.gemspec CHANGED
@@ -9,9 +9,9 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Janis Miezitis"]
10
10
  spec.email = ["janjiss@gmail.com"]
11
11
 
12
- spec.summary = %q{ROM based Factory girl inspired builder library to make your specs awesome}
12
+ spec.summary = %q{ROM based builder library to make your specs awesome. DSL partially inspired by FactoryGirl.}
13
13
  spec.description = %q{}
14
- spec.homepage = ""
14
+ spec.homepage = "https://github.com/janjiss/rom_factory"
15
15
  spec.license = "MIT"
16
16
 
17
17
  # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
@@ -30,12 +30,12 @@ Gem::Specification.new do |spec|
30
30
  spec.add_dependency "dry-configurable", "~> 0.1"
31
31
  spec.add_dependency "dry-container", "~> 0.3"
32
32
 
33
- spec.add_development_dependency "bundler", "~> 1.13.1"
33
+ spec.add_development_dependency 'bundler', '~> 1.13'
34
34
  spec.add_development_dependency "rake", "~> 10.0"
35
35
  spec.add_development_dependency "rspec", "~> 3.0"
36
36
  spec.add_development_dependency "rom", "~> 2.0"
37
- spec.add_development_dependency "rom-repository", "~> 0.3.1"
38
- spec.add_development_dependency "rom-sql", "~> 0.8.0"
39
- spec.add_development_dependency "sqlite3", "~> 1.3.11"
40
- spec.add_development_dependency "pry"
37
+ spec.add_development_dependency "rom-repository", "~> 0.3"
38
+ spec.add_development_dependency "rom-sql", "~> 0.8"
39
+ spec.add_development_dependency "sqlite3", "~> 1.3"
40
+ spec.add_development_dependency "pry", "~> 0.10"
41
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rom_factory
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Janis Miezitis
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-09-17 00:00:00.000000000 Z
11
+ date: 2016-10-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: dry-configurable
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.13.1
47
+ version: '1.13'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.13.1
54
+ version: '1.13'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -100,56 +100,56 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 0.3.1
103
+ version: '0.3'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 0.3.1
110
+ version: '0.3'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rom-sql
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.8.0
117
+ version: '0.8'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 0.8.0
124
+ version: '0.8'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: sqlite3
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 1.3.11
131
+ version: '1.3'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 1.3.11
138
+ version: '1.3'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: pry
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ">="
143
+ - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: '0'
145
+ version: '0.10'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ">="
150
+ - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: '0'
152
+ version: '0.10'
153
153
  description: ''
154
154
  email:
155
155
  - janjiss@gmail.com
@@ -168,11 +168,15 @@ files:
168
168
  - bin/console
169
169
  - bin/setup
170
170
  - lib/rom_factory.rb
171
+ - lib/rom_factory/attributes/callable.rb
172
+ - lib/rom_factory/attributes/regular.rb
173
+ - lib/rom_factory/attributes/sequence.rb
171
174
  - lib/rom_factory/builder.rb
172
175
  - lib/rom_factory/config.rb
176
+ - lib/rom_factory/factory.rb
173
177
  - lib/rom_factory/version.rb
174
178
  - rom_factory.gemspec
175
- homepage: ''
179
+ homepage: https://github.com/janjiss/rom_factory
176
180
  licenses:
177
181
  - MIT
178
182
  metadata:
@@ -196,5 +200,6 @@ rubyforge_project:
196
200
  rubygems_version: 2.5.1
197
201
  signing_key:
198
202
  specification_version: 4
199
- summary: ROM based Factory girl inspired builder library to make your specs awesome
203
+ summary: ROM based builder library to make your specs awesome. DSL partially inspired
204
+ by FactoryGirl.
200
205
  test_files: []