phoenix_core 0.2.0.beta

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