app_stack 0.0.6 → 0.0.7
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 +15 -0
 - data/README.md +6 -1
 - data/examples/my_app/.app-stack.yml +11 -11
 - data/examples/my_app/README +1 -0
 - data/examples/my_app/app/api_controller.rb +0 -0
 - data/examples/my_app/app/config.rb +0 -0
 - data/examples/my_app/app/controllers/hello_controller.rb +0 -0
 - data/examples/my_app/fileabc.rb +0 -0
 - data/examples/stack-apps/auth-app/app/config.rb.erb +1 -0
 - data/lib/app_stack/version.rb +1 -1
 - data/lib/app_stack.rb +92 -84
 - metadata +10 -15
 
    
        checksums.yaml
    ADDED
    
    | 
         @@ -0,0 +1,15 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            ---
         
     | 
| 
      
 2 
     | 
    
         
            +
            !binary "U0hBMQ==":
         
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: !binary |-
         
     | 
| 
      
 4 
     | 
    
         
            +
                Mjg0MTY2ZmU2NDExMmU3ZjVlYTM5ZDdiODZjYTEyMzg2ZTM4MGM4MA==
         
     | 
| 
      
 5 
     | 
    
         
            +
              data.tar.gz: !binary |-
         
     | 
| 
      
 6 
     | 
    
         
            +
                NTllMzU1NmZkZjJlYzM2N2UxYjMzZTQwYWZkZDEzNmNjZGE3NWM1ZQ==
         
     | 
| 
      
 7 
     | 
    
         
            +
            !binary "U0hBNTEy":
         
     | 
| 
      
 8 
     | 
    
         
            +
              metadata.gz: !binary |-
         
     | 
| 
      
 9 
     | 
    
         
            +
                NWJkOTZlY2ZmNmNjZDc2YWU5MDZmMTljOGM0ZTYzZDUwNTIyMjc2N2NiMmQ3
         
     | 
| 
      
 10 
     | 
    
         
            +
                ZjIwNTYxZDk5MGRkYWM0YjhkY2FhZGI1NjY3NTFlMmUwZjlmYjBmYzJkMTNi
         
     | 
| 
      
 11 
     | 
    
         
            +
                MTk2ZDYxZTRhNzE3OTFjMGY5YmE5ZjFiMDBiYTg4MjNlN2I5MmQ=
         
     | 
| 
      
 12 
     | 
    
         
            +
              data.tar.gz: !binary |-
         
     | 
| 
      
 13 
     | 
    
         
            +
                NmQ4ZTRjNDI3MzI4NWY4MTlhYzc4MWRmM2U4ZWNjMjhlZDVlODFiNzVhZDYz
         
     | 
| 
      
 14 
     | 
    
         
            +
                YTUyMWY5ZDZhMzIwYWY3Y2JhNGMzZmE0MDkzYmI0MjhhZTllMmM0ZTA3ODFl
         
     | 
| 
      
 15 
     | 
    
         
            +
                OGM0ODFhNGQzMTVlMDMyZmUzZWZkMGE3ODQ3MmZiOGViY2I2ZmY=
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -10,6 +10,11 @@ A configuration file `.app-stack.yml` in you app-root, in format like: 
     | 
|
| 
       10 
10 
     | 
    
         
             
                app_dir: '../stack-apps'
         
     | 
| 
       11 
11 
     | 
    
         
             
                tpl_ext: '.sample.erb'
         
     | 
| 
       12 
12 
     | 
    
         
             
                verbose: 1
         
     | 
| 
      
 13 
     | 
    
         
            +
                file_patterns:
         
     | 
| 
      
 14 
     | 
    
         
            +
                  spec/**/*.rb
         
     | 
| 
      
 15 
     | 
    
         
            +
                  lib/**/*.rb
         
     | 
| 
      
 16 
     | 
    
         
            +
                  **/*.line_addon
         
     | 
| 
      
 17 
     | 
    
         
            +
                  **/*.erb
         
     | 
| 
       13 
18 
     | 
    
         
             
                attrs:
         
     | 
| 
       14 
19 
     | 
    
         
             
                  dababase_name: 'nameofdatabase'
         
     | 
| 
       15 
20 
     | 
    
         
             
                files:
         
     | 
| 
         @@ -22,7 +27,7 @@ And in `Rakefile` add: 
     | 
|
| 
       22 
27 
     | 
    
         | 
| 
       23 
28 
     | 
    
         
             
                namespace :stack do
         
     | 
| 
       24 
29 
     | 
    
         
             
                  task :update do
         
     | 
| 
       25 
     | 
    
         
            -
                    AppStack. 
     | 
| 
      
 30 
     | 
    
         
            +
                    AppStack.run!('.app-stack.yml')
         
     | 
| 
       26 
31 
     | 
    
         
             
                  end
         
     | 
| 
       27 
32 
     | 
    
         
             
                end
         
     | 
| 
       28 
33 
     | 
    
         | 
| 
         @@ -6,18 +6,18 @@ stack_apps_dir: ../stack-apps 
     | 
|
| 
       6 
6 
     | 
    
         
             
            tpl_ext: .template.erb
         
     | 
| 
       7 
7 
     | 
    
         
             
            addon_ext: .line_addon
         
     | 
| 
       8 
8 
     | 
    
         
             
            verbose: 1
         
     | 
| 
       9 
     | 
    
         
            -
             
     | 
| 
       10 
     | 
    
         
            -
            -  
     | 
| 
       11 
     | 
    
         
            -
            -  
     | 
| 
       12 
     | 
    
         
            -
            -  
     | 
| 
       13 
     | 
    
         
            -
            -  
     | 
| 
       14 
     | 
    
         
            -
            -  
     | 
| 
      
 9 
     | 
    
         
            +
            file_patterns:
         
     | 
| 
      
 10 
     | 
    
         
            +
            - app/**/*.rb
         
     | 
| 
      
 11 
     | 
    
         
            +
            - spec/**/*.rb
         
     | 
| 
      
 12 
     | 
    
         
            +
            - lib/**/*.rb
         
     | 
| 
      
 13 
     | 
    
         
            +
            - config/**/*.rb
         
     | 
| 
      
 14 
     | 
    
         
            +
            - config/**/*.conf
         
     | 
| 
      
 15 
     | 
    
         
            +
            - config/**/*.yaml
         
     | 
| 
       15 
16 
     | 
    
         
             
            attrs:
         
     | 
| 
       16 
17 
     | 
    
         
             
              application_name: My App
         
     | 
| 
       17 
18 
     | 
    
         
             
              from_self: myapp
         
     | 
| 
       18 
19 
     | 
    
         
             
            files:
         
     | 
| 
       19 
     | 
    
         
            -
               
     | 
| 
       20 
     | 
    
         
            -
               
     | 
| 
       21 
     | 
    
         
            -
               
     | 
| 
       22 
     | 
    
         
            -
               
     | 
| 
       23 
     | 
    
         
            -
              config/configuration.yml: __self
         
     | 
| 
      
 20 
     | 
    
         
            +
              config/app.config.rb: base-app
         
     | 
| 
      
 21 
     | 
    
         
            +
              app/controllers/hello_controller.rb: __self
         
     | 
| 
      
 22 
     | 
    
         
            +
              app/api_controller.rb: __self
         
     | 
| 
      
 23 
     | 
    
         
            +
              app/config.rb: __self
         
     | 
    
        data/examples/my_app/README
    CHANGED
    
    
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         
            File without changes
         
     | 
| 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            <%= "Holly OK." %>
         
     | 
    
        data/lib/app_stack/version.rb
    CHANGED
    
    
    
        data/lib/app_stack.rb
    CHANGED
    
    | 
         @@ -3,17 +3,19 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            require 'yaml'
         
     | 
| 
       4 
4 
     | 
    
         
             
            require 'find'
         
     | 
| 
       5 
5 
     | 
    
         
             
            require 'fileutils'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'ostruct'
         
     | 
| 
      
 7 
     | 
    
         
            +
            require 'tilt/erb'
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
       6 
9 
     | 
    
         
             
            require 'term/ansicolor'
         
     | 
| 
       7 
10 
     | 
    
         
             
            # mixin String class for term-color methods
         
     | 
| 
       8 
11 
     | 
    
         
             
            class String; include Term::ANSIColor end
         
     | 
| 
       9 
     | 
    
         
            -
            require 'tilt/erb'
         
     | 
| 
       10 
     | 
    
         
            -
            require 'ostruct'
         
     | 
| 
       11 
12 
     | 
    
         | 
| 
       12 
13 
     | 
    
         
             
            ## A namespace for app-stack based modules
         
     | 
| 
       13 
14 
     | 
    
         
             
            module AppStack
         
     | 
| 
       14 
15 
     | 
    
         | 
| 
       15 
16 
     | 
    
         
             
              CONF_FILE = '.app-stack.yml'
         
     | 
| 
       16 
17 
     | 
    
         | 
| 
      
 18 
     | 
    
         
            +
              # public entry ponit, receive a configuration filename
         
     | 
| 
       17 
19 
     | 
    
         
             
              def run!(file = '.app-stack.yml')
         
     | 
| 
       18 
20 
     | 
    
         
             
                # load configuration
         
     | 
| 
       19 
21 
     | 
    
         
             
                @config = YAML.load(File.read(file))
         
     | 
| 
         @@ -21,79 +23,40 @@ module AppStack 
     | 
|
| 
       21 
23 
     | 
    
         
             
                # assign default values:
         
     | 
| 
       22 
24 
     | 
    
         
             
                @app_root = File.expand_path(File.dirname(file)) unless @config['app_root']
         
     | 
| 
       23 
25 
     | 
    
         
             
                @stack_apps_dir = @config['stack_apps_dir']
         
     | 
| 
      
 26 
     | 
    
         
            +
                # convert relative path:
         
     | 
| 
       24 
27 
     | 
    
         
             
                @stack_apps_dir = @app_root + '/' +
         
     | 
| 
       25 
28 
     | 
    
         
             
                                 @stack_apps_dir if @stack_apps_dir.match(/^\.\.?\//)
         
     | 
| 
       26 
29 
     | 
    
         | 
| 
       27 
30 
     | 
    
         
             
                @files = @config['files'] || {}
         
     | 
| 
       28 
31 
     | 
    
         
             
                register_own_files!
         
     | 
| 
       29 
32 
     | 
    
         
             
                # loop over each stack application
         
     | 
| 
       30 
     | 
    
         
            -
                @config['stack'].each { |stack_app|  
     | 
| 
      
 33 
     | 
    
         
            +
                @config['stack'].each { |stack_app| do_copy_stack!(stack_app) }
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
       31 
35 
     | 
    
         
             
                # rewrite configuration back to app-stack file
         
     | 
| 
       32 
36 
     | 
    
         
             
                @config['files'] = @files
         
     | 
| 
       33 
37 
     | 
    
         
             
                File.open(file, 'wb') { |fh| fh.puts YAML.dump(@config) }
         
     | 
| 
       34 
38 
     | 
    
         
             
              end
         
     | 
| 
       35 
39 
     | 
    
         | 
| 
       36 
     | 
    
         
            -
               
     | 
| 
       37 
     | 
    
         
            -
             
     | 
| 
       38 
     | 
    
         
            -
                 
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
             
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
             
     | 
| 
       43 
     | 
    
         
            -
             
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
             
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
             
     | 
| 
       50 
     | 
    
         
            -
                  add_lines.each { |line| afh.puts line }
         
     | 
| 
       51 
     | 
    
         
            -
                  afh.close
         
     | 
| 
       52 
     | 
    
         
            -
                  done = 'add lines'.bold.green if add_lines.size > 0
         
     | 
| 
       53 
     | 
    
         
            -
                end
         
     | 
| 
       54 
     | 
    
         
            -
              end
         
     | 
| 
       55 
     | 
    
         
            -
             
     | 
| 
       56 
     | 
    
         
            -
              # rubocop:disable MethodLength
         
     | 
| 
       57 
     | 
    
         
            -
              def copy_file!(f, basename)
         
     | 
| 
       58 
     | 
    
         
            -
                done = 'keeped'.green
         
     | 
| 
       59 
     | 
    
         
            -
                target = File.expand_path(@app_root + '/' + basename)
         
     | 
| 
       60 
     | 
    
         
            -
                # directory?
         
     | 
| 
       61 
     | 
    
         
            -
                if File.directory?(f)
         
     | 
| 
       62 
     | 
    
         
            -
                  if File.directory?(target)
         
     | 
| 
       63 
     | 
    
         
            -
                    done = 'exists'.green
         
     | 
| 
       64 
     | 
    
         
            -
                  else
         
     | 
| 
       65 
     | 
    
         
            -
                    FileUtils.mkdir_p target
         
     | 
| 
       66 
     | 
    
         
            -
                    done = 'created'.bold.green
         
     | 
| 
      
 40 
     | 
    
         
            +
              # for files already in the app root, register to no-copy list
         
     | 
| 
      
 41 
     | 
    
         
            +
              def register_own_files!
         
     | 
| 
      
 42 
     | 
    
         
            +
                @config['file_patterns'].each do |pt|
         
     | 
| 
      
 43 
     | 
    
         
            +
                  Dir[@app_root + '/' + pt].each do |f|
         
     | 
| 
      
 44 
     | 
    
         
            +
                    next if f == @app_root
         
     | 
| 
      
 45 
     | 
    
         
            +
                    basename = f.sub(/^#{@app_root}\//, '')
         
     | 
| 
      
 46 
     | 
    
         
            +
                    if @files[basename]
         
     | 
| 
      
 47 
     | 
    
         
            +
                      carp "From #{'self'.blue.bold} #{basename.bold} ",
         
     | 
| 
      
 48 
     | 
    
         
            +
                           'keep'.white if @files[basename] == '__self'
         
     | 
| 
      
 49 
     | 
    
         
            +
                    else
         
     | 
| 
      
 50 
     | 
    
         
            +
                      carp "From #{'self'.blue.bold} #{basename.bold}",
         
     | 
| 
      
 51 
     | 
    
         
            +
                           'registed'.green.bold
         
     | 
| 
      
 52 
     | 
    
         
            +
                      @files[basename] = '__self'
         
     | 
| 
      
 53 
     | 
    
         
            +
                    end
         
     | 
| 
       67 
54 
     | 
    
         
             
                  end
         
     | 
| 
       68 
     | 
    
         
            -
                else
         
     | 
| 
       69 
     | 
    
         
            -
                  tpl_file = f + @config['tpl_ext']
         
     | 
| 
       70 
     | 
    
         
            -
                  if File.exists?(tpl_file) && newer(tpl_file, target)
         
     | 
| 
       71 
     | 
    
         
            -
                    @tilt = Tilt::ERBTemplate.new(tpl_file)
         
     | 
| 
       72 
     | 
    
         
            -
                    oh = File.open(target, 'wb')
         
     | 
| 
       73 
     | 
    
         
            -
                    oh.write @tilt.render(OpenStruct.new(@attr.merge(@config['attrs'])))
         
     | 
| 
       74 
     | 
    
         
            -
                    oh.close
         
     | 
| 
       75 
     | 
    
         
            -
                    done = 'rendered'.bold.green
         
     | 
| 
       76 
     | 
    
         
            -
                  elsif newer(f, target)
         
     | 
| 
       77 
     | 
    
         
            -
                    FileUtils.copy f, target
         
     | 
| 
       78 
     | 
    
         
            -
                    done = 'copied'.bold.green
         
     | 
| 
       79 
     | 
    
         
            -
                 end
         
     | 
| 
       80 
55 
     | 
    
         
             
                end
         
     | 
| 
       81 
     | 
    
         
            -
                done
         
     | 
| 
       82 
     | 
    
         
            -
              end
         
     | 
| 
       83 
     | 
    
         
            -
              # rubocop:able MethodLength
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
              def ignores(f)
         
     | 
| 
       86 
     | 
    
         
            -
                @config['ignores'] = [] unless @config['ignores']
         
     | 
| 
       87 
     | 
    
         
            -
                return true if f == CONF_FILE
         
     | 
| 
       88 
     | 
    
         
            -
                return true if /#{@config['tpl_ext']}$/.match(f)
         
     | 
| 
       89 
     | 
    
         
            -
                return true if /#{@config['addon_ext']}$/.match(f)
         
     | 
| 
       90 
     | 
    
         
            -
                @config['ignores'].each do |ptn|
         
     | 
| 
       91 
     | 
    
         
            -
                  return true if /^#{ptn}$/.match(f)
         
     | 
| 
       92 
     | 
    
         
            -
                end
         
     | 
| 
       93 
     | 
    
         
            -
                false
         
     | 
| 
       94 
56 
     | 
    
         
             
              end
         
     | 
| 
       95 
57 
     | 
    
         | 
| 
       96 
     | 
    
         
            -
               
     | 
| 
      
 58 
     | 
    
         
            +
              # copy files for each included file
         
     | 
| 
      
 59 
     | 
    
         
            +
              def do_copy_stack!(stack_app)
         
     | 
| 
       97 
60 
     | 
    
         
             
                raise 'invalid app name "__self"' if stack_app == '__self'
         
     | 
| 
       98 
61 
     | 
    
         
             
                stack_app_dir = File.expand_path(@stack_apps_dir + '/' + stack_app)
         
     | 
| 
       99 
62 
     | 
    
         | 
| 
         @@ -104,39 +67,84 @@ module AppStack 
     | 
|
| 
       104 
67 
     | 
    
         
             
                                                  stack_conf['attrs'].is_a?(Hash)
         
     | 
| 
       105 
68 
     | 
    
         
             
                end
         
     | 
| 
       106 
69 
     | 
    
         | 
| 
      
 70 
     | 
    
         
            +
                # for each included files
         
     | 
| 
      
 71 
     | 
    
         
            +
                @config['file_patterns'].each do |pt|
         
     | 
| 
      
 72 
     | 
    
         
            +
                  Dir[stack_app_dir + '/' + pt].each do |f|
         
     | 
| 
      
 73 
     | 
    
         
            +
                    basename = f.sub(/^#{stack_app_dir}\//, '')
         
     | 
| 
      
 74 
     | 
    
         
            +
                    # trivial ignore the stack directory itself:
         
     | 
| 
      
 75 
     | 
    
         
            +
                    next if f == stack_app_dir
         
     | 
| 
      
 76 
     | 
    
         
            +
                    if (@files[basename].nil? or @files[basename] == stack_app)
         
     | 
| 
      
 77 
     | 
    
         
            +
                      @files[basename] = stack_app unless @files[basename] # register
         
     | 
| 
      
 78 
     | 
    
         
            +
                      done = copy_file!(f, File.expand_path(@app_root + '/' + basename))
         
     | 
| 
      
 79 
     | 
    
         
            +
                      carp "From #{stack_app.blue.bold} #{basename.bold}", done
         
     | 
| 
      
 80 
     | 
    
         
            +
                    else
         
     | 
| 
      
 81 
     | 
    
         
            +
                      carp "From #{stack_app.blue.bold} #{basename.bold}",
         
     | 
| 
      
 82 
     | 
    
         
            +
                           'skip, use '.white + @files[basename]
         
     | 
| 
      
 83 
     | 
    
         
            +
                    end
         
     | 
| 
      
 84 
     | 
    
         
            +
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
                end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
                # for templates and addons
         
     | 
| 
       107 
88 
     | 
    
         
             
                Find.find(stack_app_dir).each do |f|
         
     | 
| 
       108 
89 
     | 
    
         
             
                  basename = f.sub(/^#{stack_app_dir}\//, '')
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
                   
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
             
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                     
     | 
| 
       115 
     | 
    
         
            -
             
     | 
| 
       116 
     | 
    
         
            -
             
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
             
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
                  if basename.gsub!(/#{@config['tpl_ext']}$/, '')
         
     | 
| 
      
 92 
     | 
    
         
            +
                    target = File.expand_path(@app_root + '/' + basename)
         
     | 
| 
      
 93 
     | 
    
         
            +
                    # next unless File.exists?(target)
         
     | 
| 
      
 94 
     | 
    
         
            +
                    done = 'keep'.white
         
     | 
| 
      
 95 
     | 
    
         
            +
                    if newer?(f, target)
         
     | 
| 
      
 96 
     | 
    
         
            +
                      tilt = Tilt::ERBTemplate.new(f)
         
     | 
| 
      
 97 
     | 
    
         
            +
                      oh = File.open(target, 'wb')
         
     | 
| 
      
 98 
     | 
    
         
            +
                      oh.write tilt.render(OpenStruct.new(@attr.merge(@config['attrs'])))
         
     | 
| 
      
 99 
     | 
    
         
            +
                      oh.close
         
     | 
| 
      
 100 
     | 
    
         
            +
                      done = 'rendered'.bold.green
         
     | 
| 
      
 101 
     | 
    
         
            +
                    end
         
     | 
| 
      
 102 
     | 
    
         
            +
                    carp "From #{stack_app.blue.bold} render #{basename.bold}", done
         
     | 
| 
      
 103 
     | 
    
         
            +
                  elsif basename.gsub!(/#{@config['addon_ext']}$/, '')
         
     | 
| 
      
 104 
     | 
    
         
            +
                    target = File.expand_path(@app_root + '/' + basename)
         
     | 
| 
      
 105 
     | 
    
         
            +
                    if File.exists?(target)
         
     | 
| 
      
 106 
     | 
    
         
            +
                      done = do_addon!(f, target)
         
     | 
| 
      
 107 
     | 
    
         
            +
                    end
         
     | 
| 
      
 108 
     | 
    
         
            +
                    done ||= 'keep'.white
         
     | 
| 
      
 109 
     | 
    
         
            +
                    carp "From #{stack_app.blue.bold} addon #{basename.bold}", done
         
     | 
| 
       120 
110 
     | 
    
         
             
                  end
         
     | 
| 
       121 
     | 
    
         
            -
                  done = do_addon!(f, basename)
         
     | 
| 
       122 
     | 
    
         
            -
                  carp "From #{stack_app.blue.bold} addon #{basename.bold}", done if done
         
     | 
| 
       123 
111 
     | 
    
         
             
                end
         
     | 
| 
       124 
112 
     | 
    
         
             
              end
         
     | 
| 
       125 
113 
     | 
    
         | 
| 
       126 
     | 
    
         
            -
               
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
                 
     | 
| 
       129 
     | 
    
         
            -
             
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
             
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
             
     | 
| 
       134 
     | 
    
         
            -
             
     | 
| 
      
 114 
     | 
    
         
            +
              def newer?(f1, f2)
         
     | 
| 
      
 115 
     | 
    
         
            +
                return false unless File.exists?(f1)
         
     | 
| 
      
 116 
     | 
    
         
            +
                return true unless File.exists?(f2)
         
     | 
| 
      
 117 
     | 
    
         
            +
                File.mtime(f1) > File.mtime(f2)
         
     | 
| 
      
 118 
     | 
    
         
            +
              end
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
              def do_addon!(addon_file, target)
         
     | 
| 
      
 121 
     | 
    
         
            +
                add_lines = File.read(addon_file).split("\n")
         
     | 
| 
      
 122 
     | 
    
         
            +
                add_lines -= File.read(target).split("\n")
         
     | 
| 
      
 123 
     | 
    
         
            +
                afh = File.open(target, 'a')
         
     | 
| 
      
 124 
     | 
    
         
            +
                add_lines.each { |line| afh.puts line }
         
     | 
| 
      
 125 
     | 
    
         
            +
                afh.close
         
     | 
| 
      
 126 
     | 
    
         
            +
                lines = add_lines.size
         
     | 
| 
      
 127 
     | 
    
         
            +
                done = "add #{lines} lines".bold.green if lines > 0
         
     | 
| 
      
 128 
     | 
    
         
            +
              end
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
              def copy_file!(f, target)
         
     | 
| 
      
 131 
     | 
    
         
            +
                # directory?
         
     | 
| 
      
 132 
     | 
    
         
            +
                if File.directory?(f)
         
     | 
| 
      
 133 
     | 
    
         
            +
                  if File.directory?(target)
         
     | 
| 
      
 134 
     | 
    
         
            +
                    done = 'exists'.green
         
     | 
| 
       135 
135 
     | 
    
         
             
                  else
         
     | 
| 
       136 
     | 
    
         
            -
                     
     | 
| 
       137 
     | 
    
         
            -
                     
     | 
| 
      
 136 
     | 
    
         
            +
                    FileUtils.mkdir_p target
         
     | 
| 
      
 137 
     | 
    
         
            +
                    done = 'created'.bold.green
         
     | 
| 
      
 138 
     | 
    
         
            +
                  end
         
     | 
| 
      
 139 
     | 
    
         
            +
                else
         
     | 
| 
      
 140 
     | 
    
         
            +
                  if newer?(f, target)
         
     | 
| 
      
 141 
     | 
    
         
            +
                    FileUtils.copy f, target
         
     | 
| 
      
 142 
     | 
    
         
            +
                    done = 'copied'.bold.green
         
     | 
| 
      
 143 
     | 
    
         
            +
                  else
         
     | 
| 
      
 144 
     | 
    
         
            +
                    done = 'keep'.white
         
     | 
| 
       138 
145 
     | 
    
         
             
                  end
         
     | 
| 
       139 
146 
     | 
    
         
             
                end
         
     | 
| 
      
 147 
     | 
    
         
            +
                done
         
     | 
| 
       140 
148 
     | 
    
         
             
              end
         
     | 
| 
       141 
149 
     | 
    
         | 
| 
       142 
150 
     | 
    
         
             
              def carp(job, state = 'done'.green)
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,20 +1,18 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: app_stack
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0. 
     | 
| 
       5 
     | 
    
         
            -
              prerelease: 
         
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.0.7
         
     | 
| 
       6 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       8 
7 
     | 
    
         
             
            - Huang Wei
         
     | 
| 
       9 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       10 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date: 2013- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2013-09-03 00:00:00.000000000 Z
         
     | 
| 
       13 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
14 
     | 
    
         
             
              name: tilt
         
     | 
| 
       16 
15 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       17 
     | 
    
         
            -
                none: false
         
     | 
| 
       18 
16 
     | 
    
         
             
                requirements:
         
     | 
| 
       19 
17 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
       20 
18 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
         @@ -22,7 +20,6 @@ dependencies: 
     | 
|
| 
       22 
20 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       23 
21 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       24 
22 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       25 
     | 
    
         
            -
                none: false
         
     | 
| 
       26 
23 
     | 
    
         
             
                requirements:
         
     | 
| 
       27 
24 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
       28 
25 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
         @@ -30,7 +27,6 @@ dependencies: 
     | 
|
| 
       30 
27 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       31 
28 
     | 
    
         
             
              name: term-ansicolor
         
     | 
| 
       32 
29 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       33 
     | 
    
         
            -
                none: false
         
     | 
| 
       34 
30 
     | 
    
         
             
                requirements:
         
     | 
| 
       35 
31 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
       36 
32 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
         @@ -38,7 +34,6 @@ dependencies: 
     | 
|
| 
       38 
34 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       39 
35 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       40 
36 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       41 
     | 
    
         
            -
                none: false
         
     | 
| 
       42 
37 
     | 
    
         
             
                requirements:
         
     | 
| 
       43 
38 
     | 
    
         
             
                - - ! '>='
         
     | 
| 
       44 
39 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
         @@ -46,7 +41,6 @@ dependencies: 
     | 
|
| 
       46 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       47 
42 
     | 
    
         
             
              name: rspec
         
     | 
| 
       48 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       49 
     | 
    
         
            -
                none: false
         
     | 
| 
       50 
44 
     | 
    
         
             
                requirements:
         
     | 
| 
       51 
45 
     | 
    
         
             
                - - ~>
         
     | 
| 
       52 
46 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
         @@ -54,7 +48,6 @@ dependencies: 
     | 
|
| 
       54 
48 
     | 
    
         
             
              type: :development
         
     | 
| 
       55 
49 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       56 
50 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       57 
     | 
    
         
            -
                none: false
         
     | 
| 
       58 
51 
     | 
    
         
             
                requirements:
         
     | 
| 
       59 
52 
     | 
    
         
             
                - - ~>
         
     | 
| 
       60 
53 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
         @@ -62,7 +55,6 @@ dependencies: 
     | 
|
| 
       62 
55 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       63 
56 
     | 
    
         
             
              name: simplecov
         
     | 
| 
       64 
57 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       65 
     | 
    
         
            -
                none: false
         
     | 
| 
       66 
58 
     | 
    
         
             
                requirements:
         
     | 
| 
       67 
59 
     | 
    
         
             
                - - ~>
         
     | 
| 
       68 
60 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
         @@ -70,7 +62,6 @@ dependencies: 
     | 
|
| 
       70 
62 
     | 
    
         
             
              type: :development
         
     | 
| 
       71 
63 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       72 
64 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       73 
     | 
    
         
            -
                none: false
         
     | 
| 
       74 
65 
     | 
    
         
             
                requirements:
         
     | 
| 
       75 
66 
     | 
    
         
             
                - - ~>
         
     | 
| 
       76 
67 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
         @@ -86,11 +77,16 @@ files: 
     | 
|
| 
       86 
77 
     | 
    
         
             
            - examples/my_app/.app-stack.yml
         
     | 
| 
       87 
78 
     | 
    
         
             
            - examples/my_app/Gemfile
         
     | 
| 
       88 
79 
     | 
    
         
             
            - examples/my_app/README
         
     | 
| 
      
 80 
     | 
    
         
            +
            - examples/my_app/app/api_controller.rb
         
     | 
| 
      
 81 
     | 
    
         
            +
            - examples/my_app/app/config.rb
         
     | 
| 
      
 82 
     | 
    
         
            +
            - examples/my_app/app/controllers/hello_controller.rb
         
     | 
| 
       89 
83 
     | 
    
         
             
            - examples/my_app/config/app.config.rb
         
     | 
| 
       90 
84 
     | 
    
         
             
            - examples/my_app/config/configuration.yml
         
     | 
| 
      
 85 
     | 
    
         
            +
            - examples/my_app/fileabc.rb
         
     | 
| 
       91 
86 
     | 
    
         
             
            - examples/stack-apps/auth-app/Gemfile
         
     | 
| 
       92 
87 
     | 
    
         
             
            - examples/stack-apps/auth-app/Gemfile.line_addon
         
     | 
| 
       93 
88 
     | 
    
         
             
            - examples/stack-apps/auth-app/README
         
     | 
| 
      
 89 
     | 
    
         
            +
            - examples/stack-apps/auth-app/app/config.rb.erb
         
     | 
| 
       94 
90 
     | 
    
         
             
            - examples/stack-apps/auth-app/config/app.config.rb
         
     | 
| 
       95 
91 
     | 
    
         
             
            - examples/stack-apps/auth-app/config/configuration.yml
         
     | 
| 
       96 
92 
     | 
    
         
             
            - examples/stack-apps/auth-app/config/configuration.yml.template.erb
         
     | 
| 
         @@ -102,27 +98,26 @@ files: 
     | 
|
| 
       102 
98 
     | 
    
         
             
            homepage: https://github.com/7lime/app-stack-gem
         
     | 
| 
       103 
99 
     | 
    
         
             
            licenses:
         
     | 
| 
       104 
100 
     | 
    
         
             
            - MIT
         
     | 
| 
      
 101 
     | 
    
         
            +
            metadata: {}
         
     | 
| 
       105 
102 
     | 
    
         
             
            post_install_message: 
         
     | 
| 
       106 
103 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       107 
104 
     | 
    
         
             
            require_paths:
         
     | 
| 
       108 
105 
     | 
    
         
             
            - lib
         
     | 
| 
       109 
106 
     | 
    
         
             
            required_ruby_version: !ruby/object:Gem::Requirement
         
     | 
| 
       110 
     | 
    
         
            -
              none: false
         
     | 
| 
       111 
107 
     | 
    
         
             
              requirements:
         
     | 
| 
       112 
108 
     | 
    
         
             
              - - ! '>='
         
     | 
| 
       113 
109 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       114 
110 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       115 
111 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       116 
     | 
    
         
            -
              none: false
         
     | 
| 
       117 
112 
     | 
    
         
             
              requirements:
         
     | 
| 
       118 
113 
     | 
    
         
             
              - - ! '>='
         
     | 
| 
       119 
114 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       120 
115 
     | 
    
         
             
                  version: '0'
         
     | 
| 
       121 
116 
     | 
    
         
             
            requirements: []
         
     | 
| 
       122 
117 
     | 
    
         
             
            rubyforge_project: 
         
     | 
| 
       123 
     | 
    
         
            -
            rubygems_version:  
     | 
| 
      
 118 
     | 
    
         
            +
            rubygems_version: 2.0.6
         
     | 
| 
       124 
119 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       125 
     | 
    
         
            -
            specification_version:  
     | 
| 
      
 120 
     | 
    
         
            +
            specification_version: 4
         
     | 
| 
       126 
121 
     | 
    
         
             
            summary: Use as a rake task, define a stack of modules and app-stack will merge files
         
     | 
| 
       127 
122 
     | 
    
         
             
              from those stack-apps to the local application directory.
         
     | 
| 
       128 
123 
     | 
    
         
             
            test_files: []
         
     |