core-generators 0.0.1

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.
Files changed (46) hide show
  1. data/.gitignore +3 -0
  2. data/Gemfile +4 -0
  3. data/README.textile +51 -0
  4. data/Rakefile +2 -0
  5. data/core-generators.gemspec +21 -0
  6. data/lib/core-generators.rb +6 -0
  7. data/lib/core/inherited_resource_controller.rb +10 -0
  8. data/lib/core/paginated_controller.rb +12 -0
  9. data/lib/core/version.rb +3 -0
  10. data/lib/generators/core/install/install_generator.rb +132 -0
  11. data/lib/generators/core/install/templates/bootstrap.rake +43 -0
  12. data/lib/generators/core/install/templates/locales/core.en.yml +20 -0
  13. data/lib/generators/core/install/templates/locales/core.es.yml +17 -0
  14. data/lib/generators/core/install/templates/settings.yml +17 -0
  15. data/lib/generators/core/install/templates/simple_form_custom.rb +58 -0
  16. data/lib/generators/core/layout/layout_generator.rb +42 -0
  17. data/lib/generators/core/layout/templates/core.js +113 -0
  18. data/lib/generators/core/layout/templates/core_helper.rb +114 -0
  19. data/lib/generators/core/layout/templates/images/arrow.png +0 -0
  20. data/lib/generators/core/layout/templates/images/boxbar-background.png +0 -0
  21. data/lib/generators/core/layout/templates/images/button-background-active.png +0 -0
  22. data/lib/generators/core/layout/templates/images/button-background.png +0 -0
  23. data/lib/generators/core/layout/templates/images/buttons/cross.png +0 -0
  24. data/lib/generators/core/layout/templates/images/buttons/edit.png +0 -0
  25. data/lib/generators/core/layout/templates/images/buttons/key.png +0 -0
  26. data/lib/generators/core/layout/templates/images/buttons/tick.png +0 -0
  27. data/lib/generators/core/layout/templates/images/menubar-background.png +0 -0
  28. data/lib/generators/core/layout/templates/stylesheets/base.sass +366 -0
  29. data/lib/generators/core/layout/templates/stylesheets/override.sass +1 -0
  30. data/lib/generators/core/layout/templates/stylesheets/style.sass +434 -0
  31. data/lib/generators/core/layout/templates/views/haml/_sidebar.html.haml +14 -0
  32. data/lib/generators/core/layout/templates/views/haml/layout.html.haml +38 -0
  33. data/lib/generators/core/scaffold/scaffold_generator.rb +125 -0
  34. data/lib/generators/core/scaffold/templates/controller.rb +10 -0
  35. data/lib/generators/core/scaffold/templates/helper.rb +3 -0
  36. data/lib/generators/core/scaffold/templates/migration.rb +16 -0
  37. data/lib/generators/core/scaffold/templates/model.rb +5 -0
  38. data/lib/generators/core/scaffold/templates/views/haml/_collection.html.haml +25 -0
  39. data/lib/generators/core/scaffold/templates/views/haml/_form.html.haml +13 -0
  40. data/lib/generators/core/scaffold/templates/views/haml/_search.html.haml +7 -0
  41. data/lib/generators/core/scaffold/templates/views/haml/edit.html.haml +11 -0
  42. data/lib/generators/core/scaffold/templates/views/haml/index.html.haml +8 -0
  43. data/lib/generators/core/scaffold/templates/views/haml/index.js.haml +1 -0
  44. data/lib/generators/core/scaffold/templates/views/haml/new.html.haml +12 -0
  45. data/lib/generators/core/scaffold/templates/views/haml/show.html.haml +19 -0
  46. metadata +112 -0
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in core-generators.gemspec
4
+ gemspec
@@ -0,0 +1,51 @@
1
+ h1. Core Generators
2
+
3
+ h2. Description
4
+
5
+ Scaffold generator, perfect for a new Rails 3 app. It features pagination, search, sort, and it's based on lots of known rubygems.
6
+
7
+ * inherited_resources
8
+ * show_for
9
+ * simple_form
10
+ * will_paginate
11
+ * haml
12
+ * web-app-theme
13
+ * meta-search
14
+
15
+ * nifty-generators (by Ryan bates) (totally ripped off)
16
+
17
+ h2. Instructions
18
+
19
+ h3. Create your app
20
+
21
+ <pre>
22
+ rails new APP_NAME
23
+ </pre>
24
+
25
+ h3. Configure Gemfile dependency
26
+
27
+ <pre>
28
+ gem 'core-generators', :group => :development
29
+ </pre>
30
+
31
+ h3. Run Core Installer Generator
32
+
33
+ <pre>
34
+ rails generate core:installer
35
+ </pre>
36
+
37
+ h3. Run Core Installer Layout
38
+
39
+ <pre>
40
+ rails generate core:layout LAYOUT_NAME
41
+ </pre>
42
+
43
+ h3. Run Core Installer Scaffold
44
+
45
+ <pre>
46
+ rails generate core:scaffold MODEL attributes:types actions
47
+ </pre>
48
+
49
+ h2. Disclaimer.
50
+
51
+ It's very opinionated. This is how I use it, so it may not be of your taste.
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "core/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "core-generators"
7
+ s.version = Core::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["lucasefe"]
10
+ s.email = ["lucasefe@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{core generators used by me}
13
+ s.description = %q{core generators used by me}
14
+
15
+ s.rubyforge_project = "core-generators"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
@@ -0,0 +1,6 @@
1
+ require 'core/inherited_resource_controller'
2
+ require 'core/paginated_controller'
3
+
4
+ module Core
5
+
6
+ end
@@ -0,0 +1,10 @@
1
+ module Core
2
+ module InheritedResourceController
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ inherit_resources
7
+ respond_to :html, :xml, :json, :js
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ module Core
2
+ module PaginatedController
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ def collection
7
+ @search = end_of_association_chain.search(params[:search])
8
+ get_collection_ivar || set_collection_ivar(@search.paginate(:page => params[:page], :per_page => 10))
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,3 @@
1
+ module Core
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,132 @@
1
+ class Core::InstallGenerator < Rails::Generators::Base
2
+ source_root File.expand_path('../templates', __FILE__)
3
+
4
+ def copy_load_setting_file
5
+ copy_file 'settings.yml', 'config/settings.yml'
6
+ initializer '001_load_config.rb', <<-FILE
7
+ require "ostruct"
8
+ conf = YAML.load(ERB.new(File.read("#{Rails.root}/config/settings.yml")).result)[Rails.env].symbolize_keys
9
+ APP_CONFIG = OpenStruct.new(conf)
10
+ FILE
11
+ end
12
+
13
+ def add_dependencies_to_gemfile
14
+ # General
15
+ gem 'ffaker'
16
+ gem 'haml-rails'
17
+ gem 'inherited_resources', '1.1.2'
18
+ gem 'jquery-rails', '0.2.6'
19
+ gem 'meta_search'
20
+ gem 'mysql2', '0.2.6'
21
+ gem 'show_for'
22
+ gem 'simple-navigation'
23
+ gem 'simple_form', '1.3.0'
24
+ gem 'whenever', '0.6.2'
25
+ gem 'will_paginate', '3.0.pre2'
26
+
27
+ # Development
28
+ gem 'annotate', :group => :development
29
+ gem 'irbtools', :group => :development, :require => false
30
+
31
+ # Test
32
+ with_options(:group => [:development, :test]) do |g|
33
+ g.gem 'delorean'
34
+ g.gem 'factory_girl', '2.0.0.beta1'
35
+ g.gem 'factory_girl_rails', '1.1.beta1'
36
+ g.gem 'fuubar'
37
+ g.gem 'rspec-rails', '2.4.1'
38
+ g.gem 'shoulda'
39
+ g.gem 'steak', '1.0.1'
40
+ end
41
+
42
+ ask("Before answering, please, run bundle install in another terminal (Sorry):")
43
+ end
44
+
45
+ def copy_locale_file
46
+ copy_file "locales/core.en.yml", "config/locales/core.en.yml"
47
+ copy_file "locales/core.es.yml", "config/locales/core.es.yml"
48
+ end
49
+
50
+ def setup_git_configutation
51
+ run 'rm README'
52
+ run 'cp config/database.yml config/database.yml.example'
53
+ run 'rm public/index.html'
54
+ run 'rm public/favicon.ico'
55
+ run 'rm public/images/rails.png'
56
+ run 'touch README'
57
+
58
+ # Ignoring files
59
+ create_file '.gitignore', <<-FILE
60
+ !gems/bundler
61
+ !gems/cache
62
+ *.swp
63
+ .bundle
64
+ .DS_Store
65
+ .yardoc
66
+ capybara*
67
+ config/database.yml
68
+ db/*.sqlite3
69
+ db/schema.rb
70
+ doc/api
71
+ doc/app
72
+ gems/*
73
+ log/*.log
74
+ nbproject/
75
+ public/system
76
+ public/uploads/*
77
+ tmp/**/*
78
+ FILE
79
+
80
+ git :init
81
+ git :add => '.gitignore'
82
+ git :commit => '-m "Adding ignore file".'
83
+ end
84
+
85
+ def run_generators_and_fetch_resources
86
+ with_ssl_fix_for_jquery_rails do
87
+ generate 'rspec:install'
88
+ generate 'jquery:install --ui'
89
+ run "curl -0 https://github.com/malsup/form/raw/master/jquery.form.js > public/javascripts/jquery.form.js "
90
+ end
91
+ end
92
+
93
+ def install_log_rotator
94
+ log_path = '#{Rails.root}/log/#{Rails.env}.log'
95
+ gsub_file 'config/application.rb', /(< Rails::Application.*)/ , "\\1\n config.logger = Logger.new(\"#{log_path}\", 50, 1048576)"
96
+ end
97
+
98
+ def add_default_root_page
99
+ generate 'controller Home index'
100
+ create_file 'app/views/home/index.html.haml', <<-INDEX
101
+ Welcome, change me, please.
102
+ INDEX
103
+ route "root :to => 'home#index'"
104
+ end
105
+
106
+ def install_haml_and_rails
107
+ gem 'haml-rails'
108
+ initializer 'haml_sass.rb',
109
+ 'Sass::Plugin.options[:template_location] = File.join([Rails.root, "app", "stylesheets"])'
110
+ end
111
+
112
+ def install_rake_tasks
113
+ copy_file("bootstrap.rake", 'lib/tasks/bootstrap.rake')
114
+ end
115
+
116
+ def install_simple_form_customizations
117
+ initializer 'load_simple_form_custom.rb', 'require "simple_form_custom"'
118
+ copy_file 'simple_form_custom.rb', 'lib/simple_form_custom.rb'
119
+ end
120
+
121
+ private
122
+
123
+ def with_ssl_fix_for_jquery_rails
124
+ initializer '002_fixes.rb', <<-FIX
125
+ # Until the issue with github ssl is fixed.
126
+ require 'openssl'
127
+ OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
128
+ FIX
129
+ yield
130
+ run 'rm config/initializers/002_fixes.rb'
131
+ end
132
+ end
@@ -0,0 +1,43 @@
1
+ task :adr => 'app:development:reset'
2
+ task :asr => 'app:staging:reset'
3
+ task :apr => 'app:production:reset'
4
+
5
+ namespace :app do
6
+ namespace :development do
7
+
8
+ desc "Reset development environment"
9
+ task :reset => [
10
+ "db:drop:all",
11
+ "db:create:all",
12
+ "db:migrate",
13
+ "app:bootstrap"
14
+ ]
15
+ end
16
+
17
+ namespace :staging do
18
+
19
+ desc "Reset staging environment"
20
+ task :reset => [
21
+ "db:drop:all",
22
+ "db:create:all",
23
+ "db:migrate",
24
+ "app:bootstrap"
25
+ ]
26
+ end
27
+
28
+ namespace :production do
29
+
30
+ desc "Reset production environment"
31
+ task :reset => [
32
+ "db:drop:all",
33
+ "db:create:all",
34
+ "db:migrate",
35
+ "app:bootstrap"
36
+ ]
37
+ end
38
+
39
+ desc "Boostrap the application"
40
+ task :bootstrap => :environment do
41
+
42
+ end
43
+ end
@@ -0,0 +1,20 @@
1
+ en:
2
+ core:
3
+ new: "New"
4
+ back: "Back"
5
+ edit: "Edit"
6
+ save: "Save"
7
+ update: "Update"
8
+ show: "Show"
9
+ delete: "Delete"
10
+ join: "Join"
11
+ join-button: "Yes, sign me in!"
12
+ no-button: "No"
13
+ cancel: "Cancel"
14
+ confirm: "Are you sure?"
15
+ home: "Home"
16
+ logout: "Logout"
17
+ profile: "Profile"
18
+
19
+
20
+
@@ -0,0 +1,17 @@
1
+ es:
2
+ core:
3
+ new: "New"
4
+ back: "Back"
5
+ edit: "Edit"
6
+ save: "Save"
7
+ update: "Update"
8
+ show: "Show"
9
+ delete: "Delete"
10
+ join: "Join"
11
+ join-button: "Yes, sign me in!"
12
+ no-button: "No"
13
+ cancel: "Cancel"
14
+ confirm: "Are you sure?"
15
+ home: "Home"
16
+ logout: "Logout"
17
+ profile: "Profile"
@@ -0,0 +1,17 @@
1
+ development: &non_production_settings
2
+ app_name: Application
3
+ admin_email: admin@example.com
4
+ no_reply_email: no-reply@example.com
5
+ default_password: "123456"
6
+
7
+ test: &test_settings
8
+ <<: *non_production_settings
9
+
10
+ cucumber:
11
+ <<: *test_settings
12
+
13
+ staging:
14
+ <<: *non_production_settings
15
+
16
+ production:
17
+ <<: *non_production_settings
@@ -0,0 +1,58 @@
1
+ module SimpleForm
2
+ module Inputs
3
+
4
+ class Base
5
+ def label_html_options
6
+ label_options = html_options_for(:label, [input_type, required_class, :label ])
7
+ label_options[:for] = options[:input_html][:id] if options.key?(:input_html)
8
+ label_options
9
+ end
10
+ def hint_html_options
11
+ html_options_for(:hint, [:description, :hint])
12
+ end
13
+ end
14
+
15
+ class StringInput < Base
16
+ def input_html_classes
17
+ classes = input_type == :string ? super : super.unshift("string")
18
+ classes << :text_field
19
+ end
20
+ end
21
+
22
+ class NumericInput < Base
23
+ def input_html_classes
24
+ super.unshift("text_field")
25
+ end
26
+ end
27
+
28
+ class BooleanInput < Base
29
+ end
30
+
31
+ class DatePickerInput < Base
32
+ def input
33
+ @builder.text_field(attribute_name, input_html_options)
34
+ end
35
+ end
36
+
37
+ class DateTimePickerInput < Base
38
+ def input
39
+ @builder.text_field(attribute_name, input_html_options) + "<span class='date_time_picker_button'>&nbsp;</span>".html_safe
40
+ end
41
+ end
42
+
43
+ class SubdomainInput < Base
44
+ def input
45
+ "http://" + @builder.text_field(attribute_name, input_html_options) + ".#{domain}"
46
+ end
47
+ def domain
48
+ input_options[:domain] || "hhh.com"
49
+ end
50
+ end
51
+ end
52
+ end
53
+
54
+ module SimpleForm
55
+ @@wrapper_class = :group
56
+ @@components = [ :label, :error, :input, :hint ]
57
+ @@wrapper_error_class = :error
58
+ end
@@ -0,0 +1,42 @@
1
+ require 'rails/generators/named_base'
2
+
3
+ class Core::LayoutGenerator < Rails::Generators::Base
4
+ attr_accessor :file_name
5
+
6
+ source_root File.expand_path('../templates', __FILE__)
7
+
8
+ argument :name, :default => 'application'
9
+
10
+ def initialize(*args, &block)
11
+ super
12
+ @file_name = name
13
+ end
14
+
15
+ def copy_layout_file
16
+ template "views/#{view_language}/layout.html.#{view_language}", "app/views/layouts/#{name}.html.#{view_language}"
17
+ end
18
+
19
+ def copy_sidebar_file
20
+ template "views/#{view_language}/_sidebar.html.#{view_language}", "app/views/shared/_sidebar.html.#{view_language}"
21
+ end
22
+
23
+ def copy_core_helper
24
+ template 'core_helper.rb', File.join('app/helpers', "core_helper.rb")
25
+ end
26
+
27
+ def copy_buttons
28
+ directory "images", "public/images"
29
+ end
30
+
31
+ def copy_static_files
32
+ directory "stylesheets", "app/stylesheets/#{file_name}"
33
+ copy_file 'core.js', "public/javascripts/core.js"
34
+ end
35
+
36
+ private
37
+
38
+ def view_language
39
+ 'haml'
40
+ end
41
+
42
+ end