Skip to content

Commit ce6c382

Browse files
committed
Refactor specs and move classes for custom types into fixtures
1 parent 655fad6 commit ce6c382

File tree

8 files changed

+184
-247
lines changed

8 files changed

+184
-247
lines changed

spec/dynamoid/dumping_spec.rb

Lines changed: 16 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22

33
require 'spec_helper'
4+
require 'fixtures/dumping'
45

56
describe 'Dumping' do
67
describe 'Boolean field' do
@@ -664,40 +665,14 @@
664665
end
665666

666667
context 'set of custom type' do
667-
let(:user_class) do
668-
Class.new do
669-
attr_accessor :name
670-
671-
def initialize(name)
672-
self.name = name
673-
end
674-
675-
def dynamoid_dump
676-
name
677-
end
678-
679-
def eql?(other)
680-
name == other.name
681-
end
682-
683-
def hash
684-
name.hash
685-
end
686-
687-
def self.dynamoid_load(string)
688-
new(string.to_s)
689-
end
690-
end
691-
end
692-
693668
let(:class_with_typed_set) do
694-
new_class(user_class: user_class) do |options|
695-
field :values, :set, of: options[:user_class]
669+
new_class do
670+
field :values, :set, of: DumpingSpecs::User
696671
end
697672
end
698673

699674
it 'uses custom dumping mechanizm' do
700-
user = user_class.new('John')
675+
user = DumpingSpecs::User.new('John')
701676
obj = class_with_typed_set.create(values: Set.new([user]))
702677

703678
expect(reload(obj).values).to eql(Set.new([user]))
@@ -961,40 +936,14 @@ def self.dynamoid_load(string)
961936
end
962937

963938
context 'array of custom type' do
964-
let(:user_class) do
965-
Class.new do
966-
attr_accessor :name
967-
968-
def initialize(name)
969-
self.name = name
970-
end
971-
972-
def dynamoid_dump
973-
name
974-
end
975-
976-
def eql?(other)
977-
name == other.name
978-
end
979-
980-
def hash
981-
name.hash
982-
end
983-
984-
def self.dynamoid_load(string)
985-
new(string.to_s)
986-
end
987-
end
988-
end
989-
990939
let(:class_with_typed_array) do
991-
new_class(user_class: user_class) do |options|
992-
field :values, :array, of: options[:user_class]
940+
new_class do
941+
field :values, :array, of: DumpingSpecs::User
993942
end
994943
end
995944

996945
it 'uses custom dumping mechanizm' do
997-
user = user_class.new('John')
946+
user = DumpingSpecs::User.new('John')
998947
obj = class_with_typed_array.create(values: [user])
999948

1000949
expect(reload(obj).values).to eql([user])
@@ -1467,36 +1416,14 @@ def self.load(str)
14671416

14681417
describe 'Custom type field' do
14691418
context 'Custom type provided' do
1470-
let(:user_class) do
1471-
Class.new do
1472-
attr_accessor :name
1473-
1474-
def initialize(name)
1475-
self.name = name
1476-
end
1477-
1478-
def dynamoid_dump
1479-
name
1480-
end
1481-
1482-
def eql?(other)
1483-
name == other.name
1484-
end
1485-
1486-
def self.dynamoid_load(string)
1487-
new(string.to_s)
1488-
end
1489-
end
1490-
end
1491-
14921419
let(:klass) do
1493-
new_class(user_class: user_class) do |options|
1494-
field :user, options[:user_class]
1420+
new_class do |_options|
1421+
field :user, DumpingSpecs::User
14951422
end
14961423
end
14971424

14981425
it 'dumps and loads self' do
1499-
user = user_class.new('John')
1426+
user = DumpingSpecs::User.new('John')
15001427
obj = klass.create(user: user)
15011428

15021429
expect(obj.user).to eql(user)
@@ -1506,44 +1433,14 @@ def self.dynamoid_load(string)
15061433
end
15071434

15081435
context 'Adapter provided' do
1509-
let(:user_class) do
1510-
Class.new do
1511-
attr_accessor :name
1512-
1513-
def initialize(name)
1514-
self.name = name
1515-
end
1516-
1517-
def eql?(other)
1518-
name == other.name
1519-
end
1520-
end
1521-
end
1522-
1523-
let(:adapter) do
1524-
Class.new.tap do |c|
1525-
c.class_exec(user_class) do |user_class|
1526-
@user_class = user_class
1527-
1528-
def self.dynamoid_dump(user)
1529-
user.name
1530-
end
1531-
1532-
def self.dynamoid_load(string)
1533-
@user_class.new(string.to_s)
1534-
end
1535-
end
1536-
end
1537-
end
1538-
15391436
let(:klass) do
1540-
new_class(adapter: adapter) do |options|
1541-
field :user, options[:adapter]
1437+
new_class do
1438+
field :user, DumpingSpecs::UserValueAdapter
15421439
end
15431440
end
15441441

15451442
it 'dumps and loads custom type' do
1546-
user = user_class.new('John')
1443+
user = DumpingSpecs::UserValue.new('John')
15471444
obj = klass.create(user: user)
15481445

15491446
expect(obj.user).to eql(user)
@@ -1553,49 +1450,14 @@ def self.dynamoid_load(string)
15531450
end
15541451

15551452
context 'DynamoDB type specified' do
1556-
let(:user_class) do
1557-
Class.new do
1558-
attr_accessor :name
1559-
1560-
def initialize(name)
1561-
self.name = name
1562-
end
1563-
1564-
def eql?(other)
1565-
name == other.name
1566-
end
1567-
end
1568-
end
1569-
1570-
let(:adapter) do
1571-
Class.new.tap do |c|
1572-
c.class_exec(user_class) do |user_class|
1573-
@user_class = user_class
1574-
1575-
def self.dynamoid_dump(user)
1576-
user.name.split
1577-
end
1578-
1579-
def self.dynamoid_load(array)
1580-
array = array.name.split if array.is_a?(@user_class)
1581-
@user_class.new(array.join(' '))
1582-
end
1583-
1584-
def self.dynamoid_field_type
1585-
:array
1586-
end
1587-
end
1588-
end
1589-
end
1590-
15911453
let(:klass) do
1592-
new_class(adapter: adapter) do |options|
1593-
field :user, options[:adapter]
1454+
new_class do
1455+
field :user, DumpingSpecs::UserValueToArrayAdapter
15941456
end
15951457
end
15961458

15971459
it 'stores converted value in a specified type' do
1598-
user = user_class.new('John Doe')
1460+
user = DumpingSpecs::UserValue.new('John Doe')
15991461
obj = klass.create(user: user)
16001462

16011463
expect(obj.user).to eql(user)

spec/dynamoid/fields_spec.rb

Lines changed: 4 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22

33
require 'spec_helper'
4+
require 'fixtures/fields'
45

56
describe Dynamoid::Fields do
67
let(:address) { Address.new }
@@ -318,38 +319,14 @@ def self.load(val)
318319
end
319320

320321
it 'supports default value for custom type' do
321-
user_class = Class.new do
322-
attr_accessor :name
323-
324-
def initialize(name)
325-
self.name = name
326-
end
327-
328-
def dynamoid_dump
329-
name
330-
end
331-
332-
def eql?(other)
333-
name == other.name
334-
end
335-
336-
def hash
337-
name.hash
338-
end
339-
340-
def self.dynamoid_load(string)
341-
new(string.to_s)
342-
end
343-
end
344-
345-
model_class = new_class(user: user_class.new('Mary')) do |options|
346-
field :user, user_class, default: options[:user]
322+
model_class = new_class do
323+
field :user, FieldsSpecs::User, default: FieldsSpecs::User.new('Mary')
347324
end
348325

349326
model = model_class.create
350327
model = model_class.find(model.id)
351328

352-
expect(model.user).to eql user_class.new('Mary')
329+
expect(model.user).to eql FieldsSpecs::User.new('Mary')
353330
end
354331
end
355332

spec/dynamoid/indexes_spec.rb

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# frozen_string_literal: true
22

33
require 'spec_helper'
4+
require 'fixtures/indexes'
45

56
describe Dynamoid::Indexes do
67
let(:doc_class) do
@@ -378,20 +379,8 @@
378379
context 'with custom type key params' do
379380
let(:doc_class) do
380381
new_class do
381-
# rubocop:disable Lint/ConstantDefinitionInBlock
382-
class CustomType
383-
def dynamoid_dump
384-
name
385-
end
386-
387-
def self.dynamoid_load(string)
388-
new(string.to_s)
389-
end
390-
end
391-
# rubocop:enable Lint/ConstantDefinitionInBlock
392-
393-
field :custom_type_field, CustomType
394-
field :custom_type_range_field, CustomType
382+
field :custom_type_field, IndexesSpecs::CustomType
383+
field :custom_type_range_field, IndexesSpecs::CustomType
395384
end
396385
end
397386

0 commit comments

Comments
 (0)