chrono_model 0.12.0 → 0.12.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 514bcdaa49d7f8ca35bb422ea3fb47b5f11bfbd4
4
- data.tar.gz: af83cb212905b691d0c0ab43e9bf38306a089819
3
+ metadata.gz: 7bf80e2ead7e4bd268485039492504007f1bef1d
4
+ data.tar.gz: ec80e086d0723533e8f7bb06e78ec58e1a9edd39
5
5
  SHA512:
6
- metadata.gz: 96b7a8b00ca96174c66499824b801f9ec50f4644ee0a65adc37fc8a3e0fc57188172cb0e72563800c94b0e82c860af6d1137eb24948f169ce99191f476f5257b
7
- data.tar.gz: 1078c39fdab5c0af049df0eddbe7832055e72b872cec07d87d43d205ac1ccca44a3c8c8cb5cf5f9876f9a025a20109060b36541ef5354ed0410961c583ba586e
6
+ metadata.gz: eea3f10b7f18fd38718716ef4c90fc3a65ac4e789a6ae6a888080d655a1b2fae6761830242cf03bb911e9e7f090706c66ddf71bab20b76fb2f76ff3a68caf25e
7
+ data.tar.gz: fa5936bc34ca7820eefceb3064af13c12d5e323f0f8bede5e01062936b5ae7003bbe104b162a61469e95825a2b74b1580e05a21e5591dd537185842bb75d50d8
data/.gitignore CHANGED
@@ -5,6 +5,7 @@
5
5
  .yardoc
6
6
  .byebug_history
7
7
  Gemfile.lock
8
+ gemfiles/*.lock
8
9
  InstalledFiles
9
10
  _yardoc
10
11
  coverage
@@ -46,8 +46,6 @@ module ChronoModel
46
46
  _on_history_schema { chrono_create_history_for(table_name) }
47
47
 
48
48
  chrono_create_view_for(table_name, options)
49
-
50
- TableCache.add! table_name
51
49
  end
52
50
  end
53
51
 
@@ -115,9 +113,6 @@ module ChronoModel
115
113
  # Create view and functions
116
114
  #
117
115
  chrono_create_view_for(new_name)
118
-
119
- TableCache.del! name
120
- TableCache.add! new_name
121
116
  end
122
117
  end
123
118
 
@@ -148,8 +143,6 @@ module ChronoModel
148
143
  chrono_create_view_for(table_name, options)
149
144
  copy_indexes_to_history_for(table_name)
150
145
 
151
- TableCache.add! table_name
152
-
153
146
  # Optionally copy the plain table data, setting up history
154
147
  # retroactively.
155
148
  #
@@ -191,8 +184,6 @@ module ChronoModel
191
184
 
192
185
  execute "ALTER TABLE #{table_name} SET SCHEMA #{default_schema}"
193
186
  end
194
-
195
- TableCache.del! table_name
196
187
  end
197
188
 
198
189
  super table_name, options, &block
@@ -207,8 +198,6 @@ module ChronoModel
207
198
  return super unless is_chrono?(table_name)
208
199
 
209
200
  _on_temporal_schema { execute "DROP TABLE #{table_name} CASCADE" }
210
-
211
- TableCache.del! table_name
212
201
  end
213
202
 
214
203
  # If adding an index to a temporal table, add it to the one in the
@@ -452,20 +441,11 @@ module ChronoModel
452
441
  @_on_schema_nesting -= 1
453
442
  end
454
443
 
455
- TableCache = (Class.new(Hash) do
456
- def all ; keys; ; end
457
- def add! table ; self[table.to_s] = true ; end
458
- def del! table ; self[table.to_s] = nil ; end
459
- def fetch table ; self[table.to_s] ||= yield ; end
460
- end).new
461
-
462
444
  # Returns true if the given name references a temporal table.
463
445
  #
464
446
  def is_chrono?(table)
465
- TableCache.fetch(table) do
466
- _on_temporal_schema { chrono_data_source_exists?(table) } &&
447
+ _on_temporal_schema { chrono_data_source_exists?(table) } &&
467
448
  _on_history_schema { chrono_data_source_exists?(table) }
468
- end
469
449
 
470
450
  rescue ActiveRecord::StatementInvalid => e
471
451
  # means that we could not change the search path to check for
@@ -1,3 +1,3 @@
1
1
  module ChronoModel
2
- VERSION = "0.12.0"
2
+ VERSION = "0.12.1"
3
3
  end
@@ -0,0 +1,10 @@
1
+ class CreateImpressions < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :impressions do |t|
4
+ t.integer :response
5
+ t.decimal :amount
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class AddTemporalExtensionToImpressions < ActiveRecord::Migration[5.0]
2
+ def self.up
3
+ enable_extension 'btree_gist' unless extension_enabled?('btree_gist')
4
+ change_table :impressions, temporal: true, copy_data: true
5
+ end
6
+
7
+ def self.down
8
+ change_table :impressions, temporal: false
9
+ end
10
+ end
@@ -12,25 +12,9 @@ Rails.application.configure do
12
12
  # Show full error reports.
13
13
  config.consider_all_requests_local = true
14
14
 
15
- # Enable/disable caching. By default caching is disabled.
16
- if Rails.root.join('tmp/caching-dev.txt').exist?
17
- config.action_controller.perform_caching = true
18
-
19
- config.cache_store = :memory_store
20
- config.public_file_server.headers = {
21
- 'Cache-Control' => "public, max-age=#{2.days.seconds.to_i}"
22
- }
23
- else
24
- config.action_controller.perform_caching = false
25
-
26
- config.cache_store = :null_store
27
- end
28
-
29
15
  # Don't care if the mailer can't send.
30
16
  config.action_mailer.raise_delivery_errors = false
31
17
 
32
- config.action_mailer.perform_caching = false
33
-
34
18
  # Print deprecation notices to the Rails logger.
35
19
  config.active_support.deprecation = :log
36
20
 
@@ -1,13 +1,13 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe 'database migrations' do
3
+ describe 'database migrations', type: :aruba do
4
4
  context 'after a migration was generated' do
5
5
  before { write_file('config/database.yml',
6
6
  File.read(File.expand_path('fixtures/database_without_username_and_password.yml', __dir__))) }
7
7
 
8
8
  before { run_simple('bundle exec rails g migration CreateModels name:string') }
9
9
 
10
- describe 'bundle exec rake db:migrate', type: :aruba do
10
+ describe 'bundle exec rake db:migrate' do
11
11
  let(:action) { run('bundle exec rake db:migrate') }
12
12
  let(:last_command) { action && last_command_started }
13
13
 
@@ -15,4 +15,48 @@ describe 'database migrations' do
15
15
  specify { expect(last_command).to have_output(/CreateModels: migrated/) }
16
16
  end
17
17
  end
18
+
19
+
20
+ describe 'rerun bundle exec rake db:drop db:create db:migrate', issue: 56 do
21
+ let(:command) { 'bundle exec rake db:drop db:create db:migrate' }
22
+ before do
23
+ copy(
24
+ '../../spec/aruba/fixtures/database_without_username_and_password.yml',
25
+ 'config/database.yml'
26
+ )
27
+ copy(
28
+ '../../spec/aruba/fixtures/migrations/56/',
29
+ 'db/migrate'
30
+ )
31
+ end
32
+
33
+ before do
34
+ # Alter migrations and remove the version specifier for Rails < 5.0
35
+ #
36
+ if gem_version('rails') < Gem::Version.new('5.0')
37
+ Dir['spec/aruba/fixtures/migrations/56/*rb'].each do |migration|
38
+ migration = File.basename(migration)
39
+
40
+ file_mangle! "db/migrate/#{migration}" do |contents|
41
+ contents.sub(/::Migration\[\d\.\d\]/, '::Migration')
42
+ end
43
+ end
44
+ end
45
+ end
46
+
47
+ let(:action) { run(command) }
48
+ let(:regex) { /-- change_table\(:impressions, {:temporal=>true, :copy_data=>true}\)/ }
49
+
50
+ describe 'once' do
51
+ let(:last_command) { action && last_command_started }
52
+ specify { expect(last_command).to be_successfully_executed }
53
+ specify { expect(last_command).to have_output(regex) }
54
+ end
55
+
56
+ describe 'twice' do
57
+ let(:last_command) { run_simple(command) && action && last_command_started }
58
+ specify { expect(last_command).to be_successfully_executed }
59
+ specify { expect(last_command).to have_output(regex) }
60
+ end
61
+ end
18
62
  end
@@ -30,10 +30,9 @@ describe 'rake tasks', type: :aruba do
30
30
  #
31
31
  before do
32
32
  if which 'brew'
33
- database_config = read('config/database.yml').join("\n").
34
- sub('username: postgres', "username: #{Etc.getlogin}")
35
-
36
- write_file 'config/database.yml', database_config
33
+ file_mangle!('config/database.yml') do |contents|
34
+ contents.sub('username: postgres', "username: #{Etc.getlogin}")
35
+ end
37
36
  end
38
37
  end
39
38
 
@@ -29,5 +29,21 @@ module ChronoTest
29
29
  connection.drop_database database
30
30
  connection.create_database database
31
31
  end
32
+
33
+ def file_mangle!(file, &block)
34
+ # Read
35
+ file_contents = read(file).join("\n")
36
+
37
+ # Mangle
38
+ file_contents = block.call(file_contents)
39
+
40
+ # Write
41
+ write_file file, file_contents
42
+ end
43
+
44
+ def gem_version(name)
45
+ spec = Bundler.locked_gems.specs.find {|s| s.name == name }
46
+ return spec.version if spec
47
+ end
32
48
  end
33
49
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chrono_model
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marcello Barnaba
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-11-16 00:00:00.000000000 Z
12
+ date: 2017-11-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
@@ -234,6 +234,8 @@ files:
234
234
  - spec/aruba/fixtures/database_with_default_username_and_password.yml
235
235
  - spec/aruba/fixtures/database_without_username_and_password.yml
236
236
  - spec/aruba/fixtures/empty_structure.sql
237
+ - spec/aruba/fixtures/migrations/56/20160812190335_create_impressions.rb
238
+ - spec/aruba/fixtures/migrations/56/20171115195229_add_temporal_extension_to_impressions.rb
237
239
  - spec/aruba/fixtures/railsapp/config/application.rb
238
240
  - spec/aruba/fixtures/railsapp/config/boot.rb
239
241
  - spec/aruba/fixtures/railsapp/config/environments/development.rb
@@ -284,6 +286,8 @@ test_files:
284
286
  - spec/aruba/fixtures/database_with_default_username_and_password.yml
285
287
  - spec/aruba/fixtures/database_without_username_and_password.yml
286
288
  - spec/aruba/fixtures/empty_structure.sql
289
+ - spec/aruba/fixtures/migrations/56/20160812190335_create_impressions.rb
290
+ - spec/aruba/fixtures/migrations/56/20171115195229_add_temporal_extension_to_impressions.rb
287
291
  - spec/aruba/fixtures/railsapp/config/application.rb
288
292
  - spec/aruba/fixtures/railsapp/config/boot.rb
289
293
  - spec/aruba/fixtures/railsapp/config/environments/development.rb