sbf-dm-serializer 1.3.0.beta

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,287 @@
1
+ shared_examples 'A serialization method that also serializes core classes' do
2
+ # This spec ensures that we don't break any serialization methods attached
3
+ # to core classes, such as Array
4
+ before(:all) do
5
+ %w(@harness).each do |ivar|
6
+ raise "+#{ivar}+ should be defined in before block" unless instance_variable_get(ivar)
7
+ end
8
+ DataMapper.auto_migrate!
9
+ end
10
+
11
+ before(:each) do
12
+ DataMapper::Model.descendants.each(&:destroy!)
13
+ end
14
+
15
+ it 'serializes an array of extended objects' do
16
+ Cow.create(
17
+ id: 89,
18
+ composite: 34,
19
+ name: 'Berta',
20
+ breed: 'Guernsey'
21
+ )
22
+ result = @harness.test(Cow.all.to_a)
23
+ expect(result[0].values_at('id', 'composite', 'name', 'breed')).to eq [89, 34, 'Berta', 'Guernsey']
24
+ end
25
+
26
+ it 'serializes an array of collections' do
27
+ query = DataMapper::Query.new(DataMapper::repository(:default), Cow)
28
+
29
+ keys = %w(id composite name breed)
30
+
31
+ resources = [
32
+ keys.zip([1, 2, 'Betsy', 'Jersey']).to_h,
33
+ keys.zip([89, 34, 'Berta', 'Guernsey']).to_h,
34
+ ]
35
+
36
+ collection = DataMapper::Collection.new(query, query.model.load(resources, query))
37
+
38
+ result = @harness.test(collection)
39
+ expect(result[0].values_at(*keys)).to eq resources[0].values_at(*keys)
40
+ expect(result[1].values_at(*keys)).to eq resources[1].values_at(*keys)
41
+ end
42
+ end
43
+
44
+ shared_examples 'A serialization method' do
45
+ before(:all) do
46
+ %w(@harness).each do |ivar|
47
+ raise "+#{ivar}+ should be defined in before block" unless instance_variable_get(ivar)
48
+ end
49
+
50
+ DataMapper.auto_migrate!
51
+ end
52
+
53
+ before(:each) do
54
+ DataMapper::Model.descendants.each(&:destroy!)
55
+ end
56
+
57
+ describe '(serializing single resources)' do
58
+ it 'serializes Model.first' do
59
+ # At the moment this is implied by serializing a resource, but this
60
+ # test ensures the contract even if dm-core changes
61
+ Cow.create(
62
+ id: 89,
63
+ composite: 34,
64
+ name: 'Berta',
65
+ breed: 'Guernsey'
66
+ )
67
+ result = @harness.test(Cow.first)
68
+ expect(result.values_at('name', 'breed')).to eq %w(Berta Guernsey)
69
+ end
70
+
71
+ it 'serializes a resource' do
72
+ cow = Cow.new(
73
+ id: 89,
74
+ composite: 34,
75
+ name: 'Berta',
76
+ breed: 'Guernsey'
77
+ )
78
+
79
+ result = @harness.test(cow)
80
+ expect(result.values_at('id', 'composite', 'name', 'breed')).to eq [89, 34, 'Berta', 'Guernsey']
81
+ end
82
+
83
+ it 'excludes nil properties' do
84
+ cow = Cow.new(
85
+ id: 89,
86
+ name: nil
87
+ )
88
+
89
+ result = @harness.test(cow)
90
+ expect(result.values_at('id', 'composite')).to eq [89, nil]
91
+ end
92
+
93
+ it 'only includes properties given to :only option' do
94
+ pending 'Psych provides no way to pass in parameters' if @ruby_192 && @to_yaml
95
+
96
+ planet = Planet.new(
97
+ name: 'Mars',
98
+ aphelion: 249_209_300.4
99
+ )
100
+
101
+ result = @harness.test(planet, only: [:name])
102
+ expect(result.values_at('name', 'aphelion')).to eq ['Mars', nil]
103
+ end
104
+
105
+ it 'serializes values returned by an array of methods given to :methods option' do
106
+ pending 'Psych provides no way to pass in parameters' if @ruby_192 && @to_yaml
107
+
108
+ planet = Planet.new(
109
+ name: 'Mars',
110
+ aphelion: 249_209_300.4
111
+ )
112
+
113
+ result = @harness.test(planet, methods: %i(category has_known_form_of_life?))
114
+ # XML currently can't serialize ? at the end of method names
115
+ boolean_method_name = (@harness.method_name == :to_xml) ? 'has_known_form_of_life' : 'has_known_form_of_life?'
116
+ expect(result.values_at('category', boolean_method_name)).to eq ['terrestrial', false]
117
+ end
118
+
119
+ it 'serializes values returned by a single method given to :methods option' do
120
+ pending 'Psych provides no way to pass in parameters' if @ruby_192 && @to_yaml
121
+
122
+ planet = Planet.new(
123
+ name: 'Mars',
124
+ aphelion: 249_209_300.4
125
+ )
126
+
127
+ result = @harness.test(planet, methods: :category)
128
+ expect(result.values_at('category')).to eq ['terrestrial']
129
+ end
130
+
131
+ it 'only includes properties given to :only option' do
132
+ pending 'Psych provides no way to pass in parameters' if @ruby_192 && @to_yaml
133
+
134
+ planet = Planet.new(
135
+ name: 'Mars',
136
+ aphelion: 249_209_300.4
137
+ )
138
+
139
+ result = @harness.test(planet, only: [:name])
140
+ expect(result.values_at('name', 'aphelion')).to eq ['Mars', nil]
141
+ end
142
+
143
+ it 'excludes properties given to :exclude option' do
144
+ pending 'Psych provides no way to pass in parameters' if @ruby_192 && @to_yaml
145
+
146
+ planet = Planet.new(
147
+ name: 'Mars',
148
+ aphelion: 249_209_300.4
149
+ )
150
+
151
+ result = @harness.test(planet, exclude: [:aphelion])
152
+ expect(result.values_at('name', 'aphelion')).to eq ['Mars', nil]
153
+ end
154
+
155
+ it 'gives higher precedence to :only option over :exclude' do
156
+ pending 'Psych provides no way to pass in parameters' if @ruby_192 && @to_yaml
157
+
158
+ planet = Planet.new(
159
+ name: 'Mars',
160
+ aphelion: 249_209_300.4
161
+ )
162
+
163
+ result = @harness.test(planet, only: [:name], exclude: [:name])
164
+ expect(result.values_at('name', 'aphelion')).to eq ['Mars', nil]
165
+ end
166
+
167
+ it 'supports child associations included via the :methods parameter' do
168
+ pending 'Psych provides no way to pass in parameters' if @ruby_192 && @to_yaml
169
+
170
+ solar_system = SolarSystem.create(name: 'one')
171
+ planet = Planet.new(name: 'earth')
172
+ planet.solar_system = solar_system
173
+ result = @harness.test(planet, methods: [:solar_system])
174
+ expect(result['solar_system'].values_at('name', 'id')).to eq ['one', 1]
175
+ end
176
+ end
177
+
178
+ describe '(collections and proxies)' do
179
+ it 'serializes Model.all' do
180
+ # At the moment this is implied by serializing a collection, but this
181
+ # test ensures the contract even if dm-core changes
182
+ Cow.create(
183
+ id: 89,
184
+ composite: 34,
185
+ name: 'Berta',
186
+ breed: 'Guernsey'
187
+ )
188
+ result = @harness.test(Cow.all)
189
+ expect(result[0].values_at('name', 'breed')).to eq %w(Berta Guernsey)
190
+ end
191
+
192
+ it 'serializes a collection' do
193
+ query = DataMapper::Query.new(DataMapper::repository(:default), Cow)
194
+
195
+ keys = %w(id composite name breed)
196
+
197
+ resources = [
198
+ keys.zip([1, 2, 'Betsy', 'Jersey']).to_h,
199
+ keys.zip([10, 20, 'Berta', 'Guernsey']).to_h,
200
+ ]
201
+
202
+ collection = DataMapper::Collection.new(query, query.model.load(resources, query))
203
+
204
+ result = @harness.test(collection)
205
+ expect(result[0].values_at(*keys)).to eq resources[0].values_at(*keys)
206
+ expect(result[1].values_at(*keys)).to eq resources[1].values_at(*keys)
207
+ end
208
+
209
+ it 'serializes an empty collection' do
210
+ query = DataMapper::Query.new(DataMapper::repository(:default), Cow)
211
+ collection = DataMapper::Collection.new(query)
212
+
213
+ result = @harness.test(collection)
214
+ expect(result).to be_empty
215
+ end
216
+
217
+ it 'serializes a one to many relationship' do
218
+ parent = Cow.new(id: 1, composite: 322, name: 'Harry', breed: 'Angus')
219
+ baby = Cow.new(mother_cow: parent, id: 2, composite: 321, name: 'Felix', breed: 'Angus')
220
+
221
+ parent.save
222
+ baby.save
223
+
224
+ result = @harness.test(parent.baby_cows)
225
+ expect(result).to be_kind_of(Array)
226
+
227
+ expect(result[0].values_at(*%w(id composite name breed))).to eq [2, 321, 'Felix', 'Angus']
228
+ end
229
+
230
+ it 'serializes a many to one relationship' do
231
+ parent = Cow.new(id: 1, composite: 322, name: 'Harry', breed: 'Angus')
232
+ baby = Cow.new(mother_cow: parent, id: 2, composite: 321, name: 'Felix', breed: 'Angus')
233
+
234
+ parent.save
235
+ baby.save
236
+
237
+ result = @harness.test(baby.mother_cow)
238
+ expect(result).to be_kind_of(Hash)
239
+ expect(result.values_at(*%w(id composite name breed))).to eq [1, 322, 'Harry', 'Angus']
240
+ end
241
+
242
+ it 'serializes a many to many relationship' do
243
+ pending 'TODO: fix many to many in dm-core'
244
+ p1 = Planet.create(name: 'earth')
245
+ p2 = Planet.create(name: 'mars')
246
+
247
+ FriendedPlanet.create(planet: p1, friend_planet: p2)
248
+
249
+ result = @harness.test(p1.reload.friend_planets)
250
+ expect(result).to be_kind_of(Array)
251
+
252
+ expect(result[0]['name']).to eq 'mars'
253
+ end
254
+ end
255
+
256
+ with_alternate_adapter do
257
+
258
+ describe '(multiple repositories)' do
259
+ before(:all) do
260
+ %i(default alternate).each do |repository_name|
261
+ DataMapper.repository(repository_name) do
262
+ QuanTum::Cat.auto_migrate!
263
+ QuanTum::Cat.destroy!
264
+ end
265
+ end
266
+ end
267
+
268
+ it 'uses the repository for the model' do
269
+ alternate_repo = DataMapper::Spec.spec_adapters[:alternate].name
270
+ gerry = QuanTum::Cat.create(name: 'gerry')
271
+ george = DataMapper.repository(alternate_repo) { QuanTum::Cat.create(name: 'george', is_dead: false) }
272
+ expect(@harness.test(gerry)['is_dead']).to be(nil)
273
+ expect(@harness.test(george)['is_dead']).to be(false)
274
+ end
275
+ end
276
+
277
+ end
278
+
279
+ it 'integrates with dm-validations' do
280
+ planet = Planet.create(name: 'a')
281
+ results = @harness.test(planet.errors)
282
+ expect(results).to eq({
283
+ 'name' => planet.errors[:name].map(&:to_s),
284
+ 'solar_system_id' => planet.errors[:solar_system_id].map(&:to_s)
285
+ })
286
+ end
287
+ end
@@ -0,0 +1,7 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe DataMapper::Serialize do
4
+ it 'is included into DataMapper::Resource' do
5
+ expect(Cow.new).to be_kind_of(DataMapper::Serialize)
6
+ end
7
+ end
@@ -0,0 +1,71 @@
1
+ require_relative '../spec_helper'
2
+
3
+ if defined?(::CSV)
4
+ describe DataMapper::Serialize, '#to_csv' do
5
+ #
6
+ # ==== blah, it's CSV
7
+ #
8
+
9
+ before(:all) do
10
+ DataMapper.finalize
11
+ query = DataMapper::Query.new(DataMapper::repository(:default), Cow)
12
+
13
+ resources = [
14
+ {id: 1, composite: 2, name: 'Betsy', breed: 'Jersey'},
15
+ {id: 10, composite: 20, name: 'Berta', breed: 'Guernsey'}
16
+ ]
17
+
18
+ @collection = DataMapper::Collection.new(query, resources)
19
+
20
+ @empty_collection = DataMapper::Collection.new(query)
21
+ end
22
+
23
+ it 'serializes a resource to CSV' do
24
+ peter = Cow.new
25
+ peter.id = 44
26
+ peter.composite = 344
27
+ peter.name = 'Peter'
28
+ peter.breed = 'Long Horn'
29
+
30
+ expect(peter.to_csv.chomp.split(',')[0..3]).to eq ['44','344','Peter','Long Horn']
31
+ end
32
+
33
+ it 'serializes a collection to CSV' do
34
+ result = @collection.to_csv.gsub(/[[:space:]]+\n/, "\n")
35
+ expect(result.split("\n")[0].split(',')[0..3]).to eq %w(1 2 Betsy Jersey)
36
+ expect(result.split("\n")[1].split(',')[0..3]).to eq %w(10 20 Berta Guernsey)
37
+ end
38
+
39
+ it 'integrates with dm-validations by providing one line per error' do
40
+ planet = Planet.create(name: 'a')
41
+ result = planet.errors.to_csv.gsub(/[[:space:]]+\n/, "\n").split("\n")
42
+ expect(result).to include("name,#{planet.errors[:name][0]}")
43
+ expect(result).to include("solar_system_id,#{planet.errors[:solar_system_id][0]}")
44
+ expect(result.length).to eq 2
45
+ end
46
+
47
+ with_alternate_adapter do
48
+
49
+ describe 'multiple repositories' do
50
+ before(:all) do
51
+ %i(default alternate).each do |repository_name|
52
+ DataMapper.repository(repository_name) do
53
+ DataMapper.finalize
54
+ QuanTum::Cat.auto_migrate!
55
+ QuanTum::Cat.destroy!
56
+ end
57
+ end
58
+ end
59
+
60
+ it 'uses the repository for the model' do
61
+ gerry = QuanTum::Cat.create(name: 'gerry')
62
+ george = DataMapper.repository(:alternate){ QuanTum::Cat.create(name: 'george', is_dead: false) }
63
+ expect(gerry.to_csv).not_to match(/false/)
64
+ expect(george&.to_csv).not_to match(/false/)
65
+ end
66
+ end
67
+ end
68
+ end
69
+ else
70
+ warn "[WARNING] Cannot require 'faster_csv' or 'csv', not running #to_csv specs"
71
+ end
@@ -0,0 +1,75 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe DataMapper::Serializer, '#to_json' do
4
+ #
5
+ # ==== ajaxy JSON
6
+ #
7
+
8
+ before(:all) do
9
+ DataMapper.finalize
10
+ DataMapper.auto_migrate!
11
+ query = DataMapper::Query.new(DataMapper::repository(:default), Cow)
12
+
13
+ keys = %w(id composite name breed)
14
+
15
+ resources = [
16
+ keys.zip([1, 2, 'Betsy', 'Jersey']).to_h,
17
+ keys.zip([10, 20, 'Berta', 'Guernsey']).to_h,
18
+ ]
19
+
20
+ @collection = DataMapper::Collection.new(query, query.model.load(resources, query))
21
+
22
+ @harness = Class.new(SerializerTestHarness) do
23
+ def method_name
24
+ :to_json
25
+ end
26
+
27
+ protected
28
+
29
+ def deserialize(result)
30
+ JSON.parse(result)
31
+ end
32
+ end.new
33
+ end
34
+
35
+ it_behaves_like 'A serialization method'
36
+ it_behaves_like 'A serialization method that also serializes core classes'
37
+
38
+ it 'handles options given to a collection properly' do
39
+ deserialized_collection = JSON.parse(@collection.to_json(only: [:composite]))
40
+ betsy = deserialized_collection.first
41
+ berta = deserialized_collection.last
42
+
43
+ expect(betsy['id']).to be_nil
44
+ expect(betsy['composite']).to eq 2
45
+ expect(betsy['name']).to be_nil
46
+ expect(betsy['breed']).to be_nil
47
+
48
+ expect(berta['id']).to be_nil
49
+ expect(berta['composite']).to eq 20
50
+ expect(berta['name']).to be_nil
51
+ expect(berta['breed']).to be_nil
52
+ end
53
+
54
+ it 'supports :include option for one level depth'
55
+
56
+ it 'supports :include option for more than one level depth'
57
+
58
+ it 'has :repository option to override used repository'
59
+
60
+ it 'can be serialized within a Hash' do
61
+ hash = {'cows' => Cow.all}
62
+ expect(JSON.parse(hash.to_json)).to eq hash
63
+ end
64
+
65
+ end
66
+
67
+ describe DataMapper::Serializer, '#as_json' do
68
+ it 'handles nil for options' do
69
+ expect { Cow.new.as_json(nil) }.not_to raise_error
70
+ end
71
+
72
+ it 'serializes Discriminator types as strings' do
73
+ expect(Motorcycle.new.as_json[:type]).to eq 'Motorcycle'
74
+ end
75
+ end
@@ -0,0 +1,108 @@
1
+ require_relative '../spec_helper'
2
+ require 'rexml/document'
3
+
4
+ %i(rexml libxml nokogiri).each do |lib|
5
+ begin
6
+ DataMapper::Serializer::XML.serializer = lib
7
+ rescue LoadError => e
8
+ warn "[WARNING] #{e.message}"
9
+ warn "[WARNING] Not running #to_xml specs for #{lib}"
10
+ next
11
+ end
12
+
13
+ describe DataMapper::Serializer, "#to_xml using #{lib}" do
14
+ before(:all) do
15
+ DataMapper.finalize
16
+
17
+ @harness = Class.new(SerializerTestHarness) do
18
+ def method_name
19
+ :to_xml
20
+ end
21
+
22
+ protected def deserialize(result)
23
+ f = lambda do |element|
24
+ case element.attributes['type']
25
+ when 'hash'
26
+ element.elements.to_a.inject({}) do |a, e|
27
+ a.update(e.name => f[e])
28
+ end
29
+ when 'array'
30
+ element.elements.collect do |e|
31
+ f[e]
32
+ end
33
+ else
34
+ if element.elements.empty?
35
+ cast(element.text, element.attributes['type'])
36
+ else
37
+ element.elements.to_a.inject({}) do |a, e|
38
+ a.update(e.name => f[e])
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ doc = REXML::Document.new(result)
45
+ f[doc.elements[1]]
46
+ end
47
+
48
+ protected def cast(value, type)
49
+ boolean_conversions = {'true' => true, 'false' => false}
50
+ value = boolean_conversions[value] if boolean_conversions.key?(value)
51
+ value = value.to_i if value && %w(integer datamapper::types::serial).include?(type)
52
+ value
53
+ end
54
+ end.new
55
+ end
56
+
57
+ it_behaves_like 'A serialization method'
58
+
59
+ it 'does not include the XML prologue, so that the result can be embedded in other XML documents' do
60
+ planet = Planet.new
61
+ xml = planet.to_xml(element_name: 'aplanet')
62
+ expect(xml).not_to match(/\A<?xml/)
63
+ end
64
+
65
+ describe ':element_name option for Resource' do
66
+ it 'is used as the root node name by #to_xml' do
67
+ planet = Planet.new
68
+ xml = planet.to_xml(element_name: 'aplanet')
69
+ expect(REXML::Document.new(xml).elements[1].name).to eq 'aplanet'
70
+ end
71
+
72
+ it 'when not specified the class name underscored and with slashes replaced with dashes is used as the root node name' do
73
+ cat = QuanTum::Cat.new
74
+ xml = cat.to_xml
75
+ expect(REXML::Document.new(xml).elements[1].name).to eq 'quan_tum-cat'
76
+ end
77
+ end
78
+
79
+ describe ':collection_element_name for Collection' do
80
+ before(:each) do
81
+ @model = QuanTum::Cat
82
+ @query = DataMapper::Query.new(DataMapper::repository(:default), @model)
83
+ @collection = DataMapper::Collection.new(@query)
84
+ end
85
+
86
+ it 'when not specified the class name tableized and with slashes replaced with dashes is used as the root node name' do
87
+ xml = DataMapper::Collection.new(@query).to_xml
88
+ expect(REXML::Document.new(xml).elements[1].name).to eq 'quan_tum-cats'
89
+ end
90
+
91
+ it 'is used as the root node name by #to_xml' do
92
+ resources = @model.load([{'id' => 1}], @query)
93
+ @collection = DataMapper::Collection.new(@query, resources)
94
+
95
+ xml = @collection.to_xml(collection_element_name: 'somanycats')
96
+ expect(REXML::Document.new(xml).elements[1].name).to eq 'somanycats'
97
+ end
98
+
99
+ it 'respects :element_name for collection elements' do
100
+ resources = @model.load([{'id' => 1}], @query)
101
+ @collection = DataMapper::Collection.new(@query, resources)
102
+
103
+ xml = @collection.to_xml(collection_element_name: 'somanycats', element_name: 'cat')
104
+ expect(REXML::Document.new(xml).elements[1].elements[1].name).to eq 'cat'
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,59 @@
1
+ require_relative '../spec_helper'
2
+
3
+ describe DataMapper::Serializer, '#to_yaml' do
4
+ #
5
+ # ==== yummy YAML
6
+ #
7
+
8
+ before(:all) do
9
+ DataMapper.finalize
10
+ @harness = Class.new(SerializerTestHarness) do
11
+ def method_name
12
+ :to_yaml
13
+ end
14
+
15
+ def deserialize(result)
16
+ result = YAML.load(result)
17
+ process = lambda { |object|
18
+ if object.is_a?(Array)
19
+ object.collect(&process)
20
+ elsif object.is_a?(Hash)
21
+ object.inject({}) { |a, (key, value)| a.update(key.to_s => process[value]) }
22
+ else
23
+ object
24
+ end
25
+ }
26
+ process[result]
27
+ end
28
+ end.new
29
+
30
+ @ruby_192 = RUBY_VERSION >= '1.9.2'
31
+ @to_yaml = true
32
+ end
33
+
34
+ it_behaves_like 'A serialization method'
35
+ it_behaves_like 'A serialization method that also serializes core classes'
36
+
37
+ it 'allows static YAML dumping' do
38
+ object = Cow.create(
39
+ id: 89,
40
+ composite: 34,
41
+ name: 'Berta',
42
+ breed: 'Guernsey'
43
+ )
44
+ result = @harness.deserialize(YAML.dump(object))
45
+ expect(result['name']).to eq 'Berta'
46
+ end
47
+
48
+ it 'allows static YAML dumping of a collection' do
49
+ Cow.create(
50
+ id: 89,
51
+ composite: 34,
52
+ name: 'Berta',
53
+ breed: 'Guernsey'
54
+ )
55
+ result = @harness.deserialize(YAML.dump(Cow.all))
56
+ expect(result[0]['name']).to eq 'Berta'
57
+ end
58
+
59
+ end
data/spec/rcov.opts ADDED
@@ -0,0 +1,6 @@
1
+ --exclude "spec,^/"
2
+ --sort coverage
3
+ --callsites
4
+ --xrefs
5
+ --profile
6
+ --text-summary
@@ -0,0 +1,26 @@
1
+ require 'dm-core/spec/setup'
2
+ require 'dm-core/spec/lib/adapter_helpers'
3
+ require 'dm-core/spec/lib/pending_helpers'
4
+
5
+ require 'dm-validations' # FIXME: must be required before dm-serializer
6
+ require 'dm-serializer'
7
+ require 'dm-migrations'
8
+
9
+ require File.expand_path('spec/lib/serialization_method_shared_spec')
10
+
11
+ # require fixture resources
12
+ SPEC_ROOT = Pathname(__FILE__).dirname.expand_path
13
+ Pathname.glob("#{SPEC_ROOT}fixtures/**/*.rb".to_s).each { |file| require file }
14
+
15
+ class SerializerTestHarness
16
+ def test(object, *args)
17
+ deserialize(object.send(method_name, *args))
18
+ end
19
+ end
20
+
21
+ DataMapper::Spec.setup
22
+
23
+ RSpec.configure do |config|
24
+ config.extend(DataMapper::Spec::Adapters::Helpers)
25
+ config.include(DataMapper::Spec::PendingHelpers)
26
+ end
data/tasks/spec.rake ADDED
@@ -0,0 +1,21 @@
1
+ require 'rspec/core/rake_task'
2
+
3
+ begin
4
+ task(:default).clear
5
+ task(:spec).clear
6
+
7
+ RSpec::Core::RakeTask.new(:spec) do |spec|
8
+ spec.pattern = 'spec/**/*_spec.rb'
9
+
10
+ require 'simplecov'
11
+ SimpleCov.start do
12
+ minimum_coverage 100
13
+ end
14
+ end
15
+ rescue LoadError
16
+ task :spec do
17
+ abort 'rspec is not available. In order to run spec, you must: gem install rspec'
18
+ end
19
+ end
20
+
21
+ task default: :spec
data/tasks/yard.rake ADDED
@@ -0,0 +1,9 @@
1
+ begin
2
+ require 'yard'
3
+
4
+ YARD::Rake::YardocTask.new
5
+ rescue LoadError
6
+ task :yard do
7
+ abort 'YARD is not available. In order to run yard, you must: gem install yard'
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ begin
2
+ require 'pathname'
3
+ require 'yardstick/rake/measurement'
4
+ require 'yardstick/rake/verify'
5
+
6
+ # yardstick_measure task
7
+ Yardstick::Rake::Measurement.new
8
+
9
+ # verify_measurements task
10
+ Yardstick::Rake::Verify.new do |verify|
11
+ verify.threshold = 100
12
+ end
13
+ rescue LoadError
14
+ %w[ yardstick_measure verify_measurements ].each do |name|
15
+ task name.to_s do
16
+ abort "Yardstick is not available. In order to run #{name}, you must: gem install yardstick"
17
+ end
18
+ end
19
+ end