mrhyde-tools 0.0.1 → 0.1.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/.gemtest +0 -0
 - data/Manifest.txt +15 -0
 - data/README.md +100 -5
 - data/Rakefile +3 -1
 - data/bin/mrh +5 -0
 - data/bin/mrhyde +5 -0
 - data/lib/mrhyde.rb +20 -2
 - data/lib/mrhyde/builder.rb +123 -0
 - data/lib/mrhyde/cli/main.rb +149 -0
 - data/lib/mrhyde/cli/opts.rb +33 -0
 - data/lib/mrhyde/config.rb +60 -0
 - data/lib/mrhyde/version.rb +2 -2
 - data/lib/mrhyde/wizard.rb +88 -0
 - data/test/helper.rb +22 -0
 - data/test/scripts/starter.rb +36 -0
 - data/test/scripts/starterii.rb +39 -0
 - data/test/test_builder.rb +40 -0
 - data/test/test_config.rb +31 -0
 - data/test/test_install_theme.rb +25 -0
 - data/test/test_url.rb +40 -0
 - data/test/test_wizard.rb +50 -0
 - metadata +58 -6
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: aae57c42c231ddd4cbf85848a18d5f43c98ece4f
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: b90daa336b9b14f682fbbaed03b5199d14ac8ade
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 80d28406f03ea41d492fb025a98eb1490a8fe665f4d0c3e88f2adbf99880b55074f1e2eb6770b308b798153d9d89cdf260594eb1424440581944963de05363b6
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: b170832289088da0ad4af8176ce6c589a645fbefc27e40e536536b7c2cb09ea245e40c73039f1d9d62b03d9b6dfd02cdcd610215df373f09b9a7e2f502d5b130
         
     | 
    
        data/.gemtest
    ADDED
    
    | 
         
            File without changes
         
     | 
    
        data/Manifest.txt
    CHANGED
    
    | 
         @@ -2,6 +2,21 @@ HISTORY.md 
     | 
|
| 
       2 
2 
     | 
    
         
             
            Manifest.txt
         
     | 
| 
       3 
3 
     | 
    
         
             
            README.md
         
     | 
| 
       4 
4 
     | 
    
         
             
            Rakefile
         
     | 
| 
      
 5 
     | 
    
         
            +
            bin/mrh
         
     | 
| 
      
 6 
     | 
    
         
            +
            bin/mrhyde
         
     | 
| 
       5 
7 
     | 
    
         
             
            lib/mrhyde.rb
         
     | 
| 
      
 8 
     | 
    
         
            +
            lib/mrhyde/builder.rb
         
     | 
| 
      
 9 
     | 
    
         
            +
            lib/mrhyde/cli/main.rb
         
     | 
| 
      
 10 
     | 
    
         
            +
            lib/mrhyde/cli/opts.rb
         
     | 
| 
      
 11 
     | 
    
         
            +
            lib/mrhyde/config.rb
         
     | 
| 
       6 
12 
     | 
    
         
             
            lib/mrhyde/tools.rb
         
     | 
| 
       7 
13 
     | 
    
         
             
            lib/mrhyde/version.rb
         
     | 
| 
      
 14 
     | 
    
         
            +
            lib/mrhyde/wizard.rb
         
     | 
| 
      
 15 
     | 
    
         
            +
            test/helper.rb
         
     | 
| 
      
 16 
     | 
    
         
            +
            test/scripts/starter.rb
         
     | 
| 
      
 17 
     | 
    
         
            +
            test/scripts/starterii.rb
         
     | 
| 
      
 18 
     | 
    
         
            +
            test/test_builder.rb
         
     | 
| 
      
 19 
     | 
    
         
            +
            test/test_config.rb
         
     | 
| 
      
 20 
     | 
    
         
            +
            test/test_install_theme.rb
         
     | 
| 
      
 21 
     | 
    
         
            +
            test/test_url.rb
         
     | 
| 
      
 22 
     | 
    
         
            +
            test/test_wizard.rb
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -1,18 +1,113 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # mrhyde
         
     | 
| 
      
 1 
     | 
    
         
            +
            # mrh/mrhyde - static site quick starter script wizard
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
      
 3 
     | 
    
         
            +
            jekyll command line tool
         
     | 
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            * home  :: [github.com/mrhydescripts/mrhyde](https://github.com/mrhydescripts/mrhyde)
         
     | 
| 
       6 
6 
     | 
    
         
             
            * bugs  :: [github.com/mrhydescripts/mrhyde/issues](https://github.com/mrhydescripts/mrhyde/issues)
         
     | 
| 
       7 
     | 
    
         
            -
            * gem   :: [rubygems.org/gems/mrhyde](https://rubygems.org/gems/mrhyde)
         
     | 
| 
       8 
     | 
    
         
            -
            * rdoc  :: [rubydoc.info/gems/mrhyde](http://rubydoc.info/gems/mrhyde)
         
     | 
| 
      
 7 
     | 
    
         
            +
            * gem   :: [rubygems.org/gems/mrhyde-tools](https://rubygems.org/gems/mrhyde-tools)
         
     | 
| 
      
 8 
     | 
    
         
            +
            * rdoc  :: [rubydoc.info/gems/mrhyde-tools](http://rubydoc.info/gems/mrhyde-tools)
         
     | 
| 
       9 
9 
     | 
    
         
             
            * forum :: [wwwmake](http://groups.google.com/group/wwwmake)
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         | 
| 
       12 
12 
     | 
    
         
             
            ## Usage
         
     | 
| 
       13 
13 
     | 
    
         | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
      
 14 
     | 
    
         
            +
            The mrhyde-tools gem includes a command line tool that lets you
         
     | 
| 
      
 15 
     | 
    
         
            +
            run static site quick starter scripts. Try:
         
     | 
| 
       15 
16 
     | 
    
         | 
| 
      
 17 
     | 
    
         
            +
            ```
         
     | 
| 
      
 18 
     | 
    
         
            +
            $ mrhyde --help      # or
         
     | 
| 
      
 19 
     | 
    
         
            +
            $ mrh -h
         
     | 
| 
      
 20 
     | 
    
         
            +
            ```
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            Resulting in:
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            ```
         
     | 
| 
      
 25 
     | 
    
         
            +
            NAME
         
     | 
| 
      
 26 
     | 
    
         
            +
                mrh/mrhyde - jekyll command line tool .:. the static site quick starter script wizard
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            SYNOPSIS
         
     | 
| 
      
 29 
     | 
    
         
            +
                mrhyde [global options] command [command options] [arguments...]
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            VERSION
         
     | 
| 
      
 32 
     | 
    
         
            +
                0.1.0
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            GLOBAL OPTIONS
         
     | 
| 
      
 35 
     | 
    
         
            +
                --help            - Show this message
         
     | 
| 
      
 36 
     | 
    
         
            +
                --test, --dry_run - (Debug) Dry run; run script in simulation for testing
         
     | 
| 
      
 37 
     | 
    
         
            +
                --verbose         - (Debug) Show debug messages
         
     | 
| 
      
 38 
     | 
    
         
            +
                --version         - Display the program version
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            COMMANDS
         
     | 
| 
      
 41 
     | 
    
         
            +
                new, n - Run static site quick starter script
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
                help   - Shows a list of commands or help for one command
         
     | 
| 
      
 44 
     | 
    
         
            +
                test   - (Debug) Test command suite
         
     | 
| 
      
 45 
     | 
    
         
            +
            ```
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            ### Commands
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            [New Wizard](#new-wizard-command---new-n)
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            #### New Wizard Command - `new`, `n`
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            To run a static site quick starter wizard script
         
     | 
| 
      
 55 
     | 
    
         
            +
            to download and install (unzip/unpack) a theme archive and configure
         
     | 
| 
      
 56 
     | 
    
         
            +
            a static site ready-to-use. Try:
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
            ```
         
     | 
| 
      
 60 
     | 
    
         
            +
            $ mrhyde new starter    # or
         
     | 
| 
      
 61 
     | 
    
         
            +
            $ mrhyde n starter      # or
         
     | 
| 
      
 62 
     | 
    
         
            +
            $ mrh n starter
         
     | 
| 
      
 63 
     | 
    
         
            +
            ```
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
            This will download the `starter.rb` wizard script
         
     | 
| 
      
 66 
     | 
    
         
            +
            from the [Mr. Hyde's Scripts](https://github.com/mrhydescripts/scripts) repo
         
     | 
| 
      
 67 
     | 
    
         
            +
            and run through all steps e.g.:
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            ```
         
     | 
| 
      
 70 
     | 
    
         
            +
            Welcome, before setting up your site Mr. Hyde will ask you some questions.
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
            Q: What's your site's title? [Your Site Title]:  Another Beautiful Static Site
         
     | 
| 
      
 73 
     | 
    
         
            +
            Q: What's your name? [Henry Jekyll]: Edward Hyde
         
     | 
| 
      
 74 
     | 
    
         
            +
            Q: Select your theme:
         
     | 
| 
      
 75 
     | 
    
         
            +
                 1 - Starter
         
     | 
| 
      
 76 
     | 
    
         
            +
                 2 - Bootstrap
         
     | 
| 
      
 77 
     | 
    
         
            +
                 3 - Minimal
         
     | 
| 
      
 78 
     | 
    
         
            +
               Your choice (1-3)? [1]: 2 
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            Thanks! Ready-to-go. Stand back.
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
              Downloading Dr. Jekyll's Bootstrap Theme...
         
     | 
| 
      
 83 
     | 
    
         
            +
              Setting up Dr. Jeykll's Bootstrap Theme..
         
     | 
| 
      
 84 
     | 
    
         
            +
              ...
         
     | 
| 
      
 85 
     | 
    
         
            +
              Updating settings in _config.yml...
         
     | 
| 
      
 86 
     | 
    
         
            +
                title: "Another Beautiful Static Site"
         
     | 
| 
      
 87 
     | 
    
         
            +
                author.name: "Edward Hyde"
         
     | 
| 
      
 88 
     | 
    
         
            +
              ...
         
     | 
| 
      
 89 
     | 
    
         
            +
            Done.
         
     | 
| 
      
 90 
     | 
    
         
            +
            ```
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
            That's it. Now use:
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
            ```
         
     | 
| 
      
 95 
     | 
    
         
            +
            $ cd starter
         
     | 
| 
      
 96 
     | 
    
         
            +
            $ jekyll serve
         
     | 
| 
      
 97 
     | 
    
         
            +
            ```
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
            And open up your new static site in your browser.
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
            **More Quick Starter Wizard Scripts**
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
            See the [Mr. Hyde's Scripts](https://github.com/mrhydescripts/scripts) library.
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
            **More Themes**
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            See the [Dr. Jekyll's Themes](https://drjekyllthemes.github.io) directory.
         
     | 
| 
       16 
111 
     | 
    
         | 
| 
       17 
112 
     | 
    
         | 
| 
       18 
113 
     | 
    
         | 
    
        data/Rakefile
    CHANGED
    
    | 
         @@ -5,7 +5,7 @@ Hoe.spec 'mrhyde-tools' do 
     | 
|
| 
       5 
5 
     | 
    
         | 
| 
       6 
6 
     | 
    
         
             
              self.version = MrHyde::VERSION
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
     | 
    
         
            -
              self.summary = "mrhyde - static site quick starter  
     | 
| 
      
 8 
     | 
    
         
            +
              self.summary = "mrhyde - jekyll command line tool .:. static site quick starter script wizard"
         
     | 
| 
       9 
9 
     | 
    
         
             
              self.description = summary
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
              self.urls    = ['https://github.com/mrhydescripts/mrhyde']
         
     | 
| 
         @@ -18,6 +18,8 @@ Hoe.spec 'mrhyde-tools' do 
     | 
|
| 
       18 
18 
     | 
    
         
             
              self.history_file = 'HISTORY.md'
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
20 
     | 
    
         
             
              self.extra_deps = [
         
     | 
| 
      
 21 
     | 
    
         
            +
                ['logutils'],
         
     | 
| 
      
 22 
     | 
    
         
            +
                ['textutils'],
         
     | 
| 
       21 
23 
     | 
    
         
             
                ['drjekyll'],
         
     | 
| 
       22 
24 
     | 
    
         
             
              ]
         
     | 
| 
       23 
25 
     | 
    
         | 
    
        data/bin/mrh
    ADDED
    
    
    
        data/bin/mrhyde
    ADDED
    
    
    
        data/lib/mrhyde.rb
    CHANGED
    
    | 
         @@ -1,12 +1,30 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # encoding: utf-8
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            ## stdlibs
         
     | 
| 
       3 
4 
     | 
    
         
             
            require 'pp'
         
     | 
| 
      
 5 
     | 
    
         
            +
            require 'yaml'
         
     | 
| 
      
 6 
     | 
    
         
            +
            require 'uri'
         
     | 
| 
       4 
7 
     | 
    
         | 
| 
       5 
8 
     | 
    
         | 
| 
      
 9 
     | 
    
         
            +
            ## 3rd party libs
         
     | 
| 
      
 10 
     | 
    
         
            +
            require 'textutils'      ## used for File.read_utf8
         
     | 
| 
      
 11 
     | 
    
         
            +
            require 'drjekyll'     
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
       6 
13 
     | 
    
         
             
            ## our own code
         
     | 
| 
       7 
14 
     | 
    
         
             
            require 'mrhyde/version'    # note: let version always go first
         
     | 
| 
      
 15 
     | 
    
         
            +
            require 'mrhyde/wizard'
         
     | 
| 
      
 16 
     | 
    
         
            +
            require 'mrhyde/builder'
         
     | 
| 
      
 17 
     | 
    
         
            +
            require 'mrhyde/config'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            require 'mrhyde/cli/opts'
         
     | 
| 
      
 20 
     | 
    
         
            +
            require 'mrhyde/cli/main'
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
       8 
22 
     | 
    
         | 
| 
      
 23 
     | 
    
         
            +
            module MrHyde
         
     | 
| 
      
 24 
     | 
    
         
            +
              def self.main
         
     | 
| 
      
 25 
     | 
    
         
            +
                exit Tool.new.run( ARGV )
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
            end # module MrHyde
         
     | 
| 
       9 
28 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
            pp MrHyde.banner
         
     | 
| 
       11 
     | 
    
         
            -
            pp MrHyde.root
         
     | 
| 
       12 
29 
     | 
    
         | 
| 
      
 30 
     | 
    
         
            +
            MrHyde.main if __FILE__ == $0
         
     | 
| 
         @@ -0,0 +1,123 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module MrHyde
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class Builder
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def self.load_file( path, opts={} )
         
     | 
| 
      
 8 
     | 
    
         
            +
                code = File.read_utf8( path )
         
     | 
| 
      
 9 
     | 
    
         
            +
                self.load( code, opts )
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              def self.load( code, opts={} )
         
     | 
| 
      
 13 
     | 
    
         
            +
                builder = Builder.new( opts )
         
     | 
| 
      
 14 
     | 
    
         
            +
                builder.instance_eval( code )
         
     | 
| 
      
 15 
     | 
    
         
            +
                builder
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
              include Wizard   ## mixin helpers for say, ask, yes?, no?, select, etc.
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
              def initialize( opts={} )
         
     | 
| 
      
 22 
     | 
    
         
            +
                puts "starting new MrHyde script (sitefile) #{opts.inspect}; lets go"
         
     | 
| 
      
 23 
     | 
    
         
            +
                
         
     | 
| 
      
 24 
     | 
    
         
            +
                @test       = opts[:dry_run] || opts[:test] || false
         
     | 
| 
      
 25 
     | 
    
         
            +
                @output_dir = opts[:o] || '.'
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              ## "global" builder options
         
     | 
| 
      
 29 
     | 
    
         
            +
              def test?()      @test;       end   ## dry_run option (defaults to false)
         
     | 
| 
      
 30 
     | 
    
         
            +
              def output_dir() @output_dir; end   ## ouptput (root) dir (defaults to . e.g. working folder)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              def install_theme( name, opts= {} )
         
     | 
| 
      
 34 
     | 
    
         
            +
                puts "  handle install_theme #{name}, #{opts.inspect}"
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                ## note for now assume name is key
         
     | 
| 
      
 37 
     | 
    
         
            +
                ##   e.g. always downcase (e.g. Starter => starter)
         
     | 
| 
      
 38 
     | 
    
         
            +
                @theme_key = key = name.downcase
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
                ## themes_dir = "#{DrJekyll.root}/test/data"
         
     | 
| 
      
 41 
     | 
    
         
            +
                ## catalog = Catalog.new( "#{themes_dir}/themes.yml" )
         
     | 
| 
      
 42 
     | 
    
         
            +
                url = "https://github.com/drjekyllthemes/themes/raw/master/o/themes.yml"
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                if test?
         
     | 
| 
      
 45 
     | 
    
         
            +
                  # do nothing; dry run
         
     | 
| 
      
 46 
     | 
    
         
            +
                else
         
     | 
| 
      
 47 
     | 
    
         
            +
                  catalog = DrJekyll::Catalog.from_url( url )
         
     | 
| 
      
 48 
     | 
    
         
            +
                  theme = catalog.find( key )
         
     | 
| 
      
 49 
     | 
    
         
            +
                  if theme
         
     | 
| 
      
 50 
     | 
    
         
            +
                    pak = DrJekyll::Package.new( key, theme )
         
     | 
| 
      
 51 
     | 
    
         
            +
                    pak.download
         
     | 
| 
      
 52 
     | 
    
         
            +
                    pak.unzip( "#{@output_dir}/#{key}" )
         
     | 
| 
      
 53 
     | 
    
         
            +
                  else
         
     | 
| 
      
 54 
     | 
    
         
            +
                    ## todo: issue warning - why, why not??
         
     | 
| 
      
 55 
     | 
    
         
            +
                    fail "*** theme '#{key}' not found; sorry"
         
     | 
| 
      
 56 
     | 
    
         
            +
                  end
         
     | 
| 
      
 57 
     | 
    
         
            +
                end
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              def config( opts={} )
         
     | 
| 
      
 62 
     | 
    
         
            +
                puts "  handle config block"
         
     | 
| 
      
 63 
     | 
    
         
            +
                c = OpenConfig.new
         
     | 
| 
      
 64 
     | 
    
         
            +
                yield( c )
         
     | 
| 
      
 65 
     | 
    
         
            +
                ## pp c
         
     | 
| 
      
 66 
     | 
    
         
            +
                h = c.to_h
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
                ##
         
     | 
| 
      
 69 
     | 
    
         
            +
                # check for site.url  if present also
         
     | 
| 
      
 70 
     | 
    
         
            +
                #  add site.baseurl|path
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
                site_url = h['url']
         
     | 
| 
      
 73 
     | 
    
         
            +
             
     | 
| 
      
 74 
     | 
    
         
            +
                if site_url.nil? || site_url.empty?        ## special case site_url is empty string ""
         
     | 
| 
      
 75 
     | 
    
         
            +
                  ## note: always add site url for now
         
     | 
| 
      
 76 
     | 
    
         
            +
                  ## todo/fix: warn if we overwrite "empty" site.url - why? why not?
         
     | 
| 
      
 77 
     | 
    
         
            +
                  h['url']     = 'http://example.com'   # note: no trailing slash (/) e.g. example.com/
         
     | 
| 
      
 78 
     | 
    
         
            +
                  h['baseurl'] = ''                     # note: no trailing slash (/) e.g. /
         
     | 
| 
      
 79 
     | 
    
         
            +
                  h['path']    = ''                     # (better) alias for baseurl
         
     | 
| 
      
 80 
     | 
    
         
            +
                else
         
     | 
| 
      
 81 
     | 
    
         
            +
                  ## site_baseurl = h['baseurl']
         
     | 
| 
      
 82 
     | 
    
         
            +
                  ## site_path    = h['path']
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                  ### calculate path/baseurl
         
     | 
| 
      
 85 
     | 
    
         
            +
                  url = URI.parse( site_url )
         
     | 
| 
      
 86 
     | 
    
         
            +
                  path = url.path.sub(/\/$/, '' )  ## note: cut off trailing slash if present e.g. '/' becomes ''
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
                  h['baseurl'] = path
         
     | 
| 
      
 89 
     | 
    
         
            +
                  h['path']    = path
         
     | 
| 
      
 90 
     | 
    
         
            +
                  ## todo/fix: warn if we overwrite baseurl/path we new values - why? why not?
         
     | 
| 
      
 91 
     | 
    
         
            +
                end
         
     | 
| 
      
 92 
     | 
    
         
            +
             
     | 
| 
      
 93 
     | 
    
         
            +
                pp h
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
                if test?
         
     | 
| 
      
 97 
     | 
    
         
            +
                  ## do nothing; dry run
         
     | 
| 
      
 98 
     | 
    
         
            +
                else
         
     | 
| 
      
 99 
     | 
    
         
            +
                  org = YAML.load_file( "#{@output_dir}/#{@theme_key}/_config.yml" )
         
     | 
| 
      
 100 
     | 
    
         
            +
                  pp org
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                  ## for now always add props at the end
         
     | 
| 
      
 103 
     | 
    
         
            +
                  ##   improve later (patch using regex etc. - why? why not?)
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
                  new_settings = YAML.dump( h )
         
     | 
| 
      
 106 
     | 
    
         
            +
                  ## note: cut off leading --- if present
         
     | 
| 
      
 107 
     | 
    
         
            +
                  new_settings = new_settings.sub( /^-{3}\s*/, '')
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                  File.open( "#{@output_dir}/#{@theme_key}/_config.yml", "a" ) do |f|
         
     | 
| 
      
 110 
     | 
    
         
            +
                    f.puts
         
     | 
| 
      
 111 
     | 
    
         
            +
                    f.puts "######################################"
         
     | 
| 
      
 112 
     | 
    
         
            +
                    f.puts "### Mr Hyde's Settings"
         
     | 
| 
      
 113 
     | 
    
         
            +
                    f.puts
         
     | 
| 
      
 114 
     | 
    
         
            +
                    f.puts new_settings
         
     | 
| 
      
 115 
     | 
    
         
            +
                  end
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
              end # method config
         
     | 
| 
      
 119 
     | 
    
         
            +
             
     | 
| 
      
 120 
     | 
    
         
            +
            end # class Builder
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
            end # module MrHyde
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,149 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ### NOTE: wrap gli config into a class
         
     | 
| 
      
 4 
     | 
    
         
            +
            ##  see github.com/davetron5000/gli/issues/153
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            module MrHyde
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            class Tool
         
     | 
| 
      
 9 
     | 
    
         
            +
              def initialize
         
     | 
| 
      
 10 
     | 
    
         
            +
                LogUtils::Logger.root.level = :info   # set logging level to info 
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def run( args )
         
     | 
| 
      
 14 
     | 
    
         
            +
                puts MrHyde.banner
         
     | 
| 
      
 15 
     | 
    
         
            +
                Toolii.run( args )
         
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
            end
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            ## NOTE: gli added function are class methods (thus, wrap class Toolii in Tool for now)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            class Toolii
         
     | 
| 
      
 22 
     | 
    
         
            +
              extend GLI::App
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              def self.logger=(value) @@logger=value; end
         
     | 
| 
      
 25 
     | 
    
         
            +
              def self.logger()       @@logger; end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              ## todo: find a better name e.g. change to settings? config? safe_opts? why? why not?
         
     | 
| 
      
 28 
     | 
    
         
            +
              def self.opts=(value)  @@opts = value; end
         
     | 
| 
      
 29 
     | 
    
         
            +
              def self.opts()        @@opts; end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            logger = LogUtils::Logger.root
         
     | 
| 
      
 33 
     | 
    
         
            +
            opts   = Opts.new 
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            program_desc 'jekyll command line tool .:. the static site quick starter script wizard'
         
     | 
| 
      
 37 
     | 
    
         
            +
            version VERSION
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            ## desc 'Use only local (offline) cached data; no (online) remote network access'
         
     | 
| 
      
 41 
     | 
    
         
            +
            ## switch [:l, :local], negatable: false
         
     | 
| 
      
 42 
     | 
    
         
            +
             
     | 
| 
      
 43 
     | 
    
         
            +
            desc '(Debug) Show debug messages'
         
     | 
| 
      
 44 
     | 
    
         
            +
            switch [:verbose], negatable: false    ## todo: use -w for short form? check ruby interpreter if in use too?
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            desc '(Debug) Dry run; run script in simulation for testing'
         
     | 
| 
      
 47 
     | 
    
         
            +
            switch [:test, :dry_run], negatable: false
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            def self.fetch_script( name )
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              ## first try local version in working folder
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
              text = ''
         
     | 
| 
      
 55 
     | 
    
         
            +
              local_script = "./#{name}.rb"
         
     | 
| 
      
 56 
     | 
    
         
            +
              if File.exist?( local_script )
         
     | 
| 
      
 57 
     | 
    
         
            +
                text = File.read_utf8( local_script )
         
     | 
| 
      
 58 
     | 
    
         
            +
              else  ## fetch remote script
         
     | 
| 
      
 59 
     | 
    
         
            +
                url = "https://github.com/mrhydescripts/scripts/raw/master/#{name}.rb"
         
     | 
| 
      
 60 
     | 
    
         
            +
                ## assume utf8 text encoding for now
         
     | 
| 
      
 61 
     | 
    
         
            +
                worker = Fetcher::Worker.new
         
     | 
| 
      
 62 
     | 
    
         
            +
                text = worker.read_utf8!( url )
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
              text
         
     | 
| 
      
 66 
     | 
    
         
            +
            end
         
     | 
| 
      
 67 
     | 
    
         
            +
             
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
            desc "Run static site quick starter script"
         
     | 
| 
      
 70 
     | 
    
         
            +
            arg_name 'NAME'   # required theme name
         
     | 
| 
      
 71 
     | 
    
         
            +
            command [:new,:n] do |c|
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
              c.action do |g,o,args|
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
                name = args[0] || 'starter'
         
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
                script = fetch_script( name )
         
     | 
| 
      
 78 
     | 
    
         
            +
                if opts.test?
         
     | 
| 
      
 79 
     | 
    
         
            +
                  puts "dry (test) run:"
         
     | 
| 
      
 80 
     | 
    
         
            +
                  Builder.load( script, test: true )
         
     | 
| 
      
 81 
     | 
    
         
            +
                else
         
     | 
| 
      
 82 
     | 
    
         
            +
                  Builder.load( script )
         
     | 
| 
      
 83 
     | 
    
         
            +
                end
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                puts 'Done.'
         
     | 
| 
      
 86 
     | 
    
         
            +
              end # action
         
     | 
| 
      
 87 
     | 
    
         
            +
            end  # command setup
         
     | 
| 
      
 88 
     | 
    
         
            +
             
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            desc '(Debug) Test command suite'
         
     | 
| 
      
 92 
     | 
    
         
            +
            command :test do |c|
         
     | 
| 
      
 93 
     | 
    
         
            +
              c.action do |g,o,args|
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                puts "hello from test command"
         
     | 
| 
      
 96 
     | 
    
         
            +
                puts "args (#{args.class.name}):"
         
     | 
| 
      
 97 
     | 
    
         
            +
                pp args
         
     | 
| 
      
 98 
     | 
    
         
            +
                puts "o (#{o.class.name}):"
         
     | 
| 
      
 99 
     | 
    
         
            +
                pp o
         
     | 
| 
      
 100 
     | 
    
         
            +
                puts "g (#{g.class.name}):"
         
     | 
| 
      
 101 
     | 
    
         
            +
                pp g
         
     | 
| 
      
 102 
     | 
    
         
            +
                
         
     | 
| 
      
 103 
     | 
    
         
            +
                LogUtils::Logger.root.debug 'test debug msg'
         
     | 
| 
      
 104 
     | 
    
         
            +
                LogUtils::Logger.root.info 'test info msg'
         
     | 
| 
      
 105 
     | 
    
         
            +
                LogUtils::Logger.root.warn 'test warn msg'
         
     | 
| 
      
 106 
     | 
    
         
            +
                
         
     | 
| 
      
 107 
     | 
    
         
            +
                puts 'Done.'
         
     | 
| 
      
 108 
     | 
    
         
            +
              end
         
     | 
| 
      
 109 
     | 
    
         
            +
            end
         
     | 
| 
      
 110 
     | 
    
         
            +
             
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
             
     | 
| 
      
 113 
     | 
    
         
            +
            pre do |g,c,o,args|
         
     | 
| 
      
 114 
     | 
    
         
            +
              opts.merge_gli_options!( g )
         
     | 
| 
      
 115 
     | 
    
         
            +
              opts.merge_gli_options!( o )
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
              puts MrHyde.banner
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
              if opts.verbose?
         
     | 
| 
      
 120 
     | 
    
         
            +
                LogUtils::Logger.root.level = :debug
         
     | 
| 
      
 121 
     | 
    
         
            +
              end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
              logger.debug "Executing #{c.name}"   
         
     | 
| 
      
 124 
     | 
    
         
            +
              true
         
     | 
| 
      
 125 
     | 
    
         
            +
            end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
      
 127 
     | 
    
         
            +
            post do |global,c,o,args|
         
     | 
| 
      
 128 
     | 
    
         
            +
              logger.debug "Executed #{c.name}"
         
     | 
| 
      
 129 
     | 
    
         
            +
              true
         
     | 
| 
      
 130 
     | 
    
         
            +
            end
         
     | 
| 
      
 131 
     | 
    
         
            +
             
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
            on_error do |e|
         
     | 
| 
      
 134 
     | 
    
         
            +
              puts
         
     | 
| 
      
 135 
     | 
    
         
            +
              puts "*** error: #{e.message}"
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
              if opts.verbose?
         
     | 
| 
      
 138 
     | 
    
         
            +
                puts e.backtrace
         
     | 
| 
      
 139 
     | 
    
         
            +
              end
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
              false # skip default error handling
         
     | 
| 
      
 142 
     | 
    
         
            +
            end
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
             
     | 
| 
      
 145 
     | 
    
         
            +
            ### exit run(ARGV)  ## note: use Toolii.run( ARGV ) outside of class
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
      
 147 
     | 
    
         
            +
            end  # class Toolii
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            end # module MrHyde
         
     | 
| 
         @@ -0,0 +1,33 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module MrHyde
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            class Opts
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              def merge_gli_options!( options = {} )
         
     | 
| 
      
 8 
     | 
    
         
            +
                @test    = true     if options[:test]    == true
         
     | 
| 
      
 9 
     | 
    
         
            +
                @verbose = true     if options[:verbose] == true
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def verbose=(boolean)   # add: alias for debug ??
         
     | 
| 
      
 14 
     | 
    
         
            +
                @verbose = boolean
         
     | 
| 
      
 15 
     | 
    
         
            +
              end
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
              def verbose?
         
     | 
| 
      
 18 
     | 
    
         
            +
                return false if @verbose.nil?   # default verbose/debug flag is false
         
     | 
| 
      
 19 
     | 
    
         
            +
                @verbose == true
         
     | 
| 
      
 20 
     | 
    
         
            +
              end
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              def test=(boolean)
         
     | 
| 
      
 23 
     | 
    
         
            +
                @test = boolean
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def test?
         
     | 
| 
      
 27 
     | 
    
         
            +
                return false if @test.nil?   # default test/dry-run flag is false
         
     | 
| 
      
 28 
     | 
    
         
            +
                @test == true
         
     | 
| 
      
 29 
     | 
    
         
            +
              end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            end # class Opts
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            end # module MrHyde
         
     | 
| 
         @@ -0,0 +1,60 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module MrHyde
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            ##
         
     | 
| 
      
 6 
     | 
    
         
            +
            # used for config block
         
     | 
| 
      
 7 
     | 
    
         
            +
            #   lets you access props (even nested) that don't yet exist
         
     | 
| 
      
 8 
     | 
    
         
            +
            #    and all props get stored in a hash
         
     | 
| 
      
 9 
     | 
    
         
            +
            #
         
     | 
| 
      
 10 
     | 
    
         
            +
            #  e.g
         
     | 
| 
      
 11 
     | 
    
         
            +
            #  c = OpenConfig.new
         
     | 
| 
      
 12 
     | 
    
         
            +
            #  c.title        = 'title'
         
     | 
| 
      
 13 
     | 
    
         
            +
            #  c.author.name  = 'name'
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            #  c.mrhyde.last_updated = Time.now
         
     | 
| 
      
 16 
     | 
    
         
            +
            #  c.mrhyde.title        = 'title'
         
     | 
| 
      
 17 
     | 
    
         
            +
            #  c.mrhyde.name         = 'name'
         
     | 
| 
      
 18 
     | 
    
         
            +
            #  c.mrhyde.theme        = 'theme'
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            class OpenConfig
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
              def initialize
         
     | 
| 
      
 23 
     | 
    
         
            +
                @h = {}
         
     | 
| 
      
 24 
     | 
    
         
            +
              end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
              def to_h
         
     | 
| 
      
 27 
     | 
    
         
            +
                h = {}
         
     | 
| 
      
 28 
     | 
    
         
            +
                @h.each do |k,v|
         
     | 
| 
      
 29 
     | 
    
         
            +
                  if v.is_a? OpenConfig
         
     | 
| 
      
 30 
     | 
    
         
            +
                    h[ k ] = v.to_h
         
     | 
| 
      
 31 
     | 
    
         
            +
                  else
         
     | 
| 
      
 32 
     | 
    
         
            +
                    h[ k ] = v  ## just pass along as is
         
     | 
| 
      
 33 
     | 
    
         
            +
                  end
         
     | 
| 
      
 34 
     | 
    
         
            +
                end
         
     | 
| 
      
 35 
     | 
    
         
            +
                h
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              def method_missing( m, *args, &block)
         
     | 
| 
      
 39 
     | 
    
         
            +
                if m.to_s =~ /^(.*)=$/   ## setter
         
     | 
| 
      
 40 
     | 
    
         
            +
                  puts "config lookup (setter) >#{m}< #{m.class.name}, #{args.inspect}"
         
     | 
| 
      
 41 
     | 
    
         
            +
                  key = m[0..-2].to_s  ## cut off trailing =
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @h[ key ] = args[0].to_s    # note: assume first arg is value for setter
         
     | 
| 
      
 43 
     | 
    
         
            +
                                            # note: for now all values are strings (always use to_s)
         
     | 
| 
      
 44 
     | 
    
         
            +
                else       ## assume getter
         
     | 
| 
      
 45 
     | 
    
         
            +
                  ## fix: add check for args??  must be 0 for getters??
         
     | 
| 
      
 46 
     | 
    
         
            +
                  ##       use else super to delegate non-getters??
         
     | 
| 
      
 47 
     | 
    
         
            +
                  puts "config lookup (getter) >#{m}< #{m.class.name}"
         
     | 
| 
      
 48 
     | 
    
         
            +
                  key = m.to_s
         
     | 
| 
      
 49 
     | 
    
         
            +
                  value = @h[ key ]
         
     | 
| 
      
 50 
     | 
    
         
            +
                  if value.nil?
         
     | 
| 
      
 51 
     | 
    
         
            +
                    puts "  config add (nested) hash"
         
     | 
| 
      
 52 
     | 
    
         
            +
                    value = @h[ key ] = OpenConfig.new
         
     | 
| 
      
 53 
     | 
    
         
            +
                  end
         
     | 
| 
      
 54 
     | 
    
         
            +
                  value
         
     | 
| 
      
 55 
     | 
    
         
            +
                end  
         
     | 
| 
      
 56 
     | 
    
         
            +
              end # method_missing
         
     | 
| 
      
 57 
     | 
    
         
            +
             
     | 
| 
      
 58 
     | 
    
         
            +
            end # class OpenConfig
         
     | 
| 
      
 59 
     | 
    
         
            +
               
         
     | 
| 
      
 60 
     | 
    
         
            +
            end  # module MrHyde
         
     | 
    
        data/lib/mrhyde/version.rb
    CHANGED
    
    
| 
         @@ -0,0 +1,88 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            ## note:
         
     | 
| 
      
 5 
     | 
    
         
            +
            ##  use global $MRHYDE_WIZARD_STDIN
         
     | 
| 
      
 6 
     | 
    
         
            +
            ##    lets you redirect stdin for testing  e.g $MRHYDE_WIZARD_STDIN = StringIO.new( 'test/n' )
         
     | 
| 
      
 7 
     | 
    
         
            +
            $MRHYDE_WIZARD_IN = $stdin
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            module MrHyde
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            module Wizard   ## use a different name e.g. WizardHelpers, FormHelpers, InputHelper, etc - why, why not??
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            def getstr  ## use getstr to avoid conflict w/ gets (use better name? read_string, readline (already exists too), etc.?)
         
     | 
| 
      
 15 
     | 
    
         
            +
              ## note: gets will include trailing newline (user hits return to enter data)
         
     | 
| 
      
 16 
     | 
    
         
            +
              ##   - use strip for now (remove leading and traling whitspaces) - might later just use chomp ? (jsut removes newlines)
         
     | 
| 
      
 17 
     | 
    
         
            +
              $MRHYDE_WIZARD_IN.gets.strip
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            def say( text )
         
     | 
| 
      
 21 
     | 
    
         
            +
              puts text
         
     | 
| 
      
 22 
     | 
    
         
            +
            end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            YES_REGEX = /y|yes|on|t|true/i      ## support YAML true values - double check (YAML does NOT support t/f)
         
     | 
| 
      
 26 
     | 
    
         
            +
            NO_REGEX  = /n|no|off|f|false/i
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            def yes?( question )   ## defaults to yes - why, why not??
         
     | 
| 
      
 29 
     | 
    
         
            +
              ## todo: strip trailing question mark (?) if present (gets auto-included)
         
     | 
| 
      
 30 
     | 
    
         
            +
              print( "Q: #{question} (y/n)? [y]: " )
         
     | 
| 
      
 31 
     | 
    
         
            +
              str = getstr
         
     | 
| 
      
 32 
     | 
    
         
            +
              if str.empty? || str =~ YES_REGEX
         
     | 
| 
      
 33 
     | 
    
         
            +
                true
         
     | 
| 
      
 34 
     | 
    
         
            +
              elsif str =~ NO_REGEX
         
     | 
| 
      
 35 
     | 
    
         
            +
                false
         
     | 
| 
      
 36 
     | 
    
         
            +
              else    ## warn: unknown value??
         
     | 
| 
      
 37 
     | 
    
         
            +
                true
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
            end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
            def no?( question )   ## defaults to yes - why, why not??
         
     | 
| 
      
 42 
     | 
    
         
            +
              ## todo: strip trailing question mark (?) if present (gets auto-included)
         
     | 
| 
      
 43 
     | 
    
         
            +
              print( "Q: #{question} (y/n)? [n]: " )
         
     | 
| 
      
 44 
     | 
    
         
            +
              str = getstr
         
     | 
| 
      
 45 
     | 
    
         
            +
              if str.empty? || str =~ NO_REGEX
         
     | 
| 
      
 46 
     | 
    
         
            +
                true
         
     | 
| 
      
 47 
     | 
    
         
            +
              elsif str =~ YES_REGEX
         
     | 
| 
      
 48 
     | 
    
         
            +
                false
         
     | 
| 
      
 49 
     | 
    
         
            +
              else    ## warn: unknown value??
         
     | 
| 
      
 50 
     | 
    
         
            +
                true
         
     | 
| 
      
 51 
     | 
    
         
            +
              end
         
     | 
| 
      
 52 
     | 
    
         
            +
            end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            def ask( question, default=nil )
         
     | 
| 
      
 56 
     | 
    
         
            +
              ## todo: strip trailing question mark (?) if present (gets auto-included)
         
     | 
| 
      
 57 
     | 
    
         
            +
              if default
         
     | 
| 
      
 58 
     | 
    
         
            +
                print( "Q: #{question}? [#{default}]: " )
         
     | 
| 
      
 59 
     | 
    
         
            +
              else
         
     | 
| 
      
 60 
     | 
    
         
            +
                print( "Q: #{question}?: " )
         
     | 
| 
      
 61 
     | 
    
         
            +
              end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
              str = getstr
         
     | 
| 
      
 64 
     | 
    
         
            +
              if default && str.empty?   ## todo: best way to check for empty string?
         
     | 
| 
      
 65 
     | 
    
         
            +
                str = default
         
     | 
| 
      
 66 
     | 
    
         
            +
              end
         
     | 
| 
      
 67 
     | 
    
         
            +
              str  
         
     | 
| 
      
 68 
     | 
    
         
            +
            end
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
            def select( title, options )
         
     | 
| 
      
 72 
     | 
    
         
            +
              puts( "Q: #{title}: " )
         
     | 
| 
      
 73 
     | 
    
         
            +
              options.each_with_index do |opt,i|
         
     | 
| 
      
 74 
     | 
    
         
            +
                puts "    #{i+1} - #{opt}"
         
     | 
| 
      
 75 
     | 
    
         
            +
              end
         
     | 
| 
      
 76 
     | 
    
         
            +
              print( "   Your choice (1-#{options.size})? [1]: " )
         
     | 
| 
      
 77 
     | 
    
         
            +
              str = getstr
         
     | 
| 
      
 78 
     | 
    
         
            +
              if str.empty?   ## todo: best way to check for empty string?
         
     | 
| 
      
 79 
     | 
    
         
            +
                num = 0   ## default to first option for now
         
     | 
| 
      
 80 
     | 
    
         
            +
              else
         
     | 
| 
      
 81 
     | 
    
         
            +
                num = str.to_i   ## note: defaults to 0 if cannot convert?
         
     | 
| 
      
 82 
     | 
    
         
            +
                num -= 1   if num > 0    ## note: "convert" from 1-based to 0-based for ary; if invalid entry; default to 0
         
     | 
| 
      
 83 
     | 
    
         
            +
              end
         
     | 
| 
      
 84 
     | 
    
         
            +
              options[ num ]
         
     | 
| 
      
 85 
     | 
    
         
            +
            end
         
     | 
| 
      
 86 
     | 
    
         
            +
             
     | 
| 
      
 87 
     | 
    
         
            +
            end # module Wizard
         
     | 
| 
      
 88 
     | 
    
         
            +
            end # module MrHyde
         
     | 
    
        data/test/helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,22 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ## minitest setup
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require 'minitest/autorun'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            class EchoIO
         
     | 
| 
      
 9 
     | 
    
         
            +
              def initialize( buf )
         
     | 
| 
      
 10 
     | 
    
         
            +
                @io = StringIO.new( buf )
         
     | 
| 
      
 11 
     | 
    
         
            +
              end
         
     | 
| 
      
 12 
     | 
    
         
            +
              
         
     | 
| 
      
 13 
     | 
    
         
            +
              def gets
         
     | 
| 
      
 14 
     | 
    
         
            +
                str = @io.gets
         
     | 
| 
      
 15 
     | 
    
         
            +
                puts "|>#{str.chomp}<|"   ## remove newline (w/ chomp) in debug/echo output 
         
     | 
| 
      
 16 
     | 
    
         
            +
                str
         
     | 
| 
      
 17 
     | 
    
         
            +
              end
         
     | 
| 
      
 18 
     | 
    
         
            +
            end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ## our own code
         
     | 
| 
      
 22 
     | 
    
         
            +
            require 'mrhyde'
         
     | 
| 
         @@ -0,0 +1,36 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            puts "[debug] self.class.name #{self.class.name}"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            name = "check setting local variable name"
         
     | 
| 
      
 7 
     | 
    
         
            +
            puts "[debug] #{name}"
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
            puts "pp self:"
         
     | 
| 
      
 10 
     | 
    
         
            +
            pp self
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            ###############################################
         
     | 
| 
      
 14 
     | 
    
         
            +
            # Mr. Hyde's Quick Start Static Site Script
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            say "Welcome, before setting up your site Mr. Hyde will ask you some questions."
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
            title = ask "What's your site's title", "Your Site Title"
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            name  = ask "What's your name", "Henry Jekyll"
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            say "Thanks! Ready-to-go. Stand back."
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
            install_theme "Starter"
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            config do |c|
         
     | 
| 
      
 27 
     | 
    
         
            +
              c.title        = title
         
     | 
| 
      
 28 
     | 
    
         
            +
              c.author.name  = name
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
              c.mrhyde.last_updated = Time.now
         
     | 
| 
      
 31 
     | 
    
         
            +
              c.mrhyde.title        = title
         
     | 
| 
      
 32 
     | 
    
         
            +
              c.mrhyde.name         = name
         
     | 
| 
      
 33 
     | 
    
         
            +
            end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
            say "Done."
         
     | 
| 
      
 36 
     | 
    
         
            +
             
     | 
| 
         @@ -0,0 +1,39 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            puts "[debug] self.class.name #{self.class.name}"
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            puts "pp self:"
         
     | 
| 
      
 7 
     | 
    
         
            +
            pp self
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ###############################################
         
     | 
| 
      
 11 
     | 
    
         
            +
            # Mr. Hyde's Quick Start Static Site Script
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            say "Welcome, before setting up your site Mr. Hyde will ask you some questions."
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
            title = ask "What's your site's title", "Your Site Title"
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            url   = ask "What's your site's address (url)", "http://yoursite.com"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            name  = ask "What's your name", "Henry Jekyll"
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            theme = select "Select your theme", ["Starter", "Bootstrap", "Minimal"]
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            say "Thanks! Ready-to-go. Stand back."
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            install_theme theme
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
            config do |c|
         
     | 
| 
      
 28 
     | 
    
         
            +
              c.title        = title
         
     | 
| 
      
 29 
     | 
    
         
            +
              c.url          = url
         
     | 
| 
      
 30 
     | 
    
         
            +
              c.author.name  = name
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              c.mrhyde.last_updated = Time.now
         
     | 
| 
      
 33 
     | 
    
         
            +
              c.mrhyde.title        = title
         
     | 
| 
      
 34 
     | 
    
         
            +
              c.mrhyde.name         = name
         
     | 
| 
      
 35 
     | 
    
         
            +
              c.mrhyde.theme        = theme
         
     | 
| 
      
 36 
     | 
    
         
            +
              c.mrhyde.url          = url
         
     | 
| 
      
 37 
     | 
    
         
            +
            end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
            say "Done."
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ###
         
     | 
| 
      
 4 
     | 
    
         
            +
            # to run use
         
     | 
| 
      
 5 
     | 
    
         
            +
            #   ruby -I ./lib -I ./test test/test_builder.rb
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'helper'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            class TestBuilder < MiniTest::Test
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_starter
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                $MRHYDE_WIZARD_IN = EchoIO.new( <<EOS )
         
     | 
| 
      
 16 
     | 
    
         
            +
            Another Beautiful Static Site
         
     | 
| 
      
 17 
     | 
    
         
            +
            H. J.
         
     | 
| 
      
 18 
     | 
    
         
            +
            EOS
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                _ = MrHyde::Builder.load_file( "#{MrHyde.root}/test/scripts/starter.rb", test: true )
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                assert true  ## if we get here; everything is ok
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def test_starterii
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                $MRHYDE_WIZARD_IN = EchoIO.new( <<EOS )
         
     | 
| 
      
 28 
     | 
    
         
            +
            Another Beautiful Static Site
         
     | 
| 
      
 29 
     | 
    
         
            +
            http://example.github.io/repo
         
     | 
| 
      
 30 
     | 
    
         
            +
            H. J.
         
     | 
| 
      
 31 
     | 
    
         
            +
            1
         
     | 
| 
      
 32 
     | 
    
         
            +
            EOS
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                _ = MrHyde::Builder.load_file( "#{MrHyde.root}/test/scripts/starterii.rb", test: true )
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
                assert true  ## if we get here; everything is ok
         
     | 
| 
      
 37 
     | 
    
         
            +
              end
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            end # class TestBuilder
         
     | 
    
        data/test/test_config.rb
    ADDED
    
    | 
         @@ -0,0 +1,31 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ###
         
     | 
| 
      
 4 
     | 
    
         
            +
            # to run use
         
     | 
| 
      
 5 
     | 
    
         
            +
            #   ruby -I ./lib -I ./test test/test_config.rb
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'helper'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            class TestConfig < MiniTest::Test
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_config
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                c = MrHyde::OpenConfig.new
         
     | 
| 
      
 16 
     | 
    
         
            +
                c.title        = 'title'
         
     | 
| 
      
 17 
     | 
    
         
            +
                c.author.name  = 'name'
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
                c.mrhyde.last_updated = Time.now
         
     | 
| 
      
 20 
     | 
    
         
            +
                c.mrhyde.title        = 'title'
         
     | 
| 
      
 21 
     | 
    
         
            +
                c.mrhyde.name         = 'name'
         
     | 
| 
      
 22 
     | 
    
         
            +
                c.mrhyde.theme        = 'theme'
         
     | 
| 
      
 23 
     | 
    
         
            +
                c.mrhyde.meta.info    = 'test nested nested value'
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
                pp c.to_h
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                assert true  ## if we get here; everything is ok
         
     | 
| 
      
 28 
     | 
    
         
            +
              end
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
            end # class TestConfig
         
     | 
| 
         @@ -0,0 +1,25 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ###
         
     | 
| 
      
 4 
     | 
    
         
            +
            # to run use
         
     | 
| 
      
 5 
     | 
    
         
            +
            #   ruby -I ./lib -I ./test test/test_install_theme.rb
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'helper'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            class TestInstallTheme < MiniTest::Test
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_starter
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
                $MRHYDE_WIZARD_IN = EchoIO.new( <<EOS )
         
     | 
| 
      
 16 
     | 
    
         
            +
            Another Beautiful Static Site
         
     | 
| 
      
 17 
     | 
    
         
            +
            H. J.
         
     | 
| 
      
 18 
     | 
    
         
            +
            EOS
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
                _ = MrHyde::Builder.load_file( "#{MrHyde.root}/test/scripts/starter.rb", o: './o')
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                assert true  ## if we get here; everything is ok
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            end # class TestInstallTheme
         
     | 
    
        data/test/test_url.rb
    ADDED
    
    | 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ###
         
     | 
| 
      
 4 
     | 
    
         
            +
            # to run use
         
     | 
| 
      
 5 
     | 
    
         
            +
            #   ruby -I ./lib -I ./test test/test_url.rb
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'helper'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            class TestUrl < MiniTest::Test
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              def test_clean_path
         
     | 
| 
      
 14 
     | 
    
         
            +
                path = '/'
         
     | 
| 
      
 15 
     | 
    
         
            +
                path = path.sub( /\/$/, '' )
         
     | 
| 
      
 16 
     | 
    
         
            +
                assert_equal '', path
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                path = ''
         
     | 
| 
      
 19 
     | 
    
         
            +
                path = path.sub( /\/$/, '' )
         
     | 
| 
      
 20 
     | 
    
         
            +
                assert_equal '', path
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
                path = '/test/'
         
     | 
| 
      
 23 
     | 
    
         
            +
                path = path.sub( /\/$/, '' )
         
     | 
| 
      
 24 
     | 
    
         
            +
                assert_equal '/test', path
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              def test_site_url
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                str = 'http://example.com'
         
     | 
| 
      
 31 
     | 
    
         
            +
                
         
     | 
| 
      
 32 
     | 
    
         
            +
                url = URI.parse( str )
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
                pp url
         
     | 
| 
      
 35 
     | 
    
         
            +
                
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_equal 'example.com', url.host
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal '', url.path
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            end # class TestUrl
         
     | 
    
        data/test/test_wizard.rb
    ADDED
    
    | 
         @@ -0,0 +1,50 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # encoding: utf-8
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ###
         
     | 
| 
      
 4 
     | 
    
         
            +
            # to run use
         
     | 
| 
      
 5 
     | 
    
         
            +
            #   ruby -I ./lib -I ./test test/test_wizard.rb
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            require 'helper'
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
             
     | 
| 
      
 11 
     | 
    
         
            +
            class TestWizard < MiniTest::Test
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
              include MrHyde::Wizard   ## lets you use ask etc.
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              def test_ask
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
                $MRHYDE_WIZARD_IN = EchoIO.new( <<EOS )
         
     | 
| 
      
 18 
     | 
    
         
            +
            Another Beautiful Static Site
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            H. J.
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            2
         
     | 
| 
      
 23 
     | 
    
         
            +
            n
         
     | 
| 
      
 24 
     | 
    
         
            +
            y
         
     | 
| 
      
 25 
     | 
    
         
            +
            EOS
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
                say "Hello, Wizard!"
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
                title = ask "What's your site's title", "Your Site Title"
         
     | 
| 
      
 30 
     | 
    
         
            +
                assert_equal 'Another Beautiful Static Site', title
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                title = ask "What's your site's title", "Your Site Title"
         
     | 
| 
      
 33 
     | 
    
         
            +
                assert_equal 'Your Site Title', title
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
                name = ask "Your Name"
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_equal 'H. J.', name
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                theme = select "Select your theme", ["Starter", "Bootstrap", "Minimal"]
         
     | 
| 
      
 39 
     | 
    
         
            +
                assert_equal 'Starter', theme
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                theme = select "Select your theme", ["Starter", "Bootstrap", "Minimal"]
         
     | 
| 
      
 42 
     | 
    
         
            +
                assert_equal 'Bootstrap', theme
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                assert_equal false, yes?( "Add to GitHub" )
         
     | 
| 
      
 45 
     | 
    
         
            +
                assert_equal false, no?( "Add to GitHub" )
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                assert true  ## if we get here; everything is ok
         
     | 
| 
      
 48 
     | 
    
         
            +
              end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
            end # class TestWizard
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,15 +1,43 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: mrhyde-tools
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 0.0 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 0.1.0
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Gerald Bauer
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2015-08- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-08-16 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
      
 13 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 14 
     | 
    
         
            +
              name: logutils
         
     | 
| 
      
 15 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 16 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 17 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 18 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 19 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 20 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 21 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 22 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 23 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 24 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 25 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 26 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 27 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 28 
     | 
    
         
            +
              name: textutils
         
     | 
| 
      
 29 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 30 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 31 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 32 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 33 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
      
 34 
     | 
    
         
            +
              type: :runtime
         
     | 
| 
      
 35 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 36 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 37 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 38 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 39 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 40 
     | 
    
         
            +
                    version: '0'
         
     | 
| 
       13 
41 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
42 
     | 
    
         
             
              name: drjekyll
         
     | 
| 
       15 
43 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -52,22 +80,41 @@ dependencies: 
     | 
|
| 
       52 
80 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       53 
81 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       54 
82 
     | 
    
         
             
                    version: '3.13'
         
     | 
| 
       55 
     | 
    
         
            -
            description: mrhyde - static site quick starter  
     | 
| 
      
 83 
     | 
    
         
            +
            description: mrhyde - jekyll command line tool .:. static site quick starter script
         
     | 
| 
      
 84 
     | 
    
         
            +
              wizard
         
     | 
| 
       56 
85 
     | 
    
         
             
            email: wwwmake@googlegroups.com
         
     | 
| 
       57 
     | 
    
         
            -
            executables: 
     | 
| 
      
 86 
     | 
    
         
            +
            executables:
         
     | 
| 
      
 87 
     | 
    
         
            +
            - mrh
         
     | 
| 
      
 88 
     | 
    
         
            +
            - mrhyde
         
     | 
| 
       58 
89 
     | 
    
         
             
            extensions: []
         
     | 
| 
       59 
90 
     | 
    
         
             
            extra_rdoc_files:
         
     | 
| 
       60 
91 
     | 
    
         
             
            - HISTORY.md
         
     | 
| 
       61 
92 
     | 
    
         
             
            - Manifest.txt
         
     | 
| 
       62 
93 
     | 
    
         
             
            - README.md
         
     | 
| 
       63 
94 
     | 
    
         
             
            files:
         
     | 
| 
      
 95 
     | 
    
         
            +
            - ".gemtest"
         
     | 
| 
       64 
96 
     | 
    
         
             
            - HISTORY.md
         
     | 
| 
       65 
97 
     | 
    
         
             
            - Manifest.txt
         
     | 
| 
       66 
98 
     | 
    
         
             
            - README.md
         
     | 
| 
       67 
99 
     | 
    
         
             
            - Rakefile
         
     | 
| 
      
 100 
     | 
    
         
            +
            - bin/mrh
         
     | 
| 
      
 101 
     | 
    
         
            +
            - bin/mrhyde
         
     | 
| 
       68 
102 
     | 
    
         
             
            - lib/mrhyde.rb
         
     | 
| 
      
 103 
     | 
    
         
            +
            - lib/mrhyde/builder.rb
         
     | 
| 
      
 104 
     | 
    
         
            +
            - lib/mrhyde/cli/main.rb
         
     | 
| 
      
 105 
     | 
    
         
            +
            - lib/mrhyde/cli/opts.rb
         
     | 
| 
      
 106 
     | 
    
         
            +
            - lib/mrhyde/config.rb
         
     | 
| 
       69 
107 
     | 
    
         
             
            - lib/mrhyde/tools.rb
         
     | 
| 
       70 
108 
     | 
    
         
             
            - lib/mrhyde/version.rb
         
     | 
| 
      
 109 
     | 
    
         
            +
            - lib/mrhyde/wizard.rb
         
     | 
| 
      
 110 
     | 
    
         
            +
            - test/helper.rb
         
     | 
| 
      
 111 
     | 
    
         
            +
            - test/scripts/starter.rb
         
     | 
| 
      
 112 
     | 
    
         
            +
            - test/scripts/starterii.rb
         
     | 
| 
      
 113 
     | 
    
         
            +
            - test/test_builder.rb
         
     | 
| 
      
 114 
     | 
    
         
            +
            - test/test_config.rb
         
     | 
| 
      
 115 
     | 
    
         
            +
            - test/test_install_theme.rb
         
     | 
| 
      
 116 
     | 
    
         
            +
            - test/test_url.rb
         
     | 
| 
      
 117 
     | 
    
         
            +
            - test/test_wizard.rb
         
     | 
| 
       71 
118 
     | 
    
         
             
            homepage: https://github.com/mrhydescripts/mrhyde
         
     | 
| 
       72 
119 
     | 
    
         
             
            licenses:
         
     | 
| 
       73 
120 
     | 
    
         
             
            - Public Domain
         
     | 
| 
         @@ -93,5 +140,10 @@ rubyforge_project: 
     | 
|
| 
       93 
140 
     | 
    
         
             
            rubygems_version: 2.4.2
         
     | 
| 
       94 
141 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       95 
142 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       96 
     | 
    
         
            -
            summary: mrhyde - static site quick starter  
     | 
| 
       97 
     | 
    
         
            -
            test_files: 
     | 
| 
      
 143 
     | 
    
         
            +
            summary: mrhyde - jekyll command line tool .:. static site quick starter script wizard
         
     | 
| 
      
 144 
     | 
    
         
            +
            test_files:
         
     | 
| 
      
 145 
     | 
    
         
            +
            - test/test_wizard.rb
         
     | 
| 
      
 146 
     | 
    
         
            +
            - test/test_install_theme.rb
         
     | 
| 
      
 147 
     | 
    
         
            +
            - test/test_builder.rb
         
     | 
| 
      
 148 
     | 
    
         
            +
            - test/test_config.rb
         
     | 
| 
      
 149 
     | 
    
         
            +
            - test/test_url.rb
         
     |