duck_duck_duck 3.1.1 → 4.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.
- checksums.yaml +4 -4
- data/README.md +27 -2
- data/VERSION +1 -1
- data/lib/duck_duck_duck.rb +28 -21
- data/specs/duck_duck_duck.rb +17 -4
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: eb33bc9a033282d066dd12a980c0a41ecfcfeca5
         | 
| 4 | 
            +
              data.tar.gz: 95a6f37f30a099bafcf45db109d14a06d7b91a5e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: eeedc977caa49085b38ef18f7d40a07ae2024e526187d40cbe64b033facc7b9c2d7ca0393355fc8020e30de3b30cb3258f20774e4da0af5e170637a1e7b37063
         | 
| 7 | 
            +
              data.tar.gz: 05893d31a983d6130e8aacdb311ae88a603ad14a42550532520242f479ca9ca4e2c8ed4758105cf7f61822ecf331d50cdb39bbb10f6ce8cc8762145cbf795d6f
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,12 +1,12 @@ | |
| 1 1 |  | 
| 2 | 
            -
             | 
| 2 | 
            +
            duck\_duck\_duck
         | 
| 3 3 | 
             
            ==============
         | 
| 4 4 | 
             
            You won't find this useful.
         | 
| 5 5 |  | 
| 6 6 | 
             
            However, if you are still curious:
         | 
| 7 7 |  | 
| 8 8 | 
             
            * If you like to break up apps into smaller apps,
         | 
| 9 | 
            -
              and you want them to use the  | 
| 9 | 
            +
              and you want them to use the same db, but
         | 
| 10 10 | 
             
              different tables, duck\_duck\_duck
         | 
| 11 11 | 
             
              lets you migrate those mini-apps
         | 
| 12 12 | 
             
              to the same db.
         | 
| @@ -17,3 +17,28 @@ Previously... | |
| 17 17 | 
             
            Originally, this was a node module.
         | 
| 18 18 | 
             
            The node module is no longer maintained. It is now
         | 
| 19 19 | 
             
            a Ruby gem.
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            Commands
         | 
| 22 | 
            +
            =========
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            ```bash
         | 
| 25 | 
            +
              cd /my/model/dir
         | 
| 26 | 
            +
              duck_duck_duck   up       MODEL_NAME
         | 
| 27 | 
            +
              duck_duck_duck   down     MODEL_NAME
         | 
| 28 | 
            +
              duck_duck_duck   create   MODEL_NAME  postfix
         | 
| 29 | 
            +
            ```
         | 
| 30 | 
            +
             | 
| 31 | 
            +
            Sample .sql file:
         | 
| 32 | 
            +
             | 
| 33 | 
            +
            ```sql
         | 
| 34 | 
            +
              SELECT 1;
         | 
| 35 | 
            +
              -- DOWN
         | 
| 36 | 
            +
              SELECT 2
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              -- UP:
         | 
| 39 | 
            +
              -- colons ":' are optional
         | 
| 40 | 
            +
              SELECT 3;
         | 
| 41 | 
            +
             | 
| 42 | 
            +
              -- DOWN:
         | 
| 43 | 
            +
              SELECT 4;
         | 
| 44 | 
            +
            ```
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
             | 
| 1 | 
            +
            4.0.0
         | 
    
        data/lib/duck_duck_duck.rb
    CHANGED
    
    | @@ -19,8 +19,8 @@ class Duck_Duck_Duck | |
| 19 19 | 
             
                def migrate_schema
         | 
| 20 20 | 
             
                  DB << <<-EOF
         | 
| 21 21 | 
             
                    CREATE TABLE IF NOT EXISTS #{SCHEMA_TABLE} (
         | 
| 22 | 
            -
                      name | 
| 23 | 
            -
                      version | 
| 22 | 
            +
                      name              varchar(255) NOT NULL PRIMARY KEY,
         | 
| 23 | 
            +
                      version           smallint     NOT NULL DEFAULT 0
         | 
| 24 24 | 
             
                    )
         | 
| 25 25 | 
             
                  EOF
         | 
| 26 26 | 
             
                end
         | 
| @@ -69,7 +69,12 @@ class Duck_Duck_Duck | |
| 69 69 | 
             
                if !@name
         | 
| 70 70 | 
             
                  fail ArgumentError, "Name required."
         | 
| 71 71 | 
             
                end
         | 
| 72 | 
            -
             | 
| 72 | 
            +
             | 
| 73 | 
            +
                @files = `find . -iregex ".+/#{name}/migrates/.+\.sql"`
         | 
| 74 | 
            +
                .strip
         | 
| 75 | 
            +
                .split("\n")
         | 
| 76 | 
            +
                .grep(/\/\d+\-/)
         | 
| 77 | 
            +
                .sort
         | 
| 73 78 | 
             
              end
         | 
| 74 79 |  | 
| 75 80 | 
             
              def file_to_ver str
         | 
| @@ -81,15 +86,25 @@ class Duck_Duck_Duck | |
| 81 86 | 
             
                up
         | 
| 82 87 | 
             
              end
         | 
| 83 88 |  | 
| 84 | 
            -
              def  | 
| 85 | 
            -
                rec = DB.fetch( | 
| 89 | 
            +
              def init_model_in_schema
         | 
| 90 | 
            +
                rec = DB.fetch(
         | 
| 91 | 
            +
                  "SELECT version FROM #{SCHEMA_TABLE} WHERE name = upper( :name )",
         | 
| 92 | 
            +
                  :name=>name
         | 
| 93 | 
            +
                ).all.first
         | 
| 86 94 |  | 
| 87 95 | 
             
                if !rec
         | 
| 88 | 
            -
                   | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 96 | 
            +
                  rec = DB.fetch(
         | 
| 97 | 
            +
                    "INSERT INTO #{SCHEMA_TABLE} (name, version) VALUES (upper(:name), :version) RETURNING *",
         | 
| 98 | 
            +
                    :name=>name, :version=>0
         | 
| 99 | 
            +
                  ).all.first
         | 
| 91 100 | 
             
                end
         | 
| 92 101 |  | 
| 102 | 
            +
                {:version=>rec[:version]}
         | 
| 103 | 
            +
              end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
              def up
         | 
| 106 | 
            +
                rec = init_model_in_schema
         | 
| 107 | 
            +
             | 
| 93 108 | 
             
                if rec[:version] < 0
         | 
| 94 109 | 
             
                  puts "#{name} has an invalid version: #{rec[:version]}\n"
         | 
| 95 110 | 
             
                  exit 1
         | 
| @@ -106,7 +121,7 @@ class Duck_Duck_Duck | |
| 106 121 | 
             
                  ver = pair.first
         | 
| 107 122 | 
             
                  sql = pair[1]
         | 
| 108 123 | 
             
                  DB << sql
         | 
| 109 | 
            -
                  DB[" UPDATE #{SCHEMA_TABLE.inspect} SET version = ? WHERE name = ? ", ver, name].update
         | 
| 124 | 
            +
                  DB[" UPDATE #{SCHEMA_TABLE.inspect} SET version = ? WHERE name = upper( ? ); ", ver, name].update
         | 
| 110 125 | 
             
                  puts "#{name} schema is now : #{ver}"
         | 
| 111 126 | 
             
                }
         | 
| 112 127 |  | 
| @@ -116,13 +131,7 @@ class Duck_Duck_Duck | |
| 116 131 | 
             
              end # === def up
         | 
| 117 132 |  | 
| 118 133 | 
             
              def down
         | 
| 119 | 
            -
                rec =  | 
| 120 | 
            -
             | 
| 121 | 
            -
                if !rec
         | 
| 122 | 
            -
                  ds = DB["INSERT INTO #{SCHEMA_TABLE} (name, version) VALUES (?, ?)", name, 0]
         | 
| 123 | 
            -
                  ds.insert
         | 
| 124 | 
            -
                  rec = {:version=>0}
         | 
| 125 | 
            -
                end
         | 
| 134 | 
            +
                rec = init_model_in_schema
         | 
| 126 135 |  | 
| 127 136 | 
             
                if rec[:version] == 0
         | 
| 128 137 | 
             
                  puts "#{name} is already the latest: #{rec[:version]}\n"
         | 
| @@ -151,7 +160,7 @@ class Duck_Duck_Duck | |
| 151 160 | 
             
                  ver = prev_pair.first.to_i
         | 
| 152 161 | 
             
                  sql = pair[1]
         | 
| 153 162 | 
             
                  DB << sql
         | 
| 154 | 
            -
                  DB[" UPDATE #{SCHEMA_TABLE} SET version = ? WHERE name = ? ", ver, name].update
         | 
| 163 | 
            +
                  DB[" UPDATE #{SCHEMA_TABLE} SET version = ? WHERE name = upper( ? )", ver, name].update
         | 
| 155 164 | 
             
                  puts "#{name} schema is now : #{ver}"
         | 
| 156 165 | 
             
                }
         | 
| 157 166 |  | 
| @@ -160,14 +169,12 @@ class Duck_Duck_Duck | |
| 160 169 | 
             
              def create
         | 
| 161 170 | 
             
                `mkdir -p #{name}/migrates`
         | 
| 162 171 |  | 
| 163 | 
            -
                files = Dir.glob("#{name}/migrates/*.sql").grep(/\/\d+\-/).sort
         | 
| 164 | 
            -
             | 
| 165 172 | 
             
                size = 3
         | 
| 166 173 | 
             
                next_ver = begin
         | 
| 167 | 
            -
                             (files.last || '')[/\/(\d+)[^\/]+\z/]
         | 
| 174 | 
            +
                             (@files.last || '')[/\/(\d+)[^\/]+\z/]
         | 
| 168 175 | 
             
                             v = if $1
         | 
| 169 176 | 
             
                                   size = $1.size
         | 
| 170 | 
            -
                                   $1 | 
| 177 | 
            +
                                   $1
         | 
| 171 178 | 
             
                                  else
         | 
| 172 179 | 
             
                                    '0'
         | 
| 173 180 | 
             
                                  end
         | 
    
        data/specs/duck_duck_duck.rb
    CHANGED
    
    | @@ -112,12 +112,18 @@ describe 'up model' do | |
| 112 112 | 
             
              it 'does not run migrations from previous versions' do
         | 
| 113 113 | 
             
                Exit_0("duck_duck_duck migrate_schema")
         | 
| 114 114 | 
             
                DB << File.read("0010_model/migrates/0010-table.sql").split('-- DOWN').first
         | 
| 115 | 
            -
                DB << "INSERT INTO #{schema.inspect} VALUES ('0010_model', '20');"
         | 
| 115 | 
            +
                DB << "INSERT INTO #{schema.inspect} VALUES (upper('0010_model'), '20');"
         | 
| 116 116 | 
             
                Exit_0("duck_duck_duck up 0010_model")
         | 
| 117 117 | 
             
                get('SELECT * FROM "0010_model"', :title).
         | 
| 118 118 | 
             
                  should == ['record 30', 'record 40', 'record 50']
         | 
| 119 119 | 
             
              end
         | 
| 120 120 |  | 
| 121 | 
            +
              it "ignores case of model" do
         | 
| 122 | 
            +
                Exit_0("duck_duck_duck up 0010_mOdEl")
         | 
| 123 | 
            +
                get('SELECT * FROM _test_schema').
         | 
| 124 | 
            +
                  first[:version].should == versions('0010_model').last
         | 
| 125 | 
            +
              end # === it
         | 
| 126 | 
            +
             | 
| 121 127 | 
             
            end # === describe up model
         | 
| 122 128 |  | 
| 123 129 | 
             
            describe 'down model' do
         | 
| @@ -127,7 +133,7 @@ describe 'down model' do | |
| 127 133 | 
             
              it 'leaves version to 0' do
         | 
| 128 134 | 
             
                Exit_0("duck_duck_duck up 0010_model")
         | 
| 129 135 | 
             
                Exit_0("duck_duck_duck down 0010_model")
         | 
| 130 | 
            -
                get(%^SELECT * FROM #{schema.inspect} WHERE name = '0010_model' | 
| 136 | 
            +
                get(%^SELECT * FROM #{schema.inspect} WHERE name = upper('0010_model');^, :version).last.
         | 
| 131 137 | 
             
                  should == 0
         | 
| 132 138 | 
             
              end
         | 
| 133 139 |  | 
| @@ -141,13 +147,20 @@ describe 'down model' do | |
| 141 147 | 
             
              it 'does not run down migrates from later versions' do
         | 
| 142 148 | 
             
                Exit_0("duck_duck_duck migrate_schema")
         | 
| 143 149 | 
             
                DB << File.read("0020_model/migrates/0010-table.sql").split('-- DOWN').first
         | 
| 144 | 
            -
                DB << "INSERT INTO #{schema.inspect} VALUES ('0020_model', '20');"
         | 
| 150 | 
            +
                DB << "INSERT INTO #{schema.inspect} VALUES (upper('0020_model'), '20');"
         | 
| 145 151 | 
             
                DB << "UPDATE #{schema} SET version = '20' WHERE name = '0020_model';"
         | 
| 146 152 | 
             
                Exit_0("duck_duck_duck down 0020_model")
         | 
| 147 | 
            -
                get('SELECT  | 
| 153 | 
            +
                get('SELECT title FROM "0020_model"', :title).
         | 
| 148 154 | 
             
                  should == ['DROP record 20', 'DROP 0020_model']
         | 
| 149 155 | 
             
              end
         | 
| 150 156 |  | 
| 157 | 
            +
              it 'ignores case of model' do
         | 
| 158 | 
            +
                Exit_0("duck_duck_duck up 0010_model")
         | 
| 159 | 
            +
                Exit_0("duck_duck_duck down 0010_MoDeL")
         | 
| 160 | 
            +
                get(%^SELECT * FROM #{schema.inspect} WHERE name = upper('0010_model');^, :version).last.
         | 
| 161 | 
            +
                  should == 0
         | 
| 162 | 
            +
              end
         | 
| 163 | 
            +
             | 
| 151 164 | 
             
            end # === describe down model
         | 
| 152 165 |  | 
| 153 166 | 
             
            describe '-- UP/-- DOWN model' do
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: duck_duck_duck
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 4.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - da99
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015-10- | 
| 11 | 
            +
            date: 2015-10-28 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: pry
         |