pageflow 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of pageflow might be problematic. Click here for more details.
- checksums.yaml +8 -8
- data/admins/pageflow/accounts.rb +17 -49
- data/admins/pageflow/entry.rb +13 -6
- data/app/assets/fonts/pageflow/entypo.eot +0 -0
- data/app/assets/fonts/pageflow/entypo.svg +834 -0
- data/app/assets/fonts/pageflow/entypo.ttf +0 -0
- data/app/assets/fonts/pageflow/entypo.woff +0 -0
- data/app/assets/fonts/pageflow/fontawesome-webfont.eot +0 -0
- data/app/assets/fonts/pageflow/fontawesome-webfont.otf +0 -0
- data/app/assets/fonts/pageflow/fontawesome-webfont.svg +504 -0
- data/app/assets/fonts/pageflow/fontawesome-webfont.ttf +0 -0
- data/app/assets/fonts/pageflow/fontawesome-webfont.woff +0 -0
- data/app/assets/images/pageflow/themes/default/audio_sprite.png +0 -0
- data/app/assets/images/pageflow/themes/default/image_sprite.png +0 -0
- data/app/assets/images/pageflow/themes/default/internal_links_sprite.png +0 -0
- data/app/assets/images/pageflow/themes/default/loading_spinner.png +0 -0
- data/app/assets/images/pageflow/themes/default/loading_spinner_bg.png +0 -0
- data/app/assets/images/pageflow/themes/default/logo_header.png +0 -0
- data/app/assets/images/pageflow/themes/default/logo_header_invert.png +0 -0
- data/app/assets/images/pageflow/themes/default/scroll_indicator_sprite.png +0 -0
- data/app/assets/images/pageflow/themes/default/text_sprite.png +0 -0
- data/app/assets/images/pageflow/themes/default/video_sprite.png +0 -0
- data/app/assets/javascripts/pageflow/editor/base.js +1 -0
- data/app/assets/javascripts/pageflow/editor/collections/mixins/files_collection.js +11 -0
- data/app/assets/javascripts/pageflow/editor/collections/subset_collection.js +11 -0
- data/app/assets/javascripts/pageflow/editor/controllers/sidebar_controller.js +8 -1
- data/app/assets/javascripts/pageflow/editor/initializers/setup_config.js +3 -0
- data/app/assets/javascripts/pageflow/editor/models/audio_file.js +1 -0
- data/app/assets/javascripts/pageflow/editor/models/chapter.js +1 -0
- data/app/assets/javascripts/pageflow/editor/models/configuration.js +1 -0
- data/app/assets/javascripts/pageflow/editor/models/encoding_confirmation.js +45 -0
- data/app/assets/javascripts/pageflow/editor/models/entry.js +6 -14
- data/app/assets/javascripts/pageflow/editor/models/entry_publication.js +40 -0
- data/app/assets/javascripts/pageflow/editor/models/file_stage.js +5 -0
- data/app/assets/javascripts/pageflow/editor/models/image_file.js +5 -0
- data/app/assets/javascripts/pageflow/editor/models/mixins/encoded_file.js +31 -14
- data/app/assets/javascripts/pageflow/editor/models/mixins/files_count_watcher.js +4 -0
- data/app/assets/javascripts/pageflow/editor/models/mixins/stage_provider.js +2 -2
- data/app/assets/javascripts/pageflow/editor/models/other_entry.js +1 -0
- data/app/assets/javascripts/pageflow/editor/models/page.js +1 -0
- data/app/assets/javascripts/pageflow/editor/models/video_file.js +1 -0
- data/app/assets/javascripts/pageflow/editor/routers/sidebar_router.js +2 -0
- data/app/assets/javascripts/pageflow/editor/templates/confirm_encoding.jst.ejs +15 -0
- data/app/assets/javascripts/pageflow/editor/templates/confirmable_file_item.jst.ejs +7 -0
- data/app/assets/javascripts/pageflow/editor/templates/{quota_decorator.jst.ejs → entry_publication_quota_decorator.jst.ejs} +1 -1
- data/app/assets/javascripts/pageflow/editor/templates/files_explorer.jst.ejs +5 -3
- data/app/assets/javascripts/pageflow/editor/templates/notifications.jst.ejs +6 -1
- data/app/assets/javascripts/pageflow/editor/views/confirm_encoding_view.js +76 -0
- data/app/assets/javascripts/pageflow/editor/views/confirmable_file_item_view.js +42 -0
- data/app/assets/javascripts/pageflow/editor/views/entry_publication_quota_decorator_view.js +49 -0
- data/app/assets/javascripts/pageflow/editor/views/file_meta_data_item_view.js +1 -1
- data/app/assets/javascripts/pageflow/editor/views/file_stage_item_view.js +1 -0
- data/app/assets/javascripts/pageflow/editor/views/file_thumbnail_view.js +2 -1
- data/app/assets/javascripts/pageflow/editor/views/files_explorer_view.js +3 -3
- data/app/assets/javascripts/pageflow/editor/views/input_view.js +2 -2
- data/app/assets/javascripts/pageflow/editor/views/inputs/select_input_view.js +1 -1
- data/app/assets/javascripts/pageflow/editor/views/notifications_view.js +12 -1
- data/app/assets/javascripts/pageflow/editor/views/publish_entry_view.js +5 -4
- data/app/assets/javascripts/pageflow/page_types/video.js +0 -1
- data/app/assets/javascripts/pageflow/widgets/player_controls.js +1 -1
- data/app/assets/stylesheets/pageflow/editor/base.css.scss +1 -0
- data/app/assets/stylesheets/pageflow/editor/confirmable_files.css.scss +67 -0
- data/app/assets/stylesheets/pageflow/editor/file_stages.css.scss +5 -0
- data/app/assets/stylesheets/pageflow/editor/file_thumbnails.css.scss +10 -0
- data/app/assets/stylesheets/pageflow/editor/files.css.scss +3 -1
- data/app/assets/stylesheets/pageflow/editor/files_explorer.css.scss +30 -2
- data/app/assets/stylesheets/pageflow/editor/files_gallery.css.scss +1 -2
- data/app/assets/stylesheets/pageflow/editor/notifications.css.scss +18 -1
- data/app/assets/stylesheets/pageflow/editor/quotas.css.scss +1 -1
- data/app/assets/stylesheets/pageflow/editor/tabs_view.css.scss +2 -0
- data/app/assets/stylesheets/pageflow/mixins.css.scss +2 -1
- data/app/assets/stylesheets/pageflow/mixins/icons.css.scss +4 -308
- data/app/assets/stylesheets/pageflow/mixins/icons/entypo.css.scss +295 -0
- data/app/assets/stylesheets/pageflow/mixins/icons/fontawesome.css.scss +520 -0
- data/app/assets/stylesheets/pageflow/mixins/label.css.scss +5 -0
- data/app/assets/stylesheets/pageflow/themes/default.css.scss +11 -0
- data/app/assets/stylesheets/pageflow/themes/default/anchors.css.scss +3 -8
- data/app/assets/stylesheets/pageflow/themes/default/loading_spinner.css.scss +96 -9
- data/app/assets/stylesheets/pageflow/themes/default/navigation.css.scss +128 -183
- data/app/assets/stylesheets/pageflow/themes/default/overview.css.scss +48 -6
- data/app/assets/stylesheets/pageflow/themes/default/page.css.scss +3 -6
- data/app/assets/stylesheets/pageflow/themes/default/player_controls.css.scss +31 -0
- data/app/controllers/concerns/pageflow/quota_verification.rb +4 -4
- data/app/controllers/pageflow/editor/encoding_confirmations_controller.rb +45 -0
- data/app/controllers/pageflow/editor/entry_publications_controller.rb +48 -0
- data/app/controllers/pageflow/entries_controller.rb +8 -3
- data/app/controllers/pageflow/revisions_controller.rb +0 -10
- data/app/controllers/pageflow/video_files_controller.rb +7 -1
- data/app/helpers/pageflow/config_helper.rb +9 -0
- data/app/helpers/pageflow/entries_helper.rb +3 -3
- data/app/helpers/pageflow/pages_helper.rb +2 -2
- data/app/helpers/pageflow/quota_helper.rb +1 -1
- data/app/jobs/pageflow/poll_meta_data_from_zencoder_job.rb +9 -0
- data/app/jobs/pageflow/poll_zencoder_job.rb +3 -3
- data/app/jobs/pageflow/request_meta_data_from_zencoder_job.rb +14 -0
- data/app/jobs/pageflow/submit_file_to_zencoder_job.rb +0 -2
- data/app/models/pageflow/account.rb +9 -4
- data/app/models/pageflow/audio_file.rb +2 -0
- data/app/models/pageflow/draft_entry.rb +5 -1
- data/app/models/pageflow/edit_lock.rb +2 -0
- data/app/models/pageflow/encoding_confirmation.rb +40 -0
- data/app/models/pageflow/entry.rb +3 -3
- data/app/models/pageflow/entry_publication.rb +27 -0
- data/app/models/pageflow/page.rb +6 -6
- data/app/models/pageflow/published_entry.rb +3 -3
- data/app/models/pageflow/theming.rb +20 -0
- data/app/models/pageflow/video_file.rb +2 -0
- data/app/state_machines/pageflow/encoded_file_state_machine.rb +41 -1
- data/app/views/admin/accounts/_account_details.html.arb +5 -0
- data/app/views/admin/accounts/_entries_panel.html.arb +15 -0
- data/app/views/admin/accounts/_form.html.erb +18 -0
- data/app/views/admin/accounts/_theming_details.html.arb +6 -0
- data/app/views/admin/accounts/_users_panel.html.arb +15 -0
- data/app/views/admin/entries/_links.html.arb +3 -2
- data/app/views/admin/users/_form.html.erb +2 -2
- data/app/views/admin/users/_quota_exhausted.html.erb +1 -0
- data/app/views/pageflow/config/_editor_seeds.json.jbuilder +2 -0
- data/app/views/pageflow/editor/encoding_confirmations/_summary.html.erb +1 -0
- data/app/views/pageflow/editor/encoding_confirmations/check.json.jbuilder +3 -0
- data/app/views/pageflow/editor/entry_publications/check.json.jbuilder +11 -0
- data/app/views/pageflow/editor/quotas/{_published_entries_exceeded.html.erb → _published_entries_exhausted.html.erb} +1 -1
- data/app/views/pageflow/entries/_entry.html.erb +1 -1
- data/app/views/pageflow/entries/_navigation.html.erb +2 -2
- data/app/views/pageflow/entries/_social_meta_tags.html.erb +2 -2
- data/app/views/pageflow/entries/_theming.css.erb +1 -0
- data/app/views/pageflow/entries/edit.html.erb +3 -1
- data/app/views/pageflow/entries/navigation/_bar_top.html.erb +2 -2
- data/app/views/pageflow/entries/show.css.erb +3 -1
- data/app/views/pageflow/entries/show.html.erb +13 -13
- data/config/initializers/page_type_helpers.rb +1 -0
- data/config/locales/activerecord.de.yml +41 -22
- data/config/locales/admin/accounts.yml +0 -1
- data/config/locales/admin/entries.yml +6 -2
- data/config/locales/admin/themings.yml +7 -0
- data/config/locales/admin/users/me.de.yml +2 -2
- data/config/locales/editor.de.yml +9 -3
- data/config/locales/quotas.de.yml +1 -1
- data/config/routes.rb +34 -27
- data/db/migrate/20140624135420_create_themings.rb +15 -0
- data/db/migrate/20140624135421_create_themings_for_existing_accounts.rb +26 -0
- data/db/migrate/20140624135422_change_theme_references_to_theming_references.rb +45 -0
- data/db/migrate/20140624135423_remove_attributes_from_themes.rb +10 -0
- data/db/migrate/20140624135424_create_accounts_themes_join_table.rb +8 -0
- data/db/migrate/20140624135425_move_cname_from_account_to_theming.rb +21 -0
- data/db/migrate/20140625184800_drop_themes.rb +14 -0
- data/db/migrate/20140704110631_add_confirmed_by_to_encoded_files.rb +6 -0
- data/lib/generators/pageflow/initializer/templates/pageflow.rb +9 -0
- data/lib/generators/pageflow/theme/theme_generator.rb +28 -0
- data/lib/pageflow.rb +9 -2
- data/lib/pageflow/ability_mixin.rb +1 -1
- data/lib/pageflow/built_in_page_type.rb +1 -1
- data/lib/pageflow/configuration.rb +49 -6
- data/lib/pageflow/engine.rb +11 -1
- data/lib/pageflow/quota.rb +42 -15
- data/lib/pageflow/quotas.rb +15 -0
- data/lib/pageflow/seeds.rb +12 -16
- data/lib/pageflow/theme.rb +14 -0
- data/lib/pageflow/themes.rb +25 -0
- data/lib/pageflow/user_mixin.rb +1 -1
- data/lib/pageflow/version.rb +1 -1
- data/lib/pageflow/zencoder_meta_data_output_definition.rb +23 -0
- data/spec/factories/accounts.rb +9 -0
- data/spec/factories/audio_files.rb +46 -0
- data/spec/factories/chapters.rb +21 -0
- data/spec/factories/edit_locks.rb +11 -0
- data/spec/factories/entries.rb +33 -0
- data/spec/factories/file_usages.rb +8 -0
- data/spec/factories/folders.rb +8 -0
- data/spec/factories/image_files.rb +38 -0
- data/spec/factories/invited_user.rb +10 -0
- data/spec/factories/memberships.rb +8 -0
- data/spec/factories/pages.rb +14 -0
- data/spec/factories/revisions.rb +22 -0
- data/spec/factories/themings.rb +8 -0
- data/spec/factories/users.rb +39 -0
- data/spec/factories/video_files.rb +46 -0
- metadata +103 -39
- data/app/assets/javascripts/pageflow/editor/models/quota.js +0 -18
- data/app/assets/javascripts/pageflow/editor/views/quota_decorator_view.js +0 -45
- data/app/controllers/pageflow/editor/quotas_controller.rb +0 -13
- data/app/models/pageflow/theme.rb +0 -4
- data/app/views/admin/users/_quota_exceeded.html.erb +0 -1
- data/app/views/pageflow/editor/quotas/show.json.jbuilder +0 -5
@@ -0,0 +1,10 @@
|
|
1
|
+
class RemoveAttributesFromThemes < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
remove_column :pageflow_themes, :copyright_link_url, :string
|
4
|
+
remove_column :pageflow_themes, :copyright_link_label, :string
|
5
|
+
remove_column :pageflow_themes, :imprint_link_url, :string
|
6
|
+
remove_column :pageflow_themes, :imprint_link_label, :string
|
7
|
+
|
8
|
+
rename_column :pageflow_themes, :name, :css_dir
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class MoveCnameFromAccountToTheming < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
add_column :pageflow_themings, :cname, :string, null: false, default: ''
|
4
|
+
add_index :pageflow_themings, :cname
|
5
|
+
|
6
|
+
execute("UPDATE pageflow_themings SET cname = (SELECT cname FROM pageflow_accounts WHERE pageflow_accounts.default_theming_id = pageflow_themings.id LIMIT 1);")
|
7
|
+
|
8
|
+
remove_index :pageflow_accounts, :cname
|
9
|
+
remove_column :pageflow_accounts, :cname
|
10
|
+
end
|
11
|
+
|
12
|
+
def down
|
13
|
+
add_column :pageflow_accounts, :cname, :string, null: false, default: ''
|
14
|
+
add_index :pageflow_accounts, :cname
|
15
|
+
|
16
|
+
execute("UPDATE pageflow_accounts SET cname = (SELECT cname FROM pageflow_themings WHERE pageflow_themings.id = pageflow_accounts.default_theming_id);")
|
17
|
+
|
18
|
+
remove_index :pageflow_themings, :cname
|
19
|
+
remove_column :pageflow_themings, :cname
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class DropThemes < ActiveRecord::Migration
|
2
|
+
def up
|
3
|
+
rename_column :pageflow_accounts_themes, :theme_id, :theme_name
|
4
|
+
add_column :pageflow_themings, :theme_name, :string
|
5
|
+
|
6
|
+
execute(<<-SQL)
|
7
|
+
UPDATE pageflow_themings SET theme_name =
|
8
|
+
(SELECT css_dir FROM pageflow_themes WHERE pageflow_themes.id = pageflow_themings.theme_id);
|
9
|
+
SQL
|
10
|
+
|
11
|
+
remove_reference :pageflow_themings, :theme
|
12
|
+
drop_table :pageflow_themes
|
13
|
+
end
|
14
|
+
end
|
@@ -15,6 +15,15 @@ Pageflow.configure do |config|
|
|
15
15
|
config.register_page_type(Pageflow::BuiltInPageType.internal_links)
|
16
16
|
# config.register_page_type(Pageflow::Rainbow::PageType.new)
|
17
17
|
|
18
|
+
# Add custom themes by invoking the pageflow:theme generator and
|
19
|
+
# registering the theme here.
|
20
|
+
#
|
21
|
+
# $ rails generate pageflow:theme my_custom_theme
|
22
|
+
# => creates app/assets/stylesheets/pageflow/themes/my_custom_theme.css.scss
|
23
|
+
#
|
24
|
+
config.themes.register(:default)
|
25
|
+
# config.themes.register(:my_custom_theme)
|
26
|
+
|
18
27
|
# String to interpolate into paths of files generated by paperclip
|
19
28
|
# preprocessors. This allows to refresh cdn caches after
|
20
29
|
# reprocessing attachments.
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Pageflow
|
2
|
+
module Generators
|
3
|
+
class ThemeGenerator < Rails::Generators::Base
|
4
|
+
desc 'Copies a theme template to the app.'
|
5
|
+
|
6
|
+
argument :name, required: false, default: 'custom',
|
7
|
+
desc: 'The scope to copy views to'
|
8
|
+
|
9
|
+
source_root File.expand_path("../../../../../app/assets", __FILE__)
|
10
|
+
|
11
|
+
def copy_template
|
12
|
+
directory('stylesheets/pageflow/themes/default', themes_path('stylesheets', name))
|
13
|
+
directory('images/pageflow/themes/default', themes_path('images', name))
|
14
|
+
|
15
|
+
template('stylesheets/pageflow/themes/default.css.scss', themes_path('stylesheets', "#{name}.css.scss")) do |content|
|
16
|
+
content.gsub!('$theme-name: "default";', %Q'$theme-name: "#{name}";')
|
17
|
+
content.gsub!('@import "./default/', %Q'@import "./#{name}/')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def themes_path(type, path)
|
24
|
+
File.join('app', 'assets', type, 'pageflow', 'themes', path)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/pageflow.rb
CHANGED
@@ -1,8 +1,14 @@
|
|
1
1
|
require "pageflow/engine"
|
2
2
|
|
3
3
|
module Pageflow
|
4
|
-
def self.config
|
5
|
-
|
4
|
+
def self.config(options = {})
|
5
|
+
unless @config
|
6
|
+
if options[:ignore_not_configured]
|
7
|
+
return Configuration.new
|
8
|
+
else
|
9
|
+
raise('Pageflow has not been configured yet')
|
10
|
+
end
|
11
|
+
end
|
6
12
|
@config
|
7
13
|
end
|
8
14
|
|
@@ -28,6 +34,7 @@ module Pageflow
|
|
28
34
|
|
29
35
|
def self.finalize!
|
30
36
|
@finalized = true
|
37
|
+
configure!
|
31
38
|
end
|
32
39
|
|
33
40
|
def self.after_configure(&block)
|
@@ -9,7 +9,7 @@ module Pageflow
|
|
9
9
|
|
10
10
|
can [:read, :use_files], Entry, :id => user.entry_ids
|
11
11
|
|
12
|
-
can [:edit, :update, :edit_outline, :publish, :restore, :snapshot], Entry do |entry|
|
12
|
+
can [:edit, :update, :edit_outline, :publish, :restore, :snapshot, :confirm_encoding], Entry do |entry|
|
13
13
|
can_edit_entry?(user, entry)
|
14
14
|
end
|
15
15
|
|
@@ -43,8 +43,50 @@ module Pageflow
|
|
43
43
|
attr_reader :hooks
|
44
44
|
|
45
45
|
# Limit the use of certain resources. Any object implementing the
|
46
|
-
# interface of Pageflow::Quota
|
47
|
-
|
46
|
+
# interface of Pageflow::Quota can be registered.
|
47
|
+
#
|
48
|
+
# Example:
|
49
|
+
#
|
50
|
+
# config.quotas.register(:users, UserQuota)
|
51
|
+
#
|
52
|
+
attr_accessor :quotas
|
53
|
+
|
54
|
+
# Additional themes can be registered to use custom css.
|
55
|
+
#
|
56
|
+
# Example:
|
57
|
+
#
|
58
|
+
# config.themes.register(:custom)
|
59
|
+
#
|
60
|
+
# @return [Themes]
|
61
|
+
attr_reader :themes
|
62
|
+
|
63
|
+
# Either a lambda or an object with a `match?` method, to restrict
|
64
|
+
# access to the editor routes defined by Pageflow.
|
65
|
+
#
|
66
|
+
# This can be used if published entries shall be available under
|
67
|
+
# different CNAMES but the admin and the editor shall only be
|
68
|
+
# accessible via one official url.
|
69
|
+
attr_accessor :editor_routing_constraint
|
70
|
+
|
71
|
+
# Either a lambda or an object with a `call` method taking two
|
72
|
+
# parameters: An `ActiveRecord` scope of `Pageflow::Entry` records
|
73
|
+
# and an `ActionDispatch::Request` object. Has to return the scope
|
74
|
+
# in which to find entries.
|
75
|
+
#
|
76
|
+
# Used by all public actions that display entires to restrict the
|
77
|
+
# available entries by hostname or other request attributes.
|
78
|
+
#
|
79
|
+
# Example:
|
80
|
+
#
|
81
|
+
# # Only make entries of one account available under <account.name>.example.com
|
82
|
+
# config.public_entry_request_scope = lambda do |entries, request|
|
83
|
+
# entries.includes(:account).where(pageflow_accounts: {name: request.subdomain})
|
84
|
+
# end
|
85
|
+
attr_accessor :public_entry_request_scope
|
86
|
+
|
87
|
+
# Submit video/audio encoding jobs only after the user has
|
88
|
+
# explicitly confirmed in the editor. Defaults to false.
|
89
|
+
attr_accessor :confirm_encoding_jobs
|
48
90
|
|
49
91
|
def initialize
|
50
92
|
@paperclip_filesystem_default_options = {}
|
@@ -55,11 +97,12 @@ module Pageflow
|
|
55
97
|
@mailer_sender = 'pageflow@example.com'
|
56
98
|
|
57
99
|
@hooks = Hooks.new
|
58
|
-
@
|
59
|
-
|
100
|
+
@quotas = Quotas.new
|
101
|
+
@themes = Themes.new
|
102
|
+
|
103
|
+
@public_entry_request_scope = lambda { |entries, request| entries }
|
60
104
|
|
61
|
-
|
62
|
-
hooks.on(*args)
|
105
|
+
@confirm_encoding_jobs = false
|
63
106
|
end
|
64
107
|
|
65
108
|
# Make a page type available for use in the system.
|
data/lib/pageflow/engine.rb
CHANGED
@@ -51,15 +51,25 @@ module Pageflow
|
|
51
51
|
# provided by the main app.
|
52
52
|
config.assets.precompile += %w(pageflow/editor.js pageflow/editor.css
|
53
53
|
pageflow/print_view.css
|
54
|
-
pageflow/themes/default.css
|
55
54
|
pageflow/lt_ie9.js pageflow/lt_ie9.css pageflow/ie9.js pageflow/ie9.css
|
56
55
|
video-js.swf vjs.eot vjs.svg vjs.ttf vjs.woff)
|
57
56
|
|
57
|
+
config.assets.precompile << lambda do |path|
|
58
|
+
Pageflow.config.themes.any? do |theme|
|
59
|
+
path == theme.stylesheet_path
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
58
63
|
# Make sure the configuration is recreated when classes are
|
59
64
|
# reloded. Otherwise registered page types might still point to
|
60
65
|
# unloaded classes in development mode.
|
61
66
|
config.to_prepare do
|
62
67
|
Pageflow.configure!
|
63
68
|
end
|
69
|
+
|
70
|
+
# Make pageflow factories available to main app specs
|
71
|
+
initializer "pageflow.factories", :after => "factory_girl.set_factory_paths" do
|
72
|
+
FactoryGirl.definition_file_paths.unshift(Engine.root.join('spec', 'factories')) if defined?(FactoryGirl)
|
73
|
+
end
|
64
74
|
end
|
65
75
|
end
|
data/lib/pageflow/quota.rb
CHANGED
@@ -1,33 +1,60 @@
|
|
1
1
|
module Pageflow
|
2
|
-
|
3
|
-
class
|
4
|
-
attr_reader :
|
2
|
+
class Quota
|
3
|
+
class ExhaustedError < RuntimeError
|
4
|
+
attr_reader :quota
|
5
5
|
|
6
|
-
def initialize(
|
7
|
-
@
|
6
|
+
def initialize(quota)
|
7
|
+
@quota = quota
|
8
8
|
end
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
class ExceededError < ExhaustedError; end
|
12
|
+
|
13
|
+
attr_reader :name, :account
|
14
|
+
|
15
|
+
def initialize(name, account)
|
16
|
+
@name = name
|
17
|
+
@account = account
|
18
|
+
end
|
19
|
+
|
20
|
+
def state
|
21
|
+
raise(NotImplementedError, 'Quota#state must be implemented and return either "available", "exhausted" or "exceeded".')
|
13
22
|
end
|
14
23
|
|
15
|
-
def state_description
|
24
|
+
def state_description
|
16
25
|
raise(NotImplementedError, 'Quota#state_description must be implemented.')
|
17
26
|
end
|
18
27
|
|
19
|
-
def
|
20
|
-
|
28
|
+
def available?
|
29
|
+
state == 'available'
|
21
30
|
end
|
22
31
|
|
23
|
-
|
24
|
-
|
32
|
+
def exhausted?
|
33
|
+
!available?
|
34
|
+
end
|
35
|
+
|
36
|
+
def exceeded?
|
37
|
+
state == 'exceeded'
|
38
|
+
end
|
39
|
+
|
40
|
+
def verify_available!
|
41
|
+
raise(ExhaustedError.new(self), "Quota '#{name}' exhausted.") unless available?
|
42
|
+
end
|
43
|
+
|
44
|
+
def verify_not_exceeded!
|
45
|
+
raise(ExceededError.new(self), "Quota '#{name}' exceeded.") if exceeded?
|
46
|
+
end
|
47
|
+
|
48
|
+
def assume(assumptions)
|
49
|
+
self
|
50
|
+
end
|
25
51
|
|
26
|
-
|
27
|
-
|
52
|
+
class Unlimited < Quota
|
53
|
+
def state
|
54
|
+
'available'
|
28
55
|
end
|
29
56
|
|
30
|
-
def state_description
|
57
|
+
def state_description
|
31
58
|
nil
|
32
59
|
end
|
33
60
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Pageflow
|
2
|
+
class Quotas
|
3
|
+
def initialize
|
4
|
+
@factories = HashWithIndifferentAccess.new
|
5
|
+
end
|
6
|
+
|
7
|
+
def register(name, factory)
|
8
|
+
@factories[name] = factory
|
9
|
+
end
|
10
|
+
|
11
|
+
def get(name, account)
|
12
|
+
@factories.fetch(name, Quota::Unlimited).new(name, account)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/lib/pageflow/seeds.rb
CHANGED
@@ -3,25 +3,21 @@
|
|
3
3
|
module Pageflow
|
4
4
|
# Default Account
|
5
5
|
|
6
|
-
if Theme.any?
|
7
|
-
default_theme = Theme.first
|
8
|
-
puts " Theme exists."
|
9
|
-
else
|
10
|
-
default_theme = Theme.create!(:name => 'default',
|
11
|
-
:imprint_link_label => 'Impressum',
|
12
|
-
:imprint_link_url => 'http://example.com/impressum.html',
|
13
|
-
:copyright_link_label => '© Pageflow 2014',
|
14
|
-
:copyright_link_url => 'http://www.example.com/copyright.html')
|
15
|
-
puts " Created theme."
|
16
|
-
end
|
17
|
-
|
18
|
-
# Default Account
|
19
|
-
|
20
6
|
if Account.any?
|
21
7
|
default_account = Account.first
|
22
8
|
puts " Account exists."
|
23
9
|
else
|
24
|
-
default_account = Account.create!(:name => 'Pageflow'
|
10
|
+
default_account = Account.create!(:name => 'Pageflow') do |account|
|
11
|
+
account.build_default_theming do |theming|
|
12
|
+
theming.theme_name = Pageflow.config.themes.names.first
|
13
|
+
|
14
|
+
theming.imprint_link_label = 'Impressum'
|
15
|
+
theming.imprint_link_url = 'http://example.com/impressum.html'
|
16
|
+
theming.copyright_link_label = '© Pageflow 2014'
|
17
|
+
theming.copyright_link_url = 'http://www.example.com/copyright.html'
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
25
21
|
puts " Created default account."
|
26
22
|
end
|
27
23
|
|
@@ -64,7 +60,7 @@ module Pageflow
|
|
64
60
|
# Sample entry
|
65
61
|
|
66
62
|
unless Entry.any?
|
67
|
-
entry = default_account.entries.create!(:title => 'Fiese Flut', :
|
63
|
+
entry = default_account.entries.create!(:title => 'Fiese Flut', :theming_id => default_account.default_theming.id)
|
68
64
|
|
69
65
|
chapter = entry.draft.chapters.create!(:title => 'Kapitel 1')
|
70
66
|
chapter.pages.create!(:template => 'background_image')
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Pageflow
|
2
|
+
class Themes
|
3
|
+
include Enumerable
|
4
|
+
|
5
|
+
def initialize
|
6
|
+
@themes = HashWithIndifferentAccess.new
|
7
|
+
end
|
8
|
+
|
9
|
+
def register(name)
|
10
|
+
@themes[name] = Theme.new(name)
|
11
|
+
end
|
12
|
+
|
13
|
+
def get(name)
|
14
|
+
@themes.fetch(name) { raise(ArgumentError, "Unknown theme '#{name}'.") }
|
15
|
+
end
|
16
|
+
|
17
|
+
def names
|
18
|
+
map(&:name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def each(&block)
|
22
|
+
@themes.values.each(&block)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/pageflow/user_mixin.rb
CHANGED
@@ -14,7 +14,7 @@ module Pageflow
|
|
14
14
|
has_many :memberships, :dependent => :destroy, :class_name => 'Pageflow::Membership'
|
15
15
|
has_many :entries, :through => :memberships, :class_name => 'Pageflow::Entry'
|
16
16
|
|
17
|
-
has_many :revisions, :class_name => 'Pageflow::Revision'
|
17
|
+
has_many :revisions, :class_name => 'Pageflow::Revision', :foreign_key => :creator_id
|
18
18
|
|
19
19
|
validates :first_name, :last_name, :presence => true
|
20
20
|
validates :role, :inclusion => ROLES
|