attr_deprecated 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MmFkOWE1MDcyZGExNWZjNjkyODYxMjZiNTJmZGFkNDdhNzZjYjU5NA==
5
+ data.tar.gz: !binary |-
6
+ OTlmZTEyMzgwNGExY2ZkZTBkNmUxY2EzZWQ1NmU3NWM4MWM4OTg0Mg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MjM1MDY3ZmUxZTkxOTRjZDhkMWIwMTNjNWUwMDk1ZGMxNWE4YTkzYWFjNjc4
10
+ NzY5ZWY1YzdiMDVkMGI5NGI1YzYzOTk5M2M1Yjg0Y2NiMDNiMGZlNGVjOWUx
11
+ OGE0NmNkM2Y0NDhiMTgzOWYwYTBkMTVkNzM1YmRjNWU5Yzg0M2M=
12
+ data.tar.gz: !binary |-
13
+ MjQwOTc5YzNhZDAwZjdhOWE3OWFmOTBmNWNiOTcyZDBhMzI0OGYxZDc0NTg5
14
+ NDQ0ODRmYjE5ZDBmMDUwZjc0ZWUxMWUzNTU5Zjg4NzZmMDg5ZGE0MGIyZWM1
15
+ ZGI4YTlkOGUyZDhlN2JmZTQzMWMxZmFhY2YxNGViODM4ODEwYWM=
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rails', github: 'rails/rails', branch: '3-2-stable'
4
+
5
+ # Specify your gem's dependencies in attr_deprecated.gemspec
6
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Anthony Erlinger
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,73 @@
1
+ # AttrDeprecated
2
+
3
+ A simple and non-intrusive way to mark deprecated columns/attributes in your models so they may be more safely removed.
4
+ Any usage of a deprecated attribute will be logged with a warning message and a trace of where the deprecated attribute
5
+ was called. Exceptions and Airbrake messages can be raised as well.
6
+
7
+ ## Why?
8
+
9
+ Because we all have crap we don't want in our schema but are too afraid to remove.
10
+
11
+ ## Installation
12
+
13
+ Add this line to your application's Gemfile:
14
+
15
+ gem 'attr_deprecated'
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install attr_deprecated
24
+
25
+ ## Usage
26
+
27
+ **In your model**
28
+
29
+ class User < ActiveRecord::Base
30
+ attr_deprecated :some_deprecated_column, :some_other_deprecated_column
31
+
32
+ ...
33
+ end
34
+
35
+ **Example**:
36
+
37
+ > User.attr_deprecated
38
+ => <DeprecatedAttributeSet: {"some_deprecated_column", "some_other_deprecated_column"}>
39
+ >
40
+ > User.attr_deprecated? :some_deprecated_column
41
+ => true
42
+ >
43
+ > User.first.some_deprecated_column
44
+ WARNING: Called deprecated attribute on User: some_deprecated_column
45
+ .../.rvm/rubies/ruby-2.1.0/lib/ruby/2.1.0/irb.rb:396:in `start'
46
+ .../.rvm/gems/ruby-2.1.0/gems/railties-3.2.17/lib/rails/commands/console.rb:47:in `start'
47
+ .../.rvm/gems/ruby-2.1.0/gems/railties-3.2.17/lib/rails/commands/console.rb:8:in `start'
48
+ .../.rvm/gems/ruby-2.1.0/gems/railties-3.2.17/lib/rails/commands.rb:41:in `<top (required)>'
49
+ ...
50
+
51
+
52
+ ## TODO:
53
+
54
+ Add configuration:
55
+
56
+ Suppose you have a project with a `production`, `staging`, `development`, and `test` environment defined. You can define the behavior of attr_deprecated for each environment through the config params:
57
+
58
+ AttrDeprecated.configure do |config|
59
+ config.do_logging = [:production, :staging, :development, :test]
60
+ config.do_exceptions = [:production]
61
+
62
+ # Only if you're using Airbrake:
63
+ config.do_airbrake = [:production, :staging]
64
+ end
65
+
66
+
67
+ ## Contributing
68
+
69
+ 1. Fork it ( http://github.com/Aerlinger/attr_deprecated/fork )
70
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
71
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
72
+ 4. Push to the branch (`git push origin my-new-feature`)
73
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'attr_deprecated/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "attr_deprecated"
8
+ spec.version = AttrDeprecated::VERSION
9
+ spec.authors = ["Anthony Erlinger"]
10
+ spec.email = ["anthony@handybook.com"]
11
+ spec.summary = %q{Mark unused model attributes as deprecated.}
12
+ spec.description = %q{A simple and non-intrusive way to mark deprecated columns/attributes in your models. Any usage of these attributes will logged with a warning message and a trace of where the deprecated attribute was called. An exception can be optionally raised as well.}
13
+ spec.homepage = "https://github.com/Aerlinger/attr_deprecated"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.test_files = spec.files.grep(%r{^(spec)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency 'activesupport', ['>= 3.0', '< 5.0']
21
+
22
+ spec.add_development_dependency 'activerecord', ['>= 3.0', '< 5.0']
23
+ spec.add_development_dependency "bundler", "~> 1.5"
24
+ spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "rspec", "2.14.1"
26
+ spec.add_development_dependency "sqlite3"
27
+ end
@@ -0,0 +1,9 @@
1
+ require 'set'
2
+
3
+ module AttrDeprecated
4
+ class DeprecatedAttributeSet < Set
5
+ def ==(other_set)
6
+ Set.new(self) == Set.new(other_set)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,92 @@
1
+ require 'active_support'
2
+
3
+ require "attr_deprecated/version"
4
+ require "attr_deprecated/configuration"
5
+
6
+ require "notifiers/deprecation_logger"
7
+ require "active_model/deprecated_attribute_set"
8
+
9
+ require 'active_record'
10
+ require 'active_model'
11
+
12
+ module AttrDeprecated
13
+ extend ActiveSupport::Concern
14
+
15
+ included do
16
+ class_attribute :_deprecated_attributes, instance_writer: false
17
+ end
18
+
19
+ module ClassMethods
20
+ ##
21
+ # == attr_deprecated
22
+ #
23
+ # class macro definition to non-destructively mark an attribute as deprecated.
24
+ #
25
+ # The original method (i.e. the one marked as deprecated) is renamed and wrapped in an alias that dispatches the notification.
26
+ # (See the `around_alias` pattern. [Paolo Perotta. Metaprogramming Ruby, p. 121])
27
+ #
28
+ def attr_deprecated(*attributes)
29
+ attributes = DeprecatedAttributeSet.new(attributes.compact)
30
+ self._deprecated_attributes ||= DeprecatedAttributeSet.new
31
+
32
+ # Rails uses lazy initialization to wrap methods, so make sure we pre-initialize any deprecated attributes
33
+ if defined?(ActiveRecord) && ancestors.include?(ActiveRecord::Base)
34
+ new(Hash[attributes.zip(attributes.map {})], without_protection: true)
35
+ end
36
+
37
+ # Taking the difference of the two sets ensures we don't deprecate the same attribute more than once
38
+ (attributes - _deprecated_attributes).each do |attribute|
39
+ _set_attribute_as_deprecated attribute
40
+ end
41
+
42
+ self._deprecated_attributes += attributes
43
+ end
44
+
45
+ def deprecated_attribute?(attribute)
46
+ _deprecated_attributes.include?(attribute)
47
+ end
48
+
49
+ def deprecated_attributes
50
+ _deprecated_attributes || DeprecatedAttributeSet.new
51
+ end
52
+
53
+ def clear_deprecated_attributes!
54
+ self._deprecated_attributes = _deprecated_attributes.clear
55
+ end
56
+
57
+ def _set_attribute_as_deprecated(attribute)
58
+ original_method = instance_method(attribute.to_sym)
59
+
60
+ klass = self
61
+ define_method attribute.to_sym do |*args|
62
+ klass._notify_deprecated_attribute_call(attribute)
63
+
64
+ original_method.bind(self).call(*args)
65
+ end
66
+ end
67
+
68
+ def _notify_deprecated_attribute_call(attribute)
69
+ @_deprecation_logger ||= AttrDeprecated::DeprecatedAttributeLogger.new(self)
70
+
71
+ @_deprecation_logger.log_deprecated_attribute_usage(self, attribute)
72
+ end
73
+ end
74
+ end
75
+
76
+ module AttrDeprecated
77
+ class << self
78
+ include AttrDeprecated::Configuration
79
+
80
+ def configure(&block)
81
+ AttrDeprecated::Configuration.configure(&block)
82
+ end
83
+ end
84
+ end
85
+
86
+ if defined? Rails || ENV['test']
87
+ class ActiveRecord::Base
88
+ include AttrDeprecated
89
+ end
90
+
91
+ require 'attr_deprecated/railtie.rb' if defined?(Rails)
92
+ end
@@ -0,0 +1,23 @@
1
+ require 'active_support/concern'
2
+
3
+ module AttrDeprecated
4
+ module Configuration
5
+ extend ActiveSupport::Concern
6
+
7
+ included do
8
+ add_config :log_environments
9
+ add_config :exception_environments
10
+ add_config :airbrake_environments
11
+ end
12
+
13
+ module ClassMethods
14
+ def configure
15
+ yield self
16
+ end
17
+
18
+ def add_config(value)
19
+ @name = value if value
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,17 @@
1
+ require 'rails/railtie'
2
+
3
+ module AttrDeprecated
4
+ class Railtie < ::Rails::Railtie
5
+ initializer "attr_deprecated.active_record", :before => "active_record.set_configs" do |app|
6
+ ActiveSupport.on_load :active_record do
7
+ require 'attr_deprecated'
8
+
9
+ if app.config.respond_to?(:active_record)
10
+ class ActiveRecord::Base
11
+ include AttrDeprecated
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,3 @@
1
+ module AttrDeprecated
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,17 @@
1
+ module AttrDeprecated
2
+ class AirbrakeNotifier
3
+ def initialize(target)
4
+ @target = target
5
+ end
6
+
7
+ def notify_airbrake(attribute)
8
+ if defined?(Airbrake)
9
+ Airbrake.notify Exception.new
10
+ "WARNING: Called deprecated attribute for #{klass.name}: #{attrs.join(', ')}\n" +
11
+ backtrace.map { |trace| "\t#{trace}" }.join("\n")
12
+
13
+ end
14
+ rescue
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,36 @@
1
+ module AttrDeprecated
2
+ class DeprecatedAttributeLogger
3
+ def initialize(target)
4
+ @target = target
5
+ super()
6
+ end
7
+
8
+ def logger
9
+ @target.logger
10
+ end
11
+
12
+ def logger?
13
+ @target.respond_to?(:logger) && @target.logger
14
+ end
15
+
16
+ def backtrace
17
+ if defined? Rails
18
+ Rails.backtrace_cleaner.clean(caller)
19
+ else
20
+ caller
21
+ end
22
+ end
23
+
24
+ def log_deprecated_attribute_usage(klass, *attrs)
25
+ warning_message = "WARNING: Called deprecated attribute on #{klass.name}: #{attrs.join(', ')}\n" +
26
+ backtrace.map { |trace| "\t#{trace}" }.join("\n")
27
+ if logger?
28
+ logger.warn do
29
+ warning_message
30
+ end
31
+ else
32
+ puts warning_message
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,102 @@
1
+ require 'spec_helper'
2
+
3
+ class Foo
4
+ include AttrDeprecated
5
+
6
+ attr_accessor :fresh_attribute,
7
+ :an_unused_attribute
8
+ attr_deprecated :an_unused_attribute
9
+ end
10
+
11
+ describe "Sample spec" do
12
+ specify "AttrDeprecated is defined" do
13
+ defined?(AttrDeprecated).should be_true
14
+ end
15
+
16
+ specify "A class that extends AttrDeprecated::Model will have attr_deprecated defined" do
17
+ Foo.methods.should include(:attr_deprecated)
18
+ end
19
+
20
+ it "has attr deprecated" do
21
+ Foo.deprecated_attributes.should eq [:an_unused_attribute]
22
+ end
23
+
24
+ describe "A class includes AttrDeprecated" do
25
+ before do
26
+ @f = Foo.new
27
+ @f.an_unused_attribute = "asdf"
28
+ @f.fresh_attribute = "fresh"
29
+ end
30
+
31
+ describe "declaring an unused attribute as deprecated" do
32
+ specify ".attr_deprecated? includes :an_unused_attribute" do
33
+ Foo.deprecated_attribute?(:an_unused_attribute).should be_true
34
+ end
35
+
36
+ specify "A getter attribute is defined as deprecated" do
37
+ @f.should_receive(:an_unused_attribute).exactly(1).times.and_call_original
38
+ Foo.should_receive(:_notify_deprecated_attribute_call)
39
+
40
+ @f.should_not_receive(:an_unused_attribute=)
41
+
42
+ @f.an_unused_attribute.should eq("asdf")
43
+ end
44
+
45
+ specify "A setter attribute is defined as deprecated" do
46
+ Foo.should_receive(:_notify_deprecated_attribute_call).exactly(2).times.and_call_original
47
+
48
+ @f.an_unused_attribute = "omg"
49
+ @f.an_unused_attribute
50
+ @f.an_unused_attribute.should eq("omg")
51
+ end
52
+
53
+ specify "calling attr_deprecated more than once shouldn't cause infinite regress" do
54
+ Foo.class_eval { attr_deprecated :an_unused_attribute }
55
+
56
+ @f.an_unused_attribute.should eq("asdf")
57
+ end
58
+ end
59
+
60
+ describe "Adding a new deprecated attribute (more than once)" do
61
+ before do
62
+ Foo.class_eval { attr_deprecated :fresh_attribute, :fresh_attribute}
63
+ end
64
+
65
+ it "only calls fresh_attribute once" do
66
+ @f.should_receive(:fresh_attribute).exactly(1).times.and_call_original
67
+
68
+ @f.fresh_attribute.should eq("fresh")
69
+ end
70
+ end
71
+
72
+ describe "clearing deprecated attributes" do
73
+ before do
74
+ Foo.clear_deprecated_attributes!
75
+ end
76
+
77
+ it "Doesn't have any deprecated attributes" do
78
+ Foo.deprecated_attributes.should eq([])
79
+ end
80
+ end
81
+ end
82
+
83
+ describe "A class doesn't have any deprecated attributes initially" do
84
+ before do
85
+ @dummy_class = Class.new do
86
+ include AttrDeprecated
87
+ end
88
+ end
89
+
90
+ it "empty deprecated attributes" do
91
+ @dummy_class.deprecated_attributes.should eq([])
92
+ end
93
+
94
+ it "calling attr_deprecated alone doesn't raise an error" do
95
+ @dummy_class.class_eval do
96
+ attr_deprecated
97
+ end
98
+
99
+ @dummy_class.deprecated_attributes.should eq([])
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,33 @@
1
+ require 'spec_helper'
2
+
3
+ class User < ActiveRecord::Base
4
+ attr_deprecated :a_deprecated_attribute
5
+ end
6
+
7
+ describe "Integration with ActiveRecord" do
8
+ before do
9
+ ActiveRecord::Base.send(:descendants).each do |klass|
10
+ begin
11
+ klass.delete_all
12
+ rescue
13
+ end
14
+ end
15
+ end
16
+
17
+ let!(:user) { User.new(name: "rspec", a_deprecated_attribute: "wtf") }
18
+
19
+ it "has :a_deprecated_attribute method" do
20
+ User.instance_methods.should include(:a_deprecated_attribute)
21
+ end
22
+
23
+ it "ensures we've initialized ActiveRecord correctly for our test suite" do
24
+ user.save!
25
+
26
+ expect(user.persisted?).to be_true
27
+ expect(user.a_deprecated_attribute).to eq("wtf")
28
+ end
29
+
30
+ it "has one deprecated attribute" do
31
+ expect(User.deprecated_attributes).to eq([:a_deprecated_attribute])
32
+ end
33
+ end
@@ -0,0 +1,16 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ ENV['test'] = 'test'
5
+
6
+ require 'attr_deprecated'
7
+ require 'support/active_record'
8
+
9
+ RSpec.configure do |config|
10
+ config.around do |example|
11
+ ActiveRecord::Base.transaction do
12
+ example.run
13
+ raise ActiveRecord::Rollback
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ require 'attr_deprecated'
2
+ require 'active_record'
3
+
4
+ ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"
5
+ ActiveRecord::Schema.verbose = false
6
+
7
+ ActiveRecord::Schema.define do
8
+ create_table :users, :force => true do |t|
9
+ t.string :name
10
+ t.string :email
11
+ t.string :a_deprecated_attribute
12
+ t.timestamps
13
+ end
14
+ end
15
+
16
+ class User < ActiveRecord::Base
17
+ end
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: attr_deprecated
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Anthony Erlinger
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-05-04 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ! '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '3.0'
20
+ - - <
21
+ - !ruby/object:Gem::Version
22
+ version: '5.0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '3.0'
30
+ - - <
31
+ - !ruby/object:Gem::Version
32
+ version: '5.0'
33
+ - !ruby/object:Gem::Dependency
34
+ name: activerecord
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ! '>='
38
+ - !ruby/object:Gem::Version
39
+ version: '3.0'
40
+ - - <
41
+ - !ruby/object:Gem::Version
42
+ version: '5.0'
43
+ type: :development
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ! '>='
48
+ - !ruby/object:Gem::Version
49
+ version: '3.0'
50
+ - - <
51
+ - !ruby/object:Gem::Version
52
+ version: '5.0'
53
+ - !ruby/object:Gem::Dependency
54
+ name: bundler
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ~>
58
+ - !ruby/object:Gem::Version
59
+ version: '1.5'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ~>
65
+ - !ruby/object:Gem::Version
66
+ version: '1.5'
67
+ - !ruby/object:Gem::Dependency
68
+ name: rake
69
+ requirement: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ type: :development
75
+ prerelease: false
76
+ version_requirements: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ! '>='
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ - !ruby/object:Gem::Dependency
82
+ name: rspec
83
+ requirement: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - '='
86
+ - !ruby/object:Gem::Version
87
+ version: 2.14.1
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - '='
93
+ - !ruby/object:Gem::Version
94
+ version: 2.14.1
95
+ - !ruby/object:Gem::Dependency
96
+ name: sqlite3
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ! '>='
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ description: A simple and non-intrusive way to mark deprecated columns/attributes
110
+ in your models. Any usage of these attributes will logged with a warning message
111
+ and a trace of where the deprecated attribute was called. An exception can be optionally
112
+ raised as well.
113
+ email:
114
+ - anthony@handybook.com
115
+ executables: []
116
+ extensions: []
117
+ extra_rdoc_files: []
118
+ files:
119
+ - .gitignore
120
+ - .rspec
121
+ - Gemfile
122
+ - LICENSE.txt
123
+ - README.md
124
+ - Rakefile
125
+ - attr_deprecated.gemspec
126
+ - lib/active_model/deprecated_attribute_set.rb
127
+ - lib/attr_deprecated.rb
128
+ - lib/attr_deprecated/configuration.rb
129
+ - lib/attr_deprecated/railtie.rb
130
+ - lib/attr_deprecated/version.rb
131
+ - lib/notifiers/airbrake_notifier.rb
132
+ - lib/notifiers/deprecation_logger.rb
133
+ - spec/attr_deprecated_spec.rb
134
+ - spec/attr_deprected_active_record_spec.rb
135
+ - spec/spec_helper.rb
136
+ - spec/support/active_record.rb
137
+ homepage: https://github.com/Aerlinger/attr_deprecated
138
+ licenses:
139
+ - MIT
140
+ metadata: {}
141
+ post_install_message:
142
+ rdoc_options: []
143
+ require_paths:
144
+ - lib
145
+ required_ruby_version: !ruby/object:Gem::Requirement
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ required_rubygems_version: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - ! '>='
153
+ - !ruby/object:Gem::Version
154
+ version: '0'
155
+ requirements: []
156
+ rubyforge_project:
157
+ rubygems_version: 2.1.11
158
+ signing_key:
159
+ specification_version: 4
160
+ summary: Mark unused model attributes as deprecated.
161
+ test_files:
162
+ - spec/attr_deprecated_spec.rb
163
+ - spec/attr_deprected_active_record_spec.rb
164
+ - spec/spec_helper.rb
165
+ - spec/support/active_record.rb