forceps 0.5.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.
Files changed (79) hide show
  1. data/MIT-LICENSE +20 -0
  2. data/Rakefile +32 -0
  3. data/lib/forceps/acts_as_copyable_model.rb +245 -0
  4. data/lib/forceps/client.rb +126 -0
  5. data/lib/forceps/version.rb +3 -0
  6. data/lib/forceps.rb +30 -0
  7. data/lib/tasks/forceps_tasks.rake +4 -0
  8. data/test/callbacks_test.rb +21 -0
  9. data/test/clone_structures_test.rb +73 -0
  10. data/test/dummy/README.rdoc +28 -0
  11. data/test/dummy/Rakefile +6 -0
  12. data/test/dummy/app/assets/javascripts/application.js +13 -0
  13. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  14. data/test/dummy/app/controllers/application_controller.rb +5 -0
  15. data/test/dummy/app/helpers/application_helper.rb +2 -0
  16. data/test/dummy/app/models/address.rb +3 -0
  17. data/test/dummy/app/models/car.rb +5 -0
  18. data/test/dummy/app/models/invoice.rb +7 -0
  19. data/test/dummy/app/models/line_item.rb +4 -0
  20. data/test/dummy/app/models/product.rb +4 -0
  21. data/test/dummy/app/models/tag.rb +3 -0
  22. data/test/dummy/app/models/user.rb +4 -0
  23. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  24. data/test/dummy/bin/bundle +3 -0
  25. data/test/dummy/bin/rails +4 -0
  26. data/test/dummy/bin/rake +4 -0
  27. data/test/dummy/config/application.rb +23 -0
  28. data/test/dummy/config/boot.rb +5 -0
  29. data/test/dummy/config/database.yml +31 -0
  30. data/test/dummy/config/environment.rb +5 -0
  31. data/test/dummy/config/environments/development.rb +29 -0
  32. data/test/dummy/config/environments/production.rb +80 -0
  33. data/test/dummy/config/environments/test.rb +36 -0
  34. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  35. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  36. data/test/dummy/config/initializers/inflections.rb +16 -0
  37. data/test/dummy/config/initializers/mime_types.rb +5 -0
  38. data/test/dummy/config/initializers/secret_token.rb +12 -0
  39. data/test/dummy/config/initializers/session_store.rb +3 -0
  40. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  41. data/test/dummy/config/locales/en.yml +23 -0
  42. data/test/dummy/config/routes.rb +56 -0
  43. data/test/dummy/config.ru +4 -0
  44. data/test/dummy/db/development.sqlite3 +0 -0
  45. data/test/dummy/db/migrate/20140101112114_create_invoices.rb +9 -0
  46. data/test/dummy/db/migrate/20140102125046_add_number_to_invoices.rb +5 -0
  47. data/test/dummy/db/migrate/20140103172515_create_users.rb +8 -0
  48. data/test/dummy/db/migrate/20140103172643_add_user_id_to_invoices.rb +5 -0
  49. data/test/dummy/db/migrate/20140104145204_create_line_items.rb +11 -0
  50. data/test/dummy/db/migrate/20140104145227_create_products.rb +10 -0
  51. data/test/dummy/db/migrate/20140104150906_create_addresses.rb +12 -0
  52. data/test/dummy/db/migrate/20140114111137_create_products_tags_join_table.rb +8 -0
  53. data/test/dummy/db/migrate/20140114111219_create_tags.rb +7 -0
  54. data/test/dummy/db/migrate/20140117112556_add_type_to_products.rb +5 -0
  55. data/test/dummy/db/remote.sqlite3 +0 -0
  56. data/test/dummy/db/schema.rb +64 -0
  57. data/test/dummy/db/test.sqlite3 +0 -0
  58. data/test/dummy/log/RAILS_ENV=test.log +0 -0
  59. data/test/dummy/log/development.log +608 -0
  60. data/test/dummy/log/remote.log +182 -0
  61. data/test/dummy/log/target.log +30 -0
  62. data/test/dummy/log/test.log +132555 -0
  63. data/test/dummy/public/404.html +58 -0
  64. data/test/dummy/public/422.html +58 -0
  65. data/test/dummy/public/500.html +57 -0
  66. data/test/dummy/public/favicon.ico +0 -0
  67. data/test/exclude_records_test.rb +43 -0
  68. data/test/fixtures/invoices.yml +11 -0
  69. data/test/fixtures/users.yml +8 -0
  70. data/test/reuse_existing_records_test.rb +41 -0
  71. data/test/support/minitest_ext.rb +13 -0
  72. data/test/support/remote_address.rb +7 -0
  73. data/test/support/remote_invoice.rb +8 -0
  74. data/test/support/remote_line_item.rb +8 -0
  75. data/test/support/remote_product.rb +8 -0
  76. data/test/support/remote_tag.rb +7 -0
  77. data/test/support/remote_user.rb +8 -0
  78. data/test/test_helper.rb +37 -0
  79. metadata +296 -0
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/404.html -->
52
+ <div class="dialog">
53
+ <h1>The page you were looking for doesn't exist.</h1>
54
+ <p>You may have mistyped the address or the page may have moved.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,58 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/422.html -->
52
+ <div class="dialog">
53
+ <h1>The change you wanted was rejected.</h1>
54
+ <p>Maybe you tried to change something you didn't have access to.</p>
55
+ </div>
56
+ <p>If you are the application owner check the logs for more information.</p>
57
+ </body>
58
+ </html>
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <style>
6
+ body {
7
+ background-color: #EFEFEF;
8
+ color: #2E2F30;
9
+ text-align: center;
10
+ font-family: arial, sans-serif;
11
+ }
12
+
13
+ div.dialog {
14
+ width: 25em;
15
+ margin: 4em auto 0 auto;
16
+ border: 1px solid #CCC;
17
+ border-right-color: #999;
18
+ border-left-color: #999;
19
+ border-bottom-color: #BBB;
20
+ border-top: #B00100 solid 4px;
21
+ border-top-left-radius: 9px;
22
+ border-top-right-radius: 9px;
23
+ background-color: white;
24
+ padding: 7px 4em 0 4em;
25
+ }
26
+
27
+ h1 {
28
+ font-size: 100%;
29
+ color: #730E15;
30
+ line-height: 1.5em;
31
+ }
32
+
33
+ body > p {
34
+ width: 33em;
35
+ margin: 0 auto 1em;
36
+ padding: 1em 0;
37
+ background-color: #F7F7F7;
38
+ border: 1px solid #CCC;
39
+ border-right-color: #999;
40
+ border-bottom-color: #999;
41
+ border-bottom-left-radius: 4px;
42
+ border-bottom-right-radius: 4px;
43
+ border-top-color: #DADADA;
44
+ color: #666;
45
+ box-shadow:0 3px 8px rgba(50, 50, 50, 0.17);
46
+ }
47
+ </style>
48
+ </head>
49
+
50
+ <body>
51
+ <!-- This file lives in public/500.html -->
52
+ <div class="dialog">
53
+ <h1>We're sorry, but something went wrong.</h1>
54
+ </div>
55
+ <p>If you are the application owner check the logs for more information.</p>
56
+ </body>
57
+ </html>
File without changes
@@ -0,0 +1,43 @@
1
+ require 'test_helper'
2
+
3
+ class ExcludeRecordsTest < ActiveSupport::TestCase
4
+ def setup
5
+ end
6
+
7
+ test "should exclude regular attributes in the 'exclude' option" do
8
+ Forceps.configure exclude: {Address => [:street]}
9
+ RemoteAddress.create! street: 'Uria', city: 'Oviedo'
10
+
11
+ Forceps::Remote::Address.find_by_city('Oviedo').copy_to_local
12
+
13
+ copied_address = Address.find_by_city('Oviedo')
14
+ assert_nil copied_address.street
15
+ end
16
+
17
+ test "should exclude the associations set in the 'exclude' option" do
18
+ remote_user = build_user_with_invoices(2)
19
+ Forceps.configure exclude: {User => [:invoices]}
20
+
21
+ Forceps::Remote::User.find(remote_user).copy_to_local
22
+
23
+ copied_user = User.find_by_name('Jorge')
24
+ assert_identical remote_user, copied_user
25
+ assert_empty copied_user.invoices
26
+ end
27
+
28
+ test "should exclude all the associations when using :all_associations as the the 'exclude' option value" do
29
+ remote_user = build_user_with_invoices(2)
30
+ Forceps.configure exclude: {User => [:all_associations]}
31
+
32
+ Forceps::Remote::User.find(remote_user).copy_to_local
33
+
34
+ copied_user = User.find_by_name('Jorge')
35
+ assert_empty copied_user.invoices
36
+ end
37
+
38
+ def build_user_with_invoices(invoices_count)
39
+ RemoteUser.create!(name: 'Jorge').tap do |remote_user|
40
+ invoices_count.times { |index| remote_user.invoices.create! number: index+1, date: "2014-1-#{index+1}" }
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,11 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ invoice_1:
4
+ number: 1
5
+ date: 2014-1-1
6
+ user: jorge
7
+
8
+ invoice_2:
9
+ number: 2
10
+ date: 2014-1-2
11
+ user: jorge
@@ -0,0 +1,8 @@
1
+ # Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html
2
+
3
+ # This model initially had no columns defined. If you add columns to the
4
+ # model remove the '{}' from the fixture names and add the columns immediately
5
+ # below each fixture, per the syntax in the comments below
6
+ #
7
+ jorge:
8
+ name: Jorge
@@ -0,0 +1,41 @@
1
+ require 'test_helper'
2
+
3
+ class ReuseExistingRecordsTest < ActiveSupport::TestCase
4
+ def setup
5
+ @remote_product = RemoteProduct.create!(name: 'MBP', price: '2000', id: 123456).tap{|product| product.update_column :type, nil}
6
+ @local_existing_product = Product.create!(id: @remote_product.id, name: 'MBP', price: '1000')
7
+ @remote_line_item = RemoteLineItem.create! quantity: 3, product: @remote_product
8
+ end
9
+
10
+ test "should reuse the referenced project when specifying a matching attribute name" do
11
+ Forceps.configure reuse: {Product => :id}
12
+ Forceps::Remote::LineItem.find(@remote_line_item).copy_to_local
13
+ assert_product_was_reused_and_updated
14
+ end
15
+
16
+ test "should reuse the referenced project when specifying a finder" do
17
+ Forceps.configure reuse: {Product => lambda{|remote_product| Product.find_by_name(remote_product.name)}}
18
+ Forceps::Remote::LineItem.find(@remote_line_item).copy_to_local
19
+ assert_product_was_reused_and_updated
20
+ end
21
+
22
+ test "should clone the object when it is not found" do
23
+ Forceps.configure reuse: {Product => lambda{|remote_product| Product.find_by_price('some not-existing price')}}
24
+ Forceps::Remote::LineItem.find(@remote_line_item).copy_to_local
25
+ assert_product_was_created
26
+ end
27
+
28
+ def assert_product_was_reused_and_updated
29
+ assert_product_was_copied(1)
30
+ end
31
+
32
+ def assert_product_was_created
33
+ assert_product_was_copied(2)
34
+ end
35
+
36
+ def assert_product_was_copied(expected_product_count)
37
+ assert_equal expected_product_count, Product.count
38
+ updated_product = LineItem.find_by_quantity(3).product
39
+ assert_identical @remote_product, updated_product
40
+ end
41
+ end
@@ -0,0 +1,13 @@
1
+ module Minitest
2
+ module Assertions
3
+ # Compares the equality at the attribute level
4
+ def assert_identical expected, actual, msg = nil
5
+ actual = actual.becomes(expected.class) if actual && actual.class != expected.class
6
+ ignored_attributes = %w(id)
7
+ assert_equal expected.class, actual.class
8
+ assert_equal expected.attributes.except(*ignored_attributes),
9
+ actual.attributes.except(*ignored_attributes)
10
+ end
11
+ end
12
+ end
13
+
@@ -0,0 +1,7 @@
1
+ class RemoteAddress < Address
2
+ establish_connection 'remote'
3
+
4
+ belongs_to :user, class_name: 'RemoteUser'
5
+ end
6
+
7
+
@@ -0,0 +1,8 @@
1
+ class RemoteInvoice < Invoice
2
+ establish_connection 'remote'
3
+
4
+ belongs_to :user, class_name: 'RemoteUser'
5
+ has_many :line_items, class_name: 'RemoteLineItem'
6
+ end
7
+
8
+
@@ -0,0 +1,8 @@
1
+ class RemoteLineItem < LineItem
2
+ establish_connection 'remote'
3
+
4
+ belongs_to :product, class_name: 'RemoteProduct'
5
+ belongs_to :invoice, class_name: 'RemoteInvoice', foreign_key: 'invoice_id'
6
+ end
7
+
8
+
@@ -0,0 +1,8 @@
1
+ class RemoteProduct < Product
2
+ establish_connection 'remote'
3
+
4
+ has_many :line_items, class_name: 'RemoteLineItem', foreign_key: 'product_id'
5
+ has_and_belongs_to_many :tags, class_name: 'RemoteTag', join_table: 'products_tags', foreign_key: 'product_id', association_foreign_key: 'tag_id'
6
+ end
7
+
8
+
@@ -0,0 +1,7 @@
1
+ class RemoteTag < Tag
2
+ establish_connection 'remote'
3
+
4
+ has_and_belongs_to_many :products, class_name: 'RemoteProduct', join_table: 'products_tags', foreign_key: 'tag_id', association_foreign_key: 'product_id'
5
+ end
6
+
7
+
@@ -0,0 +1,8 @@
1
+ class RemoteUser < User
2
+ establish_connection 'remote'
3
+
4
+ has_one :address, class_name: 'RemoteAddress', foreign_key: 'user_id'
5
+ has_many :invoices, class_name: 'RemoteInvoice', foreign_key: 'user_id'
6
+ end
7
+
8
+
@@ -0,0 +1,37 @@
1
+ # Configure Rails Environment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+ require 'database_cleaner'
7
+ require 'database_cleaner/active_record/base'
8
+ require 'awesome_print'
9
+ require 'minitest/reporters'
10
+ require 'minitest/mock'
11
+
12
+ MiniTest::Reporters.use!
13
+
14
+ Rails.backtrace_cleaner.remove_silencers!
15
+
16
+ # Load support files
17
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
18
+
19
+ # Load fixtures from the engine
20
+ ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
21
+ ActiveSupport::TestCase.use_transactional_fixtures = false
22
+
23
+ DatabaseCleaner::ActiveRecord.config_file_location = File.expand_path("../dummy/config/database.yml", __FILE__)
24
+
25
+ DatabaseCleaner.strategy = :truncation
26
+ DatabaseCleaner[:active_record, connection: :remote].strategy = :truncation
27
+
28
+ class ActiveSupport::TestCase
29
+ setup do
30
+ DatabaseCleaner.start
31
+ DatabaseCleaner[:active_record, connection: :remote].start
32
+ end
33
+ teardown do
34
+ DatabaseCleaner.clean
35
+ DatabaseCleaner[:active_record, connection: :remote].clean
36
+ end
37
+ end
metadata ADDED
@@ -0,0 +1,296 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: forceps
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Jorge Manrubia
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2014-01-24 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>'
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>'
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: logging
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.6.2
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.6.2
46
+ - !ruby/object:Gem::Dependency
47
+ name: sqlite3
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: database_cleaner
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: awesome_print
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: minitest-reporters
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
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
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description:
111
+ email:
112
+ - jorge.manrubia@gmail.com
113
+ executables: []
114
+ extensions: []
115
+ extra_rdoc_files: []
116
+ files:
117
+ - lib/forceps/acts_as_copyable_model.rb
118
+ - lib/forceps/client.rb
119
+ - lib/forceps/version.rb
120
+ - lib/forceps.rb
121
+ - lib/tasks/forceps_tasks.rake
122
+ - MIT-LICENSE
123
+ - Rakefile
124
+ - test/callbacks_test.rb
125
+ - test/clone_structures_test.rb
126
+ - test/dummy/app/assets/javascripts/application.js
127
+ - test/dummy/app/assets/stylesheets/application.css
128
+ - test/dummy/app/controllers/application_controller.rb
129
+ - test/dummy/app/helpers/application_helper.rb
130
+ - test/dummy/app/models/address.rb
131
+ - test/dummy/app/models/car.rb
132
+ - test/dummy/app/models/invoice.rb
133
+ - test/dummy/app/models/line_item.rb
134
+ - test/dummy/app/models/product.rb
135
+ - test/dummy/app/models/tag.rb
136
+ - test/dummy/app/models/user.rb
137
+ - test/dummy/app/views/layouts/application.html.erb
138
+ - test/dummy/bin/bundle
139
+ - test/dummy/bin/rails
140
+ - test/dummy/bin/rake
141
+ - test/dummy/config/application.rb
142
+ - test/dummy/config/boot.rb
143
+ - test/dummy/config/database.yml
144
+ - test/dummy/config/environment.rb
145
+ - test/dummy/config/environments/development.rb
146
+ - test/dummy/config/environments/production.rb
147
+ - test/dummy/config/environments/test.rb
148
+ - test/dummy/config/initializers/backtrace_silencers.rb
149
+ - test/dummy/config/initializers/filter_parameter_logging.rb
150
+ - test/dummy/config/initializers/inflections.rb
151
+ - test/dummy/config/initializers/mime_types.rb
152
+ - test/dummy/config/initializers/secret_token.rb
153
+ - test/dummy/config/initializers/session_store.rb
154
+ - test/dummy/config/initializers/wrap_parameters.rb
155
+ - test/dummy/config/locales/en.yml
156
+ - test/dummy/config/routes.rb
157
+ - test/dummy/config.ru
158
+ - test/dummy/db/development.sqlite3
159
+ - test/dummy/db/migrate/20140101112114_create_invoices.rb
160
+ - test/dummy/db/migrate/20140102125046_add_number_to_invoices.rb
161
+ - test/dummy/db/migrate/20140103172515_create_users.rb
162
+ - test/dummy/db/migrate/20140103172643_add_user_id_to_invoices.rb
163
+ - test/dummy/db/migrate/20140104145204_create_line_items.rb
164
+ - test/dummy/db/migrate/20140104145227_create_products.rb
165
+ - test/dummy/db/migrate/20140104150906_create_addresses.rb
166
+ - test/dummy/db/migrate/20140114111137_create_products_tags_join_table.rb
167
+ - test/dummy/db/migrate/20140114111219_create_tags.rb
168
+ - test/dummy/db/migrate/20140117112556_add_type_to_products.rb
169
+ - test/dummy/db/remote.sqlite3
170
+ - test/dummy/db/schema.rb
171
+ - test/dummy/db/test.sqlite3
172
+ - test/dummy/log/development.log
173
+ - test/dummy/log/RAILS_ENV=test.log
174
+ - test/dummy/log/remote.log
175
+ - test/dummy/log/target.log
176
+ - test/dummy/log/test.log
177
+ - test/dummy/public/404.html
178
+ - test/dummy/public/422.html
179
+ - test/dummy/public/500.html
180
+ - test/dummy/public/favicon.ico
181
+ - test/dummy/Rakefile
182
+ - test/dummy/README.rdoc
183
+ - test/exclude_records_test.rb
184
+ - test/fixtures/invoices.yml
185
+ - test/fixtures/users.yml
186
+ - test/reuse_existing_records_test.rb
187
+ - test/support/minitest_ext.rb
188
+ - test/support/remote_address.rb
189
+ - test/support/remote_invoice.rb
190
+ - test/support/remote_line_item.rb
191
+ - test/support/remote_product.rb
192
+ - test/support/remote_tag.rb
193
+ - test/support/remote_user.rb
194
+ - test/test_helper.rb
195
+ homepage: https://github.com/jorgemanrubia/forceps
196
+ licenses: []
197
+ post_install_message:
198
+ rdoc_options: []
199
+ require_paths:
200
+ - lib
201
+ required_ruby_version: !ruby/object:Gem::Requirement
202
+ none: false
203
+ requirements:
204
+ - - ! '>='
205
+ - !ruby/object:Gem::Version
206
+ version: '0'
207
+ segments:
208
+ - 0
209
+ hash: -3393448858854220239
210
+ required_rubygems_version: !ruby/object:Gem::Requirement
211
+ none: false
212
+ requirements:
213
+ - - ! '>='
214
+ - !ruby/object:Gem::Version
215
+ version: '0'
216
+ segments:
217
+ - 0
218
+ hash: -3393448858854220239
219
+ requirements: []
220
+ rubyforge_project:
221
+ rubygems_version: 1.8.23
222
+ signing_key:
223
+ specification_version: 3
224
+ summary: Copy active record models from production databases
225
+ test_files:
226
+ - test/callbacks_test.rb
227
+ - test/clone_structures_test.rb
228
+ - test/dummy/app/assets/javascripts/application.js
229
+ - test/dummy/app/assets/stylesheets/application.css
230
+ - test/dummy/app/controllers/application_controller.rb
231
+ - test/dummy/app/helpers/application_helper.rb
232
+ - test/dummy/app/models/address.rb
233
+ - test/dummy/app/models/car.rb
234
+ - test/dummy/app/models/invoice.rb
235
+ - test/dummy/app/models/line_item.rb
236
+ - test/dummy/app/models/product.rb
237
+ - test/dummy/app/models/tag.rb
238
+ - test/dummy/app/models/user.rb
239
+ - test/dummy/app/views/layouts/application.html.erb
240
+ - test/dummy/bin/bundle
241
+ - test/dummy/bin/rails
242
+ - test/dummy/bin/rake
243
+ - test/dummy/config/application.rb
244
+ - test/dummy/config/boot.rb
245
+ - test/dummy/config/database.yml
246
+ - test/dummy/config/environment.rb
247
+ - test/dummy/config/environments/development.rb
248
+ - test/dummy/config/environments/production.rb
249
+ - test/dummy/config/environments/test.rb
250
+ - test/dummy/config/initializers/backtrace_silencers.rb
251
+ - test/dummy/config/initializers/filter_parameter_logging.rb
252
+ - test/dummy/config/initializers/inflections.rb
253
+ - test/dummy/config/initializers/mime_types.rb
254
+ - test/dummy/config/initializers/secret_token.rb
255
+ - test/dummy/config/initializers/session_store.rb
256
+ - test/dummy/config/initializers/wrap_parameters.rb
257
+ - test/dummy/config/locales/en.yml
258
+ - test/dummy/config/routes.rb
259
+ - test/dummy/config.ru
260
+ - test/dummy/db/development.sqlite3
261
+ - test/dummy/db/migrate/20140101112114_create_invoices.rb
262
+ - test/dummy/db/migrate/20140102125046_add_number_to_invoices.rb
263
+ - test/dummy/db/migrate/20140103172515_create_users.rb
264
+ - test/dummy/db/migrate/20140103172643_add_user_id_to_invoices.rb
265
+ - test/dummy/db/migrate/20140104145204_create_line_items.rb
266
+ - test/dummy/db/migrate/20140104145227_create_products.rb
267
+ - test/dummy/db/migrate/20140104150906_create_addresses.rb
268
+ - test/dummy/db/migrate/20140114111137_create_products_tags_join_table.rb
269
+ - test/dummy/db/migrate/20140114111219_create_tags.rb
270
+ - test/dummy/db/migrate/20140117112556_add_type_to_products.rb
271
+ - test/dummy/db/remote.sqlite3
272
+ - test/dummy/db/schema.rb
273
+ - test/dummy/db/test.sqlite3
274
+ - test/dummy/log/development.log
275
+ - test/dummy/log/RAILS_ENV=test.log
276
+ - test/dummy/log/remote.log
277
+ - test/dummy/log/target.log
278
+ - test/dummy/log/test.log
279
+ - test/dummy/public/404.html
280
+ - test/dummy/public/422.html
281
+ - test/dummy/public/500.html
282
+ - test/dummy/public/favicon.ico
283
+ - test/dummy/Rakefile
284
+ - test/dummy/README.rdoc
285
+ - test/exclude_records_test.rb
286
+ - test/fixtures/invoices.yml
287
+ - test/fixtures/users.yml
288
+ - test/reuse_existing_records_test.rb
289
+ - test/support/minitest_ext.rb
290
+ - test/support/remote_address.rb
291
+ - test/support/remote_invoice.rb
292
+ - test/support/remote_line_item.rb
293
+ - test/support/remote_product.rb
294
+ - test/support/remote_tag.rb
295
+ - test/support/remote_user.rb
296
+ - test/test_helper.rb