gigo-activerecord 1.0.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.
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .ruby-version
6
+ .yardoc
7
+ Gemfile.lock
8
+ InstalledFiles
9
+ _yardoc
10
+ coverage
11
+ doc/
12
+ lib/bundler/man
13
+ pkg
14
+ rdoc
15
+ spec/reports
16
+ test/tmp
17
+ test/version_tmp
18
+ tmp
@@ -0,0 +1,12 @@
1
+
2
+ appraise 'activerecord31' do
3
+ gem 'activerecord', '~> 3.1.0'
4
+ end
5
+
6
+ appraise 'activerecord32' do
7
+ gem 'activerecord', '~> 3.2.0'
8
+ end
9
+
10
+ appraise 'activerecord40' do
11
+ gem 'activerecord', :github => 'rails/rails'
12
+ end
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Ken Collins
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,75 @@
1
+ # GIGO (Garbage In, Garbage Out) For ActiveRecord
2
+
3
+ See the [GIGO](http://github.com/customink/gigo) project for general information.
4
+
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ gem 'gigo-activerecord'
11
+
12
+ And then execute:
13
+
14
+ $ bundle
15
+
16
+ Or install it yourself as:
17
+
18
+ $ gem install gigo-activerecord
19
+
20
+
21
+ ## Usage
22
+
23
+ #### Column Helpers
24
+
25
+ This gem allows you to use GIGO with ActiveRecord in a few convenient ways. First by easily declaring that a column should be loaded thru GIGO. Assuming you have a `Note` model with a `subject` column.
26
+
27
+ ```ruby
28
+ class Note < ActiveRecord::Base
29
+ gigo_column :subject
30
+ end
31
+
32
+ @note.subject # => "€20 – “Woohoo”"
33
+ ```
34
+
35
+ GIGO extends your model in such a way that still allows you to define your own instance methods and super up thru the attribute method stack.
36
+
37
+ ```ruby
38
+ class Note < ActiveRecord::Base
39
+ gigo_column :subject
40
+ def subject
41
+ super.upcase
42
+ end
43
+ end
44
+
45
+ @note.subject # => "€20 – “WOOHOO”"
46
+ ```
47
+
48
+ #### Serialized Attributes
49
+
50
+ Sometimes your serialized attributes need GIGO before loading the YAML.
51
+
52
+ ```ruby
53
+ class Order < ActiveRecord::Base
54
+ serialize :notes, Hash
55
+ gigo_serialized_attribute :notes
56
+ end
57
+ ```
58
+
59
+
60
+ ## Contributing
61
+
62
+ GIGO is fully tested with ActiveRecord 3.0 to 4 and upward. If you detect a problem, open up a github issue or fork the repo and help out. After you fork or clone the repository, the following commands will get you up and running on the test suite.
63
+
64
+ ```shell
65
+ $ bundle install
66
+ $ bundle exec rake appraisal:setup
67
+ $ bundle exec rake appraisal test
68
+ ```
69
+
70
+ We use the [appraisal](https://github.com/thoughtbot/appraisal) gem from Thoughtbot to help us generate the individual gemfiles for each ActiveSupport version and to run the tests locally against each generated Gemfile. The `rake appraisal test` command actually runs our test suite against all Rails versions in our `Appraisal` file. If you want to run the tests for a specific Rails version, use `rake -T` for a list. For example, the following command will run the tests for Rails 3.2 only.
71
+
72
+ ```shell
73
+ $ bundle exec rake appraisal:activerecord32 test
74
+ ```
75
+
@@ -0,0 +1,18 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+ require 'appraisal'
4
+
5
+ Rake::TestTask.new do |t|
6
+ t.libs = ['lib','test']
7
+ t.test_files = Dir.glob('test/**/*_test.rb').sort
8
+ t.verbose = true
9
+ end
10
+
11
+ task :default => :test
12
+
13
+ desc "Setup Appraisal."
14
+ task 'appraisal:setup' do
15
+ Rake::Task['appraisal:cleanup'].invoke
16
+ Rake::Task['appraisal:gemfiles'].invoke
17
+ Rake::Task['appraisal:install'].invoke
18
+ end
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 3.1.0"
6
+
7
+ gemspec :path=>"../"
@@ -0,0 +1,47 @@
1
+ PATH
2
+ remote: /Users/kencollins/Repositories/customink/gigo-activerecord
3
+ specs:
4
+ gigo-activerecord (1.0.0)
5
+ activerecord (>= 3.1)
6
+ gigo
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activemodel (3.1.12)
12
+ activesupport (= 3.1.12)
13
+ builder (~> 3.0.0)
14
+ i18n (~> 0.6)
15
+ activerecord (3.1.12)
16
+ activemodel (= 3.1.12)
17
+ activesupport (= 3.1.12)
18
+ arel (~> 2.2.3)
19
+ tzinfo (~> 0.3.29)
20
+ activesupport (3.1.12)
21
+ multi_json (~> 1.0)
22
+ appraisal (0.5.2)
23
+ bundler
24
+ rake
25
+ arel (2.2.3)
26
+ builder (3.0.4)
27
+ ensure_valid_encoding (0.5.3)
28
+ gigo (2.0.0)
29
+ activesupport (>= 3.0)
30
+ ensure_valid_encoding (~> 0.5.3)
31
+ i18n (0.6.4)
32
+ minitest (5.0.1)
33
+ multi_json (1.7.3)
34
+ rake (10.0.4)
35
+ sqlite3 (1.3.7)
36
+ tzinfo (0.3.37)
37
+
38
+ PLATFORMS
39
+ ruby
40
+
41
+ DEPENDENCIES
42
+ activerecord (~> 3.1.0)
43
+ appraisal
44
+ gigo-activerecord!
45
+ minitest (~> 5.0)
46
+ rake
47
+ sqlite3
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 3.2.0"
6
+
7
+ gemspec :path=>"../"
@@ -0,0 +1,47 @@
1
+ PATH
2
+ remote: /Users/kencollins/Repositories/customink/gigo-activerecord
3
+ specs:
4
+ gigo-activerecord (1.0.0)
5
+ activerecord (>= 3.1)
6
+ gigo
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ activemodel (3.2.13)
12
+ activesupport (= 3.2.13)
13
+ builder (~> 3.0.0)
14
+ activerecord (3.2.13)
15
+ activemodel (= 3.2.13)
16
+ activesupport (= 3.2.13)
17
+ arel (~> 3.0.2)
18
+ tzinfo (~> 0.3.29)
19
+ activesupport (3.2.13)
20
+ i18n (= 0.6.1)
21
+ multi_json (~> 1.0)
22
+ appraisal (0.5.2)
23
+ bundler
24
+ rake
25
+ arel (3.0.2)
26
+ builder (3.0.4)
27
+ ensure_valid_encoding (0.5.3)
28
+ gigo (2.0.0)
29
+ activesupport (>= 3.0)
30
+ ensure_valid_encoding (~> 0.5.3)
31
+ i18n (0.6.1)
32
+ minitest (5.0.1)
33
+ multi_json (1.7.3)
34
+ rake (10.0.4)
35
+ sqlite3 (1.3.7)
36
+ tzinfo (0.3.37)
37
+
38
+ PLATFORMS
39
+ ruby
40
+
41
+ DEPENDENCIES
42
+ activerecord (~> 3.2.0)
43
+ appraisal
44
+ gigo-activerecord!
45
+ minitest (~> 5.0)
46
+ rake
47
+ sqlite3
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", :github=>"rails/rails"
6
+
7
+ gemspec :path=>"../"
@@ -0,0 +1,59 @@
1
+ GIT
2
+ remote: git://github.com/rails/rails.git
3
+ revision: 3b266bcfeaa2268cabf4afa362ea0982b92e5b4c
4
+ specs:
5
+ activemodel (4.1.0.beta)
6
+ activesupport (= 4.1.0.beta)
7
+ builder (~> 3.1.0)
8
+ activerecord (4.1.0.beta)
9
+ activemodel (= 4.1.0.beta)
10
+ activerecord-deprecated_finders (~> 1.0.2)
11
+ activesupport (= 4.1.0.beta)
12
+ arel (~> 4.0.0)
13
+ activesupport (4.1.0.beta)
14
+ i18n (~> 0.6, >= 0.6.4)
15
+ json (~> 1.7)
16
+ minitest (~> 5.0)
17
+ thread_safe (~> 0.1)
18
+ tzinfo (~> 0.3.37)
19
+
20
+ PATH
21
+ remote: /Users/kencollins/Repositories/customink/gigo-activerecord
22
+ specs:
23
+ gigo-activerecord (1.0.0)
24
+ activerecord (>= 3.1)
25
+ gigo
26
+
27
+ GEM
28
+ remote: https://rubygems.org/
29
+ specs:
30
+ activerecord-deprecated_finders (1.0.2)
31
+ appraisal (0.5.2)
32
+ bundler
33
+ rake
34
+ arel (4.0.0)
35
+ atomic (1.1.9)
36
+ builder (3.1.4)
37
+ ensure_valid_encoding (0.5.3)
38
+ gigo (2.0.0)
39
+ activesupport (>= 3.0)
40
+ ensure_valid_encoding (~> 0.5.3)
41
+ i18n (0.6.4)
42
+ json (1.8.0)
43
+ minitest (5.0.2)
44
+ rake (10.0.4)
45
+ sqlite3 (1.3.7)
46
+ thread_safe (0.1.0)
47
+ atomic
48
+ tzinfo (0.3.37)
49
+
50
+ PLATFORMS
51
+ ruby
52
+
53
+ DEPENDENCIES
54
+ activerecord!
55
+ appraisal
56
+ gigo-activerecord!
57
+ minitest (~> 5.0)
58
+ rake
59
+ sqlite3
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'gigo/active_record/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "gigo-activerecord"
8
+ spec.version = GIGO::ActiveRecord::VERSION
9
+ spec.authors = ["Ken Collins"]
10
+ spec.email = ["kcollins@customink.com"]
11
+ spec.description = 'GIGO for ActiveRecord'
12
+ spec.summary = 'GIGO for ActiveRecord'
13
+ spec.homepage = 'http://github.com/customink/gigo-activerecord'
14
+ spec.license = "MIT"
15
+ spec.files = `git ls-files`.split($/)
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+ spec.add_runtime_dependency 'gigo'
20
+ spec.add_runtime_dependency 'activerecord', '>= 3.1'
21
+ spec.add_development_dependency 'appraisal'
22
+ spec.add_development_dependency 'rake'
23
+ spec.add_development_dependency 'minitest', '~> 5.0'
24
+ spec.add_development_dependency 'sqlite3'
25
+ end
@@ -0,0 +1 @@
1
+ require 'gigo/active_record'
@@ -0,0 +1,4 @@
1
+ require 'gigo'
2
+ require 'active_record'
3
+ require 'gigo/active_record/version'
4
+ require 'gigo/active_record/base'
@@ -0,0 +1,46 @@
1
+ module GIGO
2
+ module ActiveRecord
3
+ module Base
4
+
5
+ def gigo_serialized_attribute(*attrs)
6
+ attrs.each do |attr|
7
+ yaml_column = self.serialized_attributes[attr.to_s]
8
+ next unless yaml_column
9
+ yaml_column.class_eval do
10
+ def load_with_gigo(yaml)
11
+ existing_encoding = Encoding.default_internal
12
+ Encoding.default_internal = GIGO.encoding
13
+ yaml = GIGO.load(yaml)
14
+ load_without_gigo(yaml)
15
+ ensure
16
+ Encoding.default_internal = existing_encoding
17
+ end
18
+ alias_method_chain :load, :gigo
19
+ end
20
+ end
21
+ end
22
+
23
+ def gigo_column(*attrs)
24
+ mod = begin
25
+ if defined?(GIGOColumns)
26
+ const_get(:GIGOColumns)
27
+ else
28
+ m = const_set(:GIGOColumns, Module.new)
29
+ include m
30
+ m
31
+ end
32
+ end
33
+ attrs.each do |attr|
34
+ mod.module_eval <<-CODE, __FILE__, __LINE__
35
+ def #{attr}
36
+ GIGO.load(super)
37
+ end
38
+ CODE
39
+ end
40
+ end
41
+
42
+ end
43
+ end
44
+ end
45
+
46
+ ActiveRecord::Base.extend GIGO::ActiveRecord::Base
@@ -0,0 +1,5 @@
1
+ module GIGO
2
+ module ActiveRecord
3
+ VERSION = "1.0.0"
4
+ end
5
+ end
@@ -0,0 +1,77 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper'
3
+
4
+ module GIGO
5
+ module ActiveRecord
6
+ class AllTest < TestCase
7
+
8
+ describe 'gigo_serialized_attribute' do
9
+
10
+ before { user_data_utf8 ; user_data_cp1252 ; user_data_binary ; user_data_iso8859 }
11
+
12
+ let(:seralized_data_utf8) { with_db_encoding(utf8) { user_data_utf8.notes[:data] } }
13
+ let(:seralized_data_utf8_raw) { with_db_encoding(utf8) { UserRaw.find(user_data_utf8.id).notes } }
14
+ let(:seralized_data_utf8_gigo) { with_db_encoding(utf8) { UserGIGO.find(user_data_utf8.id).notes[:data] } }
15
+
16
+ let(:seralized_data_cp1252) { with_db_encoding(cp1252) { user_data_cp1252.notes[:data] } }
17
+ let(:seralized_data_cp1252_raw) { with_db_encoding(cp1252) { UserRaw.find(user_data_cp1252.id).notes } }
18
+ let(:seralized_data_cp1252_gigo) { with_db_encoding(cp1252) { UserGIGO.find(user_data_cp1252.id).notes[:data] } }
19
+
20
+ let(:seralized_data_binary) { with_db_encoding(binary) { user_data_binary.notes[:data] } }
21
+ let(:seralized_data_binary_raw) { with_db_encoding(binary) { UserRaw.find(user_data_binary.id).notes } }
22
+ let(:seralized_data_binary_gigo) { with_db_encoding(binary) { UserGIGO.find(user_data_binary.id).notes[:data] } }
23
+
24
+ let(:seralized_data_iso8859) { with_db_encoding(iso8859) { user_data_iso8859.notes[:data] } }
25
+ let(:seralized_data_iso8859_raw) { with_db_encoding(iso8859) { UserRaw.find(user_data_iso8859.id).notes } }
26
+ let(:seralized_data_iso8859_gigo) { with_db_encoding(iso8859) { UserGIGO.find(user_data_iso8859.id).notes[:data] } }
27
+
28
+ it 'can setup different DB data in other encodings so other test assumptions work' do
29
+ seralized_data_utf8_raw.encoding.must_equal utf8
30
+ seralized_data_cp1252_raw.encoding.must_equal cp1252
31
+ seralized_data_binary_raw.encoding.must_equal binary
32
+ seralized_data_iso8859_raw.encoding.must_equal iso8859
33
+ end
34
+
35
+ it 'can properly encode serialized data' do
36
+ seralized_data_utf8_gigo.must_equal "€20 – “Woohoo”"
37
+ seralized_data_cp1252_gigo.must_equal "€20 – “Woohoo”"
38
+ seralized_data_binary_gigo.must_equal "won’t"
39
+ seralized_data_iso8859_gigo.must_equal "Medíco"
40
+ end
41
+
42
+ it 'allows serialized attribute to still work with nil/defaults' do
43
+ user = UserGIGO.new
44
+ user.notes.must_equal Hash.new
45
+ user.save
46
+ user.reload.notes.must_equal Hash.new
47
+ end
48
+
49
+ it 'allows serialized attribute to still work as normal' do
50
+ user = UserGIGO.new
51
+ user.notes[:foo] = 'bar'
52
+ user.save
53
+ user.reload.notes[:foo].must_equal 'bar'
54
+ end
55
+
56
+ end
57
+
58
+ describe 'gigo_column' do
59
+
60
+ before { user_subject_binary }
61
+
62
+ let(:id) { user_subject_binary.id }
63
+
64
+ it 'hooks into GIGO' do
65
+ UserGIGO.find(id).subject.must_equal "won’t"
66
+ end
67
+
68
+ it 'allows user to further refine #subject method via super' do
69
+ UserGIGOWithSuperSubject.find(id).subject.must_equal "WON’T"
70
+ end
71
+
72
+ end
73
+
74
+
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,103 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'bundler' ; Bundler.require :development, :test
3
+ require 'gigo-activerecord'
4
+ require 'minitest/autorun'
5
+ require 'logger'
6
+
7
+ ActiveRecord::Base.logger = Logger.new('/dev/null')
8
+ ActiveRecord::Base.establish_connection adapter: 'sqlite3', database: ':memory:'
9
+
10
+ module GIGO
11
+ module ActiveRecord
12
+ class TestCase < MiniTest::Spec
13
+
14
+ before { setup_schema ; setup_encodings }
15
+
16
+ let(:utf8) { Encoding::UTF_8 }
17
+ let(:cp1252) { Encoding::CP1252 }
18
+ let(:binary) { Encoding::ASCII_8BIT }
19
+ let(:iso8859) { Encoding::ISO8859_1 }
20
+
21
+ let(:data_utf8) { "€20 – “Woohoo”" }
22
+ let(:data_cp1252) { data_utf8.encode(cp1252) }
23
+ let(:data_binary) { "won\x92t".force_encoding(binary) }
24
+ let(:data_iso8859) { "Med\xEDco".force_encoding(iso8859) }
25
+
26
+ let(:user_data_utf8) {
27
+ User.create! { |u| u.notes = {data: data_utf8} }
28
+ }
29
+ let(:user_data_cp1252) {
30
+ u = User.create!
31
+ with_db_encoding(cp1252) { UserRaw.find(u.id).update_attribute :notes, "---\n:data: #{data_cp1252}\n" }
32
+ u
33
+ }
34
+ let(:user_data_binary) {
35
+ u = User.create!
36
+ with_db_encoding(binary) { UserRaw.find(u.id).update_attribute :notes, "---\n:data: #{data_binary}\n" }
37
+ u
38
+ }
39
+ let(:user_data_iso8859) {
40
+ u = User.create!
41
+ with_db_encoding(iso8859) { UserRaw.find(u.id).update_attribute :notes, "---\n:data: #{data_iso8859}\n" }
42
+ u
43
+ }
44
+
45
+ let(:user_subject_binary) {
46
+ u = User.create!
47
+ with_db_encoding(binary) { UserRaw.find(u.id).update_attribute :subject, data_binary }
48
+ u
49
+ }
50
+
51
+ private
52
+
53
+ def setup_schema
54
+ ::ActiveRecord::Base.class_eval do
55
+ connection.instance_eval do
56
+ create_table :users, :force => true do |t|
57
+ t.text :subject
58
+ t.text :notes
59
+ t.timestamps
60
+ end
61
+ end
62
+ end
63
+ end
64
+
65
+ def setup_encodings
66
+ GIGO.encoding = utf8
67
+ Encoding.default_internal = utf8
68
+ end
69
+
70
+ def with_db_encoding(encoding)
71
+ Encoding.default_internal = encoding
72
+ GIGO.encoding = utf8
73
+ yield
74
+ ensure
75
+ setup_encodings
76
+ end
77
+
78
+ class User < ::ActiveRecord::Base
79
+ serialize :notes, Hash
80
+ end
81
+
82
+ class UserRaw < ::ActiveRecord::Base
83
+ self.table_name = :users
84
+ end
85
+
86
+ class UserGIGO < ::ActiveRecord::Base
87
+ self.table_name = :users
88
+ serialize :notes, Hash
89
+ gigo_serialized_attribute :notes
90
+ gigo_column :subject
91
+ end
92
+
93
+ class UserGIGOWithSuperSubject < ::ActiveRecord::Base
94
+ self.table_name = :users
95
+ gigo_column :subject
96
+ def subject
97
+ super.upcase
98
+ end
99
+ end
100
+
101
+ end
102
+ end
103
+ end
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gigo-activerecord
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 1.0.0
6
+ platform: ruby
7
+ authors:
8
+ - Ken Collins
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: gigo
16
+ type: :runtime
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ none: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ! '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ none: false
29
+ prerelease: false
30
+ - !ruby/object:Gem::Dependency
31
+ name: activerecord
32
+ type: :runtime
33
+ requirement: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '3.1'
38
+ none: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '3.1'
44
+ none: false
45
+ prerelease: false
46
+ - !ruby/object:Gem::Dependency
47
+ name: appraisal
48
+ type: :development
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ none: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ! '>='
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ none: false
61
+ prerelease: false
62
+ - !ruby/object:Gem::Dependency
63
+ name: rake
64
+ type: :development
65
+ requirement: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ none: false
71
+ version_requirements: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ none: false
77
+ prerelease: false
78
+ - !ruby/object:Gem::Dependency
79
+ name: minitest
80
+ type: :development
81
+ requirement: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: '5.0'
86
+ none: false
87
+ version_requirements: !ruby/object:Gem::Requirement
88
+ requirements:
89
+ - - ~>
90
+ - !ruby/object:Gem::Version
91
+ version: '5.0'
92
+ none: false
93
+ prerelease: false
94
+ - !ruby/object:Gem::Dependency
95
+ name: sqlite3
96
+ type: :development
97
+ requirement: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ none: false
103
+ version_requirements: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ none: false
109
+ prerelease: false
110
+ description: GIGO for ActiveRecord
111
+ email:
112
+ - kcollins@customink.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - .gitignore
118
+ - Appraisals
119
+ - Gemfile
120
+ - LICENSE.txt
121
+ - README.md
122
+ - Rakefile
123
+ - gemfiles/activerecord31.gemfile
124
+ - gemfiles/activerecord31.gemfile.lock
125
+ - gemfiles/activerecord32.gemfile
126
+ - gemfiles/activerecord32.gemfile.lock
127
+ - gemfiles/activerecord40.gemfile
128
+ - gemfiles/activerecord40.gemfile.lock
129
+ - gigo-activerecord.gemspec
130
+ - lib/gigo-activerecord.rb
131
+ - lib/gigo/active_record.rb
132
+ - lib/gigo/active_record/base.rb
133
+ - lib/gigo/active_record/version.rb
134
+ - test/cases/all_test.rb
135
+ - test/test_helper.rb
136
+ homepage: http://github.com/customink/gigo-activerecord
137
+ licenses:
138
+ - MIT
139
+ post_install_message:
140
+ rdoc_options: []
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ segments:
148
+ - 0
149
+ hash: -546867824294194641
150
+ version: '0'
151
+ none: false
152
+ required_rubygems_version: !ruby/object:Gem::Requirement
153
+ requirements:
154
+ - - ! '>='
155
+ - !ruby/object:Gem::Version
156
+ segments:
157
+ - 0
158
+ hash: -546867824294194641
159
+ version: '0'
160
+ none: false
161
+ requirements: []
162
+ rubyforge_project:
163
+ rubygems_version: 1.8.25
164
+ signing_key:
165
+ specification_version: 3
166
+ summary: GIGO for ActiveRecord
167
+ test_files:
168
+ - test/cases/all_test.rb
169
+ - test/test_helper.rb