raygun 1.0.2 → 1.0.3
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/.ruby-version +1 -1
- data/CHANGES.md +9 -0
- data/README.md +24 -19
- data/lib/raygun/raygun.rb +9 -53
- data/lib/raygun/template_repo.rb +76 -0
- data/lib/raygun/version.rb +1 -1
- metadata +4 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 065ecc2e84bd97c90297b39a7619a0a6ca2aeb3e
         | 
| 4 | 
            +
              data.tar.gz: cb6eb42d11c58ffff33c9a46b4e786a77b16875b
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 37cf514bd395889660bb53a7c60e6f9c706e13609a762be7b1382228f09680021ef52423986e3d30e518116c7334c2a34327fa14743cc6147dc2995babf544ce
         | 
| 7 | 
            +
              data.tar.gz: 6edf23596a25b0b12aa6cab27557dae283b03ca67a2038e61370b2a2b25c2c4cd71b73698b14dda5b1cda7e26a82d44571787e7d7c1c079868eb7cabfe345b70
         | 
    
        data/.ruby-version
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            2.2 | 
| 1 | 
            +
            2.4.2
         | 
    
        data/CHANGES.md
    CHANGED
    
    | @@ -1,5 +1,14 @@ | |
| 1 1 | 
             
            # Change Log
         | 
| 2 2 |  | 
| 3 | 
            +
            **Note:** Don't let the apparent lack of activity here scare you away. Almost all changes are captured in the
         | 
| 4 | 
            +
            prototype repo (see [raygun-rails](https://github.com/carbonfive/raygun-rails)), and it's kept pretty well up to date.
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            ## 1.0.3 [2017-10-25]
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            * Add ability to pull template repository by branch name (#137, thanks @bunnymatic!).
         | 
| 9 | 
            +
            * Updates to the README (mostly tweaks).
         | 
| 10 | 
            +
            * Use Ruby 2.4.2 for development.
         | 
| 11 | 
            +
             | 
| 3 12 | 
             
            ## 1.0.1 [2015-01-30]
         | 
| 4 13 |  | 
| 5 14 | 
             
            * Simplify instructions: use ./bin/setup instead of explicit commands.
         | 
    
        data/README.md
    CHANGED
    
    | @@ -6,7 +6,7 @@ | |
| 6 6 | 
             
            Rails application generator that builds a new project skeleton configured with Carbon Five preferences and
         | 
| 7 7 | 
             
            best practices baked right in. Spend less time configuring and more building cool features.
         | 
| 8 8 |  | 
| 9 | 
            -
            Raygun generates Rails  | 
| 9 | 
            +
            Raygun generates Rails projects by copying this [sample app](https://github.com/carbonfive/raygun-rails)
         | 
| 10 10 | 
             
            and massaging it gently into shape.
         | 
| 11 11 |  | 
| 12 12 | 
             
            Alternatively, Raygun allows you to specify your own prototype instead of the default sample app. See below
         | 
| @@ -20,10 +20,9 @@ Major tools/libraries: | |
| 20 20 | 
             
            * Sass
         | 
| 21 21 | 
             
            * Bootstrap
         | 
| 22 22 | 
             
            * RSpec
         | 
| 23 | 
            -
            * Factory  | 
| 24 | 
            -
            * Jasmine
         | 
| 23 | 
            +
            * Factory Bot
         | 
| 25 24 | 
             
            * SimpleCov
         | 
| 26 | 
            -
            * Guard (rspec,  | 
| 25 | 
            +
            * Guard (rspec, livereload)
         | 
| 27 26 | 
             
            * And many tweaks, patterns and common recipes (see [raygun-rails](https://github.com/carbonfive/raygun-rails) for all the details).
         | 
| 28 27 |  | 
| 29 28 | 
             
            Raygun includes generator templates for controllers, views, and specs so that generated code follows best
         | 
| @@ -47,21 +46,21 @@ Raygun... | |
| 47 46 |  | 
| 48 47 | 
             
            ## Prerequisites
         | 
| 49 48 |  | 
| 50 | 
            -
            To generate an application, you only need the  | 
| 49 | 
            +
            To generate an application, you only need the Raygun gem and network connectivity.
         | 
| 51 50 |  | 
| 52 51 | 
             
            To run your new application's specs or fire up its server, you'll need to meet these requirements.
         | 
| 53 52 |  | 
| 54 | 
            -
            * PostgreSQL 9.x with superuser 'postgres' with no password ( | 
| 55 | 
            -
            * PhantomJS for JavaScript testing ( | 
| 53 | 
            +
            * PostgreSQL 9.x with superuser 'postgres' with no password (`createuser -s postgres`)
         | 
| 54 | 
            +
            * PhantomJS for JavaScript testing (`brew install phantomjs`)
         | 
| 56 55 |  | 
| 57 | 
            -
            The generated app will be configured to use the ruby version that was used to invoke  | 
| 58 | 
            -
            another ruby, just change the  | 
| 56 | 
            +
            The generated app will be configured to use the ruby version that was used to invoke Raygun. If you're using
         | 
| 57 | 
            +
            another ruby, just change the `Gemfile` and `.ruby-version` as necessary.
         | 
| 59 58 |  | 
| 60 59 | 
             
            ## Usage
         | 
| 61 60 |  | 
| 62 61 | 
             
                $ raygun your-project
         | 
| 63 62 |  | 
| 64 | 
            -
            Once your project is baked out, you can easily kick the wheels. Be sure that you have the  | 
| 63 | 
            +
            Once your project is baked out, you can easily kick the wheels. Be sure that you have the prerequisites
         | 
| 65 64 | 
             
            covered (see above).
         | 
| 66 65 |  | 
| 67 66 | 
             
                $ cd your-project
         | 
| @@ -77,27 +76,33 @@ covered (see above). | |
| 77 76 | 
             
            ## Using a Custom Project Template
         | 
| 78 77 |  | 
| 79 78 | 
             
            The default is to use the project at [carbonfive/raygun-rails](https://github.com/carbonfive/raygun-rails) as a
         | 
| 80 | 
            -
            starting point. You can use another repo as the project template with the  | 
| 79 | 
            +
            starting point. You can use another repo as the project template with the `-p` command line option.
         | 
| 81 80 |  | 
| 82 | 
            -
            If you invoke raygun with the  | 
| 81 | 
            +
            If you invoke raygun with the `-p` option, you can specify your own github repository.
         | 
| 83 82 |  | 
| 84 83 | 
             
                $ raygun -p githubid/repo your-project
         | 
| 85 84 |  | 
| 85 | 
            +
            Or 
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                $ raygun -p githubid/repo your-project#new-branch-name
         | 
| 88 | 
            +
             | 
| 86 89 | 
             
            The repository must:
         | 
| 87 90 |  | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 91 | 
            +
            Not have any binary files. Raygun runs a 'sed' command on all files, which will fail on binaries, such as jar files.
         | 
| 92 | 
            +
             | 
| 93 | 
            +
            If you are not planning to pull the prototype repository by branch, it must also have a tag. Raygun will choose the
         | 
| 94 | 
            +
            "greatest" tag and downloads the repository as of that tag.
         | 
| 90 95 |  | 
| 91 | 
            -
            If your project template requires a minimum version of  | 
| 92 | 
            -
             | 
| 96 | 
            +
            If your project template requires a minimum version of Raygun, include the version in a file called
         | 
| 97 | 
            +
            `.raygun-version` at the root. Raygun will make sure it's new enough for your repo.
         | 
| 93 98 |  | 
| 94 99 | 
             
            ## Internal Mechanics
         | 
| 95 100 |  | 
| 96 101 | 
             
            Raygun fetches the greatest tag from the [carbonfive/raygun-rails](https://github.com/carbonfive/raygun-rails)
         | 
| 97 | 
            -
            repo, unless it already has it cached in  | 
| 102 | 
            +
            repo, unless it already has it cached in `~/.raygun`, extracts the contents of the tarball, and runs a series of
         | 
| 98 103 | 
             
            search-and-replaces on the code to customize it accordingly.
         | 
| 99 104 |  | 
| 100 | 
            -
            This approach is fast, simple, and makes  | 
| 105 | 
            +
            This approach is fast, simple, and makes developmentn on Raygun very easy: make changes to the application
         | 
| 101 106 | 
             
            prototype (which is a valid rails app) and tag them when they should be used for new applications.
         | 
| 102 107 |  | 
| 103 108 | 
             
            ## Contributing
         | 
| @@ -110,7 +115,7 @@ prototype (which is a valid rails app) and tag them when they should be used for | |
| 110 115 |  | 
| 111 116 | 
             
            ### Development
         | 
| 112 117 |  | 
| 113 | 
            -
            Generate an example app using your local development version of  | 
| 118 | 
            +
            Generate an example app using your local development version of Raygun:
         | 
| 114 119 |  | 
| 115 120 | 
             
                $ ./bin/raygun tmp/example_app
         | 
| 116 121 |  | 
    
        data/lib/raygun/raygun.rb
    CHANGED
    
    | @@ -7,6 +7,7 @@ require 'json' | |
| 7 7 | 
             
            require 'colorize'
         | 
| 8 8 |  | 
| 9 9 | 
             
            require_relative 'version'
         | 
| 10 | 
            +
            require_relative 'template_repo'
         | 
| 10 11 |  | 
| 11 12 | 
             
            module Raygun
         | 
| 12 13 | 
             
              class Runner
         | 
| @@ -45,15 +46,16 @@ module Raygun | |
| 45 46 | 
             
                  $stdout.flush
         | 
| 46 47 |  | 
| 47 48 | 
             
                  # Check if we can connect, or fail gracefully and use the latest cached version.
         | 
| 48 | 
            -
                   | 
| 49 | 
            -
                   | 
| 50 | 
            -
                  tarball_url | 
| 49 | 
            +
                  repo        = TemplateRepo.new(prototype_repo)
         | 
| 50 | 
            +
                  name        = repo.name
         | 
| 51 | 
            +
                  tarball_url = repo.tarball
         | 
| 52 | 
            +
                  sha         = repo.sha
         | 
| 51 53 |  | 
| 52 | 
            -
                  print " #{ | 
| 54 | 
            +
                  print " #{name}.".colorize(:white)
         | 
| 53 55 | 
             
                  $stdout.flush
         | 
| 54 56 |  | 
| 55 57 | 
             
                  cached_prototypes_dir = File.join(Dir.home, ".raygun")
         | 
| 56 | 
            -
                  @prototype = "#{cached_prototypes_dir}/#{ | 
| 58 | 
            +
                  @prototype = "#{cached_prototypes_dir}/#{name.gsub('/','--')}-#{sha}.tar.gz"
         | 
| 57 59 |  | 
| 58 60 | 
             
                  # Do we already have the tarball cached under ~/.raygun?
         | 
| 59 61 | 
             
                  if File.exists?(@prototype)
         | 
| @@ -64,7 +66,6 @@ module Raygun | |
| 64 66 |  | 
| 65 67 | 
             
                    # Download the tarball and install in the cache.
         | 
| 66 68 | 
             
                    Dir.mkdir(cached_prototypes_dir, 0755) unless Dir.exists?(cached_prototypes_dir)
         | 
| 67 | 
            -
             | 
| 68 69 | 
             
                    shell "curl -s -L #{tarball_url} -o #{@prototype}"
         | 
| 69 70 | 
             
                    puts " done!".colorize(:yellow)
         | 
| 70 71 | 
             
                  end
         | 
| @@ -176,7 +177,7 @@ module Raygun | |
| 176 177 | 
             
                    print_next_steps_for_custom_repo
         | 
| 177 178 | 
             
                  end
         | 
| 178 179 | 
             
                end
         | 
| 179 | 
            -
             | 
| 180 | 
            +
             | 
| 180 181 | 
             
                def print_next_steps_carbon_five
         | 
| 181 182 | 
             
                  puts ""
         | 
| 182 183 | 
             
                  puts "Zap! Your application is ready. Next steps...".colorize(:yellow)
         | 
| @@ -194,7 +195,7 @@ module Raygun | |
| 194 195 | 
             
                  puts ""
         | 
| 195 196 | 
             
                  puts "Enjoy your Carbon Five flavored Rails application!".colorize(:yellow)
         | 
| 196 197 | 
             
                end
         | 
| 197 | 
            -
             | 
| 198 | 
            +
             | 
| 198 199 | 
             
                def print_next_steps_for_custom_repo
         | 
| 199 200 | 
             
                  puts ""
         | 
| 200 201 | 
             
                  puts "Zap! Your application is ready.".colorize(:yellow)
         | 
| @@ -204,51 +205,6 @@ module Raygun | |
| 204 205 |  | 
| 205 206 | 
             
                protected
         | 
| 206 207 |  | 
| 207 | 
            -
                # Fetch the tags for the repo (e.g. 'carbonfive/raygun-rails') and return the latest as JSON.
         | 
| 208 | 
            -
                def fetch_latest_tag(repo)
         | 
| 209 | 
            -
                  url          = "https://api.github.com/repos/#{repo}/tags"
         | 
| 210 | 
            -
                  uri          = URI.parse(url)
         | 
| 211 | 
            -
                  http         = Net::HTTP.new(uri.host, uri.port)
         | 
| 212 | 
            -
                  http.use_ssl = true
         | 
| 213 | 
            -
                  request      = Net::HTTP::Get.new(URI.encode(url))
         | 
| 214 | 
            -
             | 
| 215 | 
            -
                  response     = http.request(request)
         | 
| 216 | 
            -
             | 
| 217 | 
            -
                  unless response.code == "200" 
         | 
| 218 | 
            -
                    puts  ""
         | 
| 219 | 
            -
                    print "Whoops - need to try again!".colorize(:red)
         | 
| 220 | 
            -
                    puts  ""
         | 
| 221 | 
            -
                    print "We could not find (".colorize(:light_red)
         | 
| 222 | 
            -
                    print "#{repo}".colorize(:white)
         | 
| 223 | 
            -
                    print ") on github.".colorize(:light_red)
         | 
| 224 | 
            -
                    puts  ""
         | 
| 225 | 
            -
                    print "The response from github was a (".colorize(:light_red)
         | 
| 226 | 
            -
                    print "#{response.code}".colorize(:white)
         | 
| 227 | 
            -
                    puts  ") which I'm sure you can fix right up!".colorize(:light_red)
         | 
| 228 | 
            -
                    puts  ""
         | 
| 229 | 
            -
                    exit 1
         | 
| 230 | 
            -
                  end
         | 
| 231 | 
            -
             | 
| 232 | 
            -
                  result = JSON.parse(response.body).first
         | 
| 233 | 
            -
                  unless result
         | 
| 234 | 
            -
                    puts  ""
         | 
| 235 | 
            -
                    print "Whoops - need to try again!".colorize(:red)
         | 
| 236 | 
            -
                    puts  ""
         | 
| 237 | 
            -
                    print "We could not find any tags in the repo (".colorize(:light_red)
         | 
| 238 | 
            -
                    print "#{repo}".colorize(:white)
         | 
| 239 | 
            -
                    print ") on github.".colorize(:light_red)
         | 
| 240 | 
            -
                    puts  ""
         | 
| 241 | 
            -
                    print "Raygun uses the 'largest' tag in a repository, where tags are sorted alphanumerically.".colorize(:light_red)
         | 
| 242 | 
            -
                    puts  ""
         | 
| 243 | 
            -
                    print "E.g., tag 'v.0.10.0' > 'v.0.9.9' and 'x' > 'a'.".colorize(:light_red)
         | 
| 244 | 
            -
                    print ""
         | 
| 245 | 
            -
                    puts  ""
         | 
| 246 | 
            -
                    exit 1
         | 
| 247 | 
            -
                  end
         | 
| 248 | 
            -
                  
         | 
| 249 | 
            -
                  result
         | 
| 250 | 
            -
                end
         | 
| 251 | 
            -
             | 
| 252 208 | 
             
                def camelize(string)
         | 
| 253 209 | 
             
                  result = string.sub(/^[a-z\d]*/) { $&.capitalize }
         | 
| 254 210 | 
             
                  result.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }
         | 
| @@ -0,0 +1,76 @@ | |
| 1 | 
            +
            module Raygun
         | 
| 2 | 
            +
              class TemplateRepo
         | 
| 3 | 
            +
                attr_reader :name, :branch, :tarball, :sha
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                def initialize(repo)
         | 
| 6 | 
            +
                  @name, @branch = repo.split('#').map(&:strip)
         | 
| 7 | 
            +
                  fetch
         | 
| 8 | 
            +
                end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                private
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def fetch
         | 
| 13 | 
            +
                  return if @branch && @sha
         | 
| 14 | 
            +
                  @branch ? fetch_branches : fetch_tags
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def handle_github_error(response)
         | 
| 18 | 
            +
                  puts  ""
         | 
| 19 | 
            +
                  print "Whoops - need to try again!".colorize(:red)
         | 
| 20 | 
            +
                  puts  ""
         | 
| 21 | 
            +
                  print "We could not find (".colorize(:light_red)
         | 
| 22 | 
            +
                  print "#{name}".colorize(:white)
         | 
| 23 | 
            +
                  print "##{branch}".colorize(:white) if @branch
         | 
| 24 | 
            +
                  print ") on github.".colorize(:light_red)
         | 
| 25 | 
            +
                  puts  ""
         | 
| 26 | 
            +
                  print "The response from github was a (".colorize(:light_red)
         | 
| 27 | 
            +
                  print "#{response.code}".colorize(:white)
         | 
| 28 | 
            +
                  puts  ") which I'm sure you can fix right up!".colorize(:light_red)
         | 
| 29 | 
            +
                  puts  ""
         | 
| 30 | 
            +
                  exit 1
         | 
| 31 | 
            +
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                def handle_missing_tag_error
         | 
| 34 | 
            +
                  puts  ""
         | 
| 35 | 
            +
                  print "Whoops - need to try again!".colorize(:red)
         | 
| 36 | 
            +
                  puts  ""
         | 
| 37 | 
            +
                  print "We could not find any tags in the repo (".colorize(:light_red)
         | 
| 38 | 
            +
                  print "#{name}".colorize(:white)
         | 
| 39 | 
            +
                  print ") on github.".colorize(:light_red)
         | 
| 40 | 
            +
                  puts  ""
         | 
| 41 | 
            +
                  print "Raygun uses the 'largest' tag in a repository, where tags are sorted alphanumerically.".colorize(:light_red)
         | 
| 42 | 
            +
                  puts  ""
         | 
| 43 | 
            +
                  print "E.g., tag 'v.0.10.0' > 'v.0.9.9' and 'x' > 'a'.".colorize(:light_red)
         | 
| 44 | 
            +
                  print ""
         | 
| 45 | 
            +
                  puts  ""
         | 
| 46 | 
            +
                  exit 1
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                def fetch_branches
         | 
| 50 | 
            +
                  response = http_get("https://api.github.com/repos/#{name}/branches/#{branch}")
         | 
| 51 | 
            +
                  handle_github_error(response) unless response.code == "200"
         | 
| 52 | 
            +
                  result = JSON.parse(response.body)
         | 
| 53 | 
            +
                  @sha = result['commit']['sha']
         | 
| 54 | 
            +
                  @tarball = result['_links']['html'].gsub(%r(/tree/#{branch}), "/archive/#{branch}.tar.gz")
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                def fetch_tags
         | 
| 58 | 
            +
                  response = http_get("https://api.github.com/repos/#{name}/tags")
         | 
| 59 | 
            +
                  handle_github_error(response) unless response.code == "200"
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                  result = JSON.parse(response.body).first
         | 
| 62 | 
            +
                  handle_missing_tag_error unless result
         | 
| 63 | 
            +
                  @sha = result['commit']['sha']
         | 
| 64 | 
            +
                  @tarball = result['tarball_url']
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                def http_get(url)
         | 
| 68 | 
            +
                  uri          = URI.parse(url)
         | 
| 69 | 
            +
                  http         = Net::HTTP.new(uri.host, uri.port)
         | 
| 70 | 
            +
                  http.use_ssl = true
         | 
| 71 | 
            +
                  request      = Net::HTTP::Get.new(URI.encode(url))
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                  response     = http.request(request)
         | 
| 74 | 
            +
                end
         | 
| 75 | 
            +
              end
         | 
| 76 | 
            +
            end
         | 
    
        data/lib/raygun/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: raygun
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0. | 
| 4 | 
            +
              version: 1.0.3
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Christian Nelson
         | 
| @@ -10,7 +10,7 @@ authors: | |
| 10 10 | 
             
            autorequire: 
         | 
| 11 11 | 
             
            bindir: bin
         | 
| 12 12 | 
             
            cert_chain: []
         | 
| 13 | 
            -
            date:  | 
| 13 | 
            +
            date: 2017-10-25 00:00:00.000000000 Z
         | 
| 14 14 | 
             
            dependencies: []
         | 
| 15 15 | 
             
            description: Carbon Five Rails application generator
         | 
| 16 16 | 
             
            email:
         | 
| @@ -31,6 +31,7 @@ files: | |
| 31 31 | 
             
            - bin/raygun
         | 
| 32 32 | 
             
            - lib/colorize.rb
         | 
| 33 33 | 
             
            - lib/raygun/raygun.rb
         | 
| 34 | 
            +
            - lib/raygun/template_repo.rb
         | 
| 34 35 | 
             
            - lib/raygun/version.rb
         | 
| 35 36 | 
             
            - marvin.jpg
         | 
| 36 37 | 
             
            - raygun.gemspec
         | 
| @@ -54,7 +55,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 54 55 | 
             
                  version: '0'
         | 
| 55 56 | 
             
            requirements: []
         | 
| 56 57 | 
             
            rubyforge_project: 
         | 
| 57 | 
            -
            rubygems_version: 2. | 
| 58 | 
            +
            rubygems_version: 2.6.13
         | 
| 58 59 | 
             
            signing_key: 
         | 
| 59 60 | 
             
            specification_version: 4
         | 
| 60 61 | 
             
            summary: Generates and customizes Rails applications with Carbon Five best practices
         |