activerecord-import-uuid 0.1

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.
Files changed (98) hide show
  1. data/.gitignore +32 -0
  2. data/.rubocop.yml +49 -0
  3. data/.rubocop_todo.yml +36 -0
  4. data/.travis.yml +52 -0
  5. data/Brewfile +3 -0
  6. data/CHANGELOG.md +87 -0
  7. data/Gemfile +54 -0
  8. data/LICENSE +56 -0
  9. data/README.markdown +101 -0
  10. data/Rakefile +66 -0
  11. data/activerecord-import.gemspec +23 -0
  12. data/benchmarks/README +32 -0
  13. data/benchmarks/benchmark.rb +67 -0
  14. data/benchmarks/lib/base.rb +138 -0
  15. data/benchmarks/lib/cli_parser.rb +106 -0
  16. data/benchmarks/lib/float.rb +15 -0
  17. data/benchmarks/lib/mysql2_benchmark.rb +19 -0
  18. data/benchmarks/lib/output_to_csv.rb +19 -0
  19. data/benchmarks/lib/output_to_html.rb +64 -0
  20. data/benchmarks/models/test_innodb.rb +3 -0
  21. data/benchmarks/models/test_memory.rb +3 -0
  22. data/benchmarks/models/test_myisam.rb +3 -0
  23. data/benchmarks/schema/mysql_schema.rb +16 -0
  24. data/gemfiles/3.2.gemfile +3 -0
  25. data/gemfiles/4.0.gemfile +3 -0
  26. data/gemfiles/4.1.gemfile +3 -0
  27. data/gemfiles/4.2.gemfile +7 -0
  28. data/gemfiles/5.0.gemfile +3 -0
  29. data/lib/activerecord-import.rb +19 -0
  30. data/lib/activerecord-import/active_record/adapters/abstract_adapter.rb +9 -0
  31. data/lib/activerecord-import/active_record/adapters/jdbcmysql_adapter.rb +6 -0
  32. data/lib/activerecord-import/active_record/adapters/jdbcpostgresql_adapter.rb +6 -0
  33. data/lib/activerecord-import/active_record/adapters/mysql2_adapter.rb +6 -0
  34. data/lib/activerecord-import/active_record/adapters/postgresql_adapter.rb +6 -0
  35. data/lib/activerecord-import/active_record/adapters/seamless_database_pool_adapter.rb +7 -0
  36. data/lib/activerecord-import/active_record/adapters/sqlite3_adapter.rb +6 -0
  37. data/lib/activerecord-import/adapters/abstract_adapter.rb +78 -0
  38. data/lib/activerecord-import/adapters/em_mysql2_adapter.rb +5 -0
  39. data/lib/activerecord-import/adapters/mysql2_adapter.rb +5 -0
  40. data/lib/activerecord-import/adapters/mysql_adapter.rb +114 -0
  41. data/lib/activerecord-import/adapters/postgresql_adapter.rb +144 -0
  42. data/lib/activerecord-import/adapters/sqlite3_adapter.rb +51 -0
  43. data/lib/activerecord-import/base.rb +38 -0
  44. data/lib/activerecord-import/import.rb +660 -0
  45. data/lib/activerecord-import/mysql2.rb +7 -0
  46. data/lib/activerecord-import/postgresql.rb +7 -0
  47. data/lib/activerecord-import/sqlite3.rb +7 -0
  48. data/lib/activerecord-import/synchronize.rb +66 -0
  49. data/lib/activerecord-import/value_sets_parser.rb +55 -0
  50. data/lib/activerecord-import/version.rb +5 -0
  51. data/test/adapters/jdbcmysql.rb +1 -0
  52. data/test/adapters/jdbcpostgresql.rb +1 -0
  53. data/test/adapters/mysql2.rb +1 -0
  54. data/test/adapters/mysql2_makara.rb +1 -0
  55. data/test/adapters/mysql2spatial.rb +1 -0
  56. data/test/adapters/postgis.rb +1 -0
  57. data/test/adapters/postgresql.rb +1 -0
  58. data/test/adapters/postgresql_makara.rb +1 -0
  59. data/test/adapters/seamless_database_pool.rb +1 -0
  60. data/test/adapters/spatialite.rb +1 -0
  61. data/test/adapters/sqlite3.rb +1 -0
  62. data/test/database.yml.sample +52 -0
  63. data/test/import_test.rb +574 -0
  64. data/test/jdbcmysql/import_test.rb +6 -0
  65. data/test/jdbcpostgresql/import_test.rb +5 -0
  66. data/test/models/book.rb +7 -0
  67. data/test/models/chapter.rb +4 -0
  68. data/test/models/discount.rb +3 -0
  69. data/test/models/end_note.rb +4 -0
  70. data/test/models/group.rb +3 -0
  71. data/test/models/promotion.rb +3 -0
  72. data/test/models/question.rb +3 -0
  73. data/test/models/rule.rb +3 -0
  74. data/test/models/topic.rb +9 -0
  75. data/test/models/widget.rb +24 -0
  76. data/test/mysql2/import_test.rb +5 -0
  77. data/test/mysql2_makara/import_test.rb +6 -0
  78. data/test/mysqlspatial2/import_test.rb +6 -0
  79. data/test/postgis/import_test.rb +4 -0
  80. data/test/postgresql/import_test.rb +8 -0
  81. data/test/schema/generic_schema.rb +144 -0
  82. data/test/schema/mysql_schema.rb +16 -0
  83. data/test/schema/version.rb +10 -0
  84. data/test/sqlite3/import_test.rb +52 -0
  85. data/test/support/active_support/test_case_extensions.rb +70 -0
  86. data/test/support/assertions.rb +73 -0
  87. data/test/support/factories.rb +57 -0
  88. data/test/support/generate.rb +29 -0
  89. data/test/support/mysql/import_examples.rb +85 -0
  90. data/test/support/postgresql/import_examples.rb +242 -0
  91. data/test/support/shared_examples/on_duplicate_key_update.rb +103 -0
  92. data/test/support/shared_examples/recursive_import.rb +122 -0
  93. data/test/synchronize_test.rb +33 -0
  94. data/test/test_helper.rb +59 -0
  95. data/test/travis/database.yml +62 -0
  96. data/test/value_sets_bytes_parser_test.rb +93 -0
  97. data/test/value_sets_records_parser_test.rb +32 -0
  98. metadata +225 -0
data/.gitignore ADDED
@@ -0,0 +1,32 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+ *.gem
21
+ *.lock
22
+
23
+ ## PROJECT::SPECIFIC
24
+ log/*.log
25
+ test.db
26
+ test/database.yml
27
+
28
+ .ruby-*
29
+ .bundle/
30
+ .redcar/
31
+ .rvmrc
32
+ docsite/
data/.rubocop.yml ADDED
@@ -0,0 +1,49 @@
1
+ inherit_from: .rubocop_todo.yml
2
+
3
+ Lint/EndAlignment:
4
+ AlignWith: variable
5
+
6
+ Metrics/AbcSize:
7
+ Enabled: false
8
+
9
+ Metrics/ClassLength:
10
+ Enabled: false
11
+
12
+ Metrics/CyclomaticComplexity:
13
+ Enabled: false
14
+
15
+ Metrics/LineLength:
16
+ Enabled: false
17
+
18
+ Metrics/MethodLength:
19
+ Enabled: false
20
+
21
+ Metrics/ModuleLength:
22
+ Enabled: false
23
+
24
+ Metrics/PerceivedComplexity:
25
+ Enabled: false
26
+
27
+ Style/AlignParameters:
28
+ EnforcedStyle: with_fixed_indentation
29
+
30
+ Style/ClassAndModuleChildren:
31
+ Enabled: false
32
+
33
+ Style/Documentation:
34
+ Enabled: false
35
+
36
+ Style/ElseAlignment:
37
+ Enabled: false
38
+
39
+ Style/SpaceInsideParens:
40
+ Enabled: false
41
+
42
+ Style/SpecialGlobalVars:
43
+ Enabled: false
44
+
45
+ Style/StringLiterals:
46
+ Enabled: false
47
+
48
+ Style/TrailingCommaInLiteral:
49
+ Enabled: false
data/.rubocop_todo.yml ADDED
@@ -0,0 +1,36 @@
1
+ # This configuration was generated by
2
+ # `rubocop --auto-gen-config`
3
+ # on 2016-03-17 18:14:55 -0700 using RuboCop version 0.38.0.
4
+ # The point is for the user to remove these configuration records
5
+ # one by one as the offenses are removed from the code base.
6
+ # Note that changes in the inspected code, or installation of new
7
+ # versions of RuboCop, may require this file to be generated again.
8
+
9
+ # Offense count: 2
10
+ Lint/HandleExceptions:
11
+ Exclude:
12
+ - 'lib/activerecord-import/base.rb'
13
+ - 'test/import_test.rb'
14
+
15
+ # Offense count: 2
16
+ Lint/RescueException:
17
+ Exclude:
18
+ - 'benchmarks/lib/cli_parser.rb'
19
+ - 'test/import_test.rb'
20
+
21
+ # Offense count: 4
22
+ # Cop supports --auto-correct.
23
+ # Configuration parameters: AllowUnusedKeywordArguments, IgnoreEmptyMethods.
24
+ Lint/UnusedMethodArgument:
25
+ Exclude:
26
+ - 'lib/activerecord-import/adapters/postgresql_adapter.rb'
27
+ - 'lib/activerecord-import/import.rb'
28
+
29
+ # Offense count: 2
30
+ # Cop supports --auto-correct.
31
+ # Configuration parameters: Keywords.
32
+ # Keywords: TODO, FIXME, OPTIMIZE, HACK, REVIEW
33
+ Style/CommentAnnotation:
34
+ Exclude:
35
+ - 'benchmarks/lib/cli_parser.rb'
36
+ - 'lib/activerecord-import/import.rb'
data/.travis.yml ADDED
@@ -0,0 +1,52 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - 2.2.4
5
+
6
+ env:
7
+ global:
8
+ # https://github.com/discourse/discourse/blob/master/.travis.yml
9
+ - RUBY_GC_MALLOC_LIMIT=50000000
10
+ matrix:
11
+ - AR_VERSION=3.2
12
+ - AR_VERSION=4.0
13
+ - AR_VERSION=4.1
14
+ - AR_VERSION=4.2
15
+ - AR_VERSION=5.0
16
+
17
+ matrix:
18
+ include:
19
+ - rvm: jruby-9.0.5.0
20
+ env: AR_VERSION=4.2
21
+ script:
22
+ - bundle exec rake test:jdbcmysql
23
+ - bundle exec rake test:jdbcpostgresql
24
+
25
+ fast_finish: true
26
+
27
+ before_script:
28
+ - mysql -e 'create database activerecord_import_test;'
29
+ - psql -c 'create database activerecord_import_test;' -U postgres
30
+ - psql -U postgres -c "create extension postgis"
31
+ - cp test/travis/database.yml test/database.yml
32
+
33
+ addons:
34
+ apt:
35
+ sources:
36
+ - travis-ci/sqlite3
37
+ packages:
38
+ - sqlite3
39
+
40
+ script:
41
+ - bundle exec rake test:mysql2
42
+ - bundle exec rake test:mysql2_makara
43
+ - bundle exec rake test:mysql2spatial
44
+ - bundle exec rake test:postgis
45
+ - bundle exec rake test:postgresql
46
+ - bundle exec rake test:postgresql_makara
47
+ - bundle exec rake test:seamless_database_pool
48
+ - bundle exec rake test:spatialite
49
+ - bundle exec rake test:sqlite3
50
+ - bundle exec rubocop
51
+
52
+ sudo: false
data/Brewfile ADDED
@@ -0,0 +1,3 @@
1
+ brew "mysql"
2
+ brew "postgresql"
3
+ brew "sqlite"
data/CHANGELOG.md ADDED
@@ -0,0 +1,87 @@
1
+ ## Changes in 0.15.0
2
+
3
+ ### New Features
4
+
5
+ * An ArgumentError is now raised if when no `conflict_target` or `conflict_name` is provided or can be determined when using the `on_duplicate_key_update` option for PostgreSQL. Thanks to @jkowens via \#290
6
+ * Support for Rails 5.0 final release for all except the JDBC driver which is not yet updated to support Rails 5.0
7
+
8
+ ### Fixes
9
+
10
+ * activerecord-import no longer modifies a value array inside of the given values array when called with `import(columns, values)`. Thanks to @jkowens via \#291
11
+
12
+ ### Misc
13
+
14
+ * `raise_error` is used to raise errors for ActiveRecord 5.0. Thanks to @couragecourag via \#294 `raise_record_invalid` has been
15
+
16
+
17
+ ## Changes in 0.14.1
18
+
19
+ ### Fixes
20
+
21
+ * JRuby/JDBCDriver with PostgreSQL will no longer raise a JDBCDriver error when using the :no_returning boolean option. Thanks to @jkowens via \#287
22
+
23
+ ## Changes in 0.14.0
24
+
25
+ ### New Features
26
+
27
+ * Support for ActiveRecord 3.1 has been dropped. Thanks to @sferik via \#254
28
+ * SQLite3 has learned the :recursive option. Thanks to @jkowens via \#281
29
+ * :on_duplicate_key_ignore will be ignored when imports are being done with :recursive. Thanks to @jkowens via \#268
30
+ * :activerecord-import learned how to tell PostgreSQL to return no data back from the import via the :no_returning boolean option. Thanks to @makaroni4 via \#276
31
+
32
+ ### Fixes
33
+
34
+ * Polymorphic associations will not import the :type column. Thanks to @seanlinsley via \#282 and \#283
35
+ * ~2X speed increase for importing models with validations. Thanks to @jkowens via \#266
36
+
37
+ ### Misc
38
+
39
+ * Benchmark HTML report has been fixed. Thanks to @jkowens via \#264
40
+ * seamless_database_pool has been updated to work with AR 5.0. Thanks to @jkowens via \#280
41
+ * Code cleanup, removal of redundant condition checks. Thanks to @pavlik4k via \#273
42
+ * Code cleanup, removal of deprecated `alias_method_chain`. Thanks to @codeodor via \#271
43
+
44
+
45
+ ## Changes in 0.13.0
46
+
47
+ ### New Features
48
+
49
+ * Addition of :batch_size option to control the number of rows to insert per INSERT statement. The default is the total number of records being inserted so there is a single INSERT statement. Thanks to @jkowens via \#245
50
+
51
+ * Addition `import!` which will raise an exception if a validation occurs. It will fail fast. Thanks to @jkowens via \#246
52
+
53
+ ### Fixes
54
+
55
+ * Fixing issue with recursive import when utilizing the `:on_duplicate_key_update` option. The `on_duplicate_key_update` only applies to parent models at this time. Thanks to @yuri-karpovich for reporting and @jkowens for fixing via \#249
56
+
57
+ ### Misc
58
+
59
+ * Refactoring of fetching and assigning attributes. Thanks to @jkownes via \#259
60
+ * Lots of code cleanup and addition of Rubocop linter. Thanks to @sferik via \#256 and \#250
61
+ * Resolving errors with the test suite when running against ActiveRecord 4.0 and 4.1. Thanks to @jkowens via \#262
62
+ * Cleaning up the TravisCI settings and packages. Thanks to @sferik via \#258 and \#251
63
+
64
+ ## Changes in 0.12.0
65
+
66
+ ### New Features
67
+
68
+ * PostgreSQL UPSERT support has been added. Thanks @jkowens via \#218
69
+
70
+ ### Fixes
71
+
72
+ * has_one and has_many associations will now be recursively imported regardless of :autosave being set. Thanks @sferik, @jkowens via \#243, \#234
73
+ * Fixing an issue with enum column support for Rails > 4.1. Thanks @aquajach via \#235
74
+
75
+ ### Removals
76
+
77
+ * Support for em-synchrony has been removed since it appears the project has been abandoned. Thanks @sferik, @zdennis via \#239
78
+ * Support for the mysql gem/adapter has been removed since it has officially been abandoned. Use the mysql2 gem/adapter instead. Thanks @sferik, @zdennis via \#239
79
+
80
+ ### Misc
81
+
82
+ * Cleaned up TravisCI output and removing deprecation warnings. Thanks @jkowens, @zdennis \#242
83
+
84
+
85
+ ## Changes before 0.12.0
86
+
87
+ > Never look back. What's gone is now history. But in the process make memory of events to help you understand what will help you to make your dream a true story. Mistakes of the past are lessons, success of the past is inspiration. – Dr. Anil Kr Sinha
data/Gemfile ADDED
@@ -0,0 +1,54 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development, :test do
6
+ gem 'rubocop', '~> 0.38.0'
7
+ end
8
+
9
+ # Database Adapters
10
+ platforms :ruby do
11
+ gem "mysql2", "~> 0.3.0"
12
+ gem "pg", "~> 0.9"
13
+ gem "sqlite3", "~> 1.3.10"
14
+ gem "seamless_database_pool", "~> 1.0.18"
15
+ end
16
+
17
+ platforms :jruby do
18
+ gem "jdbc-mysql"
19
+ gem "jdbc-postgres"
20
+ gem "activerecord-jdbcmysql-adapter"
21
+ gem "activerecord-jdbcpostgresql-adapter"
22
+ end
23
+
24
+ # Support libs
25
+ gem "factory_girl", "~> 4.2.0"
26
+ gem "timecop"
27
+ gem "chronic"
28
+
29
+ # Debugging
30
+ platforms :jruby do
31
+ gem "ruby-debug-base", "= 0.10.4"
32
+ end
33
+
34
+ platforms :jruby, :mri_18 do
35
+ gem "ruby-debug", "= 0.10.4"
36
+ end
37
+
38
+ platforms :mri_19 do
39
+ gem "debugger"
40
+ end
41
+
42
+ platforms :ruby do
43
+ gem "pry-byebug"
44
+ end
45
+
46
+ version = ENV['AR_VERSION'] || "4.2"
47
+
48
+ if version >= "4.0"
49
+ gem "minitest"
50
+ else
51
+ gem "test-unit"
52
+ end
53
+
54
+ eval_gemfile File.expand_path("../gemfiles/#{version}.gemfile", __FILE__)
data/LICENSE ADDED
@@ -0,0 +1,56 @@
1
+ Ruby is copyrighted free software by Yukihiro Matsumoto <matz@netlab.jp>.
2
+ You can redistribute it and/or modify it under either the terms of the
3
+ 2-clause BSDL (see the file BSDL), or the conditions below:
4
+
5
+ 1. You may make and give away verbatim copies of the source form of the
6
+ software without restriction, provided that you duplicate all of the
7
+ original copyright notices and associated disclaimers.
8
+
9
+ 2. You may modify your copy of the software in any way, provided that
10
+ you do at least ONE of the following:
11
+
12
+ a) place your modifications in the Public Domain or otherwise
13
+ make them Freely Available, such as by posting said
14
+ modifications to Usenet or an equivalent medium, or by allowing
15
+ the author to include your modifications in the software.
16
+
17
+ b) use the modified software only within your corporation or
18
+ organization.
19
+
20
+ c) give non-standard binaries non-standard names, with
21
+ instructions on where to get the original software distribution.
22
+
23
+ d) make other distribution arrangements with the author.
24
+
25
+ 3. You may distribute the software in object code or binary form,
26
+ provided that you do at least ONE of the following:
27
+
28
+ a) distribute the binaries and library files of the software,
29
+ together with instructions (in the manual page or equivalent)
30
+ on where to get the original distribution.
31
+
32
+ b) accompany the distribution with the machine-readable source of
33
+ the software.
34
+
35
+ c) give non-standard binaries non-standard names, with
36
+ instructions on where to get the original software distribution.
37
+
38
+ d) make other distribution arrangements with the author.
39
+
40
+ 4. You may modify and include the part of the software into any other
41
+ software (possibly commercial). But some files in the distribution
42
+ are not written by the author, so that they are not under these terms.
43
+
44
+ For the list of those files and their copying conditions, see the
45
+ file LEGAL.
46
+
47
+ 5. The scripts and library files supplied as input to or produced as
48
+ output from the software do not automatically fall under the
49
+ copyright of the software, but belong to whomever generated them,
50
+ and may be sold commercially, and may be aggregated with this
51
+ software.
52
+
53
+ 6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
54
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
55
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
56
+ PURPOSE.
data/README.markdown ADDED
@@ -0,0 +1,101 @@
1
+ # activerecord-import [![Build Status](https://travis-ci.org/zdennis/activerecord-import.svg?branch=master)](https://travis-ci.org/zdennis/activerecord-import)
2
+
3
+ activerecord-import is a library for bulk inserting data using ActiveRecord.
4
+
5
+ One of its major features is following activerecord associations and generating the minimal
6
+ number of SQL insert statements required, avoiding the N+1 insert problem. An example probably
7
+ explains it best. Say you had a schema like this:
8
+
9
+ - Publishers have Books
10
+ - Books have Reviews
11
+
12
+ and you wanted to bulk insert 100 new publishers with 10K books and 3 reviews per book. This library will follow the associations
13
+ down and generate only 3 SQL insert statements - one for the publishers, one for the books, and one for the reviews.
14
+
15
+ In contrast, the standard ActiveRecord save would generate
16
+ 100 insert statements for the publishers, then it would visit each publisher and save all the books:
17
+ 100 * 10,000 = 1,000,000 SQL insert statements
18
+ and then the reviews:
19
+ 100 * 10,000 * 3 = 3M SQL insert statements,
20
+
21
+ That would be about 4M SQL insert statements vs 3, which results in vastly improved performance. In our case, it converted
22
+ an 18 hour batch process to <2 hrs.
23
+
24
+ ### Rails 5.0
25
+
26
+ Use activerecord-import 0.11.0 or higher.
27
+
28
+ ### Rails 4.0
29
+
30
+ Use activerecord-import 0.4.0 or higher.
31
+
32
+ ### Rails 3.1.x up to, but not including 4.0
33
+
34
+ Use the latest in the activerecord-import 0.3.x series.
35
+
36
+ ### Rails 3.0.x up to, but not including 3.1
37
+
38
+ Use activerecord-import 0.2.11. As of activerecord-import 0.3.0 we are relying on functionality that was introduced in Rails 3.1. Since Rails 3.0.x is no longer a supported version of Rails we have decided to drop support as well.
39
+
40
+ ### For More Information
41
+
42
+ For more information on activerecord-import please see its wiki: https://github.com/zdennis/activerecord-import/wiki
43
+
44
+ ## Additional Adapters
45
+ Additional adapters can be provided by gems external to activerecord-import by providing an adapter that matches the naming convention setup by activerecord-import (and subsequently activerecord) for dynamically loading adapters. This involves also providing a folder on the load path that follows the activerecord-import naming convention to allow activerecord-import to dynamically load the file.
46
+
47
+ When `ActiveRecord::Import.require_adapter("fake_name")` is called the require will be:
48
+
49
+ ```ruby
50
+ require 'activerecord-import/active_record/adapters/fake_name_adapter'
51
+ ```
52
+
53
+ This allows an external gem to dyanmically add an adapter without the need to add any file/code to the core activerecord-import gem.
54
+
55
+ ### Load Path Setup
56
+ To understand how rubygems loads code you can reference the following:
57
+
58
+ http://guides.rubygems.org/patterns/#loading_code
59
+
60
+ And an example of how active_record dynamically load adapters:
61
+ https://github.com/rails/rails/blob/master/activerecord/lib/active_record/connection_adapters/connection_specification.rb
62
+
63
+ In summary, when a gem is loaded rubygems adds the `lib` folder of the gem to the global load path `$LOAD_PATH` so that all `require` lookups will not propegate through all of the folders on the load path. When a `require` is issued each folder on the `$LOAD_PATH` is checked for the file and/or folder referenced. This allows a gem (like activerecord-import) to define push the activerecord-import folder (or namespace) on the `$LOAD_PATH` and any adapters provided by activerecord-import will be found by rubygems when the require is issued.
64
+
65
+ If `fake_name` adapter is needed by a gem (potentially called `activerecord-import-fake_name`) then the folder structure should look as follows:
66
+
67
+ ```bash
68
+ activerecord-import-fake_name/
69
+ |-- activerecord-import-fake_name.gemspec
70
+ |-- lib
71
+ | |-- activerecord-import-fake_name
72
+ | | |-- version.rb
73
+ | |-- activerecord-import
74
+ | | |-- active_record
75
+ | | | |-- adapters
76
+ | | | |-- fake_name_adapter.rb
77
+ |--activerecord-import-fake_name.rb
78
+ ```
79
+
80
+ When rubygems pushes the `lib` folder onto the load path a `require` will now find `activerecord-import/active_record/adapters/fake_name_adapter` as it runs through the lookup process for a ruby file under that path in `$LOAD_PATH`
81
+
82
+ # License
83
+
84
+ This is licensed under the ruby license.
85
+
86
+ # Author
87
+
88
+ Zach Dennis (zach.dennis@gmail.com)
89
+
90
+ # Contributors
91
+
92
+ * Jordan Owens (@jkowens)
93
+ * Erik Michaels-Ober (@sferik)
94
+ * Blythe Dunham
95
+ * Gabe da Silveira
96
+ * Henry Work
97
+ * James Herdman
98
+ * Marcus Crafter
99
+ * Thibaud Guillaume-Gentil
100
+ * Mark Van Holstyn
101
+ * Victor Costan