sanji 1.0.0.pre

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: db57a4e0739187f622d2dfd0e997135ac62bb85d
4
+ data.tar.gz: fa9dc9a29f35da36a0cd46150927a579bfda400e
5
+ SHA512:
6
+ metadata.gz: 399f7e0e08d027a55c717a2bdcd0522adb6433e9b79d3f369a0ee14f5d8c3ddc583f584daaba233bfc9ec25f707bcbfe7cc2a57f0d247ce5c07bbf10d7c05e61
7
+ data.tar.gz: 18aed75ec1c1fe017eb316bf603c206ed6e6ac705c1630aec79232743ede32923a7200eb40c1412ec8cd8ff159d69c5660f1e5952b4f94f25547f2ffc0b378c9
data/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # sanji
2
+
3
+ ![sanji](http://icons.iconarchive.com/icons/crountch/one-piece-character/256/Sanji-icon.png)
data/bin/sanji ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'sanji'
4
+
5
+ templates_root =
6
+ File.expand_path(File.join('..', 'templates'), File.dirname(__FILE__))
7
+
8
+ Sanji::AppGenerator.source_root templates_root
9
+
10
+ Sanji::AppGenerator.source_paths <<
11
+ Rails::Generators::AppGenerator.source_root <<
12
+ templates_root
13
+
14
+ Sanji::AppGenerator.start
@@ -0,0 +1,59 @@
1
+ module Sanji
2
+ class AppBuilder < Rails::AppBuilder
3
+
4
+ RECIPES = [
5
+ :Setup,
6
+ :Annotate,
7
+ :Draper,
8
+ :Figaro,
9
+ :Haml,
10
+ :Paloma,
11
+ :Postgresql,
12
+ :Reform,
13
+ :Seedbank,
14
+ :Frontend,
15
+ :SimpleGems,
16
+ :Controllers,
17
+ :Devise,
18
+ :Cleanup
19
+ ]
20
+
21
+ def after_create_tasks
22
+ RECIPES.each do |name|
23
+ self.get_recipe_instance(name).run_after_create
24
+ end
25
+ end
26
+
27
+ def after_bundle_tasks
28
+ RECIPES.each do |name|
29
+ self.get_recipe_instance(name).run_after_bundle
30
+ end
31
+ end
32
+
33
+ def after_everything_tasks
34
+ RECIPES.each do |name|
35
+ self.get_recipe_instance(name).run_after_everything
36
+ end
37
+ end
38
+
39
+
40
+
41
+ protected
42
+
43
+ def get_recipe_instance name
44
+ recipe = self.recipe_instances[name]
45
+ return recipe if recipe
46
+
47
+ recipe_class = ::Sanji::Recipes.const_get name
48
+ recipe = recipe_class.new self
49
+
50
+ self.recipe_instances[name] = recipe
51
+ recipe
52
+ end
53
+
54
+ def recipe_instances
55
+ @recipe_instances ||= {}
56
+ end
57
+
58
+ end
59
+ end
@@ -0,0 +1,39 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/rails/app/app_generator'
3
+
4
+ module Sanji
5
+ class AppGenerator < Rails::Generators::AppGenerator
6
+
7
+ def finish_template
8
+ invoke :sanji_after_create_tasks
9
+ super
10
+ end
11
+
12
+ def run_after_bundle_callbacks
13
+ invoke :sanji_after_bundle_tasks
14
+ super
15
+ invoke :sanji_after_everything_tasks
16
+ end
17
+
18
+ def sanji_after_create_tasks
19
+ build :after_create_tasks
20
+ end
21
+
22
+ def sanji_after_bundle_tasks
23
+ build :after_bundle_tasks
24
+ end
25
+
26
+ def sanji_after_everything_tasks
27
+ build :after_everything_tasks
28
+ end
29
+
30
+
31
+
32
+ protected
33
+
34
+ def get_builder_class
35
+ Sanji::AppBuilder
36
+ end
37
+
38
+ end
39
+ end
@@ -0,0 +1,96 @@
1
+ class Sanji::Assistant
2
+
3
+ attr_reader :builder
4
+
5
+ def initialize recipe, builder
6
+ @recipe = recipe
7
+ @builder = builder
8
+ end
9
+
10
+ def method_missing name, *args, &block
11
+ self.builder.send name, *args, &block
12
+ end
13
+
14
+
15
+
16
+ def text &block
17
+ Sanji::Utilities::Text.create &block
18
+ end
19
+
20
+ def generator name, value
21
+ self.builder.insert_into_file 'config/application.rb',
22
+ self.text { |t| t.indent(3).puts "g.#{name} #{value}" },
23
+ :after => "# sanji-generators\n"
24
+ end
25
+
26
+
27
+ # `block` will have an Sanji::Utilities::Text instance as an argument.
28
+ def application_config &block
29
+ config = self.text &block
30
+
31
+ self.builder.insert_into_file 'config/application.rb', config,
32
+ :after => "class Application < Rails::Application\n"
33
+ end
34
+
35
+ def bundle_exec command = ''
36
+ self.builder.run "bundle exec #{command}"
37
+ end
38
+
39
+ def add_gem name, version_or_options = nil, extra = nil
40
+ first_arg =
41
+ if version_or_options.is_a? String
42
+ "'#{version_or_options}'"
43
+ else
44
+ version_or_options.to_s.gsub /\{|\}/, ''
45
+ end
46
+
47
+ second_arg = extra.to_s.gsub(/\{|\}/, '') if extra
48
+
49
+ values = ["'#{name}'", first_arg, second_arg].reject &:blank?
50
+ entry = values.join ', '
51
+
52
+ self.builder.insert_into_file 'Gemfile', :after => "# sanji-gems\n" do
53
+ "gem #{entry}\n"
54
+ end
55
+ end
56
+
57
+ def remove_gem name
58
+ self.builder.gsub_file 'Gemfile',
59
+ Regexp.new("^\\s*gem ('|\")#{name}('|\").*\\n"), ''
60
+ end
61
+
62
+ def delete_file filename
63
+ self.builder.run "rm #{filename}"
64
+ end
65
+
66
+ def log_start method_name
67
+ self.say "start ##{method_name}"
68
+ end
69
+
70
+ def log_end method_name
71
+ self.say "end ##{method_name}"
72
+ end
73
+
74
+ def say text
75
+ self.builder.say recipe_message(text), Thor::Shell::Color::YELLOW
76
+ end
77
+
78
+ def ask question
79
+ self.builder.ask recipe_message(question)
80
+ end
81
+
82
+ def yes? question
83
+ self.builder.yes? recipe_message("#{question} (y/n)")
84
+ end
85
+
86
+ def no? question
87
+ self.builder.no? recipe_message("#{question} (y/n)")
88
+ end
89
+
90
+ private
91
+
92
+ def recipe_message message = ''
93
+ "#{@recipe.class.name} -> #{message}"
94
+ end
95
+
96
+ end
@@ -0,0 +1,36 @@
1
+ class Sanji::Recipe
2
+
3
+ attr_reader :a
4
+
5
+ def initialize builder
6
+ @a = Sanji::Assistant.new self, builder
7
+ end
8
+
9
+ def run_after_create
10
+ a.log_start :after_create
11
+ self.after_create
12
+ a.log_end :after_create
13
+ end
14
+
15
+ def run_after_bundle
16
+ a.log_start :after_bundle
17
+ self.after_bundle
18
+ a.log_end :after_bundle
19
+ end
20
+
21
+ def run_after_everything
22
+ a.log_start :after_everything
23
+ self.after_everything
24
+ a.log_end :after_everything
25
+ end
26
+
27
+ def after_create
28
+ end
29
+
30
+ def after_bundle
31
+ end
32
+
33
+ def after_everything
34
+ end
35
+
36
+ end
@@ -0,0 +1,11 @@
1
+ class Sanji::Recipes::Annotate < Sanji::Recipe
2
+
3
+ def after_create
4
+ a.add_gem 'annotate'
5
+ end
6
+
7
+ def after_bundle
8
+ a.generate 'annotate:install'
9
+ end
10
+
11
+ end
@@ -0,0 +1,19 @@
1
+ class Sanji::Recipes::Cleanup < Sanji::Recipe
2
+
3
+ def after_everything
4
+ # remove all helper comments from Setup recipe.
5
+ [
6
+ 'config/application.rb',
7
+ 'Gemfile'
8
+ ].each { |file| a.gsub_file file, /^\s*# sanji.*\n/, '' }
9
+
10
+ self.remove_gemfile_comments
11
+ end
12
+
13
+ protected
14
+
15
+ def remove_gemfile_comments
16
+ a.gsub_file 'Gemfile', /^\s*#.*\n/, ''
17
+ end
18
+
19
+ end
@@ -0,0 +1,80 @@
1
+ class Sanji::Recipes::Controllers < Sanji::Recipe
2
+
3
+ def after_bundle
4
+ self.setup_public
5
+
6
+ self.setup_admin if self.has_admin?
7
+ self.setup_private if self.has_private?
8
+ end
9
+
10
+ protected
11
+
12
+ def has_admin?
13
+ a.yes? 'Create admin namespace?'
14
+ end
15
+
16
+ def has_private?
17
+ a.yes? 'Create private module for logged-in non-admin users?'
18
+ end
19
+
20
+ def has_homepage?
21
+ a.yes? 'Create controller for public home page?'
22
+ end
23
+
24
+ def setup_admin
25
+ a.generate 'controller', 'admin/base'
26
+
27
+ a.inside 'app/views/admin' do
28
+ a.run 'rm -R base'
29
+ end
30
+
31
+ route =
32
+ a.text do |t|
33
+ t.indent.puts 'namespace :admin do'
34
+ t.indent.puts 'end'
35
+ end
36
+
37
+ a.route route
38
+ end
39
+
40
+ def setup_private
41
+ a.generate 'controller', 'private/base'
42
+
43
+ a.inside 'app/views/private' do
44
+ a.run 'rm -R base'
45
+ end
46
+
47
+ route =
48
+ a.text do |t|
49
+ t.indent.puts 'scope :module => :private do'
50
+ t.indent.puts 'end'
51
+ end
52
+
53
+ a.route route
54
+ end
55
+
56
+ def setup_public
57
+ a.generate 'controller', 'public/base'
58
+
59
+ a.inside 'app/views/public' do
60
+ a.run 'rm -R base'
61
+ end
62
+
63
+ if self.has_homepage?
64
+ a.copy_file 'public_home_controller.rb',
65
+ 'app/controller/public/home_controller.rb'
66
+
67
+ a.template 'public_home_index.haml.erb', 'app/views/public/home/index.haml'
68
+
69
+ a.route "root :to => 'public/home#index'"
70
+
71
+ # Change public namespace to module only.
72
+ a.gsub_file 'config/routes.rb',
73
+ /namespace :public/,
74
+ 'scope :module => :public'
75
+ else
76
+ a.route "scope :module => :public do\n end"
77
+ end
78
+ end
79
+
80
+ end
@@ -0,0 +1,15 @@
1
+ class Sanji::Recipes::Devise < Sanji::Recipe
2
+
3
+ def after_create
4
+ a.add_gem 'devise', '~> 3.0.0'
5
+ end
6
+
7
+ def after_bundle
8
+ a.generate 'devise:install'
9
+ a.generate 'devise:views'
10
+ a.generate 'devise User'
11
+
12
+ a.rake 'db:migrate'
13
+ end
14
+
15
+ end
@@ -0,0 +1,14 @@
1
+ class Sanji::Recipes::Draper < Sanji::Recipe
2
+
3
+ def after_create
4
+ a.add_gem 'draper'
5
+ a.generator :decorator, false
6
+ end
7
+
8
+ def after_bundle
9
+ a.create_file 'app/decorators/application_decorator.rb' do
10
+ "class ApplicationDecorator < Draper::Decorator\nend"
11
+ end
12
+ end
13
+
14
+ end
@@ -0,0 +1,22 @@
1
+ class Sanji::Recipes::Figaro < Sanji::Recipe
2
+
3
+ def after_create
4
+ a.add_gem 'figaro'
5
+
6
+ self.create_application_yml_sample
7
+ end
8
+
9
+ def after_bundle
10
+ a.bundle_exec 'figaro install'
11
+ end
12
+
13
+ protected
14
+
15
+ def create_application_yml_sample
16
+ a.create_file 'config/application.sample.yml' do
17
+ "# This will be the template for application.yml\n" \
18
+ "# Put all valid keys here and their sample values."
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,47 @@
1
+ class Sanji::Recipes::Frontend < Sanji::Recipe
2
+
3
+ def after_create
4
+ self.application_css_to_scss
5
+
6
+ if self.use_bootstrap?
7
+ self.setup_bootstrap
8
+ else
9
+ self.setup_normalize
10
+ end
11
+ end
12
+
13
+ protected
14
+
15
+ def application_css_to_scss
16
+ a.inside 'app/assets/stylesheets' do
17
+ a.run 'mv application.css application.scss'
18
+ end
19
+ end
20
+
21
+ def use_bootstrap?
22
+ a.yes? 'Use twitter bootstrap css and javascripts?'
23
+ end
24
+
25
+ def setup_bootstrap
26
+ a.add_gem 'bootstrap-sass'
27
+
28
+ a.insert_into_file 'app/assets/stylesheets/application.scss',
29
+ :after => "*/\n" do
30
+ "@import 'bootstrap-sprockets';\n" \
31
+ "@import 'bootstrap';\n"
32
+ end
33
+
34
+ a.insert_into_file 'app/assets/javascripts/application.js',
35
+ "//= require bootstrap-sprockets\n",
36
+ :after => "//= require jquery\n"
37
+ end
38
+
39
+ def setup_normalize
40
+ a.add_gem 'normalize-rails'
41
+
42
+ a.insert_into_file 'app/assets/stylesheets/application.scss',
43
+ "@import 'normalize-rails';\n",
44
+ :after => "*/\n"
45
+ end
46
+
47
+ end
@@ -0,0 +1,11 @@
1
+ class Sanji::Recipes::Haml < Sanji::Recipe
2
+
3
+ def after_create
4
+ a.add_gem 'haml-rails'
5
+ end
6
+
7
+ def after_everything
8
+ a.rake 'haml:erb2haml'
9
+ end
10
+
11
+ end
@@ -0,0 +1,9 @@
1
+ class Sanji::Recipes::Paloma < Sanji::Recipe
2
+
3
+ def after_create
4
+ a.insert_into_file 'app/assets/javascripts/application.js',
5
+ "//= require paloma\n",
6
+ :after => "//= require jquery_ujs\n"
7
+ end
8
+
9
+ end
@@ -0,0 +1,23 @@
1
+ class Sanji::Recipes::Postgresql < Sanji::Recipe
2
+
3
+ def after_create
4
+ a.remove_gem 'sqlite3'
5
+ a.add_gem 'pg'
6
+
7
+ self.create_database_yml
8
+ end
9
+
10
+
11
+ protected
12
+
13
+ def create_database_yml
14
+ username = a.ask 'Development database username?'
15
+ password = a.ask 'Development database password?'
16
+
17
+ a.delete_file 'config/database.yml'
18
+ a.template 'database.yml.erb', 'config/database.yml',
19
+ :username => username,
20
+ :password => password
21
+ end
22
+
23
+ end
@@ -0,0 +1,12 @@
1
+ class Sanji::Recipes::Reform < Sanji::Recipe
2
+
3
+ def after_create
4
+ a.add_gem 'reform'
5
+ a.add_gem 'virtus'
6
+ end
7
+
8
+ def after_bundle
9
+ a.copy_file 'base_form.rb', 'app/forms/base_form.rb'
10
+ end
11
+
12
+ end
@@ -0,0 +1,12 @@
1
+ class Sanji::Recipes::Seedbank < Sanji::Recipe
2
+
3
+ def after_create
4
+ a.add_gem 'seedbank'
5
+
6
+ [:development, :staging, :production].each do |env|
7
+ a.create_file "db/seeds/#{env}/main.seeds.rb",
8
+ "# rake db:seed:#{env}:main"
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,25 @@
1
+ class Sanji::Recipes::Setup < Sanji::Recipe
2
+
3
+ def after_create
4
+ self.add_generators_block
5
+ self.add_gemfile_marker
6
+ end
7
+
8
+
9
+ protected
10
+
11
+ def add_generators_block
12
+ a.application_config do |t|
13
+ t.indent(2).puts 'config.generators do |g|'
14
+ t.indent(3).puts '# sanji-generators'
15
+ t.indent(2).puts 'end'
16
+ end
17
+ end
18
+
19
+ def add_gemfile_marker
20
+ a.append_to_file 'Gemfile' do
21
+ "# sanji-gems\n"
22
+ end
23
+ end
24
+
25
+ end
@@ -0,0 +1,11 @@
1
+ class Sanji::Recipes::SimpleGems < Sanji::Recipe
2
+
3
+ def after_create
4
+ [:paperclip, :kaminari].each { |name| a.add_gem name }
5
+
6
+ [:thin, :quiet_assets].each do |name|
7
+ a.add_gem name, :group => [:development, :test]
8
+ end
9
+ end
10
+
11
+ end
@@ -0,0 +1,37 @@
1
+ class Sanji::Utilities::Text
2
+
3
+ attr_reader :value
4
+
5
+
6
+ def self.create &block
7
+ instance = self.new
8
+ block.call instance
9
+
10
+ instance.value
11
+ end
12
+
13
+
14
+ def initialize
15
+ @value = ''
16
+ end
17
+
18
+ def puts text = ''
19
+ self.value << "#{text}\n"
20
+ self
21
+ end
22
+
23
+ def print text = ''
24
+ self.value << "#{text}"
25
+ self
26
+ end
27
+
28
+ def indent quantity = 1
29
+ self.value << (' ' * quantity)
30
+ self
31
+ end
32
+
33
+ def empty_line
34
+ self.puts
35
+ end
36
+
37
+ end
data/lib/sanji.rb ADDED
@@ -0,0 +1,25 @@
1
+ module Sanji
2
+ module Recipes
3
+ end
4
+
5
+ module Utilities
6
+ end
7
+ end
8
+
9
+ # Require all utilities
10
+ Dir["#{File.dirname(__FILE__)}/sanji/utilities/*.rb"].each do |filename|
11
+ require filename.sub('.rb', '')
12
+ end
13
+
14
+
15
+ require 'sanji/assistant'
16
+ require 'sanji/recipe'
17
+
18
+ # Require all recipes
19
+ Dir["#{File.dirname(__FILE__)}/sanji/recipes/*.rb"].each do |filename|
20
+ require filename.sub('.rb', '')
21
+ end
22
+
23
+ require 'sanji/app_generator'
24
+ require 'sanji/app_builder'
25
+
metadata ADDED
@@ -0,0 +1,66 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sanji
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0.pre
5
+ platform: ruby
6
+ authors:
7
+ - Karl Paragua
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-12-09 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: rails application generator
14
+ email: kb.paragua@gmail.com
15
+ executables:
16
+ - sanji
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - README.md
21
+ - bin/sanji
22
+ - lib/sanji.rb
23
+ - lib/sanji/app_builder.rb
24
+ - lib/sanji/app_generator.rb
25
+ - lib/sanji/assistant.rb
26
+ - lib/sanji/recipe.rb
27
+ - lib/sanji/recipes/annotate.rb
28
+ - lib/sanji/recipes/cleanup.rb
29
+ - lib/sanji/recipes/controllers.rb
30
+ - lib/sanji/recipes/devise.rb
31
+ - lib/sanji/recipes/draper.rb
32
+ - lib/sanji/recipes/figaro.rb
33
+ - lib/sanji/recipes/frontend.rb
34
+ - lib/sanji/recipes/haml.rb
35
+ - lib/sanji/recipes/paloma.rb
36
+ - lib/sanji/recipes/postgresql.rb
37
+ - lib/sanji/recipes/reform.rb
38
+ - lib/sanji/recipes/seedbank.rb
39
+ - lib/sanji/recipes/setup.rb
40
+ - lib/sanji/recipes/simple_gems.rb
41
+ - lib/sanji/utilities/text.rb
42
+ homepage: https://www.github.com/kbparagua/sanji
43
+ licenses:
44
+ - MIT
45
+ metadata: {}
46
+ post_install_message:
47
+ rdoc_options: []
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ required_rubygems_version: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">"
58
+ - !ruby/object:Gem::Version
59
+ version: 1.3.1
60
+ requirements: []
61
+ rubyforge_project:
62
+ rubygems_version: 2.4.5.1
63
+ signing_key:
64
+ specification_version: 4
65
+ summary: rails application generator
66
+ test_files: []