venus 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -0,0 +1,82 @@
1
+ Features
2
+ ========
3
+
4
+ * Auto setup rubygems from Gemfile, bundle and generate related files.
5
+ * Can be used in exists project.
6
+
7
+ Installation
8
+ ============
9
+
10
+ ```ruby
11
+ group :development do
12
+ ...
13
+ gem 'venus', '~> 0.2.0'
14
+ ...
15
+ end
16
+ ```
17
+
18
+ Usage
19
+ =====
20
+
21
+ Project basic rubygems
22
+
23
+ ```
24
+ rails generate venus:init
25
+ ```
26
+
27
+ Setting Mysql connection
28
+
29
+ ```
30
+ rails generate venus:mysql
31
+ ```
32
+
33
+ Pagination gem "kaminari"
34
+
35
+ ```
36
+ rails generate venus:paginate
37
+ ```
38
+
39
+ Settings gem "settingslogic"
40
+
41
+ ```
42
+ rails generate venus:settingslogic
43
+ ```
44
+
45
+ gem 'devise', default generate model `User`
46
+
47
+ ```
48
+ rails generate venus:devise
49
+ ```
50
+
51
+ Facebook login (for model `User`)
52
+
53
+ ```
54
+ rails generate venus:fbauth
55
+ ```
56
+
57
+ Rspec testing framework
58
+
59
+ ```
60
+ rails generate venus:rspec
61
+ ```
62
+
63
+ TODO
64
+ ====
65
+
66
+ * Capistrano with multi-stages extendsion.
67
+ * MongoDB / Redis configuration.
68
+ * Twitter Bootstrap layout.
69
+ * Carrierwave with rmagick & fog.
70
+ * Aws SES for sending email.
71
+ * RailsAdmin or ActiveAdmin.
72
+ * Sidekiq for background job.
73
+
74
+ Thanks
75
+ ======
76
+
77
+ Idea is from xdite/bootstrappers (https://github.com/xdite/bootstrappers).
78
+
79
+ Contribution
80
+ ============
81
+
82
+ Just send pull request :)
@@ -0,0 +1,21 @@
1
+ require 'rails/generators'
2
+ require "generators/venus/helpers"
3
+ module Venus
4
+ module Generators
5
+ class Base < ::Rails::Generators::Base
6
+ include Rails::Generators::ResourceHelpers
7
+
8
+ include Rails::Generators::Migration
9
+ def self.next_migration_number(path)
10
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
11
+ end
12
+
13
+ include Venus::Generators::Helpers
14
+
15
+ def self.source_root
16
+ File.expand_path(File.join(File.dirname(__FILE__), generator_name, 'templates'))
17
+ end
18
+
19
+ end
20
+ end
21
+ end
@@ -8,7 +8,7 @@ module Venus
8
8
  end
9
9
 
10
10
  def asks
11
- @views = ask("Generate views? [y/N]").downcase
11
+ @views = ask?("Generate views?", false)
12
12
  # if @views == 'y' && has_gem?('haml')
13
13
  # @haml = ask("Use haml? [Y/n]").downcase
14
14
  # end
@@ -25,7 +25,7 @@ module Venus
25
25
  end
26
26
 
27
27
  def views
28
- if @views == 'y'
28
+ if @views
29
29
  generate 'devise:views -e erb'
30
30
  # if @haml != 'n'
31
31
  # run 'gem install haml hpricot ruby_parser'
@@ -1,24 +1,21 @@
1
1
  module Venus
2
2
  module Generators
3
- class OmniauthFbGenerator < Base
4
- desc "Setup omniauth-fb"
3
+ class FbauthGenerator < Base
4
+ desc "Setup gem 'omniauth-fb'"
5
5
 
6
6
  def asks
7
- generate 'venus:settinglogic' unless has_gem?('settingslogic')
7
+ say 'checking dependent gems "settinglogic"...'
8
+ generate 'venus:settingslogic' unless has_gem?('settingslogic')
9
+ say 'checking dependent gems "devise"...'
8
10
  generate 'venus:devise' unless has_gem?('devise')
9
- @fb_app_id = ask("Facebook App ID? [267188576687915]")
10
- @fb_app_id = '267188576687915' unless @fb_app_id.present?
11
- @fb_secret = ask("Facebook App Secret? [84f72292e1f6b299f4a668f12ed1a7f2]")
12
- @fb_secret = '84f72292e1f6b299f4a668f12ed1a7f2' unless @fb_secret.present?
13
- @settinglogic_class = ask("Your settinglogic class name? [Setting]")
14
- @settinglogic_class = 'Setting' unless @settinglogic_class.present?
15
- @settinglogic_yml = ask("Your settinglogic yaml file? [setting.yml]")
16
- @settinglogic_yml = 'setting.yml' unless @settinglogic_yml.present?
11
+ @fb_app_id = ask?("Facebook App ID?", '267188576687915')
12
+ @fb_secret = ask?("Facebook App Secret?", '84f72292e1f6b299f4a668f12ed1a7f2')
13
+ @settinglogic_class = ask?("Your settinglogic class name?", 'Setting')
14
+ @settinglogic_yml = ask?("Your settinglogic yaml file in config/ ?", 'setting.yml')
17
15
  end
18
16
 
19
-
20
17
  def name
21
- "OmniauthFB"
18
+ "Omniauth FB"
22
19
  end
23
20
 
24
21
  def gemfile
@@ -50,9 +47,7 @@ module Venus
50
47
  end
51
48
 
52
49
  def msg
53
- if ask("Run 'bundle exec rake db:migrate'? [Y/n]").downcase != 'n'
54
- run('bundle exec rake db:migrate')
55
- end
50
+ run('bundle exec rake db:migrate') if ask?("Run 'bundle exec rake db:migrate'?", true)
56
51
  end
57
52
 
58
53
  end
@@ -1,19 +1,48 @@
1
- require 'rails/generators'
2
1
  module Venus
3
2
  module Generators
4
- class Base < ::Rails::Generators::Base
5
- include Rails::Generators::ResourceHelpers
6
- include Rails::Generators::Migration
7
- def self.next_migration_number(path)
8
- Time.now.utc.strftime("%Y%m%d%H%M%S")
3
+ module Helpers
4
+
5
+ private
6
+
7
+ def ask?(message, default_ans = true)
8
+ postfix = " [" + (!!default_ans == default_ans ? (default_ans ? 'Y/n' : 'y/N') : default_ans.to_s) + "]"
9
+ ans = ask("#{message}#{postfix}")
10
+ return (ans.present? ? (['n','N'].include?(ans) ? false : ans) : default_ans)
9
11
  end
10
- # include Venus::Generators::Helpers
11
12
 
12
- def self.source_root
13
- File.expand_path(File.join(File.dirname(__FILE__), generator_name, 'templates'))
13
+ def read_destanation_file(filepath)
14
+ File.open(File.join(destination_root, filepath)).read
15
+ end
16
+
17
+ def file_has_content?(to_file, line)
18
+ read_destanation_file(to_file).index(line)
19
+ end
20
+
21
+ def has_gem?(gemname)
22
+ file_has_content?('Gemfile', /gem[ ]+['"]#{gemname}['"]/m)
23
+ end
24
+
25
+ def has_file?(file)
26
+ File.exists?(File.join(destination_root, file))
27
+ end
28
+
29
+ def load_template(template_file)
30
+ template(template_file, 'tpl', :verbose => false)
31
+ content = read_destanation_file('tpl')
32
+ remove_file('tpl', :verbose => false)
33
+ content
34
+ end
35
+
36
+ def add_gem(gemname, options = {})
37
+ if options.is_a?(Hash)
38
+ options = (options.size > 0 ? options.to_s[1..-2] : "")
39
+ elsif options.is_a?(String)
40
+ options = "'#{options}'"
41
+ end
42
+ options = ", #{options}" if options.size > 0
43
+ append_file("Gemfile", "\ngem '#{gemname}'#{options}\n") unless has_gem?(gemname)
14
44
  end
15
45
 
16
- private
17
46
 
18
47
  def insert_template(to_file, template_file, options = {})
19
48
  insert_content = load_template(template_file)
@@ -42,46 +71,25 @@ module Venus
42
71
  end
43
72
  end
44
73
 
45
- def file_has_content?(to_file, line)
46
- read_destanation_file(to_file).index(line)
47
- end
48
-
49
- def add_gem(gemname, options = {})
50
- gemfile_content = read_destanation_file("Gemfile")
51
- if options.is_a?(Hash)
52
- options = (options.size > 0 ? options.to_s[1..-2] : "")
53
- elsif options.is_a?(String)
54
- options = "'#{options}'"
74
+ def replace_in_file(destanation_file, find, replace)
75
+ contents = read_destanation_file(destanation_file)
76
+ unless contents.gsub!(find, replace)
77
+ raise "#{find.inspect} not found in #{destanation_file}"
55
78
  end
56
- options = ", #{options}" if options.size > 0
57
- append_file("Gemfile", "\ngem '#{gemname}'#{options}\n") unless /\ngem[ ]+['"]#{gemname}['"]/m =~ gemfile_content
58
- end
59
-
60
- def has_file?(file)
61
- File.exists?(File.join(destination_root, file))
79
+ File.open(destanation_file, "w") { |file| file.write(contents) }
62
80
  end
63
81
 
64
- def replace_in_file(relative_path, find, replace)
65
- contents = read_destanation_file(relative_path)
66
- unless contents.gsub!(find, replace)
67
- raise "#{find.inspect} not found in #{relative_path}"
82
+ def add_gitignore(line)
83
+ if has_file?(".gitignore") && !file_has_content?(".gitignore", line)
84
+ insert_line_into_file ".gitignore", line
68
85
  end
69
- File.open(path, "w") { |file| file.write(contents) }
70
86
  end
71
87
 
72
- def has_gem?(gemname)
73
- file_has_content?('Gemfile', /gem[ ]+['"]#{gemname}['"]/m)
88
+ # copy from Rails::Generators::AppGenerator
89
+ def app_name
90
+ File.basename(destination_root)
74
91
  end
75
92
 
76
- def read_destanation_file(filepath)
77
- File.open(File.join(destination_root, filepath)).read
78
- end
79
- def load_template(template_file)
80
- template(template_file, 'tpl', :verbose => false)
81
- content = read_destanation_file('tpl')
82
- remove_file('tpl', :verbose => false)
83
- content
84
- end
85
93
  end
86
94
  end
87
- end
95
+ end
@@ -1,7 +1,7 @@
1
1
  module Venus
2
2
  module Generators
3
3
  class InitGenerator < Base
4
- desc "Init Setup"
4
+ desc "Setup essential gems"
5
5
 
6
6
  def name
7
7
  "initalize"
@@ -10,14 +10,26 @@ module Venus
10
10
  def asks
11
11
  @gems = {}
12
12
  [:simple_form, :nested_form, :haml, :whenever].each do |gemname|
13
- @gems[gemname] = ask("install gem '#{gemname}'? [Y/n]").downcase
13
+ @gems[gemname] = ask?("install gem '#{gemname}'?", true)
14
14
  end
15
- @gem_development = ask("install group gems for development? [Y/n]").downcase
16
- @paginate = ask('install paginate gem "kaminari"? [Y/n]')
15
+ @gem_development = ask?("install group gems for development?", true)
16
+ @paginate = ask?('install paginate gem "kaminari"?', true) unless has_gem?('kaminari')
17
+ end
18
+
19
+ def remove_usless_file
20
+ remove_file 'public/index.html'
21
+ remove_file 'app/assets/images/rails.png'
22
+ end
23
+
24
+ def enable_email_delivery_error
25
+ file = 'config/environments/development.rb'
26
+ find = 'raise_delivery_errors = false'
27
+ replace = 'raise_delivery_errors = true'
28
+ replace_in_file(file, find, replace) if file_has_content?(file, find)
17
29
  end
18
30
 
19
31
  def gems
20
- if @gem_development != 'n'
32
+ if @gem_development
21
33
  @is_append = !file_has_content?('Gemfile','group :development do')
22
34
  if @is_append
23
35
  concat_template('Gemfile', 'gem_developments.erb')
@@ -26,7 +38,7 @@ module Venus
26
38
  end
27
39
  end
28
40
  @gems.each do |gemname, ans|
29
- add_gem(gemname.to_s) if ans != 'n' && !has_gem?(gemname)
41
+ add_gem(gemname.to_s) if ans
30
42
  end
31
43
  end
32
44
 
@@ -35,7 +47,7 @@ module Venus
35
47
  end
36
48
 
37
49
  def paginate
38
- if @paginate != 'n'
50
+ if @paginate
39
51
  generate 'venus:paginate'
40
52
  end
41
53
  end
@@ -0,0 +1,39 @@
1
+ module Venus
2
+ module Generators
3
+ class MysqlGenerator < Base
4
+ desc "Setup MySql database connection"
5
+
6
+ def asks
7
+ @user = ask?("database login user?", 'root')
8
+ @pass = ask?("database login password?", '')
9
+ @db = ask?("database name? (will append rails env as postfix)", app_name)
10
+ @recreate = ask?("drop db before create?", true)
11
+ end
12
+
13
+ def name
14
+ "MySql"
15
+ end
16
+
17
+ def gemfile
18
+ add_gem('mysql2')
19
+ end
20
+
21
+ def gitignore
22
+ add_gitignore "config/database.yml"
23
+ end
24
+
25
+ def config_yml
26
+ template 'database.yml.erb', 'config/database.yml', :force => true
27
+ @pass = ''
28
+ template 'database.yml.erb', 'config/database.yml.example', :force => true
29
+ run 'bundle install'
30
+ end
31
+
32
+ def create
33
+ run('bundle exec rake db:drop') if @recreate
34
+ run('bundle exec rake db:create')
35
+ end
36
+
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,16 @@
1
+ development: &default
2
+ adapter: mysql2
3
+ encoding: utf8
4
+ database: <%= @db %>_development
5
+ host: localhost
6
+ username: '<%= @user %>'
7
+ password: '<%= @pass %>'
8
+
9
+ test: &TEST
10
+ <<: *default
11
+ database: <%= @db %>_test
12
+
13
+ production:
14
+ <<: *default
15
+ database: <%= @db %>_production
16
+
@@ -1,16 +1,16 @@
1
1
  module Venus
2
2
  module Generators
3
3
  class PaginateGenerator < Base
4
- desc "Paginate"
4
+ desc "Pagination gem - 'kaminari'"
5
5
 
6
6
  def name
7
7
  "Paginate"
8
8
  end
9
9
 
10
10
  def asks
11
- @kaminari_views = ask("generate kaminari views? [y/N]").downcase
12
- if has_gem?('haml') && @kaminari_views == 'y'
13
- @kaminari_haml = ask("Haml kaminari views? [Y/n]").downcase
11
+ @kaminari_views = ask?("generate kaminari views?", false)
12
+ if has_gem?('haml') && @kaminari_views
13
+ @kaminari_haml = ask?("Haml kaminari views?", true)
14
14
  end
15
15
  end
16
16
 
@@ -23,7 +23,7 @@ module Venus
23
23
  end
24
24
 
25
25
  def kaminari_views
26
- if @kaminari_views == 'y'
26
+ if @kaminari_views
27
27
  haml = @kaminari_haml != 'n' ? ' -e haml' : ''
28
28
  generate 'kaminari:views default' + haml
29
29
  end
@@ -32,8 +32,10 @@ module Venus
32
32
  "spec_helper.rb",
33
33
  :before => "\nend\n"
34
34
  )
35
- line = ' config.include Devise::TestHelpers, :type => :controller'
36
- inset_line_into_file(line, to_file, :before => "\nend\n") if has_gem?('devise')
35
+ if has_gem?('devise')
36
+ line = ' config.include Devise::TestHelpers, :type => :controller'
37
+ insert_line_into_file(to_file, line, :before => "\nend\n")
38
+ end
37
39
  end
38
40
 
39
41
  end
@@ -1,13 +1,11 @@
1
1
  module Venus
2
2
  module Generators
3
- class SettinglogicGenerator < Base
3
+ class SettingslogicGenerator < Base
4
4
  desc "Install gem settinglogic"
5
5
 
6
6
  def asks
7
- @filename = ask("Your yaml file name in config/ ? [setting.yml]")
8
- @filename = "setting.yml" unless @filename.present?
9
- @setting_class = ask("Your setting class name ? [Setting]")
10
- @setting_class = "Setting" unless @setting_class.present?
7
+ @filename = ask?("Your yaml file name in config/ ?", 'setting.yml')
8
+ @setting_class = ask?("Your setting class name ?", 'Setting')
11
9
  end
12
10
 
13
11
  def name
@@ -22,7 +20,7 @@ module Venus
22
20
  def config
23
21
  template "setting.yml", "config/#{@filename}"
24
22
  template "setting.yml", "config/#{@filename}.example"
25
- insert_line_into_file ".gitignore", "/config/#{@filename}" if has_file?(".gitignore")
23
+ add_gitignore "/config/#{@filename}"
26
24
  end
27
25
 
28
26
  def class_file
data/lib/venus/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Venus
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/venus.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require "venus/version"
2
- require "generators/venus/venus"
2
+ require "generators/venus/base"
3
3
  module Venus
4
4
  # Your code goes here...
5
5
  end
data/venus.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Venus::VERSION
9
9
  gem.authors = ["marsz"]
10
10
  gem.email = "marsz@5fpro.com"
11
- gem.description = %q{ Many rubygems generators & auto configuration. }
12
- gem.summary = %q{ Many rubygems generators & auto configuration. }
11
+ gem.description = %q{ Use rails generator to install and setup rubygems such as rspec, devise, omniauth-facebook...etc. Also can use in exists projects. }
12
+ gem.summary = %q{ Use rails generator to install and setup rubygems such as rspec, devise, omniauth-facebook...etc. Also can use in exists projects. }
13
13
  gem.homepage = "https://github.com/marsz/venus"
14
14
 
15
15
  gem.files = `git ls-files`.split($/)
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
18
  gem.require_paths = ["lib"]
19
19
 
20
- gem.add_dependency 'railties'
21
- gem.add_dependency 'activesupport'
20
+ gem.add_dependency 'railties', '>=3.1.3'
21
+ gem.add_dependency 'activesupport', '>=3.1.3'
22
22
  gem.add_dependency 'bundler', '>= 1.1'
23
23
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: venus
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -18,7 +18,7 @@ dependencies:
18
18
  requirements:
19
19
  - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: '0'
21
+ version: 3.1.3
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: '0'
29
+ version: 3.1.3
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: activesupport
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -34,7 +34,7 @@ dependencies:
34
34
  requirements:
35
35
  - - ! '>='
36
36
  - !ruby/object:Gem::Version
37
- version: '0'
37
+ version: 3.1.3
38
38
  type: :runtime
39
39
  prerelease: false
40
40
  version_requirements: !ruby/object:Gem::Requirement
@@ -42,7 +42,7 @@ dependencies:
42
42
  requirements:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: 3.1.3
46
46
  - !ruby/object:Gem::Dependency
47
47
  name: bundler
48
48
  requirement: !ruby/object:Gem::Requirement
@@ -59,7 +59,8 @@ dependencies:
59
59
  - - ! '>='
60
60
  - !ruby/object:Gem::Version
61
61
  version: '1.1'
62
- description: ! ' Many rubygems generators & auto configuration. '
62
+ description: ! ' Use rails generator to install and setup rubygems such as rspec,
63
+ devise, omniauth-facebook...etc. Also can use in exists projects. '
63
64
  email: marsz@5fpro.com
64
65
  executables: []
65
66
  extensions: []
@@ -71,24 +72,27 @@ files:
71
72
  - README.md
72
73
  - Rakefile
73
74
  - TODO.md
75
+ - lib/generators/venus/base.rb
74
76
  - lib/generators/venus/devise/devise_generator.rb
77
+ - lib/generators/venus/fbauth/fbauth_generator.rb
78
+ - lib/generators/venus/fbauth/templates/migration.rb
79
+ - lib/generators/venus/fbauth/templates/omniauth.erb
80
+ - lib/generators/venus/fbauth/templates/routes.rb
81
+ - lib/generators/venus/fbauth/templates/sessions_controller.rb
82
+ - lib/generators/venus/fbauth/templates/user.rb
83
+ - lib/generators/venus/helpers.rb
75
84
  - lib/generators/venus/init/init_generator.rb
76
85
  - lib/generators/venus/init/templates/gem_developments.erb
77
- - lib/generators/venus/omniauth_fb/omniauth_fb_generator.rb
78
- - lib/generators/venus/omniauth_fb/templates/migration.rb
79
- - lib/generators/venus/omniauth_fb/templates/omniauth.erb
80
- - lib/generators/venus/omniauth_fb/templates/routes.rb
81
- - lib/generators/venus/omniauth_fb/templates/sessions_controller.rb
82
- - lib/generators/venus/omniauth_fb/templates/user.rb
86
+ - lib/generators/venus/mysql/mysql_generator.rb
87
+ - lib/generators/venus/mysql/templates/database.yml.erb
83
88
  - lib/generators/venus/paginate/paginate_generator.rb
84
89
  - lib/generators/venus/rspec/rspec_generator.rb
85
90
  - lib/generators/venus/rspec/templates/config_application.rb
86
91
  - lib/generators/venus/rspec/templates/gemfile.rb
87
92
  - lib/generators/venus/rspec/templates/spec_helper.rb
88
- - lib/generators/venus/settinglogic/settinglogic_generator.rb
89
- - lib/generators/venus/settinglogic/templates/setting.erb
90
- - lib/generators/venus/settinglogic/templates/setting.yml
91
- - lib/generators/venus/venus.rb
93
+ - lib/generators/venus/settingslogic/settingslogic_generator.rb
94
+ - lib/generators/venus/settingslogic/templates/setting.erb
95
+ - lib/generators/venus/settingslogic/templates/setting.yml
92
96
  - lib/venus.rb
93
97
  - lib/venus/version.rb
94
98
  - venus.gemspec
@@ -115,5 +119,6 @@ rubyforge_project:
115
119
  rubygems_version: 1.8.24
116
120
  signing_key:
117
121
  specification_version: 3
118
- summary: Many rubygems generators & auto configuration.
122
+ summary: Use rails generator to install and setup rubygems such as rspec, devise,
123
+ omniauth-facebook...etc. Also can use in exists projects.
119
124
  test_files: []