dao-entity 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 42b6d9d9132f8b835b675e81e2b0db4f7671fb72
4
- data.tar.gz: 4d2d416595294a9f8f9e7877d0bb333d20e1463c
3
+ metadata.gz: f2f9be8e3117453df3c5f6c5c4000c6c71d285af
4
+ data.tar.gz: 50f072ed9d80684e60cb3be67b8798796ed5267e
5
5
  SHA512:
6
- metadata.gz: f3affef47f0c8dffd5bcd95a43d809cad170047fe962712541a599df12b59bea72c2ea6eea9ee52bfb783873d7f880a53047450b16d6e423d2dd4ef5bd26e85e
7
- data.tar.gz: 8e61d2ea6136e356df1989a612584ece23d08ff5a0ee0707bd94d69cb697409b86b884b991210711b657f57678da9a9df602af58237e0efa968b43f49ff70e0c
6
+ metadata.gz: 19d41169d0bf90bde1e211be3171fcd6b65092a1d0210f2df3a7ac39960aafec3aaf3ded27220879c1b8fe4e6322b4af34332c2cf1a4f9a1d50ff4963a1d5c37
7
+ data.tar.gz: ef9d5b8f2bf28d74fbc6d039d663236616aeb157463dc3aa65f3c2ff06eeddfac57dfce422521774de5cb0929dab0ff264a2ce8c6b43f6b236a4414f54d443ce
@@ -2,3 +2,6 @@ language: ruby
2
2
  rvm:
3
3
  - 2.3.0
4
4
  before_install: gem install bundler -v 1.11.2
5
+
6
+ script:
7
+ - CODECLIMATE_REPO_TOKEN=8577d79977549811ba29d131a3b4573282267712fd72168c5c06d38fc99649cd bundle exec rspec
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
1
  # Dao::Entity
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/dao-entity.svg)](https://badge.fury.io/rb/dao-entity)
3
4
  [![Build Status](https://travis-ci.org/dao-rb/dao-entity.svg?branch=master)](https://travis-ci.org/dao-rb/dao-entity)
4
5
  [![Code Climate](https://codeclimate.com/github/dao-rb/dao-entity/badges/gpa.svg)](https://codeclimate.com/github/dao-rb/dao-entity)
5
- [![Test Coverage](https://codeclimate.com/github/dao-rb/dao-entity/badges/coverage.svg)](https://codeclimate.com/github/dao-rb/dao-entity/coverage)
6
+ [![Test Coverage](https://codeclimate.com/repos/5772c7700d9c6e0067002c74/badges/2376d7e0731cb6672a41/coverage.svg)](https://codeclimate.com/repos/5772c7700d9c6e0067002c74/coverage)
6
7
 
7
8
  ## Installation
8
9
 
@@ -61,4 +62,3 @@ Bug reports and pull requests are welcome on GitHub at https://github.com/dao-rb
61
62
  ## License
62
63
 
63
64
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
64
-
@@ -28,4 +28,8 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'rake', '~> 10.0'
29
29
  spec.add_development_dependency 'rspec', '~> 3.4'
30
30
  spec.add_development_dependency 'rspec-its'
31
+ spec.add_development_dependency 'codeclimate-test-reporter'
32
+ spec.add_development_dependency 'pry'
33
+ spec.add_development_dependency 'byebug'
34
+ spec.add_development_dependency 'pry-byebug'
31
35
  end
@@ -3,6 +3,7 @@ require 'virtus'
3
3
  require 'active_support/all'
4
4
  require 'active_model/attribute_methods'
5
5
  require 'active_model/dirty'
6
+ require 'dao/entity/dirty'
6
7
  require 'dao/entity/state'
7
8
  require 'dao/entity/base'
8
9
 
@@ -7,8 +7,11 @@ module Dao
7
7
 
8
8
  def initialize(attrs = {})
9
9
  super
10
+ after_initialize
11
+ end
12
+
13
+ def after_initialize
10
14
  @initialized_with = []
11
- @entity_state = self.class.state_class.new(attributes)
12
15
  end
13
16
 
14
17
  def initialized_with=(attrs)
@@ -19,10 +22,6 @@ module Dao
19
22
  id.present? if respond_to?(:id)
20
23
  end
21
24
 
22
- def entity_state
23
- @entity_state.tap { |s| s.assign_attributes(attributes) }
24
- end
25
-
26
25
  def to_key
27
26
  key = respond_to?(:id) && id
28
27
  key ? [key] : nil
@@ -43,11 +42,7 @@ module Dao
43
42
  alias eql? ==
44
43
  alias equal? eql?
45
44
 
46
- private
47
-
48
- def self.state_class
49
- @state_class ||= State.build_with_attrs(attribute_set.collect(&:name))
50
- end
45
+ protected
51
46
 
52
47
  def identity
53
48
  if respond_to?(:id)
@@ -0,0 +1,60 @@
1
+ module Dao
2
+ module Entity
3
+ module Dirty
4
+ extend ActiveSupport::Concern
5
+
6
+ def after_initialize
7
+ super
8
+ initialize_entity_state
9
+ end
10
+
11
+ def initialize_entity_state
12
+ @in_dump_mode = false
13
+ @entity_state = self.class.state_class.new(attributes)
14
+ end
15
+
16
+ def entity_state
17
+ @entity_state.tap { |s| s.assign_attributes(attributes) }
18
+ end
19
+
20
+ def _dump(_level)
21
+ prepare_for_dump do
22
+ Marshal.dump(self)
23
+ end
24
+ end
25
+
26
+ class_methods do
27
+ def _load(marshal_string)
28
+ Marshal.load(marshal_string).tap(&:initialize_entity_state)
29
+ end
30
+
31
+ def state_class
32
+ @_state_class ||= State.build_with_attrs(attribute_set.collect(&:name))
33
+ end
34
+ end
35
+
36
+ def respond_to?(*args)
37
+ if args.first == :_dump
38
+ not @in_dump_mode
39
+ else
40
+ super
41
+ end
42
+ end
43
+
44
+ protected
45
+
46
+ def prepare_for_dump
47
+ current_entity_state = @entity_state
48
+ @entity_state = nil
49
+ @in_dump_mode = true
50
+
51
+ result = yield
52
+
53
+ @entity_state = current_entity_state
54
+ @in_dump_mode = false
55
+
56
+ result
57
+ end
58
+ end
59
+ end
60
+ end
@@ -6,7 +6,7 @@ module Dao
6
6
  def self.build_with_attrs(attrs)
7
7
  state = Class.new(self)
8
8
 
9
- state.define_attribute_methods *attrs
9
+ state.define_attribute_methods(*attrs)
10
10
 
11
11
  state.send(:attr_accessor, *attrs)
12
12
  attrs.each do |attr|
@@ -1,5 +1,5 @@
1
1
  module Dao
2
2
  module Entity
3
- VERSION = '1.0.0'
3
+ VERSION = '1.1.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dao-entity
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - llxff
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2016-06-28 00:00:00.000000000 Z
12
+ date: 2016-08-01 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: virtus
@@ -109,6 +109,62 @@ dependencies:
109
109
  - - ">="
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: codeclimate-test-reporter
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: pry
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: byebug
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: pry-byebug
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
112
168
  description: Base entity
113
169
  email:
114
170
  - ll.wg.bin@gmail.com
@@ -128,6 +184,7 @@ files:
128
184
  - dao-entity.gemspec
129
185
  - lib/dao/entity.rb
130
186
  - lib/dao/entity/base.rb
187
+ - lib/dao/entity/dirty.rb
131
188
  - lib/dao/entity/state.rb
132
189
  - lib/dao/entity/version.rb
133
190
  homepage: https://github.com/dao-rb/dao-entity