active_type 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 +4 -4
 - data/CHANGELOG.md +30 -27
 - data/Gemfile.3.2.mysql2.lock +2 -2
 - data/Gemfile.3.2.sqlite3.lock +2 -2
 - data/Gemfile.4.2.mysql2.lock +2 -2
 - data/Gemfile.4.2.pg.lock +2 -2
 - data/Gemfile.4.2.sqlite3.lock +2 -2
 - data/Gemfile.5.1.pg.lock +2 -2
 - data/Gemfile.5.2.mysql2.lock +2 -2
 - data/Gemfile.5.2.pg.lock +2 -2
 - data/Gemfile.5.2.sqlite3.lock +2 -2
 - data/README.md +14 -0
 - data/lib/active_type/extended_record/inheritance.rb +18 -0
 - data/lib/active_type/version.rb +1 -1
 - data/lib/active_type/virtual_attributes.rb +6 -0
 - metadata +3 -3
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: dedf631cb94b6d78cba8e784416802df866a1f8acbdcf3fd7d25f4d15bada221
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: f5a41ad162f78acca060c78341b71709f6bfcedd3dbfffcee510a39b48e1b077
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 2b573202922cbdcb5b37f22b4006184c6b5133ee1637778ed2381dc4c47a4974e31715eba54048eae1de0b224a20ec80b36f861368ac4d9312eed2b03371c8be
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: d995b70abef2d78358677a4b6c7e26bb701b5914ef24f088e806f0cf895efad3b90ce2a9487c195da2934927e7f68bb573ea5244471baab2ee1212baaa72e034
         
     | 
    
        data/CHANGELOG.md
    CHANGED
    
    | 
         @@ -2,116 +2,119 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            All notable changes to this project will be documented in this file.
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 5 
     | 
    
         
            +
            ## 1.1.0 (2019-03-04)
         
     | 
| 
       6 
6 
     | 
    
         | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
      
 7 
     | 
    
         
            +
            * For some use cases, users need to access ActiveRecord's original `.attribute` method, which ActiveType overrides. We now alias `.attribute` as `.ar_attribute`.
         
     | 
| 
      
 8 
     | 
    
         
            +
            * In a `ActiveRecord::Record[MyRecord]`, `.has_many` now guesses `"my_record_id"` as the foreign key. Same for `.has_one`.
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ## 1.0.0 (2019-02-15)
         
     | 
| 
       8 
11 
     | 
    
         | 
| 
       9 
12 
     | 
    
         
             
            * No code changes.
         
     | 
| 
       10 
13 
     | 
    
         
             
            * Modernize list of supported Rails versions and Rubies.
         
     | 
| 
       11 
14 
     | 
    
         | 
| 
       12 
15 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            ##  
     | 
| 
      
 16 
     | 
    
         
            +
            ## 0.7.5 (2017-12-04)
         
     | 
| 
       14 
17 
     | 
    
         | 
| 
       15 
18 
     | 
    
         
             
            * Fixed an `chird record did not match id` exception introduced in the 0.7.3 update when using `nests_one`. Credit to @cerdiogenes.
         
     | 
| 
       16 
19 
     | 
    
         | 
| 
       17 
20 
     | 
    
         | 
| 
       18 
     | 
    
         
            -
            ##  
     | 
| 
      
 21 
     | 
    
         
            +
            ## 0.7.4 (2017-09-01)
         
     | 
| 
       19 
22 
     | 
    
         | 
| 
       20 
23 
     | 
    
         
             
            * Bugfix: ActiveType.cast sets #type correctly when casting to an STI class
         
     | 
| 
       21 
24 
     | 
    
         | 
| 
       22 
     | 
    
         
            -
            ##  
     | 
| 
      
 25 
     | 
    
         
            +
            ## 0.7.3 (2017-08-16)
         
     | 
| 
       23 
26 
     | 
    
         | 
| 
       24 
27 
     | 
    
         
             
            * `nests_many` / `nests_one` will now work for nested records with non-integer primary keys.
         
     | 
| 
       25 
28 
     | 
    
         | 
| 
       26 
29 
     | 
    
         | 
| 
       27 
     | 
    
         
            -
            ##  
     | 
| 
      
 30 
     | 
    
         
            +
            ## 0.7.2 (2017-07-31)
         
     | 
| 
       28 
31 
     | 
    
         | 
| 
       29 
32 
     | 
    
         
             
            * Fixed a bug when converting datetimes from certain strings. This occured if the string included an explicit time zone (i.e. `record.date_time = '2017-07-31 12:30+03:00'`), which was not the local time.
         
     | 
| 
       30 
33 
     | 
    
         | 
| 
       31 
     | 
    
         
            -
            ##  
     | 
| 
      
 34 
     | 
    
         
            +
            ## 0.7.1 (2017-06-19)
         
     | 
| 
       32 
35 
     | 
    
         | 
| 
       33 
36 
     | 
    
         
             
            * ActiveType::Object no longer requires a database connection on Rails 5+ (it never did on Rails 3 or 4).
         
     | 
| 
       34 
37 
     | 
    
         | 
| 
       35 
     | 
    
         
            -
            ##  
     | 
| 
      
 38 
     | 
    
         
            +
            ## 0.7.0 (2017-04-21)
         
     | 
| 
       36 
39 
     | 
    
         | 
| 
       37 
40 
     | 
    
         
             
            * Support `index_errors: true` for `nest_many`.
         
     | 
| 
       38 
41 
     | 
    
         | 
| 
       39 
     | 
    
         
            -
            ##  
     | 
| 
      
 42 
     | 
    
         
            +
            ## 0.6.4 (2017-02-27)
         
     | 
| 
       40 
43 
     | 
    
         | 
| 
       41 
44 
     | 
    
         
             
            * Fix an issue when using `ActiveType.cast` "too early".
         
     | 
| 
       42 
45 
     | 
    
         | 
| 
       43 
     | 
    
         
            -
            ##  
     | 
| 
      
 46 
     | 
    
         
            +
            ## 0.6.3 (2017-01-30)
         
     | 
| 
       44 
47 
     | 
    
         | 
| 
       45 
48 
     | 
    
         
             
            * Fix a load error when using `ActiveType::Object` before using `ActiveRecord::Base` within a Rails app.
         
     | 
| 
       46 
49 
     | 
    
         | 
| 
       47 
     | 
    
         
            -
            ##  
     | 
| 
      
 50 
     | 
    
         
            +
            ## 0.6.2 (2017-01-30)
         
     | 
| 
       48 
51 
     | 
    
         | 
| 
       49 
52 
     | 
    
         
             
            * When used with Rails, defer loading to not interfere with `ActiveRecord` configuration in initializers.
         
     | 
| 
       50 
53 
     | 
    
         | 
| 
       51 
     | 
    
         
            -
            ##  
     | 
| 
      
 54 
     | 
    
         
            +
            ## 0.6.1 (2016-12-05)
         
     | 
| 
       52 
55 
     | 
    
         | 
| 
       53 
56 
     | 
    
         
             
            * Remove spec folder from packaged gem.
         
     | 
| 
       54 
57 
     | 
    
         | 
| 
       55 
     | 
    
         
            -
            ##  
     | 
| 
      
 58 
     | 
    
         
            +
            ## 0.6.0 (2016-07-05)
         
     | 
| 
       56 
59 
     | 
    
         | 
| 
       57 
60 
     | 
    
         
             
            * Drop support for 1.8.7.
         
     | 
| 
       58 
61 
     | 
    
         
             
            * Rails 5 compatibility.
         
     | 
| 
       59 
62 
     | 
    
         | 
| 
       60 
     | 
    
         
            -
            ##  
     | 
| 
      
 63 
     | 
    
         
            +
            ## 0.5.1 (2016-05-09)
         
     | 
| 
       61 
64 
     | 
    
         | 
| 
       62 
65 
     | 
    
         
             
            * Fix an issue with incorrectly copied errors on Util.cast.
         
     | 
| 
       63 
66 
     | 
    
         | 
| 
       64 
     | 
    
         
            -
            ##  
     | 
| 
      
 67 
     | 
    
         
            +
            ## 0.5.0 (2016-04-08)
         
     | 
| 
       65 
68 
     | 
    
         | 
| 
       66 
69 
     | 
    
         
             
            * Nicer `#inspect` method.
         
     | 
| 
       67 
70 
     | 
    
         | 
| 
       68 
     | 
    
         
            -
            ##  
     | 
| 
      
 71 
     | 
    
         
            +
            ## 0.4.5 (2016-02-01)
         
     | 
| 
       69 
72 
     | 
    
         | 
| 
       70 
73 
     | 
    
         
             
            * Fixed issue `#dup`ing `ActiveType::Object`
         
     | 
| 
       71 
74 
     | 
    
         | 
| 
       72 
     | 
    
         
            -
            ##  
     | 
| 
      
 75 
     | 
    
         
            +
            ## 0.4.4 (2016-01-18)
         
     | 
| 
       73 
76 
     | 
    
         | 
| 
       74 
77 
     | 
    
         
             
            * Call `#after_commit` for `ActiveType::Object`
         
     | 
| 
       75 
78 
     | 
    
         | 
| 
       76 
     | 
    
         
            -
            ##  
     | 
| 
      
 79 
     | 
    
         
            +
            ## 0.4.3 (2015-11-11)
         
     | 
| 
       77 
80 
     | 
    
         | 
| 
       78 
81 
     | 
    
         
             
            * Fix issue with Booleans on mysql.
         
     | 
| 
       79 
82 
     | 
    
         | 
| 
       80 
     | 
    
         
            -
            ##  
     | 
| 
      
 83 
     | 
    
         
            +
            ## 0.4.2 (2015-09-24)
         
     | 
| 
       81 
84 
     | 
    
         | 
| 
       82 
85 
     | 
    
         
             
            * Add `attribute_will_change!` for virtual attributes.
         
     | 
| 
       83 
86 
     | 
    
         | 
| 
       84 
     | 
    
         
            -
            ##  
     | 
| 
      
 87 
     | 
    
         
            +
            ## 0.4.1 (2015-09-24)
         
     | 
| 
       85 
88 
     | 
    
         | 
| 
       86 
89 
     | 
    
         
             
            * Add `attribute_was` for virtual attributes.
         
     | 
| 
       87 
90 
     | 
    
         | 
| 
       88 
     | 
    
         
            -
            ##  
     | 
| 
      
 91 
     | 
    
         
            +
            ## 0.4.0 (2015-06-12)
         
     | 
| 
       89 
92 
     | 
    
         | 
| 
       90 
93 
     | 
    
         
             
            * Add ActiveType.cast to cast ActiveRecord instances and relations to extended models
         
     | 
| 
       91 
94 
     | 
    
         | 
| 
       92 
     | 
    
         
            -
            ##  
     | 
| 
      
 95 
     | 
    
         
            +
            ## 0.3.5 (2015-06-11)
         
     | 
| 
       93 
96 
     | 
    
         | 
| 
       94 
97 
     | 
    
         
             
            * Make gem crash during loading with ActiveRecord 4.2.0 because [#31](https://github.com/makandra/active_type/issues/31)
         
     | 
| 
       95 
98 
     | 
    
         | 
| 
       96 
     | 
    
         
            -
            ##  
     | 
| 
      
 99 
     | 
    
         
            +
            ## 0.3.4 (2015-03-14)
         
     | 
| 
       97 
100 
     | 
    
         | 
| 
       98 
101 
     | 
    
         
             
            * Support belongs_to associations for ActiveRecord 4.2.1
         
     | 
| 
       99 
102 
     | 
    
         
             
            * Ensure that ActiveType::Object correctly validates boolean attributes (issue [#34](https://github.com/makandra/active_type/issues/34))
         
     | 
| 
       100 
103 
     | 
    
         | 
| 
       101 
     | 
    
         
            -
            ##  
     | 
| 
      
 104 
     | 
    
         
            +
            ## 0.3.3 (2015-01-23)
         
     | 
| 
       102 
105 
     | 
    
         | 
| 
       103 
106 
     | 
    
         
             
            * Don't crash for database types without casting rules (fixes [#25](https://github.com/makandra/active_type/issues/25))
         
     | 
| 
       104 
107 
     | 
    
         | 
| 
       105 
     | 
    
         
            -
            ##  
     | 
| 
      
 108 
     | 
    
         
            +
            ## 0.3.2 (2015-01-22)
         
     | 
| 
       106 
109 
     | 
    
         | 
| 
       107 
110 
     | 
    
         
             
            * Making the gem to work with Rails version 4.0.0
         
     | 
| 
       108 
111 
     | 
    
         
             
            * Use native database type for type casting in pg
         
     | 
| 
       109 
112 
     | 
    
         | 
| 
       110 
     | 
    
         
            -
            ##  
     | 
| 
      
 113 
     | 
    
         
            +
            ## 0.3.1 (2014-11-19)
         
     | 
| 
       111 
114 
     | 
    
         | 
| 
       112 
115 
     | 
    
         
             
            * Support nested attributes in extended records (fixes [#17](https://github.com/makandra/active_type/issues/17))
         
     | 
| 
       113 
116 
     | 
    
         | 
| 
       114 
     | 
    
         
            -
            ##  
     | 
| 
      
 117 
     | 
    
         
            +
            ## 0.3.0 (2014-09-23)
         
     | 
| 
       115 
118 
     | 
    
         | 
| 
       116 
119 
     | 
    
         
             
            * Add support for Rails 4.2beta
         
     | 
| 
       117 
120 
     | 
    
         | 
    
        data/Gemfile.3.2.mysql2.lock
    CHANGED
    
    
    
        data/Gemfile.3.2.sqlite3.lock
    CHANGED
    
    
    
        data/Gemfile.4.2.mysql2.lock
    CHANGED
    
    
    
        data/Gemfile.4.2.pg.lock
    CHANGED
    
    
    
        data/Gemfile.4.2.sqlite3.lock
    CHANGED
    
    
    
        data/Gemfile.5.1.pg.lock
    CHANGED
    
    
    
        data/Gemfile.5.2.mysql2.lock
    CHANGED
    
    
    
        data/Gemfile.5.2.pg.lock
    CHANGED
    
    
    
        data/Gemfile.5.2.sqlite3.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | 
         @@ -65,6 +65,16 @@ The following behaviours are different than in vanilla Rails 5: 
     | 
|
| 
       65 
65 
     | 
    
         
             
            - You can override attributes with custom methods and use `super`.
         
     | 
| 
       66 
66 
     | 
    
         
             
            - Attributes will work on records retrieved via `.find`.
         
     | 
| 
       67 
67 
     | 
    
         
             
            - Attributes will be duped if you dup the record.
         
     | 
| 
      
 68 
     | 
    
         
            +
            - You cannot use `attribute :db_column` to override the behaviour of an existing database-backed attribute.
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            If you need to use `ActiveRecord's` own `.attribute` method, you can still access is as `ar_attribute`:
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            ```
         
     | 
| 
      
 73 
     | 
    
         
            +
            class User < ApplicationRecord
         
     | 
| 
      
 74 
     | 
    
         
            +
              # use my custom type to serialize to the database
         
     | 
| 
      
 75 
     | 
    
         
            +
              ar_attribute :password, MyPasswordType.new
         
     | 
| 
      
 76 
     | 
    
         
            +
            end
         
     | 
| 
      
 77 
     | 
    
         
            +
            ```
         
     | 
| 
       68 
78 
     | 
    
         | 
| 
       69 
79 
     | 
    
         | 
| 
       70 
80 
     | 
    
         
             
            ### ActiveType::Object
         
     | 
| 
         @@ -339,6 +349,10 @@ sign_up.is_a?(SignUp) # => true 
     | 
|
| 
       339 
349 
     | 
    
         | 
| 
       340 
350 
     | 
    
         
             
            This is basically like [`ActiveRecord#becomes`](http://apidock.com/rails/v4.2.1/ActiveRecord/Persistence/becomes), but with less bugs and more consistent behavior.
         
     | 
| 
       341 
351 
     | 
    
         | 
| 
      
 352 
     | 
    
         
            +
            **Note that `cast` is destructive.** The originally casted record (`user`) and the returned record (`sign_up`)
         
     | 
| 
      
 353 
     | 
    
         
            +
            share internal state (such as attributes). To avoid unexpected behavior, do not use the original record
         
     | 
| 
      
 354 
     | 
    
         
            +
            after casting it.
         
     | 
| 
      
 355 
     | 
    
         
            +
             
     | 
| 
       342 
356 
     | 
    
         
             
            You can also cast an entire relation (scope) to a relation of an `ActiveType::Record`:
         
     | 
| 
       343 
357 
     | 
    
         | 
| 
       344 
358 
     | 
    
         
             
            ```ruby
         
     | 
| 
         @@ -10,6 +10,17 @@ module ActiveType 
     | 
|
| 
       10 
10 
     | 
    
         
             
                    class_attribute :extended_record_base_class
         
     | 
| 
       11 
11 
     | 
    
         
             
                  end
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
      
 13 
     | 
    
         
            +
                  def self.add_foreign_key_option(extended_record_base_class, scope = nil, options = {})
         
     | 
| 
      
 14 
     | 
    
         
            +
                    if scope.is_a?(Hash)
         
     | 
| 
      
 15 
     | 
    
         
            +
                      options = scope
         
     | 
| 
      
 16 
     | 
    
         
            +
                      scope = nil
         
     | 
| 
      
 17 
     | 
    
         
            +
                    end
         
     | 
| 
      
 18 
     | 
    
         
            +
                    unless options[:foreign_key]
         
     | 
| 
      
 19 
     | 
    
         
            +
                      options = options.merge(foreign_key: extended_record_base_class.name.foreign_key)
         
     | 
| 
      
 20 
     | 
    
         
            +
                    end
         
     | 
| 
      
 21 
     | 
    
         
            +
                    options
         
     | 
| 
      
 22 
     | 
    
         
            +
                  end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
       13 
24 
     | 
    
         
             
                  module ClassMethods
         
     | 
| 
       14 
25 
     | 
    
         | 
| 
       15 
26 
     | 
    
         
             
                    def model_name
         
     | 
| 
         @@ -20,6 +31,13 @@ module ActiveType 
     | 
|
| 
       20 
31 
     | 
    
         
             
                      extended_record_base_class.sti_name
         
     | 
| 
       21 
32 
     | 
    
         
             
                    end
         
     | 
| 
       22 
33 
     | 
    
         | 
| 
      
 34 
     | 
    
         
            +
                    def has_many(name, *args, &extension)
         
     | 
| 
      
 35 
     | 
    
         
            +
                      super(name, Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                    def has_one(name, *args, &extension)
         
     | 
| 
      
 39 
     | 
    
         
            +
                      super(name, Inheritance.add_foreign_key_option(extended_record_base_class, *args), &extension)
         
     | 
| 
      
 40 
     | 
    
         
            +
                    end
         
     | 
| 
       23 
41 
     | 
    
         | 
| 
       24 
42 
     | 
    
         
             
                    private
         
     | 
| 
       25 
43 
     | 
    
         | 
    
        data/lib/active_type/version.rb
    CHANGED
    
    
| 
         @@ -114,6 +114,12 @@ module ActiveType 
     | 
|
| 
       114 
114 
     | 
    
         
             
                included do
         
     | 
| 
       115 
115 
     | 
    
         
             
                  class_attribute :virtual_columns_hash
         
     | 
| 
       116 
116 
     | 
    
         
             
                  self.virtual_columns_hash = {}
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                  class << self
         
     | 
| 
      
 119 
     | 
    
         
            +
                    if method_defined?(:attribute)
         
     | 
| 
      
 120 
     | 
    
         
            +
                      alias_method :ar_attribute, :attribute
         
     | 
| 
      
 121 
     | 
    
         
            +
                    end
         
     | 
| 
      
 122 
     | 
    
         
            +
                  end
         
     | 
| 
       117 
123 
     | 
    
         
             
                end
         
     | 
| 
       118 
124 
     | 
    
         | 
| 
       119 
125 
     | 
    
         
             
                def initialize_dup(other)
         
     | 
    
        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. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 1.1.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- 
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2019-03-04 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: bundler
         
     | 
| 
         @@ -123,7 +123,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       123 
123 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       124 
124 
     | 
    
         
             
            requirements: []
         
     | 
| 
       125 
125 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       126 
     | 
    
         
            -
            rubygems_version: 2.7. 
     | 
| 
      
 126 
     | 
    
         
            +
            rubygems_version: 2.7.8
         
     | 
| 
       127 
127 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       128 
128 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       129 
129 
     | 
    
         
             
            summary: Make any Ruby object quack like ActiveRecord
         
     |