hightail 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 (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