edr 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/edr.gemspec +7 -0
- data/lib/edr/ar/data_validator.rb +14 -0
- data/lib/edr/ar/repository.rb +17 -0
- data/lib/edr/model.rb +77 -0
- data/lib/edr/registry.rb +52 -0
- data/lib/edr/repository.rb +53 -0
- data/lib/edr/version.rb +1 -1
- data/lib/edr.rb +7 -3
- data/spec/edr/data_validator_spec.rb +21 -0
- data/spec/edr/model_spec.rb +46 -0
- data/spec/edr/repository_spec.rb +93 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/test_data.rb +116 -0
- metadata +115 -4
data/.gitignore
CHANGED
data/edr.gemspec
CHANGED
@@ -16,4 +16,11 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
17
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
18
|
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_development_dependency "rspec"
|
21
|
+
gem.add_development_dependency "rake"
|
22
|
+
gem.add_development_dependency "activerecord", "~> 3.2.8"
|
23
|
+
gem.add_development_dependency "sqlite3", "1.3.6"
|
24
|
+
gem.add_development_dependency "database_cleaner", "~> 0.9.1"
|
25
|
+
gem.add_dependency "orm_adapter", "~> 0.4.0"
|
19
26
|
end
|
data/lib/edr/model.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
require_relative 'registry'
|
2
|
+
|
3
|
+
module Edr
|
4
|
+
module Model
|
5
|
+
def self.included(base)
|
6
|
+
base.extend ClassMethods
|
7
|
+
base.extend ::Forwardable
|
8
|
+
end
|
9
|
+
|
10
|
+
attr_accessor :_data
|
11
|
+
|
12
|
+
def initialize _data = _new_instance
|
13
|
+
if _data.kind_of?(Hash)
|
14
|
+
@_data = _new_instance _data
|
15
|
+
else
|
16
|
+
@_data = _data
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def mass_assign(attributes)
|
21
|
+
attributes.each do |k, v|
|
22
|
+
self.send "#{k}=", v
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def as_json(options={})
|
27
|
+
_data.as_json(options)
|
28
|
+
end
|
29
|
+
|
30
|
+
protected
|
31
|
+
|
32
|
+
def repository
|
33
|
+
raise "Transient objects don't have repositories" unless @repository
|
34
|
+
@repository
|
35
|
+
end
|
36
|
+
|
37
|
+
def repository= repo
|
38
|
+
@repository = repo
|
39
|
+
end
|
40
|
+
|
41
|
+
def association name
|
42
|
+
_data.send(name)
|
43
|
+
end
|
44
|
+
|
45
|
+
def wrap association
|
46
|
+
if association.respond_to? :first
|
47
|
+
return [] if association.empty?
|
48
|
+
association.map{|c| wrap c}
|
49
|
+
else
|
50
|
+
return nil if association.nil?
|
51
|
+
model_class = Registry.model_class_for(association.class)
|
52
|
+
model_class.new association
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def _new_instance hash = {}
|
57
|
+
Registry.data_class_for(self.class).new hash
|
58
|
+
end
|
59
|
+
|
60
|
+
module ClassMethods
|
61
|
+
def fields *field_names
|
62
|
+
field_names.each do |field_name|
|
63
|
+
def_delegators :_data, field_name
|
64
|
+
def_delegators :_data, "#{field_name}="
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def wrap_associations *association_names
|
69
|
+
association_names.each do |association_name|
|
70
|
+
define_method association_name do
|
71
|
+
wrap(association association_name)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
data/lib/edr/registry.rb
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module Edr
|
4
|
+
class Registry
|
5
|
+
def self.define(&block)
|
6
|
+
@@instance = self.new(&block)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.data_class_for(model_class)
|
10
|
+
@@instance.data_class_for(model_class)
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.model_class_for(data_class)
|
14
|
+
@@instance.model_class_for(data_class)
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(&block)
|
18
|
+
@data_to_model_map = {}
|
19
|
+
@model_to_data_map = {}
|
20
|
+
self.instance_eval &block
|
21
|
+
end
|
22
|
+
|
23
|
+
def map model_class, data_class
|
24
|
+
@model_to_data_map[model_class] = data_class
|
25
|
+
@data_to_model_map[data_class] = model_class
|
26
|
+
end
|
27
|
+
|
28
|
+
def data_class_for model_class
|
29
|
+
data_class = @model_to_data_map[model_class]
|
30
|
+
return OpenStruct unless data_class
|
31
|
+
|
32
|
+
data_class
|
33
|
+
end
|
34
|
+
|
35
|
+
def model_class_for data_class
|
36
|
+
model_class = @data_to_model_map[data_class]
|
37
|
+
raise "No model class for #{data_class.to_s}" unless model_class
|
38
|
+
|
39
|
+
model_class
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def model_to_data_map
|
45
|
+
@model_to_data_map
|
46
|
+
end
|
47
|
+
|
48
|
+
def data_to_model_map
|
49
|
+
@data_to_model_map
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative 'registry'
|
2
|
+
|
3
|
+
module Edr
|
4
|
+
module Repository
|
5
|
+
def delete model
|
6
|
+
data_class.destroy data(model)
|
7
|
+
end
|
8
|
+
|
9
|
+
def delete_by_id id
|
10
|
+
data_class.destroy(data_class.get!(id))
|
11
|
+
end
|
12
|
+
|
13
|
+
def find id
|
14
|
+
wrap(data_class.get!(id))
|
15
|
+
end
|
16
|
+
|
17
|
+
def all
|
18
|
+
data_class.find_all.map do |data|
|
19
|
+
wrap(data)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def wrap data
|
26
|
+
model_class.new(data).tap do |m|
|
27
|
+
m.send(:repository=, self)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def data model
|
32
|
+
model._data
|
33
|
+
end
|
34
|
+
|
35
|
+
def set_model_class model_class
|
36
|
+
singleton_class.send :define_method, :data_class do
|
37
|
+
Registry.data_class_for(model_class).to_adapter
|
38
|
+
end
|
39
|
+
|
40
|
+
singleton_class.send :define_method, :model_class do
|
41
|
+
model_class
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
def where attrs
|
48
|
+
data_class.find_all(attrs).map do |data|
|
49
|
+
wrap(data)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/edr/version.rb
CHANGED
data/lib/edr.rb
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
require "edr/version"
|
2
|
+
require 'orm_adapter'
|
2
3
|
|
3
|
-
|
4
|
-
|
5
|
-
|
4
|
+
require_relative 'edr/registry'
|
5
|
+
require_relative 'edr/repository'
|
6
|
+
require_relative 'edr/model'
|
7
|
+
|
8
|
+
require_relative 'edr/ar/data_validator'
|
9
|
+
require_relative 'edr/ar/repository'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative '../test_data'
|
3
|
+
|
4
|
+
describe Edr::AR::DataValidator do
|
5
|
+
|
6
|
+
describe "Using data validation for a saved model" do
|
7
|
+
example do
|
8
|
+
order_data = OrderData.create! amount: 10, deliver_at: Date.today
|
9
|
+
order = Order.new(order_data)
|
10
|
+
order.amount = "blah"
|
11
|
+
Edr::AR::DataValidator.validate(order).should be_present
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "Using data validation for a new model" do
|
16
|
+
example do
|
17
|
+
order = Order.new amount: "blah"
|
18
|
+
Edr::AR::DataValidator.validate(order).should be_present
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative '../test_data'
|
3
|
+
|
4
|
+
describe Edr::Model do
|
5
|
+
|
6
|
+
describe "Using data objects directly" do
|
7
|
+
example do
|
8
|
+
order = OrderData.create! amount: 10, deliver_at: Date.today
|
9
|
+
order.items.create! amount: 6, name: 'Item 1'
|
10
|
+
order.items.create! amount: 4, name: 'Item 2'
|
11
|
+
|
12
|
+
order.reload.items.size.should == 2
|
13
|
+
order.items.first.amount.should == 6
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "Creating a new model object" do
|
18
|
+
example do
|
19
|
+
order = Order.new
|
20
|
+
order.amount = 15
|
21
|
+
|
22
|
+
order.amount.should == 15
|
23
|
+
end
|
24
|
+
|
25
|
+
it "uses hash to initialize fields" do
|
26
|
+
order = Order.new amount: 15
|
27
|
+
|
28
|
+
order.amount.should == 15
|
29
|
+
end
|
30
|
+
|
31
|
+
it "creating an aggregate with children" do
|
32
|
+
order = Order.new
|
33
|
+
item = order.add_item name: 'item1', amount: 10
|
34
|
+
|
35
|
+
item.name.should == 'item1'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "Using data structure instead of a data object" do
|
40
|
+
example do
|
41
|
+
order = Order.new OpenStruct.new
|
42
|
+
order.amount = 99
|
43
|
+
order.amount.should == 99
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require_relative '../test_data'
|
3
|
+
|
4
|
+
describe Edr::Repository do
|
5
|
+
describe "Persisting objects" do
|
6
|
+
example do
|
7
|
+
order = Order.new amount: 10
|
8
|
+
|
9
|
+
OrderRepository.persist order
|
10
|
+
|
11
|
+
order.id.should be_present
|
12
|
+
order.amount.should == 10
|
13
|
+
end
|
14
|
+
|
15
|
+
it "persists an aggregate with children" do
|
16
|
+
order = Order.new amount: 10
|
17
|
+
order.add_item name: 'item1', amount: 5
|
18
|
+
|
19
|
+
OrderRepository.persist order
|
20
|
+
|
21
|
+
from_db = OrderRepository.find(order.id)
|
22
|
+
from_db.items.first.amount.should == 5
|
23
|
+
end
|
24
|
+
|
25
|
+
it "raises an exception when invalid data" do
|
26
|
+
order = Order.new amount: "invalid"
|
27
|
+
|
28
|
+
->{OrderRepository.persist order}.should raise_error
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "Creating objects through the repository variable" do
|
33
|
+
let(:order) do
|
34
|
+
order = Order.new(amount: 10)
|
35
|
+
OrderRepository.persist order
|
36
|
+
order
|
37
|
+
end
|
38
|
+
|
39
|
+
example do
|
40
|
+
order.add_item_through_repository name: 'item', amount: 10
|
41
|
+
order.items.first.name.should == 'item'
|
42
|
+
end
|
43
|
+
|
44
|
+
it "raises an exception when the root is not persisted" do
|
45
|
+
->{Order.new(amount: 10).add_item_through_repository({})}.should raise_error
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe "Selecting models" do
|
50
|
+
let!(:data){OrderData.create! amount: 10, deliver_at: Date.today}
|
51
|
+
|
52
|
+
example do
|
53
|
+
orders = OrderRepository.find_by_amount 10
|
54
|
+
orders.first.id == data.id
|
55
|
+
end
|
56
|
+
|
57
|
+
it "finds by id" do
|
58
|
+
order = OrderRepository.find data.id
|
59
|
+
order.id.should == data.id
|
60
|
+
end
|
61
|
+
|
62
|
+
it "returns all saved objects" do
|
63
|
+
orders = OrderRepository.all
|
64
|
+
orders.first.id == data.id
|
65
|
+
end
|
66
|
+
|
67
|
+
it "raises an exception when cannot find cannot find object" do
|
68
|
+
->{OrderRepository.find 999}.should raise_error
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
describe "Deleting models" do
|
73
|
+
let!(:order) do
|
74
|
+
order = Order.new amount: 10, deliver_at: Date.today
|
75
|
+
OrderRepository.persist order
|
76
|
+
order
|
77
|
+
end
|
78
|
+
|
79
|
+
example do
|
80
|
+
OrderRepository.delete order
|
81
|
+
OrderRepository.find_by_id(order.id).should be_nil
|
82
|
+
end
|
83
|
+
|
84
|
+
it "deletes by id" do
|
85
|
+
OrderRepository.delete_by_id order.id
|
86
|
+
OrderRepository.find_by_id(order.id).should be_nil
|
87
|
+
end
|
88
|
+
|
89
|
+
it "raises an exception when cannot find cannot find object" do
|
90
|
+
->{OrderRepository.delete_by_id 999}.should raise_error
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'database_cleaner'
|
3
|
+
|
4
|
+
ActiveRecord::Base.establish_connection(
|
5
|
+
adapter: 'sqlite3',
|
6
|
+
database: ':memory:',
|
7
|
+
)
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.before(:suite) do
|
11
|
+
DatabaseCleaner.strategy = :transaction
|
12
|
+
end
|
13
|
+
|
14
|
+
config.before(:each) do
|
15
|
+
DatabaseCleaner.start
|
16
|
+
end
|
17
|
+
|
18
|
+
config.after(:each) do
|
19
|
+
DatabaseCleaner.clean
|
20
|
+
end
|
21
|
+
end
|
data/spec/test_data.rb
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
require_relative '../lib/edr'
|
2
|
+
|
3
|
+
# STEP0: Schema
|
4
|
+
# --------------------------------------------------
|
5
|
+
ActiveRecord::Schema.define(:version => 1) do
|
6
|
+
create_table "orders", :force => true do |t|
|
7
|
+
t.decimal "amount"
|
8
|
+
t.date "deliver_at"
|
9
|
+
t.datetime "created_at", :null => false
|
10
|
+
t.datetime "updated_at", :null => false
|
11
|
+
end
|
12
|
+
|
13
|
+
create_table "items", :force => true do |t|
|
14
|
+
t.string "name"
|
15
|
+
t.decimal "amount"
|
16
|
+
t.integer "order_id"
|
17
|
+
t.datetime "created_at", :null => false
|
18
|
+
t.datetime "updated_at", :null => false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
|
24
|
+
# STEP1: Define data objects
|
25
|
+
# --------------------------------------------------
|
26
|
+
class OrderData < ActiveRecord::Base
|
27
|
+
self.table_name = "orders"
|
28
|
+
|
29
|
+
attr_accessible :amount, :deliver_at
|
30
|
+
|
31
|
+
validates :amount, numericality: true
|
32
|
+
has_many :items, class_name: 'ItemData', foreign_key: 'order_id'
|
33
|
+
end
|
34
|
+
|
35
|
+
class ItemData < ActiveRecord::Base
|
36
|
+
self.table_name = "items"
|
37
|
+
|
38
|
+
attr_accessible :amount, :name
|
39
|
+
|
40
|
+
validates :amount, numericality: true
|
41
|
+
validates :name, presence: true
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
|
46
|
+
# STEP2: Define domain objects
|
47
|
+
# --------------------------------------------------
|
48
|
+
class Order
|
49
|
+
include Edr::Model
|
50
|
+
|
51
|
+
fields :id, :amount, :deliver_at
|
52
|
+
wrap_associations :items
|
53
|
+
|
54
|
+
def add_item attrs
|
55
|
+
wrap association(:items).new(attrs)
|
56
|
+
end
|
57
|
+
|
58
|
+
def add_item_through_repository attrs
|
59
|
+
repository.create_item self, attrs
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class Item
|
64
|
+
include Edr::Model
|
65
|
+
|
66
|
+
fields :id, :name, :amount, :order_id
|
67
|
+
end
|
68
|
+
|
69
|
+
|
70
|
+
|
71
|
+
# STEP3: map data objects to domain objects
|
72
|
+
# --------------------------------------------------
|
73
|
+
Edr::Registry.define do
|
74
|
+
map Order, OrderData
|
75
|
+
map Item, ItemData
|
76
|
+
end
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
# STEP4: Define repository to access data
|
81
|
+
# --------------------------------------------------
|
82
|
+
module OrderRepository
|
83
|
+
extend Edr::AR::Repository
|
84
|
+
|
85
|
+
set_model_class Order
|
86
|
+
|
87
|
+
def self.find_by_amount amount
|
88
|
+
where(amount: amount)
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.find_by_id id
|
92
|
+
where(id: id).first
|
93
|
+
end
|
94
|
+
|
95
|
+
def self.create_item order, attrs
|
96
|
+
item = ItemRepository.create_item(order, attrs)
|
97
|
+
data(order).reload
|
98
|
+
return item
|
99
|
+
end
|
100
|
+
|
101
|
+
module ItemRepository
|
102
|
+
extend Edr::AR::Repository
|
103
|
+
set_model_class Item
|
104
|
+
|
105
|
+
def self.create_item order, attrs
|
106
|
+
item = Item.new(attrs)
|
107
|
+
item.order_id = order.id
|
108
|
+
persist item
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
# STEP5: Profit
|
116
|
+
# --------------------------------------------------
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: edr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -12,8 +12,104 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2012-
|
16
|
-
dependencies:
|
15
|
+
date: 2012-11-20 00:00:00.000000000 Z
|
16
|
+
dependencies:
|
17
|
+
- !ruby/object:Gem::Dependency
|
18
|
+
name: rspec
|
19
|
+
requirement: !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ! '>='
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: '0'
|
25
|
+
type: :development
|
26
|
+
prerelease: false
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rake
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
none: false
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
type: :development
|
42
|
+
prerelease: false
|
43
|
+
version_requirements: !ruby/object:Gem::Requirement
|
44
|
+
none: false
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: activerecord
|
51
|
+
requirement: !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - ~>
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: 3.2.8
|
57
|
+
type: :development
|
58
|
+
prerelease: false
|
59
|
+
version_requirements: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ~>
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: 3.2.8
|
65
|
+
- !ruby/object:Gem::Dependency
|
66
|
+
name: sqlite3
|
67
|
+
requirement: !ruby/object:Gem::Requirement
|
68
|
+
none: false
|
69
|
+
requirements:
|
70
|
+
- - '='
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 1.3.6
|
73
|
+
type: :development
|
74
|
+
prerelease: false
|
75
|
+
version_requirements: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - '='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 1.3.6
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: database_cleaner
|
83
|
+
requirement: !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ~>
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 0.9.1
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.9.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: orm_adapter
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
none: false
|
101
|
+
requirements:
|
102
|
+
- - ~>
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: 0.4.0
|
105
|
+
type: :runtime
|
106
|
+
prerelease: false
|
107
|
+
version_requirements: !ruby/object:Gem::Requirement
|
108
|
+
none: false
|
109
|
+
requirements:
|
110
|
+
- - ~>
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 0.4.0
|
17
113
|
description: Entity Data-object Repository framework
|
18
114
|
email:
|
19
115
|
- vsavkin@nulogy.com
|
@@ -31,7 +127,17 @@ files:
|
|
31
127
|
- Rakefile
|
32
128
|
- edr.gemspec
|
33
129
|
- lib/edr.rb
|
130
|
+
- lib/edr/ar/data_validator.rb
|
131
|
+
- lib/edr/ar/repository.rb
|
132
|
+
- lib/edr/model.rb
|
133
|
+
- lib/edr/registry.rb
|
134
|
+
- lib/edr/repository.rb
|
34
135
|
- lib/edr/version.rb
|
136
|
+
- spec/edr/data_validator_spec.rb
|
137
|
+
- spec/edr/model_spec.rb
|
138
|
+
- spec/edr/repository_spec.rb
|
139
|
+
- spec/spec_helper.rb
|
140
|
+
- spec/test_data.rb
|
35
141
|
homepage: ''
|
36
142
|
licenses: []
|
37
143
|
post_install_message:
|
@@ -56,4 +162,9 @@ rubygems_version: 1.8.24
|
|
56
162
|
signing_key:
|
57
163
|
specification_version: 3
|
58
164
|
summary: Separate persistence from the domain model.
|
59
|
-
test_files:
|
165
|
+
test_files:
|
166
|
+
- spec/edr/data_validator_spec.rb
|
167
|
+
- spec/edr/model_spec.rb
|
168
|
+
- spec/edr/repository_spec.rb
|
169
|
+
- spec/spec_helper.rb
|
170
|
+
- spec/test_data.rb
|