codeland-starter 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +56 -0
- data/Rakefile +13 -0
- data/bin/codeland-starter +5 -0
- data/codeland-starter.gemspec +33 -0
- data/lib/codeland/starter.rb +50 -0
- data/lib/codeland/starter/cli.rb +33 -0
- data/lib/codeland/starter/codeland-starter.yml +5 -0
- data/lib/codeland/starter/configuration.rb +37 -0
- data/lib/codeland/starter/integrations/heroku.rb +87 -0
- data/lib/codeland/starter/version.rb +5 -0
- data/spec/fixtures/heroku_app.json +30 -0
- data/spec/spec_helper.rb +111 -0
- data/spec/starter/configuration_spec.rb +64 -0
- data/spec/starter/integrations/heroku_spec.rb +177 -0
- data/spec/starter/starter_spec.rb +62 -0
- data/template/codeland.rb +276 -0
- data/template/files/Procfile +1 -0
- data/template/files/app/assets/javascripts/flash.js.coffee.erb +11 -0
- data/template/files/app/assets/stylesheets/application.scss +18 -0
- data/template/files/app/assets/stylesheets/atoms/.keep +0 -0
- data/template/files/app/assets/stylesheets/base/_base.scss +0 -0
- data/template/files/app/assets/stylesheets/base/_typography.scss +0 -0
- data/template/files/app/assets/stylesheets/base/_utility.scss +0 -0
- data/template/files/app/assets/stylesheets/base/_variables-colors.scss +3 -0
- data/template/files/app/assets/stylesheets/base/_variables.scss +0 -0
- data/template/files/app/assets/stylesheets/molecules/_flash.scss +21 -0
- data/template/files/app/assets/stylesheets/organisms/_footer.scss +0 -0
- data/template/files/app/assets/stylesheets/organisms/_header.scss +0 -0
- data/template/files/app/views/layouts/_flash.html.slim +6 -0
- data/template/files/app/views/layouts/application.html.slim.erb +19 -0
- data/template/files/app/views/partials/_footer.html.slim +0 -0
- data/template/files/app/views/partials/_header.html.slim +0 -0
- metadata +244 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1a0761709a566e84eed90a0bf8b683b2c4efff22
|
4
|
+
data.tar.gz: 56715ca2a83973b2080407a3d444ab3e8d3cf59a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6f8ad127cb38e128bd40e01e5e7fef25503866d1c1391e71defbeb0518dccad782ede7918f8f342457c69fb07a1018b4ffb70ae70cb1d572b099537bf0caa8ce
|
7
|
+
data.tar.gz: 7a14a157d8cd0c05ba30c79b0b92ca3bd8d7ff7df0f3b34ac0dca461a6d733c7f13ec7ee637aea532ced01df6aae7660827876ec9a49cce65d26408456aa1842
|
data/.gitignore
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 CODELAND Ltda.
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# Codeland::Starter
|
2
|
+
|
3
|
+
[![Code Climate](https://codeclimate.com/github/codelandev/codeland-starter/badges/gpa.svg)](https://codeclimate.com/github/codelandev/codeland-starter) [![Build Status](https://travis-ci.org/codelandev/codeland-starter.svg?branch=master)](https://travis-ci.org/codelandev/codeland-starter) [![Test Coverage](https://codeclimate.com/github/codelandev/codeland-starter/badges/coverage.svg)](https://codeclimate.com/github/codelandev/codeland-starter)
|
4
|
+
|
5
|
+
Create [Ruby on Rails](http://rubyonrails.org/) projects based on [Codeland's](http://codeland.com.br) template with [integrations](#integrations).
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
```sh
|
10
|
+
$ gem install codeland-starter
|
11
|
+
```
|
12
|
+
|
13
|
+
## Usage
|
14
|
+
|
15
|
+
### Setup
|
16
|
+
|
17
|
+
```sh
|
18
|
+
$ codeland-starter install # Will create ~/codeland-starter.yml
|
19
|
+
$ vi ~/codeland-starter.yml
|
20
|
+
```
|
21
|
+
|
22
|
+
The `integrations` section in YAML is an array of the services. Eg:
|
23
|
+
```yaml
|
24
|
+
integrations:
|
25
|
+
- heroku
|
26
|
+
- another-service
|
27
|
+
```
|
28
|
+
|
29
|
+
### Create projects
|
30
|
+
|
31
|
+
```sh
|
32
|
+
$ codeland-starter create ProjectName
|
33
|
+
```
|
34
|
+
|
35
|
+
## Integrations
|
36
|
+
|
37
|
+
### Heroku
|
38
|
+
|
39
|
+
```sh`
|
40
|
+
$ heroku plugins:install git@github.com:heroku/heroku-oauth.git
|
41
|
+
$ heroku authorizations:create -d "some text"
|
42
|
+
```
|
43
|
+
Paste the `Token` in
|
44
|
+
|
45
|
+
```yaml
|
46
|
+
heroku:
|
47
|
+
oauth_token: PASTE-YOUR-TOKEN-HERE
|
48
|
+
```
|
49
|
+
|
50
|
+
## Contributing
|
51
|
+
|
52
|
+
1. Fork it ( https://github.com/codelandev/codeland-starter/fork )
|
53
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
54
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
55
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
56
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rspec/core/rake_task'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
|
4
|
+
desc 'Open an irb session preloaded with this library'
|
5
|
+
task :console do
|
6
|
+
sh 'irb -rubygems -I lib -r codeland/starter.rb'
|
7
|
+
end
|
8
|
+
|
9
|
+
# Default directory to look in is `/specs`
|
10
|
+
# Run with `rake spec`
|
11
|
+
RSpec::Core::RakeTask.new(:spec)
|
12
|
+
|
13
|
+
task :default => :spec
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'codeland/starter/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'codeland-starter'
|
8
|
+
spec.version = Codeland::Starter::VERSION
|
9
|
+
spec.authors = ['Sérgio Schnorr Júnior', 'Codeland']
|
10
|
+
spec.email = %w(jr.schnorr@gmail.com contato@codeland.com.br)
|
11
|
+
spec.summary = 'To create Rails projects with template and integrations'
|
12
|
+
spec.homepage = 'https://github.com/codelandev/codeland-starter'
|
13
|
+
spec.license = 'MIT'
|
14
|
+
|
15
|
+
spec.files = `git ls-files -z`.split("\x0")
|
16
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
17
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
18
|
+
spec.require_paths = %w(bin lib)
|
19
|
+
spec.bindir = 'bin'
|
20
|
+
|
21
|
+
spec.add_runtime_dependency 'platform-api'
|
22
|
+
spec.add_runtime_dependency 'rails', '> 3.1'
|
23
|
+
spec.add_runtime_dependency 'thor', '~> 0.19'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
26
|
+
spec.add_development_dependency 'rake'
|
27
|
+
spec.add_development_dependency 'rspec', '~> 3.1.0'
|
28
|
+
spec.add_development_dependency 'webmock', '~> 1.20.3'
|
29
|
+
spec.add_development_dependency 'simplecov', '~> 0.9.1'
|
30
|
+
spec.add_development_dependency 'simplecov-console'
|
31
|
+
spec.add_development_dependency 'pry'
|
32
|
+
spec.add_development_dependency 'codeclimate-test-reporter', '~> 0.4.1'
|
33
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'codeland/starter/version'
|
2
|
+
require 'codeland/starter/configuration'
|
3
|
+
dirname = File.dirname(__FILE__)
|
4
|
+
Dir["#{dirname}/starter/integrations/*.rb"].each do |file|
|
5
|
+
require file
|
6
|
+
end
|
7
|
+
|
8
|
+
module Codeland
|
9
|
+
module Starter
|
10
|
+
ROOT_PATH = File.join(File.dirname(__FILE__), '..', '..')
|
11
|
+
|
12
|
+
class << self
|
13
|
+
attr_reader :name, :config
|
14
|
+
|
15
|
+
def create_project(name, yaml_file)
|
16
|
+
@name = name
|
17
|
+
@config = Configuration.new(yaml_file)
|
18
|
+
create_rails_project
|
19
|
+
create_integrations
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_rails_project
|
23
|
+
options = [
|
24
|
+
'--database=postgresql',
|
25
|
+
"--template=#{File.join(ROOT_PATH, 'template', 'codeland.rb')}",
|
26
|
+
'--skip-bundle',
|
27
|
+
'--skip-test-unit'
|
28
|
+
]
|
29
|
+
system("rails new #{name} #{options.join(' ')}")
|
30
|
+
Dir.chdir(name)
|
31
|
+
end
|
32
|
+
|
33
|
+
def create_integrations
|
34
|
+
config.integrations && config.integrations.each do |integration|
|
35
|
+
integration_class_name = integration.capitalize
|
36
|
+
if have_integration?(integration_class_name)
|
37
|
+
client = Integrations.const_get(integration_class_name).new
|
38
|
+
client.perform
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def have_integration?(integration)
|
46
|
+
const_defined?(:Integrations) && Integrations.const_defined?(integration)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'codeland/starter'
|
2
|
+
require 'thor'
|
3
|
+
|
4
|
+
module Codeland
|
5
|
+
module Starter
|
6
|
+
class CLI < Thor
|
7
|
+
include Thor::Actions
|
8
|
+
|
9
|
+
desc 'create NAME', 'Ask for services to create with given NAME'
|
10
|
+
method_option :file, {
|
11
|
+
:required => true,
|
12
|
+
:default => "~/#{Configuration::DEFAULT_FILENAME}",
|
13
|
+
:aliases => :f,
|
14
|
+
:type => :string
|
15
|
+
}
|
16
|
+
def create(name)
|
17
|
+
Codeland::Starter.create_project(name, options[:file])
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'install', "Setup configuration yml to ~/#{Configuration::DEFAULT_FILENAME}"
|
21
|
+
def install
|
22
|
+
destination = File.join(Dir.home, Configuration::DEFAULT_FILENAME)
|
23
|
+
copy_file('codeland-starter.yml', destination)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def self.source_root
|
29
|
+
File.dirname(__FILE__)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'codeland/starter'
|
3
|
+
|
4
|
+
module Codeland
|
5
|
+
module Starter
|
6
|
+
class Configuration
|
7
|
+
attr_reader :yaml
|
8
|
+
|
9
|
+
DEFAULT_FILENAME = 'codeland-starter.yml'
|
10
|
+
|
11
|
+
def initialize(yaml_file)
|
12
|
+
@yaml = if File.exists?(yaml_file)
|
13
|
+
YAML.load_file(File.open(yaml_file))
|
14
|
+
elsif File.exists?(default_yaml_file)
|
15
|
+
YAML.load_file(File.open(default_yaml_file))
|
16
|
+
else
|
17
|
+
message = 'Please install with `codeland-starter install`'
|
18
|
+
raise MissingYAML, message
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def default_yaml_file
|
23
|
+
File.join(Dir.home, DEFAULT_FILENAME)
|
24
|
+
end
|
25
|
+
|
26
|
+
def integrations
|
27
|
+
yaml['integrations']
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.[](key)
|
31
|
+
Starter.config.yaml[key] if Starter.config
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class MissingYAML < StandardError; end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'codeland/starter'
|
2
|
+
require 'platform-api'
|
3
|
+
|
4
|
+
module Codeland
|
5
|
+
module Starter
|
6
|
+
module Integrations
|
7
|
+
class Heroku
|
8
|
+
attr_reader :app
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
token = if Configuration['heroku']
|
12
|
+
Configuration['heroku']['oauth_token']
|
13
|
+
else
|
14
|
+
yaml = Starter.config.yaml
|
15
|
+
message = "Missing heroku key in #{yaml}"
|
16
|
+
missing_config(message)
|
17
|
+
end
|
18
|
+
@app = {}
|
19
|
+
@success = false
|
20
|
+
@api = PlatformAPI.connect_oauth(token)
|
21
|
+
end
|
22
|
+
|
23
|
+
def perform
|
24
|
+
create
|
25
|
+
output
|
26
|
+
end
|
27
|
+
|
28
|
+
def create
|
29
|
+
begin
|
30
|
+
@app = create_app(Starter.name)
|
31
|
+
@success = true
|
32
|
+
rescue Excon::Errors::Unauthorized
|
33
|
+
yaml = Starter.config.yaml
|
34
|
+
missing_config("Please verify the Heroku oauth key in #{yaml}")
|
35
|
+
rescue Excon::Errors::UnprocessableEntity
|
36
|
+
@app = create_random_app
|
37
|
+
@success = true
|
38
|
+
ensure
|
39
|
+
add_git_remote
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def output
|
44
|
+
if success?
|
45
|
+
puts <<-MESSAGE.gsub(/^\s{12}/, '')
|
46
|
+
Heroku created with
|
47
|
+
URL: #{app['web_url']}
|
48
|
+
Git remote: #{app['git_url']}
|
49
|
+
MESSAGE
|
50
|
+
else
|
51
|
+
puts 'heroku failed'
|
52
|
+
puts app
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
attr_reader :api
|
59
|
+
|
60
|
+
def create_random_app
|
61
|
+
puts 'Heroku app already in use. Using a random name'
|
62
|
+
create_app
|
63
|
+
end
|
64
|
+
|
65
|
+
def create_app(app_name = nil)
|
66
|
+
api.app.create({
|
67
|
+
:name => app_name,
|
68
|
+
:region => 'us',
|
69
|
+
:stack => 'cedar'
|
70
|
+
})
|
71
|
+
end
|
72
|
+
|
73
|
+
def success?
|
74
|
+
@success
|
75
|
+
end
|
76
|
+
|
77
|
+
def missing_config(message)
|
78
|
+
raise MissingYAML, message
|
79
|
+
end
|
80
|
+
|
81
|
+
def add_git_remote
|
82
|
+
system("git remote add heroku #{app['git_url']}") if success?
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
{
|
2
|
+
"archived_at": "2012-01-01T12:00:00Z",
|
3
|
+
"buildpack_provided_description": "Ruby/Rack",
|
4
|
+
"build_stack": {
|
5
|
+
"id": "01234567-89ab-cdef-0123-456789abcdef",
|
6
|
+
"name": "cedar"
|
7
|
+
},
|
8
|
+
"created_at": "2012-01-01T12:00:00Z",
|
9
|
+
"git_url": "git@heroku.com:example.git",
|
10
|
+
"id": "01234567-89ab-cdef-0123-456789abcdef",
|
11
|
+
"maintenance": false,
|
12
|
+
"name": "example",
|
13
|
+
"owner": {
|
14
|
+
"email": "username@example.com",
|
15
|
+
"id": "01234567-89ab-cdef-0123-456789abcdef"
|
16
|
+
},
|
17
|
+
"region": {
|
18
|
+
"id": "01234567-89ab-cdef-0123-456789abcdef",
|
19
|
+
"name": "us"
|
20
|
+
},
|
21
|
+
"released_at": "2012-01-01T12:00:00Z",
|
22
|
+
"repo_size": 0,
|
23
|
+
"slug_size": 0,
|
24
|
+
"stack": {
|
25
|
+
"id": "01234567-89ab-cdef-0123-456789abcdef",
|
26
|
+
"name": "cedar"
|
27
|
+
},
|
28
|
+
"updated_at": "2012-01-01T12:00:00Z",
|
29
|
+
"web_url": "http://example.herokuapp.com/"
|
30
|
+
}
|