minimapper 0.7.0 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -10
- data/lib/minimapper/entity/attributes.rb +59 -40
- data/lib/minimapper/entity/convert.rb +1 -0
- data/lib/minimapper/entity/core.rb +2 -2
- data/lib/minimapper/entity/rails.rb +1 -26
- data/lib/minimapper/entity/validation.rb +30 -0
- data/lib/minimapper/entity.rb +3 -10
- data/lib/minimapper/version.rb +1 -1
- data/unit/entity/attributes_spec.rb +140 -0
- data/unit/entity/convert_spec.rb +0 -1
- data/unit/entity/rails_spec.rb +1 -22
- data/unit/entity/validation_spec.rb +30 -0
- data/unit/entity_spec.rb +6 -116
- metadata +7 -10
data/README.md
CHANGED
@@ -123,9 +123,9 @@ p Repository.users.count # => 0
|
|
123
123
|
p user.errors.full_messages # Name can't be blank
|
124
124
|
```
|
125
125
|
|
126
|
-
###
|
126
|
+
### Eager loading
|
127
127
|
|
128
|
-
When using minimapper you
|
128
|
+
When using minimapper you don't have lazy loading. We haven't gotten around to adding the association-inclusion syntax yet, but [it's quite simple to implement](https://gist.github.com/joakimk/5656945).
|
129
129
|
|
130
130
|
### Uniqueness validations and other DB validations
|
131
131
|
|
@@ -267,8 +267,6 @@ For some discussion, [see this issue](https://github.com/joakimk/minimapper/issu
|
|
267
267
|
|
268
268
|
This is called after any kind of find and can be used for things like loading associated data.
|
269
269
|
|
270
|
-
The parameters to the after_find hook differs between mappers, for example the ActiveRecord mapper provides a record as the second argument. In practice this should not be a problem as each mapper class in an app only implements one type of mapper.
|
271
|
-
|
272
270
|
``` ruby
|
273
271
|
class ProjectMapper < Minimapper::AR
|
274
272
|
private
|
@@ -320,12 +318,6 @@ You need mysql and postgres installed (but they do not have to be running) to be
|
|
320
318
|
5. Push to the branch (`git push origin my-new-feature`)
|
321
319
|
6. Create new Pull Request
|
322
320
|
|
323
|
-
## Todo
|
324
|
-
|
325
|
-
### Next
|
326
|
-
|
327
|
-
* Support default values for attributes (probably only using lambdas to avoid bugs).
|
328
|
-
|
329
321
|
## Credits and license
|
330
322
|
|
331
323
|
By [Joakim Kolsjö](https://twitter.com/joakimk) under the MIT license:
|
@@ -3,62 +3,81 @@ require 'minimapper/entity/convert'
|
|
3
3
|
module Minimapper
|
4
4
|
module Entity
|
5
5
|
module Attributes
|
6
|
-
def
|
7
|
-
|
8
|
-
|
9
|
-
# By adding instance methods via an included module,
|
10
|
-
# they become overridable with "super".
|
11
|
-
unless @minimapper_instance_method_container
|
12
|
-
@minimapper_instance_method_container = Module.new
|
13
|
-
include @minimapper_instance_method_container
|
14
|
-
end
|
6
|
+
def self.included(klass)
|
7
|
+
klass.extend ClassMethods
|
8
|
+
end
|
15
9
|
|
16
|
-
|
17
|
-
|
18
|
-
define_writer(column)
|
19
|
-
end
|
10
|
+
def initialize(attributes = {})
|
11
|
+
self.attributes = attributes
|
20
12
|
end
|
21
13
|
|
22
|
-
def
|
23
|
-
|
14
|
+
def attributes=(new_attributes)
|
15
|
+
super(new_attributes)
|
16
|
+
new_attributes.each_pair { |name, value| self.send("#{name}=", value) }
|
24
17
|
end
|
25
18
|
|
26
|
-
|
27
|
-
|
28
|
-
@entity_columns.map(&:name).map(&:to_s)
|
19
|
+
def normalize_attribute_value(value, type)
|
20
|
+
Convert.new(value).to(type)
|
29
21
|
end
|
30
22
|
|
31
|
-
|
23
|
+
module ClassMethods
|
24
|
+
def attributes(*list)
|
25
|
+
columns = add_columns(list)
|
32
26
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
27
|
+
# By adding instance methods via an included module,
|
28
|
+
# they become overridable with "super".
|
29
|
+
unless @minimapper_instance_method_container
|
30
|
+
@minimapper_instance_method_container = Module.new
|
31
|
+
include @minimapper_instance_method_container
|
32
|
+
end
|
37
33
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
attributes[column.name]
|
34
|
+
columns.each do |column|
|
35
|
+
define_reader(column)
|
36
|
+
define_writer(column)
|
42
37
|
end
|
43
38
|
end
|
44
|
-
end
|
45
39
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
40
|
+
def attribute(*opts)
|
41
|
+
attributes [ *opts ]
|
42
|
+
end
|
43
|
+
|
44
|
+
# Compatibility with certain Rails plugins, like Traco.
|
45
|
+
def column_names
|
46
|
+
@entity_columns.map(&:name).map(&:to_s)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def add_columns(list)
|
52
|
+
@entity_columns ||= []
|
53
|
+
@entity_columns |= list.map { |data| Column.new(data) }
|
54
|
+
end
|
55
|
+
|
56
|
+
def define_reader(column)
|
57
|
+
@minimapper_instance_method_container.module_eval do
|
58
|
+
define_method(column.name) do
|
59
|
+
attributes[column.name]
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def define_writer(column)
|
65
|
+
@minimapper_instance_method_container.module_eval do
|
66
|
+
define_method("#{column.name}=") do |value|
|
67
|
+
attributes[column.name] = normalize_attribute_value(value, column.type)
|
68
|
+
end
|
50
69
|
end
|
51
70
|
end
|
52
|
-
end
|
53
71
|
|
54
|
-
|
55
|
-
|
72
|
+
class Column
|
73
|
+
attr_reader :name, :type
|
56
74
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
75
|
+
def initialize(data)
|
76
|
+
if data.is_a?(Array)
|
77
|
+
@name, @type = data
|
78
|
+
else
|
79
|
+
@name = data
|
80
|
+
end
|
62
81
|
end
|
63
82
|
end
|
64
83
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# The core entity API required by minimapper. If your entity class implements
|
2
|
-
# this API, it should work with the
|
2
|
+
# this API, it should work with the mapper.
|
3
3
|
|
4
4
|
# IMPORTANT: This module should only implement the minimal interface needed
|
5
|
-
# to talk to the data
|
5
|
+
# to talk to the data mapper. If a method isn't used by the mapper it should
|
6
6
|
# not be in this file.
|
7
7
|
|
8
8
|
module Minimapper
|
@@ -1,35 +1,10 @@
|
|
1
|
-
# Include this in your entity
|
1
|
+
# Include this in your entity classes for
|
2
2
|
# Ruby on Rails conveniences, like being
|
3
3
|
# able to use them in forms.
|
4
4
|
|
5
|
-
require "active_model"
|
6
|
-
|
7
5
|
module Minimapper
|
8
6
|
module Entity
|
9
7
|
module Rails
|
10
|
-
def self.included(klass)
|
11
|
-
klass.class_eval do
|
12
|
-
extend ActiveModel::Naming
|
13
|
-
include ActiveModel::Validations
|
14
|
-
|
15
|
-
# Must be added after ActiveModel::Validations so our
|
16
|
-
# validations can call ActiveModel's with `super`.
|
17
|
-
include ValidationsWithMapperErrors
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
module ValidationsWithMapperErrors
|
22
|
-
def valid?
|
23
|
-
super
|
24
|
-
|
25
|
-
mapper_errors.each do |a, v|
|
26
|
-
errors.add(a, v)
|
27
|
-
end
|
28
|
-
|
29
|
-
errors.empty?
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
8
|
def to_param
|
34
9
|
id
|
35
10
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require "active_model"
|
2
|
+
|
3
|
+
module Minimapper
|
4
|
+
module Entity
|
5
|
+
module Validation
|
6
|
+
def self.included(klass)
|
7
|
+
klass.class_eval do
|
8
|
+
extend ActiveModel::Naming
|
9
|
+
include ActiveModel::Validations
|
10
|
+
|
11
|
+
# Must be added after ActiveModel::Validations so our
|
12
|
+
# validations can call ActiveModel's with `super`.
|
13
|
+
include ValidationsWithMapperErrors
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module ValidationsWithMapperErrors
|
18
|
+
def valid?
|
19
|
+
super
|
20
|
+
|
21
|
+
mapper_errors.each do |a, v|
|
22
|
+
errors.add(a, v)
|
23
|
+
end
|
24
|
+
|
25
|
+
errors.empty?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/minimapper/entity.rb
CHANGED
@@ -1,21 +1,13 @@
|
|
1
1
|
# Look at minimapper/entity/core for the required API.
|
2
2
|
require 'minimapper/entity/core'
|
3
3
|
require 'minimapper/entity/attributes'
|
4
|
+
require 'minimapper/entity/validation'
|
4
5
|
require 'minimapper/entity/rails'
|
5
6
|
|
6
7
|
module Minimapper
|
7
8
|
module Entity
|
8
9
|
include Minimapper::Entity::Core
|
9
10
|
|
10
|
-
def initialize(attributes = {})
|
11
|
-
self.attributes = attributes
|
12
|
-
end
|
13
|
-
|
14
|
-
def attributes=(new_attributes)
|
15
|
-
super(new_attributes)
|
16
|
-
new_attributes.each_pair { |name, value| self.send("#{name}=", value) }
|
17
|
-
end
|
18
|
-
|
19
11
|
def ==(other)
|
20
12
|
super || (
|
21
13
|
other.instance_of?(self.class) &&
|
@@ -25,8 +17,9 @@ module Minimapper
|
|
25
17
|
end
|
26
18
|
|
27
19
|
def self.included(klass)
|
20
|
+
klass.send(:include, Minimapper::Entity::Attributes)
|
21
|
+
klass.send(:include, Minimapper::Entity::Validation)
|
28
22
|
klass.send(:include, Minimapper::Entity::Rails)
|
29
|
-
klass.send(:extend, Minimapper::Entity::Attributes)
|
30
23
|
klass.attributes(
|
31
24
|
[ :id, :integer ],
|
32
25
|
[ :created_at, :date_time ],
|
data/lib/minimapper/version.rb
CHANGED
@@ -0,0 +1,140 @@
|
|
1
|
+
require 'minimapper/entity/core'
|
2
|
+
require 'minimapper/entity/attributes'
|
3
|
+
|
4
|
+
module Attribute
|
5
|
+
class User
|
6
|
+
include Minimapper::Entity::Core
|
7
|
+
include Minimapper::Entity::Attributes
|
8
|
+
attribute :id, :integer
|
9
|
+
attribute :name
|
10
|
+
end
|
11
|
+
|
12
|
+
class AgedUser < User
|
13
|
+
attributes :age
|
14
|
+
end
|
15
|
+
|
16
|
+
class Project
|
17
|
+
include Minimapper::Entity::Core
|
18
|
+
include Minimapper::Entity::Attributes
|
19
|
+
attributes :title
|
20
|
+
end
|
21
|
+
|
22
|
+
class Task
|
23
|
+
include Minimapper::Entity::Core
|
24
|
+
include Minimapper::Entity::Attributes
|
25
|
+
|
26
|
+
attribute :due_at, :date_time
|
27
|
+
end
|
28
|
+
|
29
|
+
class OverridingUser
|
30
|
+
include Minimapper::Entity::Core
|
31
|
+
include Minimapper::Entity::Attributes
|
32
|
+
attributes :name
|
33
|
+
|
34
|
+
def name
|
35
|
+
super.upcase
|
36
|
+
end
|
37
|
+
|
38
|
+
def name=(value)
|
39
|
+
super(value.strip)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe Minimapper::Entity::Attributes, "attributes without type" do
|
45
|
+
let(:entity_class) do
|
46
|
+
Class.new do
|
47
|
+
include Minimapper::Entity::Core
|
48
|
+
include Minimapper::Entity::Attributes
|
49
|
+
attribute :name
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
it "can be set and get with anything" do
|
54
|
+
user = entity_class.new
|
55
|
+
user.name = "Hello"
|
56
|
+
user.name.should == "Hello"
|
57
|
+
user.name = 5
|
58
|
+
user.name.should == 5
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe Minimapper::Entity::Attributes do
|
63
|
+
it "can access attributes set at construction time" do
|
64
|
+
entity = Attribute::User.new(:id => 5)
|
65
|
+
entity.id.should == 5
|
66
|
+
entity.attributes[:id].should == 5
|
67
|
+
end
|
68
|
+
|
69
|
+
it "can access attributes set through a hash" do
|
70
|
+
entity = Attribute::User.new
|
71
|
+
entity.attributes = { :id => 5 }
|
72
|
+
entity.id.should == 5
|
73
|
+
entity.attributes = { "id" => 8 }
|
74
|
+
entity.id.should == 8
|
75
|
+
end
|
76
|
+
|
77
|
+
it "converts typed attributes" do
|
78
|
+
entity = Attribute::User.new
|
79
|
+
entity.id = "10"
|
80
|
+
entity.id.should == 10
|
81
|
+
entity.attributes = { :id => "15" }
|
82
|
+
entity.id.should == 15
|
83
|
+
end
|
84
|
+
|
85
|
+
it "can use single line type declarations" do
|
86
|
+
task = Attribute::Task.new(:due_at => "2012-01-01 15:00")
|
87
|
+
task.due_at.should == DateTime.parse("2012-01-01 15:00")
|
88
|
+
end
|
89
|
+
|
90
|
+
it "sets blank values to nil" do
|
91
|
+
user = Attribute::User.new
|
92
|
+
user.name = " "
|
93
|
+
user.name.should be_nil
|
94
|
+
end
|
95
|
+
|
96
|
+
it "symbolizes keys" do
|
97
|
+
entity = Attribute::User.new
|
98
|
+
entity.attributes = { "id" => "15" }
|
99
|
+
entity.attributes[:id].should == 15
|
100
|
+
end
|
101
|
+
|
102
|
+
it "inherits attributes" do
|
103
|
+
user = Attribute::AgedUser.new
|
104
|
+
user.name = "Name"
|
105
|
+
user.age = 123
|
106
|
+
user.name.should == "Name"
|
107
|
+
user.age.should == 123
|
108
|
+
end
|
109
|
+
|
110
|
+
it "is possible to override attribute readers with inheritance" do
|
111
|
+
user = Attribute::OverridingUser.new
|
112
|
+
user.name = "pelle"
|
113
|
+
user.name.should == "PELLE"
|
114
|
+
end
|
115
|
+
|
116
|
+
it "is possible to override attribute writers with inheritance" do
|
117
|
+
user = Attribute::OverridingUser.new
|
118
|
+
user.name = " 123 "
|
119
|
+
user.name.should == "123"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
describe Minimapper::Entity::Attributes, "attributes" do
|
124
|
+
it "returns the attributes" do
|
125
|
+
entity = Attribute::User.new(:id => 5)
|
126
|
+
time = Time.now
|
127
|
+
entity.attributes.should == { :id => 5 }
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
describe Minimapper::Entity::Attributes, "self.column_names" do
|
132
|
+
it "returns all attributes as strings" do
|
133
|
+
# used by some rails plugins
|
134
|
+
Attribute::User.column_names.should == [ "id", "name" ]
|
135
|
+
end
|
136
|
+
|
137
|
+
it "does not leak between different models" do
|
138
|
+
Attribute::Project.column_names.should == [ "title" ]
|
139
|
+
end
|
140
|
+
end
|
data/unit/entity/convert_spec.rb
CHANGED
data/unit/entity/rails_spec.rb
CHANGED
@@ -1,12 +1,9 @@
|
|
1
|
-
require 'minimapper/entity/rails'
|
2
1
|
require 'minimapper/entity/core'
|
2
|
+
require 'minimapper/entity/rails'
|
3
3
|
|
4
4
|
class RailsEntity
|
5
5
|
include Minimapper::Entity::Core
|
6
6
|
include Minimapper::Entity::Rails
|
7
|
-
|
8
|
-
attr_accessor :name
|
9
|
-
validates :name, :presence => true
|
10
7
|
end
|
11
8
|
|
12
9
|
describe Minimapper::Entity::Rails do
|
@@ -43,22 +40,4 @@ describe Minimapper::Entity::Rails do
|
|
43
40
|
entity.id = 5
|
44
41
|
entity.should be_persisted
|
45
42
|
end
|
46
|
-
|
47
|
-
it "includes active model validations" do
|
48
|
-
entity = RailsEntity.new
|
49
|
-
entity.should_not be_valid
|
50
|
-
entity.name = "Joe"
|
51
|
-
entity.should be_valid
|
52
|
-
end
|
53
|
-
|
54
|
-
describe "#mapper_errors=" do
|
55
|
-
it "adds an error to the errors collection" do
|
56
|
-
entity = RailsEntity.new
|
57
|
-
entity.name = "Joe"
|
58
|
-
entity.should be_valid
|
59
|
-
entity.mapper_errors = [ [:name, "must be unique"] ]
|
60
|
-
entity.should_not be_valid
|
61
|
-
entity.errors[:name].should == ["must be unique"]
|
62
|
-
end
|
63
|
-
end
|
64
43
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'minimapper/entity/core'
|
2
|
+
require 'minimapper/entity/validation'
|
3
|
+
|
4
|
+
class ValidatableEntity
|
5
|
+
include Minimapper::Entity::Core
|
6
|
+
include Minimapper::Entity::Validation
|
7
|
+
|
8
|
+
attr_accessor :name
|
9
|
+
validates :name, :presence => true
|
10
|
+
end
|
11
|
+
|
12
|
+
describe Minimapper::Entity::Validation do
|
13
|
+
it "includes active model validations" do
|
14
|
+
entity = ValidatableEntity.new
|
15
|
+
entity.should_not be_valid
|
16
|
+
entity.name = "Joe"
|
17
|
+
entity.should be_valid
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#mapper_errors=" do
|
21
|
+
it "adds an error to the errors collection" do
|
22
|
+
entity = ValidatableEntity.new
|
23
|
+
entity.name = "Joe"
|
24
|
+
entity.should be_valid
|
25
|
+
entity.mapper_errors = [ [:name, "must be unique"] ]
|
26
|
+
entity.should_not be_valid
|
27
|
+
entity.errors[:name].should == ["must be unique"]
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/unit/entity_spec.rb
CHANGED
@@ -1,45 +1,24 @@
|
|
1
1
|
require 'minimapper/entity'
|
2
2
|
|
3
|
-
class TestEntity
|
4
|
-
include Minimapper::Entity
|
5
|
-
end
|
6
|
-
|
7
3
|
class TestUser
|
8
4
|
include Minimapper::Entity
|
9
5
|
attributes :name
|
10
6
|
end
|
11
7
|
|
12
|
-
class TestAgedUser < TestUser
|
13
|
-
attributes :age
|
14
|
-
end
|
15
|
-
|
16
8
|
class TestProject
|
17
9
|
include Minimapper::Entity
|
18
10
|
attributes :title
|
19
11
|
end
|
20
12
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
class OverridingTestUser
|
28
|
-
include Minimapper::Entity
|
29
|
-
attributes :name
|
30
|
-
|
31
|
-
def name
|
32
|
-
super.upcase
|
33
|
-
end
|
34
|
-
|
35
|
-
def name=(value)
|
36
|
-
super(value.strip)
|
13
|
+
describe Minimapper::Entity do
|
14
|
+
let(:entity_class) do
|
15
|
+
Class.new do
|
16
|
+
include Minimapper::Entity
|
17
|
+
end
|
37
18
|
end
|
38
|
-
end
|
39
19
|
|
40
|
-
describe Minimapper::Entity do
|
41
20
|
it "handles base attributes" do
|
42
|
-
entity =
|
21
|
+
entity = entity_class.new
|
43
22
|
|
44
23
|
entity.id = 5
|
45
24
|
entity.id.should == 5
|
@@ -51,95 +30,6 @@ describe Minimapper::Entity do
|
|
51
30
|
entity.updated_at = time
|
52
31
|
entity.updated_at.should == time
|
53
32
|
end
|
54
|
-
|
55
|
-
it "can access attributes set at construction time" do
|
56
|
-
entity = TestUser.new(:id => 5)
|
57
|
-
entity.id.should == 5
|
58
|
-
entity.attributes[:id].should == 5
|
59
|
-
end
|
60
|
-
|
61
|
-
it "can access attributes set through a hash" do
|
62
|
-
entity = TestUser.new
|
63
|
-
entity.attributes = { :id => 5 }
|
64
|
-
entity.id.should == 5
|
65
|
-
entity.attributes = { "id" => 8 }
|
66
|
-
entity.id.should == 8
|
67
|
-
end
|
68
|
-
|
69
|
-
it "converts typed attributes" do
|
70
|
-
entity = TestEntity.new
|
71
|
-
entity.id = "10"
|
72
|
-
entity.id.should == 10
|
73
|
-
entity.attributes = { :id => "15" }
|
74
|
-
entity.id.should == 15
|
75
|
-
end
|
76
|
-
|
77
|
-
it "can use single line type declarations" do
|
78
|
-
task = TestTask.new(:due_at => "2012-01-01 15:00")
|
79
|
-
task.due_at.should == DateTime.parse("2012-01-01 15:00")
|
80
|
-
end
|
81
|
-
|
82
|
-
it "sets blank values to nil" do
|
83
|
-
user = TestUser.new
|
84
|
-
user.name = " "
|
85
|
-
user.name.should be_nil
|
86
|
-
end
|
87
|
-
|
88
|
-
it "symbolizes keys" do
|
89
|
-
entity = TestEntity.new
|
90
|
-
entity.attributes = { "id" => "15" }
|
91
|
-
entity.attributes[:id].should == 15
|
92
|
-
end
|
93
|
-
|
94
|
-
it "inherits attributes" do
|
95
|
-
user = TestAgedUser.new
|
96
|
-
user.name = "Name"
|
97
|
-
user.age = 123
|
98
|
-
user.name.should == "Name"
|
99
|
-
user.age.should == 123
|
100
|
-
end
|
101
|
-
|
102
|
-
it "is possible to override attribute readers with inheritance" do
|
103
|
-
user = OverridingTestUser.new
|
104
|
-
user.name = "pelle"
|
105
|
-
user.name.should == "PELLE"
|
106
|
-
end
|
107
|
-
|
108
|
-
it "is possible to override attribute writers with inheritance" do
|
109
|
-
user = OverridingTestUser.new
|
110
|
-
user.name = " 123 "
|
111
|
-
user.name.should == "123"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
describe Minimapper::Entity, "attributes without type" do
|
116
|
-
it "can be set and get with anything" do
|
117
|
-
user = TestUser.new
|
118
|
-
user.name = "Hello"
|
119
|
-
user.name.should == "Hello"
|
120
|
-
user.name = 5
|
121
|
-
user.name.should == 5
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
describe Minimapper::Entity, "attributes" do
|
126
|
-
it "returns the attributes" do
|
127
|
-
entity = TestEntity.new(:id => 5)
|
128
|
-
time = Time.now
|
129
|
-
entity.created_at = time
|
130
|
-
entity.attributes.should == { :id => 5, :created_at => time }
|
131
|
-
end
|
132
|
-
end
|
133
|
-
|
134
|
-
describe Minimapper::Entity, "self.column_names" do
|
135
|
-
it "returns all attributes as strings" do
|
136
|
-
# used by some rails plugins
|
137
|
-
TestUser.column_names.should == [ "id", "created_at", "updated_at", "name" ]
|
138
|
-
end
|
139
|
-
|
140
|
-
it "does not leak between different models" do
|
141
|
-
TestProject.column_names.should == [ "id", "created_at", "updated_at", "title" ]
|
142
|
-
end
|
143
33
|
end
|
144
34
|
|
145
35
|
describe Minimapper::Entity, "#==" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minimapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70270060752600 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70270060752600
|
25
25
|
description: A minimalistic way of separating your models from ActiveRecord.
|
26
26
|
email:
|
27
27
|
- joakim.kolsjo@gmail.com
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- lib/minimapper/entity/convert/to_integer.rb
|
45
45
|
- lib/minimapper/entity/core.rb
|
46
46
|
- lib/minimapper/entity/rails.rb
|
47
|
+
- lib/minimapper/entity/validation.rb
|
47
48
|
- lib/minimapper/mapper.rb
|
48
49
|
- lib/minimapper/repository.rb
|
49
50
|
- lib/minimapper/version.rb
|
@@ -54,9 +55,11 @@ files:
|
|
54
55
|
- spec/spec_helper.rb
|
55
56
|
- spec/support/database_setup.rb
|
56
57
|
- spec/support/shared_examples/mapper.rb
|
58
|
+
- unit/entity/attributes_spec.rb
|
57
59
|
- unit/entity/convert_spec.rb
|
58
60
|
- unit/entity/core_spec.rb
|
59
61
|
- unit/entity/rails_spec.rb
|
62
|
+
- unit/entity/validation_spec.rb
|
60
63
|
- unit/entity_spec.rb
|
61
64
|
- unit/repository_spec.rb
|
62
65
|
- unit/spec_helper.rb
|
@@ -72,18 +75,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
72
75
|
- - ! '>='
|
73
76
|
- !ruby/object:Gem::Version
|
74
77
|
version: '0'
|
75
|
-
segments:
|
76
|
-
- 0
|
77
|
-
hash: -4244542897336928819
|
78
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
79
|
none: false
|
80
80
|
requirements:
|
81
81
|
- - ! '>='
|
82
82
|
- !ruby/object:Gem::Version
|
83
83
|
version: '0'
|
84
|
-
segments:
|
85
|
-
- 0
|
86
|
-
hash: -4244542897336928819
|
87
84
|
requirements: []
|
88
85
|
rubyforge_project:
|
89
86
|
rubygems_version: 1.8.5
|