active_entity 0.2.0 → 0.2.1

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: 7f64f30d78308e4f5887107685f1c7801485138f
4
- data.tar.gz: 477079a529608f27cc99ed5be0e6da67edfddd65
3
+ metadata.gz: bd1c5302faff6d06968065b3820c637038699312
4
+ data.tar.gz: 9336f00f6d3caae67a630abae2e0ab55a43278f4
5
5
  SHA512:
6
- metadata.gz: cd7a1b494c16cd2c2fcc0717f1eebe40310abfed70e340e2ecccd650ee3fadcd1ec8fc1d65d04c7f45feecce50f0d7d3c1ac94a6fcbd1ba11f3e8cc07b938f16
7
- data.tar.gz: 8f6cadc7b710a9de8a3c4d839fdd123b754ef85c77dccb32765eb58b4cf24899f8177c4d5571fd8911721d3b1eaa2e4e765cc7642c085ed1d32b7cf3d461b581
6
+ metadata.gz: a4b2f78cd9da664dc20eb33d442ddac11161fa52b7734bf0f125215d6a75d150edc502fcd4cd74da587f6c5e2f7e8931b7687914d5fddc3c2956f6e573a7638d
7
+ data.tar.gz: 56426464b9187f3d43cc2164e27e58f818a45e6ee598149b5c46626065c981cf5c084ef8342ba3c35d427261c744535c042e946d73bd8494d04bab8687289ddb
data/CHANGELOG.md CHANGED
@@ -1,2 +1,5 @@
1
+ ## 0.2.1
2
+ * Make 100% compatible with Active Model API.
3
+
1
4
  ## 0.2.0
2
5
  * Introduce explicit type conversion and implicit coercion extension.
data/README.md CHANGED
@@ -1,6 +1,8 @@
1
1
  # ActiveEntity
2
2
 
3
3
  An extension for Active Model to encourage implementing entity.
4
+ It's like [Virtus gem](https://github.com/solnic/virtus) but more simple and
5
+ on Active Model way.
4
6
 
5
7
  [![Build Status](https://travis-ci.org/taiki45/active_entity.svg?branch=master)](https://travis-ci.org/taiki45/active_entity) [![Coverage Status](https://coveralls.io/repos/taiki45/active_entity/badge.svg)](https://coveralls.io/r/taiki45/active_entity) [![Code Climate](https://codeclimate.com/github/taiki45/active_entity/badges/gpa.svg)](https://codeclimate.com/github/taiki45/active_entity) [![Gem Version](https://badge.fury.io/rb/active_entity.svg)](http://badge.fury.io/rb/active_entity)
6
8
 
@@ -84,6 +86,13 @@ expect(waffle.steps).to eq('12') #=> rollbacks casted value on error
84
86
  expect(waffle.likes).to eq('abc')
85
87
  ```
86
88
 
89
+ ## TODOs
90
+ - `to_param` helper.
91
+ - Default value support.
92
+ - Custom coercion with object.
93
+ - Value object.
94
+ - Docs for typecasting custom procedures.
95
+
87
96
  ## Contributing
88
97
 
89
98
  1. Fork it ( https://github.com/taiki45/active_entity/fork )
data/Rakefile CHANGED
@@ -4,5 +4,9 @@ require 'rspec/core/rake_task'
4
4
  RSpec::Core::RakeTask.new(:spec) do |task|
5
5
  task.rspec_opts = ['-c', '-fd']
6
6
  end
7
- task :default => :spec
8
7
 
8
+ task :test do
9
+ require File.expand_path('../test/active_mdoel_lint_test.rb', __FILE__)
10
+ end
11
+
12
+ task default: %i(spec test)
@@ -21,10 +21,10 @@ Gem::Specification.new do |spec|
21
21
  spec.add_dependency "activemodel", ">= 4.0"
22
22
  spec.add_dependency "activesupport", ">= 4.0"
23
23
  spec.add_development_dependency "bundler", "~> 1.7"
24
- spec.add_development_dependency "coveralls"
25
- spec.add_development_dependency "pry"
26
- spec.add_development_dependency "pry-doc"
24
+ spec.add_development_dependency "coveralls", "~> 0.7"
25
+ spec.add_development_dependency "pry", "~> 0.10"
26
+ spec.add_development_dependency "pry-doc", "~> 0.6"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.1"
29
- spec.add_development_dependency "simplecov"
29
+ spec.add_development_dependency "simplecov", "~> 0.9"
30
30
  end
@@ -1,4 +1,6 @@
1
1
  module ActiveEntity
2
+ # Offers implicit type conversion on initializing.
3
+ # This depends `ActiveEntity::Accessor#defined_attributes`.
2
4
  module Coercion
3
5
  include Typecasting
4
6
 
@@ -1,3 +1,5 @@
1
+ # Define default type conversion procedures.
2
+
1
3
  ActiveEntity::ConversionDefinitions.set(:Boolean) do |value|
2
4
  case value
3
5
  when 'true'
@@ -20,7 +20,11 @@ module ActiveEntity
20
20
 
21
21
  # For ActiveModel::Conversion
22
22
  def to_key
23
- identity_attributes.empty? ? nil : identity_attributes.map {|name| public_send(name) }
23
+ if respond_to?(:persisted?) && persisted?
24
+ identity_attributes.empty? ? nil : identity_attributes.map {|name| public_send(name) }
25
+ else
26
+ nil
27
+ end
24
28
  end
25
29
  end
26
30
  end
@@ -1,4 +1,6 @@
1
1
  module ActiveEntity
2
+ # Offers explicit type conversion.
3
+ # This depends `ActiveEntity::Accessor#defined_attributes`.
2
4
  module Typecasting
3
5
  # Try to cast attribute values. When fails to cast, raises the error and
4
6
  # rollbacks all values.
@@ -1,3 +1,3 @@
1
1
  module ActiveEntity
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
data/lib/active_entity.rb CHANGED
@@ -10,7 +10,5 @@ require 'active_entity/typecasting'
10
10
  require 'active_entity/coercion'
11
11
  require 'active_entity/identity'
12
12
 
13
- # TODO: to_param
14
-
15
13
  require 'active_entity/conversion_definitions'
16
14
  require 'active_entity/default_definitions'
@@ -45,8 +45,22 @@ RSpec.describe ActiveEntity::Identity do
45
45
  describe '#to_key' do
46
46
  let(:person) { test_class.new('Alice', 1) }
47
47
 
48
- it 'returns values of key' do
49
- expect(person.to_key).to eq(['Alice', 1])
48
+ context 'when persisted?' do
49
+ before do
50
+ def person.persisted?
51
+ true
52
+ end
53
+ end
54
+
55
+ it 'returns values of key' do
56
+ expect(person.to_key).to eq(['Alice', 1])
57
+ end
58
+ end
59
+
60
+ context 'when not persisted?' do
61
+ it 'returns nil' do
62
+ expect(person.to_key).to be_nil
63
+ end
50
64
  end
51
65
  end
52
66
  end
@@ -0,0 +1,26 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'active_entity'
4
+
5
+ require 'minitest'
6
+ require 'minitest/autorun'
7
+
8
+ class TestForActiveModelLint < Minitest::Test
9
+ include ActiveModel::Lint::Tests
10
+
11
+ class Person
12
+ include ActiveModel::Model
13
+ include ActiveEntity::Accessor
14
+ include ActiveEntity::Coercion
15
+ include ActiveEntity::Identity
16
+
17
+ attribute :name, type: String
18
+ attribute :email, type: String
19
+
20
+ identity_attribute :email
21
+ end
22
+
23
+ def setup
24
+ @model = Person.new(name: 'Alice', email: 'alice@example.com')
25
+ end
26
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_entity
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Taiki Ono
@@ -56,44 +56,44 @@ dependencies:
56
56
  name: coveralls
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: '0.7'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: '0.7'
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: pry
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: '0.10'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: '0.10'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: pry-doc
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - ">="
87
+ - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '0'
89
+ version: '0.6'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - ">="
94
+ - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '0'
96
+ version: '0.6'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -126,16 +126,16 @@ dependencies:
126
126
  name: simplecov
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - ">="
129
+ - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: '0'
131
+ version: '0.9'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - ">="
136
+ - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: '0'
138
+ version: '0.9'
139
139
  description: An extension for Active Model to encourage implementing entity.
140
140
  email:
141
141
  - taiks.4559@gmail.com
@@ -172,6 +172,7 @@ files:
172
172
  - spec/active_entity/typecasting_spec.rb
173
173
  - spec/readme_spec.rb
174
174
  - spec/spec_helper.rb
175
+ - test/active_mdoel_lint_test.rb
175
176
  homepage: https://github.com/taiki45/active_entity
176
177
  licenses:
177
178
  - MIT
@@ -206,4 +207,5 @@ test_files:
206
207
  - spec/active_entity/typecasting_spec.rb
207
208
  - spec/readme_spec.rb
208
209
  - spec/spec_helper.rb
210
+ - test/active_mdoel_lint_test.rb
209
211
  has_rdoc: