active_type 1.1.1 → 1.2.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
  SHA256:
3
- metadata.gz: 5dd2986e6945783f4c52776074f66d614ecbbcef28f5eb1471ebf450dd68c8d2
4
- data.tar.gz: 763be8835f5184df763527d0b10b8af06edf12168a8d76ebc67951680e097cb7
3
+ metadata.gz: 4cca938174e6902624f069ca895ff0ee565f2db0696ef0460702a125ee84c303
4
+ data.tar.gz: 3821a7c56f508d8b3f90d8301e3488844f0dc5bf905780358f6925c6137a1211
5
5
  SHA512:
6
- metadata.gz: 301557809bffecdb33705cb01d68a1da237d6d0d30e726239e8c2af57c59eeb81c8c3287796f49c76abe0c4a65ab4196d4d23374224c0796ae207355f58e6019
7
- data.tar.gz: bebb85d3edc8733b3816ee82925659a804836eaddc20d100c171a1eeb034134e3159de414d62fadc406d243c13b4ed4116b74127e777bf9da1d9872af7c3ea2b
6
+ metadata.gz: 5624b33d08104097164b692a39f4f31262ccfb86f05de711851f179cdc1c4f06d46d41712bd915eac557aee96f473b9f3aa83c42edba7c047e686cfbd5798726
7
+ data.tar.gz: f17e251805aad979ad202afe86d69ebe997a7fb8e0ad6a4843ce49d2c125ed11c81779791c2ec7d6ba6dcdad31c5fa1cf953ef3163d1600f8e8eef2c30c19fd2
data/.travis.yml CHANGED
@@ -1,4 +1,7 @@
1
1
  language: ruby
2
+ dist: trusty
3
+ services:
4
+ - postgresql
2
5
  rvm:
3
6
  - "2.3.8"
4
7
  - "2.4.5"
data/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file.
4
4
 
5
+ ## Unreleased
6
+
7
+ ## 1.2.0 (2019-06-18)
8
+
9
+ * Fixed: Using `has_many` et al in an extended record ignored given scopes.
10
+ * Added: `change_association` on ActiveType::Record to change assocation options.
11
+
12
+
5
13
  ## 1.1.1 (2019-05-07)
6
14
 
7
15
  * Improved dirty tracking (`#changes?` etc) for virtual attributes to bring it more in line with
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.2.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.2.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.2.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
data/Gemfile.4.2.pg.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.2.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.2.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.2.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
data/Gemfile.5.2.pg.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.2.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.2.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
data/Gemfile.6.0.pg.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_type (1.1.1)
4
+ active_type (1.2.0)
5
5
  activerecord (>= 3.2)
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -363,6 +363,31 @@ sign_up.is_a?(SignUp) # => true
363
363
  ```
364
364
 
365
365
 
366
+ Associations
367
+ ------------
368
+
369
+ Sometimes, you have an association, and a form model for that association. Instead of always casting the associations manually, you can use the `change_association` macro to override an association's options. For example.
370
+
371
+
372
+ ```
373
+ class Credential < ActiveRecord::Base
374
+ end
375
+
376
+ class User < ActiveRecord::Base
377
+ has_many :credentials
378
+ end
379
+
380
+ class SignUpCredential < ActiveType::Record[Credential]
381
+ end
382
+
383
+ class SignUp < ActiveType::Record[User]
384
+ change_association :credentials, class_name: 'SignUpCredential'
385
+ end
386
+ ```
387
+
388
+ Now, if you load `credentials`, you will automatically receive records of type `SignUpCredential`.
389
+
390
+
366
391
  Supported Rails versions
367
392
  ------------------------
368
393
 
@@ -389,13 +414,11 @@ Now run `bundle install` and restart your server.
389
414
  Development
390
415
  -----------
391
416
 
392
- - We run tests against several ActiveRecord versions.
393
- - You can bundle all versions with `rake all:install`.
394
- - You can run specs against all versions with `rake all:spec`.
395
- - You can run specs against a single version with `VERSION=4.2.1.pg rake` or `VERSION="4.2.1.*" rake`.
396
-
397
- If you are getting testing failures due to Mysql trying to connect as `root` user, you can put your Mysql credentials into `spec/support/database.yml`.
398
- See `spec/support/database.sample.yml` for an example.
417
+ - We run tests against several ActiveRecord and Ruby versions using [gemika](https://github.com/makandra/gemika).
418
+ - You can bundle all versions with `rake matrix:install`.
419
+ - You can run specs against all Gemfiles compatible with your current ruby version with `rake matrix:spec`.
420
+ - You can run specs against a single Gemfile with `BUNDLE_GEMFILE=Gemfile<variant> bundle exec rspec spec`.
421
+ - When you make a pull request, tests are automatically run against all variants and Rubies on travis.ci.
399
422
 
400
423
  If you would like to contribute:
401
424
 
@@ -0,0 +1,31 @@
1
+ module ActiveType
2
+
3
+ module ChangeAssociation
4
+
5
+ extend ActiveSupport::Concern
6
+
7
+ module ClassMethods
8
+
9
+ def change_association(association_name, new_scope, new_options = nil)
10
+ if (existing_association = self.reflect_on_association(association_name))
11
+ if new_scope.is_a?(Hash)
12
+ new_options = new_scope
13
+ new_scope = nil
14
+ end
15
+ original_options = existing_association.options
16
+ if ActiveRecord::VERSION::MAJOR > 3
17
+ new_scope ||= existing_association.scope
18
+ public_send(existing_association.macro, association_name, new_scope, original_options.merge(new_options))
19
+ else
20
+ public_send(existing_association.macro, association_name, original_options.merge(new_options))
21
+ end
22
+ else
23
+ raise ArgumentError, "unrecognized association `#{association_name}`"
24
+ end
25
+ end
26
+
27
+ end
28
+
29
+ end
30
+
31
+ end
@@ -1,6 +1,7 @@
1
1
  require 'active_type/virtual_attributes'
2
- require 'active_type/extended_record'
2
+ require 'active_type/record_extension'
3
3
  require 'active_type/nested_attributes'
4
+ require 'active_type/change_association'
4
5
 
5
6
  module ActiveType
6
7
 
@@ -10,7 +11,8 @@ module ActiveType
10
11
 
11
12
  include VirtualAttributes
12
13
  include NestedAttributes
13
- include ExtendedRecord
14
+ include RecordExtension
15
+ include ChangeAssociation
14
16
 
15
17
  end
16
18
 
@@ -1,9 +1,8 @@
1
- require 'active_type/virtual_attributes'
2
- require 'active_type/extended_record/inheritance'
1
+ require 'active_type/record_extension/inheritance'
3
2
 
4
3
  module ActiveType
5
4
 
6
- module ExtendedRecord
5
+ module RecordExtension
7
6
 
8
7
  extend ActiveSupport::Concern
9
8
 
@@ -15,6 +14,7 @@ module ActiveType
15
14
  include VirtualAttributes
16
15
  include NestedAttributes
17
16
  include Inheritance
17
+ include ChangeAssociation
18
18
 
19
19
  self.extended_record_base_class = base
20
20
  end
@@ -1,6 +1,6 @@
1
1
  module ActiveType
2
2
 
3
- module ExtendedRecord
3
+ module RecordExtension
4
4
 
5
5
  module Inheritance
6
6
 
@@ -18,7 +18,11 @@ module ActiveType
18
18
  unless options[:foreign_key]
19
19
  options = options.merge(foreign_key: extended_record_base_class.name.foreign_key)
20
20
  end
21
- options
21
+ if ActiveRecord::VERSION::MAJOR > 3
22
+ [scope, options]
23
+ else
24
+ [options]
25
+ end
22
26
  end
23
27
 
24
28
  module ClassMethods
@@ -32,11 +36,11 @@ module ActiveType
32
36
  end
33
37
 
34
38
  def has_many(name, *args, &extension)
35
- super(name, Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
39
+ super(name, *Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
36
40
  end
37
41
 
38
42
  def has_one(name, *args, &extension)
39
- super(name, Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
43
+ super(name, *Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
40
44
  end
41
45
 
42
46
  private
@@ -1,3 +1,3 @@
1
1
  module ActiveType
2
- VERSION = '1.1.1'
2
+ VERSION = '1.2.0'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_type
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tobias Kraze
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2019-05-07 00:00:00.000000000 Z
12
+ date: 2019-06-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -89,8 +89,7 @@ files:
89
89
  - Rakefile
90
90
  - active_type.gemspec
91
91
  - lib/active_type.rb
92
- - lib/active_type/extended_record.rb
93
- - lib/active_type/extended_record/inheritance.rb
92
+ - lib/active_type/change_association.rb
94
93
  - lib/active_type/nested_attributes.rb
95
94
  - lib/active_type/nested_attributes/association.rb
96
95
  - lib/active_type/nested_attributes/builder.rb
@@ -99,6 +98,8 @@ files:
99
98
  - lib/active_type/no_table.rb
100
99
  - lib/active_type/object.rb
101
100
  - lib/active_type/record.rb
101
+ - lib/active_type/record_extension.rb
102
+ - lib/active_type/record_extension/inheritance.rb
102
103
  - lib/active_type/type_caster.rb
103
104
  - lib/active_type/util.rb
104
105
  - lib/active_type/version.rb
@@ -123,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
123
124
  version: '0'
124
125
  requirements: []
125
126
  rubyforge_project:
126
- rubygems_version: 2.7.7
127
+ rubygems_version: 2.7.8
127
128
  signing_key:
128
129
  specification_version: 4
129
130
  summary: Make any Ruby object quack like ActiveRecord