dry-data 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f8a5fe08504f98f2f3e85ae1f07ac1773cd53b18
4
- data.tar.gz: e22495f0d07c2fe8f933ebc777aacbbc417b8fd3
3
+ metadata.gz: 11440d87987301e5ab00e881aca9769d10ca46b6
4
+ data.tar.gz: 10aac35f319d13a0f42875976005c32f8feb08f4
5
5
  SHA512:
6
- metadata.gz: e72b078024b770b78a6b8bde42570314d57fedd55b1517a49d73b7b2f4f37d453fc36cd3db661f5b38c13f6340f4339c59fd5743fa57f9dcba651f5f1a89c2ef
7
- data.tar.gz: 9518ca648f2fa8665c95742c3faaf18d138aab32af1d1c0ed2d9a9fe40fda47ca27369f0ff6e8799cde999c0fe041ea8c83261d42233b9eda0c52eccbeea7241
6
+ metadata.gz: 7b992fddcabd0940aec06466dff1fc804161183fb579619ea53fb4b38f4ca7229812677001b718f6af8d91e2c99603ae808e5c253e2e9bde93f2dec797b77b99
7
+ data.tar.gz: fa2e28003cf3ca3bffbb6f2953a5d8860c312e9fbf5135249432f5f7ecd358f94e8a64938f2e7add69618b66c4c947c84c215338e111d9cc61e73fa94a8dd806
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  language: ruby
2
2
  sudo: false
3
3
  cache: bundler
4
- bundler_args: --without console
4
+ bundler_args: --without benchmarks tools
5
5
  script:
6
6
  - bundle exec rake spec
7
7
  rvm:
data/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # v0.3.2 2015-12-10
2
+
3
+ ## Added
4
+
5
+ * `Dry::Data::Value` which works like a struct but is a value object with equalizer (solnic)
6
+
7
+ ## Fixed
8
+
9
+ * Added missing require for `dry-equalizer` (solnic)
10
+
11
+ [Compare v0.3.1...v0.3.2](https://github.com/dryrb/dry-data/compare/v0.3.1...v0.3.2)
12
+
1
13
  # v0.3.1 2015-12-09
2
14
 
3
15
  ## Changed
data/Gemfile CHANGED
@@ -5,9 +5,14 @@ gemspec
5
5
  gem 'dry-validation'
6
6
 
7
7
  group :tools do
8
+ gem 'byebug', platform: :mri
9
+ end
10
+
11
+ group :benchmarks do
12
+ gem 'sqlite3'
13
+ gem 'activerecord'
8
14
  gem 'benchmark-ips'
9
15
  gem 'virtus'
10
16
  gem 'fast_attributes'
11
17
  gem 'attrio'
12
- gem 'byebug', platform: :mri
13
18
  end
data/benchmarks/basic.rb CHANGED
@@ -42,7 +42,7 @@ class AttrioUser
42
42
  end
43
43
 
44
44
  class DryDataUser < Dry::Data::Struct
45
- attributes(name: 'coercible.string', age: 'coercible.int')
45
+ attributes(name: 'string', age: 'form.int')
46
46
  end
47
47
 
48
48
  puts DryDataUser.new(name: 'Jane', age: '21').inspect
@@ -0,0 +1,43 @@
1
+ require 'dry-data'
2
+ require 'dry/data/type/constrained'
3
+
4
+ require 'active_record'
5
+ require 'benchmark/ips'
6
+
7
+ ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
8
+
9
+ ActiveRecord::Schema.define do
10
+ create_table :users do |table|
11
+ table.column :name, :string
12
+ table.column :age, :integer
13
+ end
14
+ end
15
+
16
+ class ARUser < ActiveRecord::Base
17
+ self.table_name = :users
18
+ end
19
+
20
+ module Types
21
+ end
22
+
23
+ Dry::Data.configure do |config|
24
+ config.namespace = Types
25
+ end
26
+
27
+ Dry::Data.finalize
28
+
29
+ class DryDataUser < Dry::Data::Struct
30
+ attribute :id, Types::Form::Int
31
+ attribute :name, Types::Strict::String.constrained(size: 3..64)
32
+ attribute :age, Types::Form::Int.constrained(gt: 18)
33
+ end
34
+
35
+ puts ARUser.new(id: 1, name: 'Jane', age: '21').inspect
36
+ puts DryDataUser.new(id: 1, name: 'Jane', age: '21').inspect
37
+
38
+ Benchmark.ips do |x|
39
+ x.report('active record') { ARUser.new(id: 1, name: 'Jane', age: '21') }
40
+ x.report('dry-data') { DryDataUser.new(id: 1, name: 'Jane', age: '21') }
41
+
42
+ x.compare!
43
+ end
data/dry-data.gemspec CHANGED
@@ -29,6 +29,7 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_runtime_dependency 'thread_safe', '~> 0.3'
31
31
  spec.add_runtime_dependency 'dry-container', '~> 0.2'
32
+ spec.add_runtime_dependency 'dry-equalizer', '~> 0.2'
32
33
  spec.add_runtime_dependency 'dry-configurable', '~> 0.1'
33
34
  spec.add_runtime_dependency 'inflecto', '~> 0.0.0', '>= 0.0.2'
34
35
  spec.add_runtime_dependency 'kleisli', '~> 0.2'
data/lib/dry/data.rb CHANGED
@@ -2,14 +2,17 @@ require 'bigdecimal'
2
2
  require 'date'
3
3
  require 'set'
4
4
 
5
- require 'dry-container'
6
5
  require 'inflecto'
7
6
  require 'thread_safe/cache'
8
7
 
8
+ require 'dry-container'
9
+ require 'dry-equalizer'
10
+
9
11
  require 'dry/data/version'
10
12
  require 'dry/data/container'
11
13
  require 'dry/data/type'
12
14
  require 'dry/data/struct'
15
+ require 'dry/data/value'
13
16
  require 'dry/data/dsl'
14
17
 
15
18
  module Dry
@@ -1,5 +1,3 @@
1
- require 'dry-equalizer' # FIXME: this should not be needed
2
-
3
1
  require 'dry/validation/rule_compiler'
4
2
  require 'dry/validation/predicates'
5
3
 
@@ -7,7 +7,7 @@ module Dry
7
7
 
8
8
  def self.inherited(klass)
9
9
  super
10
- Data.register_class(klass)
10
+ Data.register_class(klass) unless klass == Value
11
11
  end
12
12
 
13
13
  def self.attribute(*args)
@@ -0,0 +1,20 @@
1
+ module Dry
2
+ module Data
3
+ class Value < Struct
4
+ def self.inherited(klass)
5
+ super
6
+ klass.instance_variable_set('@equalizer', Equalizer.new)
7
+ klass.send(:include, klass.equalizer)
8
+ end
9
+
10
+ def self.attributes(*args)
11
+ super
12
+ equalizer.instance_variable_get('@keys').concat(schema.keys).uniq!
13
+ end
14
+
15
+ def self.equalizer
16
+ @equalizer
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,5 +1,5 @@
1
1
  module Dry
2
2
  module Data
3
- VERSION = '0.3.1'.freeze
3
+ VERSION = '0.3.2'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dry-data
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Piotr Solnica
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-12-09 00:00:00.000000000 Z
11
+ date: 2015-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thread_safe
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.2'
41
+ - !ruby/object:Gem::Dependency
42
+ name: dry-equalizer
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.2'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: dry-configurable
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -144,6 +158,7 @@ files:
144
158
  - README.md
145
159
  - Rakefile
146
160
  - benchmarks/basic.rb
161
+ - benchmarks/constrained.rb
147
162
  - bin/console
148
163
  - bin/setup
149
164
  - dry-data.gemspec
@@ -164,6 +179,7 @@ files:
164
179
  - lib/dry/data/type/optional.rb
165
180
  - lib/dry/data/types.rb
166
181
  - lib/dry/data/types/form.rb
182
+ - lib/dry/data/value.rb
167
183
  - lib/dry/data/version.rb
168
184
  homepage: https://github.com/dryrb/dry-data
169
185
  licenses:
@@ -186,8 +202,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
202
  version: '0'
187
203
  requirements: []
188
204
  rubyforge_project:
189
- rubygems_version: 2.4.5.1
205
+ rubygems_version: 2.4.5
190
206
  signing_key:
191
207
  specification_version: 4
192
208
  summary: Simple type-system for Ruby
193
209
  test_files: []
210
+ has_rdoc: