hightail 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE +20 -0
  4. data/README.md +46 -0
  5. data/Rakefile +1 -0
  6. data/USAGE +9 -0
  7. data/bin/hightail +15 -0
  8. data/hightail.gemspec +17 -0
  9. data/lib/hightail.rb +4 -0
  10. data/lib/hightail/app_builder.rb +40 -0
  11. data/lib/hightail/generators/app_generator.rb +94 -0
  12. data/lib/hightail/version.rb +3 -0
  13. data/templates/Gemfile +26 -0
  14. data/templates/README.md +2 -0
  15. data/templates/app_overrides/assets/stylesheets/application.css +7 -0
  16. data/templates/app_overrides/assets/stylesheets/common.css.sass +40 -0
  17. data/templates/app_overrides/assets/stylesheets/form_builder.css.sass +112 -0
  18. data/templates/app_overrides/assets/stylesheets/layout.css.sass +50 -0
  19. data/templates/app_overrides/assets/stylesheets/reset.css.sass +35 -0
  20. data/templates/app_overrides/views/layouts/application.html.haml.tt +16 -0
  21. data/templates/config.ru +3 -0
  22. data/templates/config/application.rb +40 -0
  23. data/templates/config/databases/postgresql.yml +19 -0
  24. data/templates/config/environments/development.rb.tt +28 -0
  25. data/templates/config/environments/production.rb.tt +60 -0
  26. data/templates/config/environments/test.rb.tt +38 -0
  27. data/templates/config/initializers/backtrace_silencers.rb +7 -0
  28. data/templates/config/initializers/form_builder.rb.tt +3 -0
  29. data/templates/config/initializers/haml.rb +1 -0
  30. data/templates/config/initializers/inflections.rb +8 -0
  31. data/templates/config/initializers/mime_types.rb +3 -0
  32. data/templates/config/initializers/secret_token.rb.tt +5 -0
  33. data/templates/config/initializers/session_store.rb.tt +6 -0
  34. data/templates/config/initializers/wrap_parameters.rb.tt +15 -0
  35. data/templates/config/locales/en.yml +1 -0
  36. data/templates/config/locales/form_builder.en.yml +6 -0
  37. data/templates/config/routes.rb +3 -0
  38. data/templates/doc/README_FOR_APP.tt +1 -0
  39. data/templates/gitignore +9 -0
  40. data/templates/lib/%app_name%/form_builder.rb.tt +171 -0
  41. data/templates/lib/generators/haml.rb +28 -0
  42. data/templates/lib/generators/haml/controller/controller_generator.rb +15 -0
  43. data/templates/lib/generators/haml/controller/templates/view.html.haml +2 -0
  44. data/templates/lib/generators/haml/scaffold/scaffold_generator.rb +38 -0
  45. data/templates/lib/generators/haml/scaffold/templates/_form.html.haml +6 -0
  46. data/templates/lib/generators/haml/scaffold/templates/delete.html.haml +9 -0
  47. data/templates/lib/generators/haml/scaffold/templates/edit.html.haml +9 -0
  48. data/templates/lib/generators/haml/scaffold/templates/index.html.haml +23 -0
  49. data/templates/lib/generators/haml/scaffold/templates/new.html.haml +9 -0
  50. data/templates/lib/generators/haml/scaffold/templates/show.html.haml +13 -0
  51. data/templates/rspec +1 -0
  52. data/templates/rvmrc +40 -0
  53. data/templates/spec/spec_helper.rb +17 -0
  54. metadata +121 -0
@@ -0,0 +1,50 @@
1
+ @import 'common'
2
+
3
+ body
4
+ background-color: $background
5
+ color: $text
6
+ font-family: 'Helvetica', sans-serif
7
+ padding: $spacer
8
+
9
+ a
10
+ color: $link
11
+
12
+ & > header
13
+ margin-bottom: $spacer
14
+
15
+ h1
16
+ font-size: $line-height * 2
17
+
18
+ a
19
+ color: $black
20
+ text-decoration: none
21
+
22
+ & > section
23
+ & > h1
24
+ font-size: $line-height
25
+
26
+ & > nav
27
+ margin: $spacer 0
28
+ overflow: auto
29
+
30
+ a
31
+ border: 2px solid $blue
32
+ display: block
33
+ float: left
34
+ font-size: 0.75em
35
+ font-weight: bold
36
+ line-height: $line-height / 0.75
37
+ margin-right: (0.5em / 0.75)
38
+ padding: 0 (0.5em / 0.75)
39
+ text-decoration: none
40
+ text-transform: uppercase
41
+
42
+ & > footer
43
+ border-top: 1px solid $gray
44
+ color: $gray
45
+ margin-top: $spacer
46
+ text-align: right
47
+
48
+ small
49
+ font-size: 0.75em
50
+ line-height: $line-height / 0.75em
@@ -0,0 +1,35 @@
1
+ html, body, div, span,
2
+ applet, object, iframe,
3
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
4
+ a, abbr, acronym, address, big, cite, code,
5
+ del, dfn, em, font, img, ins, kbd, q, s, samp,
6
+ small, strike, strong, sub, sup, tt, var,
7
+ dd, dl, dt, li, ol, ul,
8
+ fieldset, form, label, legend,
9
+ table, caption, tbody, tfoot, thead, tr, th, td
10
+ border: 0
11
+ font-family: inherit
12
+ font-size: 100%
13
+ font-style: inherit
14
+ font-weight: inherit
15
+ line-height: 1
16
+ margin: 0
17
+ padding: 0
18
+ vertical-align: baseline
19
+
20
+ caption, th
21
+ text-align: left
22
+
23
+ a img, :link img, :visited img
24
+ border: 0
25
+
26
+ table
27
+ border-collapse: collapse
28
+ border-spacing: 0
29
+
30
+ ol, ul
31
+ list-style: none
32
+
33
+ q:before, q:after,
34
+ blockquote:before, blockquote:after
35
+ content: ""
@@ -0,0 +1,16 @@
1
+ !!!
2
+ %html{ html_attrs('en_us') }
3
+ %head
4
+ %title <%= app_name.humanize.titleize %>
5
+ = stylesheet_link_tag('application')
6
+ = javascript_include_tag('application')
7
+ = csrf_meta_tags
8
+
9
+ %body{ class: "#{controller_name} #{action_name}" }
10
+ %header
11
+ %h1= link_to '<%= app_name.humanize.titleize %>', root_path
12
+
13
+ %section= yield
14
+
15
+ %footer
16
+ %small &copy; #{Time.zone.today.year} <%= app_name.humanize.titleize %>
@@ -0,0 +1,3 @@
1
+ require ::File.expand_path('../config/environment', __FILE__)
2
+
3
+ run <%= app_const %>
@@ -0,0 +1,40 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ <% if include_all_railties? -%>
4
+ require 'rails/all'
5
+ <% else -%>
6
+ <%= comment_if :skip_active_record %>require 'active_record/railtie'
7
+ require 'action_controller/railtie'
8
+ require 'action_mailer/railtie'
9
+ require 'active_resource/railtie'
10
+ <%= comment_if :skip_sprockets %>require 'sprockets/railtie'
11
+ <% unless options[:skip_test_unit] %>require 'rails/test_unit/railtie'
12
+ <% end -%>
13
+ <% end -%>
14
+
15
+ if defined?(Bundler)
16
+ Bundler.require(*Rails.groups(:assets => %w(development test)))
17
+ end
18
+
19
+ module <%= app_const_base %>
20
+ class Application < Rails::Application
21
+ # Defaults
22
+ config.encoding = 'utf-8'
23
+ config.filter_parameters += [:password]
24
+
25
+ # Load Paths
26
+ config.autoload_paths << config.root.join('lib')
27
+ #config.active_record.observers = :cacher
28
+ <% unless options.skip_sprockets? -%>
29
+
30
+ # Assets
31
+ config.assets.enabled = true
32
+ config.assets.version = '1.0'
33
+ <% end -%>
34
+
35
+ # Generators
36
+ config.generators.test_framework :rspec, view_specs: false
37
+ config.generators.template_engine :haml
38
+ config.sass.preferred_syntax = :sass
39
+ end
40
+ end
@@ -0,0 +1,19 @@
1
+ defaults: &defaults
2
+ adapter: postgresql
3
+ encoding: unicode
4
+ pool: 20
5
+ username: <%= app_name %>
6
+ password:
7
+ min_messages: WARNING
8
+
9
+ development:
10
+ <<: *defaults
11
+ database: <%= app_name %>_development
12
+
13
+ test:
14
+ <<: *defaults
15
+ database: <%= app_name %>_test
16
+
17
+ production:
18
+ <<: *defaults
19
+ database: <%= app_name %>_development
@@ -0,0 +1,28 @@
1
+ <%= app_const %>.configure do
2
+ # In the development environment your application's code is reloaded on
3
+ # every request. This slows down response time but is perfect for development
4
+ # since you don't have to restart the web server when you make code changes.
5
+ config.cache_classes = false
6
+
7
+ # Log error messages when you accidentally call methods on nil.
8
+ config.whiny_nils = true
9
+
10
+ # Show full error reports and disable caching
11
+ config.consider_all_requests_local = true
12
+ config.action_controller.perform_caching = false
13
+
14
+ # Don't care if the mailer can't send
15
+ config.action_mailer.raise_delivery_errors = false
16
+
17
+ # Print deprecation notices to the Rails logger
18
+ config.active_support.deprecation = :log
19
+
20
+ # Only use best-standards-support built into browsers
21
+ config.action_dispatch.best_standards_support = :builtin
22
+
23
+ # Do not compress assets
24
+ config.assets.compress = false
25
+
26
+ # Expands the lines which load the assets
27
+ config.assets.debug = true
28
+ end
@@ -0,0 +1,60 @@
1
+ <%= app_const %>.configure do
2
+ # Code is not reloaded between requests
3
+ config.cache_classes = true
4
+
5
+ # Full error reports are disabled and caching is turned on
6
+ config.consider_all_requests_local = false
7
+ config.action_controller.perform_caching = true
8
+
9
+ # Disable Rails' static asset server (Apache or nginx will already do this)
10
+ config.serve_static_assets = false
11
+
12
+ # Compress JavaScripts and CSS
13
+ config.assets.compress = true
14
+
15
+ # Don't fallback to assets pipeline if a pre-compiled asset is missed
16
+ config.assets.compile = false
17
+
18
+ # Generate digests for assets URLs
19
+ config.assets.digest = true
20
+
21
+ # Defaults to Rails.root.join('public/assets')
22
+ #config.assets.manifest = YOUR_PATH
23
+
24
+ # Specifies the header that your server uses for sending files
25
+ #config.action_dispatch.x_sendfile_header = 'X-Sendfile' # for Apache
26
+ #config.action_dispatch.x_sendfile_header = 'X-Accel-Redirect' # for nginx
27
+
28
+ # Force all access to the app over SSL, use Strict-Transport-Security, and
29
+ # use secure cookies.
30
+ #config.force_ssl = true
31
+
32
+ # See everything in the log (default is :info)
33
+ #config.log_level = :debug
34
+
35
+ # Use a different logger for distributed setups
36
+ #config.logger = SyslogLogger.new
37
+
38
+ # Use a different cache store in production
39
+ #config.cache_store = :mem_cache_store
40
+
41
+ # Enable serving of images, stylesheets, and JavaScripts from an asset server
42
+ #config.action_controller.asset_host = 'http://assets.example.com'
43
+
44
+ # Precompile additional assets (application.js, application.css, and all
45
+ # non-JS/CSS are already added)
46
+ #config.assets.precompile += %w( search.js )
47
+
48
+ # Disable delivery errors, bad email addresses will be ignored
49
+ #config.action_mailer.raise_delivery_errors = false
50
+
51
+ # Enable threaded mode
52
+ #config.threadsafe!
53
+
54
+ # Enable locale fallbacks for I18n (makes lookups for any locale fall back to
55
+ # the I18n.default_locale when a translation can not be found)
56
+ config.i18n.fallbacks = true
57
+
58
+ # Send deprecation notices to registered listeners
59
+ config.active_support.deprecation = :notify
60
+ end
@@ -0,0 +1,38 @@
1
+ <%= app_const %>.configure do
2
+ # The test environment is used exclusively to run your application's test
3
+ # suite. You never need to work with it otherwise. Remember that your test
4
+ # database is "scratch space" for the test suite and is wiped and recreated
5
+ # between test runs. Don't rely on the data there!
6
+ config.cache_classes = true
7
+
8
+ # Configure static asset server for tests with Cache-Control for performance
9
+ config.serve_static_assets = true
10
+ config.static_cache_control = 'public, max-age=3600'
11
+
12
+ # Log error messages when you accidentally call methods on nil
13
+ config.whiny_nils = true
14
+
15
+ # Show full error reports and disable caching
16
+ config.consider_all_requests_local = true
17
+ config.action_controller.perform_caching = false
18
+
19
+ # Raise exceptions instead of rendering exception templates
20
+ config.action_dispatch.show_exceptions = false
21
+
22
+ # Disable request forgery protection in test environment
23
+ config.action_controller.allow_forgery_protection = false
24
+
25
+ # Tell Action Mailer not to deliver emails to the real world.
26
+ # The :test delivery method accumulates sent emails in the
27
+ # ActionMailer::Base.deliveries array.
28
+ config.action_mailer.delivery_method = :test
29
+
30
+ # Use SQL instead of Active Record's schema dumper when creating the test
31
+ # database. This is necessary if your schema can't be completely dumped by
32
+ # the schema dumper, like if you have constraints or database-specific column
33
+ # types
34
+ #config.active_record.schema_format = :sql
35
+
36
+ # Print deprecation notices to the stderr
37
+ config.active_support.deprecation = :stderr
38
+ end
@@ -0,0 +1,7 @@
1
+ # You can add backtrace silencers for libraries that you're using but don't
2
+ # wish to see in your backtraces.
3
+ #Rails.backtrace_cleaner.add_silencer { |line| line =~ /my_noisy_library/ }
4
+
5
+ # You can also remove all the silencers if you're trying to debug a problem
6
+ # that might stem from framework code.
7
+ #Rails.backtrace_cleaner.remove_silencers!
@@ -0,0 +1,3 @@
1
+ <%= app_const %>.configure do
2
+ config.action_view.default_form_builder <%= app_const_base %>::FormBuilder
3
+ end
@@ -0,0 +1 @@
1
+ Haml::Template.options[:attr_wrapper] = '"'
@@ -0,0 +1,8 @@
1
+ # Add new inflection rules using the following format (all these examples are
2
+ # active by default):
3
+ #ActiveSupport::Inflector.inflections do |inflect|
4
+ # inflect.plural /^(ox)$/i, '\1en'
5
+ # inflect.singular /^(ox)en/i, '\1'
6
+ # inflect.irregular 'person', 'people'
7
+ # inflect.uncountable %w(fish sheep)
8
+ #end
@@ -0,0 +1,3 @@
1
+ # Add new MIME types for use in respond_to blocks:
2
+ #Mime::Type.register 'text/richtext', :rtf
3
+ #Mime::Type.register_alias 'text/html', :iphone
@@ -0,0 +1,5 @@
1
+ # Your secret key for verifying the integrity of signed cookies. If you change
2
+ # this key, all old signed cookies will become invalid! Make sure the secret is
3
+ # at least 30 characters and all random, no regular words or you'll be exposed
4
+ # to dictionary attacks.
5
+ <%= app_const %>.config.secret_token = '<%= app_secret %>'
@@ -0,0 +1,6 @@
1
+ <%= app_const %>.config.session_store :cookie_store, <%= key_value :key, "'_#{app_name}_session'" %>
2
+
3
+ # Use the database for sessions instead of the cookie-based default, which
4
+ # shouldn't be used to store highly confidential information (create the
5
+ # session table with "rails generate session_migration")
6
+ #<%= app_const %>.config.session_store :active_record_store
@@ -0,0 +1,15 @@
1
+ # This file contains settings for ActionController::ParamsWrapper which
2
+ # is enabled by default.
3
+
4
+ # Enable parameter wrapping for JSON. You can disable this by setting :format
5
+ # to an empty array.
6
+ ActiveSupport.on_load(:action_controller) do
7
+ wrap_parameters <%= key_value :format, '[:json]' %>
8
+ end
9
+ <%- unless options.skip_active_record? -%>
10
+
11
+ # Disable root element in JSON by default.
12
+ ActiveSupport.on_load(:active_record) do
13
+ self.include_root_in_json = false
14
+ end
15
+ <%- end -%>
@@ -0,0 +1 @@
1
+ en:
@@ -0,0 +1,6 @@
1
+ en:
2
+ errors:
3
+ template:
4
+ header:
5
+ one: 'Error'
6
+ other: 'Errors'
@@ -0,0 +1,3 @@
1
+ <%= app_const %>.routes.draw do
2
+ #root :to => 'pages#index'
3
+ end
@@ -0,0 +1 @@
1
+ = <%= app_const_base %>
@@ -0,0 +1,9 @@
1
+ *.swp
2
+ .bundle
3
+ .sass-cache
4
+ bin
5
+ config/database.yml
6
+ db/*.sqlite3
7
+ log/*.log
8
+ public/assets
9
+ tmp
@@ -0,0 +1,171 @@
1
+ # encoding: UTF-8
2
+
3
+ module <%= app_const_base %>
4
+ class FormBuilder < ActionView::Helpers::FormBuilder
5
+ def error_messages(options={})
6
+ if object.errors.any?
7
+ header = I18n.t('errors.template.header', :count => object.errors.count)
8
+
9
+ @template.capture_haml do
10
+ @template.haml_tag(:fieldset, :class => 'errors') do
11
+ @template.haml_tag(:legend, header)
12
+
13
+ @template.haml_tag(:ul) do
14
+ object.errors.full_messages.each do |message|
15
+ @template.haml_tag(:li, message)
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ def fieldset(options={}, &block)
24
+ legend = options.delete(:legend)
25
+
26
+ @template.capture_haml do
27
+ @template.haml_tag(:fieldset, options) do
28
+ @template.haml_tag(:legend, legend) if legend
29
+ yield(self)
30
+ end
31
+ end
32
+ end
33
+
34
+ def section(options={}, &block)
35
+ options[:class] = "#{options[:class]} section".strip
36
+
37
+ @template.capture_haml do
38
+ @template.haml_tag(:div, options) { yield(self) }
39
+ end
40
+ end
41
+
42
+ def input(method, options={}, &block)
43
+ type = options.delete(:type)
44
+ instructions = options.delete(:instructions)
45
+
46
+ style = ['field']
47
+ style << (options.delete(:required) ? 'required' : 'optional')
48
+ style << 'checkbox' if type == :check_box
49
+ style << 'radio' if type == :radio_button
50
+ style << options.delete(:style) if options[:style]
51
+ style.uniq!
52
+
53
+ input = case type
54
+ when :check_box
55
+ checked_value = options.delete(:checked_value)
56
+ unchecked_value = options.delete(:unchecked_value)
57
+ checked_value = '1' if unchecked_value && checked_value.blank?
58
+ arguments = [options, checked_value, unchecked_value].compact
59
+ send(type, method, *arguments)
60
+ when :radio_button
61
+ value = options.delete(:value)
62
+ object_method = method
63
+ method = "#{method.to_s.gsub(/\?$/, '')}_#{value.gsub(/\s/, '_')}".downcase
64
+ send(type, object_method, value, options)
65
+ when :date_select
66
+ @template.capture_haml do
67
+ @template.haml_tag(:div, input, :class => 'group')
68
+ end
69
+ when :collection_select
70
+ collection = options.delete(:collection)
71
+ value_method = options.delete(:value_method)
72
+ text_method = options.delete(:text_method)
73
+ html_options = options.delete(:html) || {}
74
+ send(type, method, collection, value_method, text_method, options, html_options)
75
+ when :time_zone_select
76
+ priority_zones = options.delete(:priority_zones)
77
+ send(type, method, priority_zones, options)
78
+ else
79
+ send(type, method, options)
80
+ end
81
+
82
+ label = label != false ? label(method) : nil
83
+ markup = [label, input].compact
84
+ markup.reverse! if [:check_box, :radio_button].include?(type)
85
+
86
+ @template.capture_haml do
87
+ @template.haml_tag(:div, :class => style.join(' ')) do
88
+ @template.haml_concat(markup.join)
89
+ yield(self) if block_given?
90
+ @template.haml_concat(instructions(instructions)) if instructions
91
+ end
92
+ end
93
+ end
94
+
95
+ def text(method, options={}, &block)
96
+ input(method, options.merge(:type => :text_field), &block)
97
+ end
98
+
99
+ def number(method, options={}, &block)
100
+ input(method, options.merge(:type => :number_field), &block)
101
+ end
102
+
103
+ def password(method, options={}, &block)
104
+ input(method, options.merge(:type => :password_field), &block)
105
+ end
106
+
107
+ def area(method, options={}, &block)
108
+ input(method, options.merge(:type => :text_area), &block)
109
+ end
110
+
111
+ def checkbox(method, options={}, &block)
112
+ input(method, options.merge(:type => :check_box), &block)
113
+ end
114
+
115
+ def radio(method, options={}, &block)
116
+ input(method, options.merge(:type => :radio_button), &block)
117
+ end
118
+
119
+ def file(method, options={}, &block)
120
+ input(method, options.merge(:type => :file_field), &block)
121
+ end
122
+
123
+ def select(*args, &block)
124
+ method = args.shift
125
+ options = args.extract_options!
126
+
127
+ options[:collection] = args[0]
128
+ options[:value_method] = args[1]
129
+ options[:text_method] = args[2]
130
+ input(method, options.merge(:type => :collection_select), &block)
131
+ end
132
+
133
+ def date(method, options={}, &block)
134
+ input(method, options.merge(:type => :date_select), &block)
135
+ end
136
+
137
+ def time(method, options={}, &block)
138
+ input(method, options.merge(:type => :time_select), &block)
139
+ end
140
+
141
+ def date_time(method, options={}, &block)
142
+ input(method, options.merge(:type => :datetime_select), &block)
143
+ end
144
+
145
+ def expiration(method, options={}, &block)
146
+ options.reverse_merge!(:add_month_numbers => true, :discard_day => true, :order => [:month, :year], :start_year => Date.today.year, :prompt => '')
147
+ input(method, options.merge(:type => :date_select), &block)
148
+ end
149
+
150
+ def time_zone(method, options, &block)
151
+ input(method, options.merge(:type => :time_zone_select), &block)
152
+ end
153
+
154
+ def instructions(text_or_nil_with_block=nil, &block)
155
+ content = text_or_nil_with_block || @template.capture_haml(&block)
156
+
157
+ @template.capture_haml do
158
+ @template.haml_tag(:p, content, :class => 'instructions')
159
+ end
160
+ end
161
+
162
+ def submit(value, options={}, &block)
163
+ @template.capture_haml do
164
+ @template.haml_tag(:div, :class => 'submit') do
165
+ @template.haml_concat(super(value, options))
166
+ yield(self) if block_given?
167
+ end
168
+ end
169
+ end
170
+ end
171
+ end