effective_developer 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 40d2df5dba437c7112b719f129fb5304d88fd3b5
4
- data.tar.gz: f485802d6fbf8ae8ae1375478650b20d56e381aa
3
+ metadata.gz: 987dc444541f73d96d4ef8639822910e52cfb47c
4
+ data.tar.gz: 7ab798c262fbcf37680b5333d8bb5c856a9a933e
5
5
  SHA512:
6
- metadata.gz: 0ceb56e3450b4ea6a447294289f3d9f9e8825dc2ac2cd569b3748278798fc1ff83b90da973776f5196b452a78235423f167c9318c9602e29b028779f390f5b7d
7
- data.tar.gz: 187897199ea333c4d9423a724e74a5b39d0697b4e55f8321fea23a30f0ba8ec4bb003151880a015b715249901525b9c8074d3b7e1616c6a464f96e8b49d0588a
6
+ metadata.gz: 4df59039d6e5728ce6c92165b682bb3894ea6e314612e05c91bd1f23b8aaf98d6f19953542874ddcac6d71b47067dc5c5829447cba278348ef5ce2561a47cc59
7
+ data.tar.gz: 98ee05f7b84c9f894c27ac52f58fa853b76c1253d4e6e2b12ef2fc95750b3876f5ac40957e6f2825d568f8df42547b81bb0349dfcb61dc8f99b6480faf724cab
@@ -1,5 +1,7 @@
1
+ require 'rails/generators/active_record/migration/migration_generator'
2
+
1
3
  module Effective
2
- class Migrator
4
+ class LiveGenerator
3
5
  attr_accessor :resource # The class level effective_resource do ... end object
4
6
 
5
7
  def initialize(obj)
@@ -8,10 +10,12 @@ module Effective
8
10
  unless @resource.respond_to?(:model) && @resource.model.present?
9
11
  raise 'expected effective_resource or klass to have an effective_resource do ... end block defined'
10
12
  end
13
+
14
+ true
11
15
  end
12
16
 
13
17
  # Writes database migrations automatically based on effective_resources do ... end block
14
- def migrate!
18
+ def generate!
15
19
  table_attributes = resource.table_attributes
16
20
  model_attributes = resource.model_attributes
17
21
 
@@ -27,31 +31,34 @@ module Effective
27
31
  # Fields are not in database, but present in model.rb
28
32
  if(add_keys = (model_keys - table_keys)).present?
29
33
  Rails.logger.info "effective_developer migrate #{resource.plural_name}: add #{add_keys.to_sentence}"
30
- rails_migrate("add_fields_to_#{resource.plural_name}", model_attributes.slice(*add_keys))
34
+ rails_migrate("add_ATTRIBUTES_to_#{resource.plural_name}", model_attributes.slice(*add_keys))
31
35
  end
32
36
 
33
37
  # Fields are in database, but no longer in our effective_resource do block
34
38
  if (remove_keys = (table_keys - model_keys)).present?
35
39
  Rails.logger.info "effective_developer migrate #{resource.plural_name}: remove #{remove_keys.to_sentence}"
36
- rails_migrate("remove_fields_from_#{resource.plural_name}", table_attributes.slice(*remove_keys))
40
+ rails_migrate("remove_ATTRIBUTES_from_#{resource.plural_name}", table_attributes.slice(*remove_keys))
37
41
  end
38
42
  end
39
43
 
40
44
  private
41
45
 
42
46
  def rails_migrate(filename, attributes)
43
- invokable = attributes.map { |name, (type, _)| "#{name}:#{type}" }
47
+ # The filename needs to be unique, but it shouldn't be annoyingly long
48
+ name = (attributes.keys.first(2) + [("and_#{attributes.length - 2}_more" if attributes.length > 2)]).compact.join('_')
49
+ filename.sub!('ATTRIBUTES', name)
44
50
 
45
- pending = (ActiveRecord::Migration.check_pending! rescue true)
46
- ActiveRecord::Tasks::DatabaseTasks.migrate if pending
51
+ # I don't need to check pending. But if I did:
52
+ #pending = (ActiveRecord::Migration.check_pending! rescue true)
53
+ #ActiveRecord::Tasks::DatabaseTasks.migrate if pending
47
54
 
48
- # Can't get this to work
49
- # Rails.logger.info "INVOKING!!!!!"
50
- # binding.pry
51
- # Rails::Generators.invoke('migration', [filename] + invokable, behavior: :invoke, destination_root: Rails.root, migration_paths: ['db/migrate'])
55
+ args = [filename] + attributes.map { |name, (type, _)| "#{name}:#{type}" }
56
+ options = {}
57
+ config = { destination_root: Rails.root }
52
58
 
53
- system("rails generate migration #{filename} #{invokable.join(' ')}")
59
+ ActiveRecord::Generators::MigrationGenerator.new(args, options, config).invoke_all
54
60
  ActiveRecord::Tasks::DatabaseTasks.migrate
61
+ resource.klass.reset_column_information
55
62
 
56
63
  true
57
64
  end
@@ -1,5 +1,5 @@
1
1
  EffectiveDeveloper.setup do |config|
2
-
3
- # This doesn't do anything. Yet.
4
- config.live = true
2
+ # Tracks changes to the effective_resource do .. end block
3
+ # And automatically writes database migration changes
4
+ config.live = false
5
5
  end
@@ -8,10 +8,10 @@ module EffectiveDeveloper
8
8
  eval File.read("#{config.root}/config/effective_developer.rb")
9
9
  end
10
10
 
11
- # Include acts_as_addressable concern and allow any ActiveRecord object to call it
11
+ # Whenever the effective_resource do block is evaluated, check for changes
12
12
  initializer 'effective_developer.effective_resources' do |app|
13
13
  ActiveSupport.on_load :effective_resource do
14
- #Effective::Migrator.new(self).migrate!
14
+ Effective::LiveGenerator.new(self).generate! if EffectiveDeveloper.live
15
15
  end
16
16
  end
17
17
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveDeveloper
2
- VERSION = '0.4.1'.freeze
2
+ VERSION = '0.4.2'.freeze
3
3
  end
@@ -1,4 +1,4 @@
1
- # bundle exec rake rename_class[account, team]
1
+ # bundle exec rake rename_class[account,team]
2
2
 
3
3
  desc 'Rename a rails class to another'
4
4
  task :rename_class, [:source, :target, :db] => :environment do |t, args|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_developer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-15 00:00:00.000000000 Z
11
+ date: 2018-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -50,7 +50,7 @@ files:
50
50
  - Rakefile
51
51
  - app/models/effective/code_writer.rb
52
52
  - app/models/effective/csv_importer.rb
53
- - app/models/effective/migrator.rb
53
+ - app/models/effective/live_generator.rb
54
54
  - config/effective_developer.rb
55
55
  - lib/effective_developer.rb
56
56
  - lib/effective_developer/engine.rb