phoenix_core 0.2.0.beta

Sign up to get free protection for your applications and to get access to all the features.
Files changed (76) hide show
  1. data/README.md +3 -0
  2. data/app/assets/images/favicon.ico +0 -0
  3. data/app/assets/images/noise.png +0 -0
  4. data/app/assets/javascripts/application.js +14 -0
  5. data/app/assets/stylesheets/application.css +8 -0
  6. data/app/assets/stylesheets/bootstrap.css +2467 -0
  7. data/app/assets/stylesheets/global.css +24 -0
  8. data/app/assets/stylesheets/landing.css +1 -0
  9. data/app/controllers/phoenix/base_controller.rb +5 -0
  10. data/app/controllers/phoenix/home_controller.rb +13 -0
  11. data/app/helpers/phoenix/base_helper.rb +4 -0
  12. data/app/mailers/phoenix/base_mailer.rb +10 -0
  13. data/app/models/phoenix/user.rb +8 -0
  14. data/app/views/phoenix/home/index.html.haml +13 -0
  15. data/app/views/phoenix/layouts/phoenix_core/application.html.erb +14 -0
  16. data/config/initializers/phoenix.rb +3 -0
  17. data/config/initializers/setup_mail.rb +19 -0
  18. data/config/initializers/simple_form.rb +93 -0
  19. data/config/locals/phoenix/en.yml +2 -0
  20. data/config/locals/simple_form/en.yml +23 -0
  21. data/config/locals/simple_form/zn-CN.yml +23 -0
  22. data/config/routes.rb +3 -0
  23. data/lib/generators/phoenix/app/app_generator.rb +209 -0
  24. data/lib/generators/phoenix/dummy/dummy_generator.rb +86 -0
  25. data/lib/generators/phoenix/dummy/templates/rails/Rakefile +7 -0
  26. data/lib/generators/phoenix/dummy/templates/rails/application.rb +14 -0
  27. data/lib/generators/phoenix/dummy/templates/rails/boot.rb +6 -0
  28. data/lib/generators/phoenix/dummy/templates/rails/mongoid.yml +0 -0
  29. data/lib/generators/phoenix/dummy/templates/rails/routes.rb +3 -0
  30. data/lib/generators/phoenix/extension/clash_keywords.yml +3 -0
  31. data/lib/generators/phoenix/extension/extension_generator.rb +137 -0
  32. data/lib/generators/phoenix/extension/templates/Gemfile +13 -0
  33. data/lib/generators/phoenix/extension/templates/README.md +21 -0
  34. data/lib/generators/phoenix/extension/templates/app/assets/javascripts/application.js +1 -0
  35. data/lib/generators/phoenix/extension/templates/app/assets/stylesheets/application.css +3 -0
  36. data/lib/generators/phoenix/extension/templates/app/controllers/phoenix/admin/plural_name_controller.rb +12 -0
  37. data/lib/generators/phoenix/extension/templates/app/controllers/phoenix/plural_name_controller.rb +32 -0
  38. data/lib/generators/phoenix/extension/templates/app/models/phoenix/plural_name/singular_name.rb +27 -0
  39. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/admin/plural_name/_actions.html.erb +28 -0
  40. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/admin/plural_name/_form.html.erb +68 -0
  41. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/admin/plural_name/_plural_name.html.erb +2 -0
  42. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/admin/plural_name/_records.html.erb +18 -0
  43. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/admin/plural_name/_singular_name.html.erb +18 -0
  44. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/admin/plural_name/_sortable_list.html.erb +7 -0
  45. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/admin/plural_name/edit.html.erb +1 -0
  46. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/admin/plural_name/index.html.erb +10 -0
  47. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/admin/plural_name/new.html.erb +1 -0
  48. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/plural_name/index.html.erb +11 -0
  49. data/lib/generators/phoenix/extension/templates/app/views/phoenix/plural_name/plural_name/show.html.erb +35 -0
  50. data/lib/generators/phoenix/extension/templates/config/locales/en.yml +5 -0
  51. data/lib/generators/phoenix/extension/templates/config/routes.rb +3 -0
  52. data/lib/generators/phoenix/extension/templates/extension.gemspec +28 -0
  53. data/lib/generators/phoenix/extension/templates/gitignore +10 -0
  54. data/lib/generators/phoenix/extension/templates/lib/generators/phoenix/plural_name_generator.rb +11 -0
  55. data/lib/generators/phoenix/extension/templates/lib/phoenix/plural_name.rb +25 -0
  56. data/lib/generators/phoenix/extension/templates/lib/phoenix/plural_name/engine.rb +29 -0
  57. data/lib/generators/phoenix/extension/templates/lib/phoenix_plural_name.rb +1 -0
  58. data/lib/generators/phoenix/extension/templates/lib/tasks/plural_name.rake +13 -0
  59. data/lib/generators/phoenix/extension/templates/phoenix_plural_name.gemspec +18 -0
  60. data/lib/generators/phoenix/extension/templates/spec/models/phoenix/singular_name_spec.rb +18 -0
  61. data/lib/generators/phoenix/extension/templates/spec/requests/phoenix/admin/plural_name_spec.rb +97 -0
  62. data/lib/generators/phoenix/extension/templates/spec/support/phoenix/factories.rb +7 -0
  63. data/lib/middleware/seo_assist.rb +0 -0
  64. data/lib/phoenix/core.rb +40 -0
  65. data/lib/phoenix/core/controller_helpers.rb +47 -0
  66. data/lib/phoenix/core/development_mail_interceptor.rb +10 -0
  67. data/lib/phoenix/core/engine.rb +10 -0
  68. data/lib/phoenix/core/ssl_requirement.rb +105 -0
  69. data/lib/phoenix/core/testing_support/common_rake.rb +25 -0
  70. data/lib/phoenix/core/testing_support/env.rb +2 -0
  71. data/lib/phoenix/engine.rb +65 -0
  72. data/lib/phoenix/version.rb +16 -0
  73. data/lib/phoenix_core.rb +3 -0
  74. data/lib/tasks/assets.rake +16 -0
  75. data/lib/tasks/phoenix.rake +2 -0
  76. metadata +252 -0
@@ -0,0 +1,24 @@
1
+ /* global.css */
2
+ body {
3
+ background:#fff url(/assets/noise.png);
4
+ }
5
+ header {
6
+ background: #333;
7
+ height: 60px;
8
+ }
9
+ #body {
10
+ width: 980px;
11
+ margin: 0 auto;
12
+ }
13
+ footer {
14
+ border-top: 1px solid #ccc;
15
+ margin: 0 auto;
16
+ }
17
+
18
+
19
+ #signup-form {
20
+
21
+ }
22
+ #signin-form {
23
+ padding: 30px 0;
24
+ }
@@ -0,0 +1 @@
1
+ /* landing.css */
@@ -0,0 +1,5 @@
1
+ module Phoenix
2
+ class BaseController < ActionController::Base
3
+ protect_from_forgery
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ module Phoenix
2
+ class HomeController < BaseController
3
+ def index
4
+ #RubyProf.start
5
+ "hello world!"
6
+ #results = RubyProf.stop
7
+
8
+ #File.open "/home/lanvige/repos/profile-index.html", 'a' do |file|
9
+ # RubyProf::GraphHtmlPrinter.new(results).print(file)
10
+ #end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,4 @@
1
+ module Phoenix
2
+ module BaseHelper
3
+ end
4
+ end
@@ -0,0 +1,10 @@
1
+ #require "resque"
2
+ module Phoenix
3
+ class BaseMailer < ActionMailer::Base
4
+ #include Resque::Mailer
5
+
6
+ #default :sender => Setting.email_sender
7
+ #helper :application,:users
8
+ #layout "mailer"
9
+ end
10
+ end
@@ -0,0 +1,8 @@
1
+ # Default implementation of User, make sure the single core feature can work normally.
2
+ # This class is intended to be modified by extensions.
3
+
4
+ module Phoenix
5
+ class User
6
+
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ %h1
2
+ hello world
3
+
4
+ - if current_user
5
+ = link_to current_user.name.to_s, user_path(current_user)
6
+
7
+ %br
8
+
9
+ = link_to 'Log In', login_path
10
+ %br
11
+ = link_to 'Sign UP', signup_path
12
+ %br
13
+ = link_to 'logout', logout_path
@@ -0,0 +1,14 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>PhoenixCore</title>
5
+ <%= stylesheet_link_tag "phoenix_core/application" %>
6
+ <%= javascript_include_tag "phoenix_core/application" %>
7
+ <%= csrf_meta_tags %>
8
+ </head>
9
+ <body>
10
+
11
+ <%= yield %>
12
+
13
+ </body>
14
+ </html>
@@ -0,0 +1,3 @@
1
+
2
+ # Configuration
3
+ #SESSION_KEY = '_phoenix_session_id'
@@ -0,0 +1,19 @@
1
+ # If you wish to intercept emails to go to a particuar email address
2
+ # ActionMailer::Base.register_interceptor(DevelopmentMailInterceptor) if Rails.env.development?
3
+
4
+ ActionMailer::Base.delivery_method = :smtp
5
+
6
+ Mail.register_interceptor(Phoenix::Core::DevelopmentMailInterceptor) if Rails.env.development?
7
+
8
+ # This assumes you're running your local development server on port 3000 via $ rails server
9
+ ActionMailer::Base.default_url_options = { :host => "localhost:3000" }
10
+
11
+ ActionMailer::Base.smtp_settings = {
12
+ :address => "smtp.gmail.com",
13
+ :port => 25,
14
+ :domain => "zhuke.me",
15
+ :authentication => :login,
16
+ :user_name => "zhuke.me@gmail.com",
17
+ :password => "zhuke.me001",
18
+ :tls => true
19
+ }
@@ -0,0 +1,93 @@
1
+ # Use this setup block to configure all options available in SimpleForm.
2
+ SimpleForm.setup do |config|
3
+ # Components used by the form builder to generate a complete input. You can remove
4
+ # any of them, change the order, or even add your own components to the stack.
5
+ # config.components = [ :placeholder, :label_input, :hint, :error ]
6
+
7
+ # Default tag used on hints.
8
+ # config.hint_tag = :span
9
+
10
+ # CSS class to add to all hint tags.
11
+ # config.hint_class = :hint
12
+
13
+ # CSS class used on errors.
14
+ # config.error_class = :error
15
+
16
+ # Default tag used on errors.
17
+ # config.error_tag = :span
18
+
19
+ # Method used to tidy up errors.
20
+ # config.error_method = :first
21
+
22
+ # Default tag used for error notification helper.
23
+ # config.error_notification_tag = :p
24
+
25
+ # CSS class to add for error notification helper.
26
+ # config.error_notification_class = :error_notification
27
+
28
+ # ID to add for error notification helper.
29
+ # config.error_notification_id = nil
30
+
31
+ # You can wrap all inputs in a pre-defined tag.
32
+ # config.wrapper_tag = :div
33
+
34
+ # CSS class to add to all wrapper tags.
35
+ # config.wrapper_class = :input
36
+
37
+ # CSS class to add to the wrapper if the field has errors.
38
+ # config.wrapper_error_class = :field_with_errors
39
+
40
+ # You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none.
41
+ # config.collection_wrapper_tag = nil
42
+
43
+ # You can wrap each item in a collection of radio/check boxes with a tag, defaulting to span.
44
+ # config.item_wrapper_tag = :span
45
+
46
+ # Series of attemps to detect a default label method for collection.
47
+ # config.collection_label_methods = [ :to_label, :name, :title, :to_s ]
48
+
49
+ # Series of attemps to detect a default value method for collection.
50
+ # config.collection_value_methods = [ :id, :to_s ]
51
+
52
+ # How the label text should be generated altogether with the required text.
53
+ # config.label_text = lambda { |label, required| "#{required} #{label}" }
54
+
55
+ # You can define the class to use on all labels. Default is nil.
56
+ # config.label_class = nil
57
+
58
+ # You can define the class to use on all forms. Default is simple_form.
59
+ # config.form_class = :simple_form
60
+
61
+ # Whether attributes are required by default (or not). Default is true.
62
+ # config.required_by_default = true
63
+
64
+ # Tell browsers whether to use default HTML5 validations (novalidate option).
65
+ # Default is enabled.
66
+ # config.browser_validations = true
67
+
68
+ # Determines whether HTML5 types (:email, :url, :search, :tel) and attributes
69
+ # (e.g. required) are used or not. True by default.
70
+ # Having this on in non-HTML5 compliant sites can cause odd behavior in
71
+ # HTML5-aware browsers such as Chrome.
72
+ config.html5 = true
73
+
74
+ # Custom mappings for input types. This should be a hash containing a regexp
75
+ # to match as key, and the input type that will be used when the field name
76
+ # matches the regexp as value.
77
+ # config.input_mappings = { /count/ => :integer }
78
+
79
+ # Collection of methods to detect if a file type was given.
80
+ # config.file_methods = [ :mounted_as, :file?, :public_filename ]
81
+
82
+ # Default priority for time_zone inputs.
83
+ # config.time_zone_priority = nil
84
+
85
+ # Default priority for country inputs.
86
+ # config.country_priority = nil
87
+
88
+ # Default size for text inputs.
89
+ # config.default_input_size = 50
90
+
91
+ # When false, do not use translations for labels, hints or placeholders.
92
+ # config.translate = true
93
+ end
@@ -0,0 +1,2 @@
1
+ # Copyright (c) 2011, Phoenix Project.
2
+ # Phoenix i18n English.
@@ -0,0 +1,23 @@
1
+ en:
2
+ simple_form:
3
+ "yes": 'Yes'
4
+ "no": 'No'
5
+ required:
6
+ text: 'required'
7
+ mark: '*'
8
+ # You can uncomment the line below if you need to overwrite the whole required html.
9
+ # When using html, text and mark won't be used.
10
+ # html: '<abbr title="required">*</abbr>'
11
+ error_notification:
12
+ default_message: "Some errors were found, please take a look:"
13
+ # Labels and hints examples
14
+ # labels:
15
+ # password: 'Password'
16
+ # user:
17
+ # new:
18
+ # email: 'E-mail para efetuar o sign in.'
19
+ # edit:
20
+ # email: 'E-mail.'
21
+ # hints:
22
+ # name: 'User name to sign in.'
23
+ # password: 'No special characters, please.'
@@ -0,0 +1,23 @@
1
+ zh-CN:
2
+ simple_form:
3
+ "yes": 'Yes'
4
+ "no": 'No'
5
+ required:
6
+ text: 'required'
7
+ mark: '*'
8
+ # You can uncomment the line below if you need to overwrite the whole required html.
9
+ # When using html, text and mark won't be used.
10
+ # html: '<abbr title="required">*</abbr>'
11
+ error_notification:
12
+ default_message: "Some errors were found, please take a look:"
13
+ # Labels and hints examples
14
+ # labels:
15
+ # password: 'Password'
16
+ # user:
17
+ # new:
18
+ # email: 'E-mail para efetuar o sign in.'
19
+ # edit:
20
+ # email: 'E-mail.'
21
+ # hints:
22
+ # name: 'User name to sign in.'
23
+ # password: 'No special characters, please.'
data/config/routes.rb ADDED
@@ -0,0 +1,3 @@
1
+ Phoenix::Core::Engine.routes.draw do
2
+ root :to => 'home#index'
3
+ end
@@ -0,0 +1,209 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/rails/app/app_generator'
3
+ require 'rails/version'
4
+
5
+ module Phoenix
6
+ class AppGenerator < Rails::Generators::AppBase
7
+
8
+ source_root Pathname.new(File.expand_path('../templates', __FILE__))
9
+
10
+ add_shared_options_for("Phoenix")
11
+
12
+ class_option :force, :type => :boolean, :aliases => ['-f'], :default => false,
13
+ :desc => "Force overwriting of directory"
14
+
15
+ class_option :gems, :type => :array, :aliases => ['-g'],
16
+ :desc => "Additional gems to install"
17
+
18
+ class_option :confirm, :type => :boolean, :aliases => ['-c'], :default => false,
19
+ :desc => "Confirm any prompts that require input"
20
+
21
+ class_option :testing, :type => :boolean, :aliases => ['-t'], :default => true,
22
+ :desc => "Automatically set up the project with phoenix-testing support"
23
+
24
+ class_option :trace, :type => :boolean, :default => false,
25
+ :desc => "Investigate any problems with the installer"
26
+
27
+ class_option :version, :type => :boolean, :default => false,
28
+ :desc => "Display the installed version of Phoenix Engine"
29
+
30
+ class_option :skip_db, :type => :boolean, :default => false,
31
+ :desc => "Skip database creation and migration tasks"
32
+
33
+ # Remove overridden or non-relevant class options
34
+ remove_class_option(:skip_test_unit, :skip_bundle, :skip_gemfile, :skip_active_record, :skip_sprockets)
35
+
36
+ TARGET_MAJOR_VERSION = 3
37
+ TARGET_MINOR_VERSION = 1
38
+
39
+ class << self
40
+ def reserved_app_names
41
+ @reserved_app_names ||= [
42
+ 'phoenix',
43
+ 'rails'
44
+ ]
45
+ end
46
+ end
47
+
48
+ def run!
49
+ self.destination_root = app_path
50
+
51
+ validate_options!
52
+ generate_rails!
53
+ prepare_gemfile!
54
+ run_bundle
55
+
56
+ rake('phoenix_core:install')
57
+ rake('phoenix_auth:install')
58
+
59
+ rake("db:migrate#{' --trace' if options[:trace]}")
60
+
61
+ puts "\n---------"
62
+ puts "Phoneinx successfully installed in '#{app_pathname}'!\n\n"
63
+
64
+ heroku_deploy! if options[:heroku]
65
+
66
+ note = ["\n=== ACTION REQUIRED ==="]
67
+ if options[:skip_db]
68
+ note << "Because you elected to skip database creation and migration in the installer"
69
+ note << "you will need to run the following tasks manually to maintain correct operation:"
70
+ note << "\ncd #{app_pathname}"
71
+ note << "bundle exec rake db:create"
72
+ note << "bundle exec rails generate phoenix:cms"
73
+ note << "bundle exec rake db:migrate"
74
+ note << "\n---------\n"
75
+ end
76
+ note << "Now you can launch your webserver using:"
77
+ note << "\ncd #{app_pathname}"
78
+ note << "rails server"
79
+ note << "\nThis will launch the built-in webserver at port 3000."
80
+ note << "You can now see your site running in your browser at http://localhost:3000"
81
+
82
+ if options[:heroku]
83
+ note << "\nIf you want files and images to work on heroku, you will need setup S3:"
84
+ note << "heroku config:add S3_BUCKET=XXXXXXXXX S3_KEY=XXXXXXXXX S3_SECRET=XXXXXXXXXX S3_REGION=XXXXXXXXXX"
85
+ end
86
+
87
+ note << "\nThanks for installing Phoenix, enjoy creating your new application!"
88
+ note << "---------\n\n"
89
+
90
+ puts note.join("\n")
91
+ end
92
+
93
+ protected
94
+ # Returns an instance of Pathname representing the required parameter app_path
95
+ def app_pathname
96
+ @app_pathname ||= Pathname.new(File.expand_path(app_path))
97
+ end
98
+
99
+ def validate_options!
100
+ app_name = app_pathname.split.last.to_s
101
+
102
+ unless valid_rails_version?
103
+ puts "\nRails #{Rails::VERSION::STRING} is not supported by Phoenix #{Phoenix.version}, " \
104
+ "please use Rails #{TARGET_MAJOR_VERSION}.#{TARGET_MINOR_VERSION}.x instead."
105
+ exit(1)
106
+ end
107
+
108
+ unless valid_app_name?(app_name)
109
+ puts "\nYou can't use '#{app_name}' as a name for your project, this is a reserved word that will cause conflicts."
110
+ puts "Please choose another name for your new project."
111
+ puts "\n"
112
+ exit(1)
113
+ end
114
+
115
+ unless options[:force] || !app_pathname.directory?
116
+ puts "\nThe directory '#{app_pathname}' that you specified already exists."
117
+ puts "Use --force to overwrite an existing directory."
118
+ puts "\n"
119
+ exit(1)
120
+ end
121
+
122
+ if options[:heroku]
123
+ if options[:heroku].to_s.include?('_') or options[:heroku].to_s.length > 30
124
+ message = ["\nThe application name '#{options[:heroku]}' that you specified is invalid for Heroku."]
125
+ suggested_name = options[:heroku].dup.to_s
126
+ if suggested_name.include?('_')
127
+ message << "This is because it contains underscores which Heroku does not allow."
128
+ suggested_name.gsub!(/_/, '-')
129
+ end
130
+ if suggested_name.length > 30
131
+ message << "This is#{" also" unless suggested_name.nil?} because it is longer than 30 characters."
132
+ suggested_name = suggested_name[0..29]
133
+ end
134
+
135
+ if options[:force] || options[:confirm]
136
+ options[:heroku] = suggested_name
137
+ else
138
+ message << "Please choose another name like '#{suggested_name}'"
139
+ message << "Or use --confirm to automatically use '#{suggested_name}'"
140
+ message << "\n"
141
+ puts message.join("\n")
142
+ exit(1)
143
+ end
144
+ end
145
+ end
146
+ end
147
+
148
+ def generate_rails!
149
+ rails_options = options.dup
150
+ rails_options[:skip_test_unit] = true
151
+ rails_options[:skip_bundle] = true
152
+
153
+ Rails::Generators::AppGenerator.new([app_path], rails_options).invoke_all
154
+
155
+ if defined?(JRUBY_VERSION)
156
+ find_and_replace('Gemfile', /['|"]sqlite3['|"]/, "'activerecord-jdbcsqlite3-adapter'")
157
+ end
158
+
159
+ # Remove rails from the Gemfile so that Phoenix can manage it
160
+ find_and_replace('Gemfile', %r{^gem 'rails'}, "# gem 'rails'")
161
+ end
162
+
163
+ def prepare_gemfile!
164
+ if options[:testing]
165
+ gem 'phoenix_testing'
166
+ end
167
+
168
+ if options[:gems].present?
169
+ options[:gems].each do |g|
170
+ gem g
171
+ end
172
+ end
173
+ end
174
+
175
+ private
176
+
177
+ def find_and_replace(file, find, replace)
178
+ contents = app_pathname.join(file).read.gsub!(find, replace)
179
+ app_pathname.join(file).open("w") do |f|
180
+ f.puts contents
181
+ end
182
+ end
183
+
184
+ def valid_rails_version?
185
+ Rails::VERSION::MAJOR >= TARGET_MAJOR_VERSION && Rails::VERSION::MINOR >= TARGET_MINOR_VERSION
186
+ end
187
+
188
+ def valid_app_name?(app_name)
189
+ self.class.reserved_app_names.exclude?(app_name.downcase)
190
+ end
191
+ end
192
+ end
193
+
194
+ # Yes, this is really how you set exit_on_failure to true in Thor.
195
+ module Rails
196
+ module Generators
197
+ class AppBase
198
+ def self.exit_on_failure?
199
+ true
200
+ end
201
+ end
202
+
203
+ class AppGenerator
204
+ def self.exit_on_failure?
205
+ true
206
+ end
207
+ end
208
+ end
209
+ end