constructor-cms 0.5.8 → 0.6.0

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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -3
  3. data/README.md +1 -1
  4. data/{script → bin}/rails +1 -1
  5. data/constructor-cms.gemspec +1 -3
  6. data/core/app/controllers/constructor_core/application_controller.rb +1 -1
  7. data/core/app/controllers/constructor_core/users_controller.rb +2 -2
  8. data/core/app/models/constructor_core/user.rb +0 -1
  9. data/core/config/initializers/devise.rb +8 -8
  10. data/core/constructor-core.gemspec +2 -2
  11. data/core/lib/constructor_core/version.rb +1 -1
  12. data/pages/app/controllers/constructor_pages/fields_controller.rb +11 -2
  13. data/pages/app/controllers/constructor_pages/pages_controller.rb +20 -12
  14. data/pages/app/controllers/constructor_pages/templates_controller.rb +13 -7
  15. data/pages/app/models/constructor_pages/field.rb +1 -3
  16. data/pages/app/models/constructor_pages/page.rb +15 -21
  17. data/pages/app/models/constructor_pages/template.rb +0 -3
  18. data/pages/app/models/constructor_pages/types/boolean_type.rb +1 -2
  19. data/pages/app/models/constructor_pages/types/date_type.rb +1 -6
  20. data/pages/app/models/constructor_pages/types/float_type.rb +1 -2
  21. data/pages/app/models/constructor_pages/types/html_type.rb +1 -2
  22. data/pages/app/models/constructor_pages/types/image_type.rb +3 -2
  23. data/pages/app/models/constructor_pages/types/integer_type.rb +1 -2
  24. data/pages/app/models/constructor_pages/types/string_type.rb +1 -2
  25. data/pages/app/models/constructor_pages/types/text_type.rb +1 -2
  26. data/pages/app/views/constructor_pages/fields/types/_date.haml +1 -1
  27. data/pages/app/views/constructor_pages/pages/_form.haml +2 -2
  28. data/pages/app/views/constructor_pages/pages/index.haml +4 -4
  29. data/pages/app/views/constructor_pages/templates/_form.haml +2 -2
  30. data/pages/config/locales/ru.yml +0 -1
  31. data/pages/constructor-pages.gemspec +2 -1
  32. data/spec/dummy/README.rdoc +15 -248
  33. data/spec/dummy/Rakefile +0 -1
  34. data/spec/dummy/app/controllers/application_controller.rb +1 -1
  35. data/spec/dummy/bin/bundle +3 -0
  36. data/spec/dummy/bin/rails +4 -0
  37. data/spec/dummy/bin/rake +4 -0
  38. data/spec/dummy/config.ru +1 -1
  39. data/spec/dummy/config/application.rb +4 -43
  40. data/spec/dummy/config/boot.rb +2 -3
  41. data/spec/dummy/config/environment.rb +2 -2
  42. data/spec/dummy/config/environments/development.rb +11 -19
  43. data/spec/dummy/config/environments/production.rb +40 -27
  44. data/spec/dummy/config/environments/test.rb +13 -14
  45. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  46. data/spec/dummy/config/initializers/inflections.rb +6 -5
  47. data/spec/dummy/config/initializers/secret_token.rb +7 -2
  48. data/spec/dummy/config/initializers/session_store.rb +0 -5
  49. data/spec/dummy/config/initializers/wrap_parameters.rb +6 -6
  50. data/spec/dummy/config/routes.rb +2 -57
  51. data/spec/dummy/public/404.html +48 -16
  52. data/spec/dummy/public/422.html +48 -16
  53. data/spec/dummy/public/500.html +48 -16
  54. data/spec/dummy/public/robots.txt +1 -1
  55. metadata +19 -27
  56. data/spec/dummy/script/rails +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3205e81cbc3d6a541a972c3d842fbe0cd53510f9
4
- data.tar.gz: 8f2e17e9b94e8f702703d9dd78be435d906b8bab
3
+ metadata.gz: 1f20c51a1d988a4130e232048b3bd6cbd386834f
4
+ data.tar.gz: ac6c3b2c45985db4bf5604028ee94a5076251571
5
5
  SHA512:
6
- metadata.gz: 09ebeaee4e96799713703101d43bc02c5405a662eb661dd2abd073308d369ad3f5c2548197f7dd93b40f55b4552cc5400d6b2e1aea0b98be4bd16b890cdeafdf
7
- data.tar.gz: f52c26da5a3825fa13a450bdaffe5befaed493ed6f11bedbaad63560db63a2b65098790a348614c5b5a86faa4cbc2fa323171a6e3e1bcf6aa51707bed265d50b
6
+ metadata.gz: 88d01166d105e8ad84a1032f150228d3c287e5a9b366c7e30b95dbcb5dc3676a373e4de286f2f1e458207b5a3ae320f0ecd1cd51f84bc3ce374580c1e1bd258e
7
+ data.tar.gz: d529723a118b866cb573506af6dd3fbdffada473ded047cf2982c8a48022bd8a989c5e697819c53c31a391cbb09e77f6159bfab9843c525bd1b09eb88d561327
data/Gemfile CHANGED
@@ -9,12 +9,12 @@ group :test do
9
9
  end
10
10
 
11
11
  group :assets do
12
- gem 'sass-rails', '~> 3.2.3'
13
- gem 'coffee-rails', '~> 3.2.1'
12
+ gem 'sass-rails', '~> 4.0.0.rc2'
13
+ gem 'coffee-rails', '~> 4.0.0'
14
14
  gem 'less-rails'
15
15
  gem 'therubyracer', :platforms => :ruby
16
16
 
17
- gem 'uglifier', '>= 1.0.3'
17
+ gem 'uglifier', '>= 1.3.0'
18
18
  end
19
19
 
20
20
  gem 'jquery-rails'
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Constructor CMS
2
2
 
3
- Content management system on Ruby on Rails
3
+ Constructor Ruby on Rails 4 content management system (cms)
4
4
 
5
5
  [![Gem Version](https://badge.fury.io/rb/constructor-cms.png)](https://rubygems.org/gems/constructor-cms)
6
6
  [![Build Status](https://travis-ci.org/ivanzotov/constructor.png?branch=master)](https://travis-ci.org/ivanzotov/constructor)
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
2
+ # This command will automatically be run when you run "rails" with Rails 4 gems installed from the root of your application.
3
3
 
4
4
  ENGINE_ROOT = File.expand_path('../..', __FILE__)
5
5
  ENGINE_PATH = File.expand_path('../../lib/constructor-cms/engine', __FILE__)
@@ -15,14 +15,12 @@ Gem::Specification.new do |s|
15
15
 
16
16
  s.files = `git ls-files`.split("\n")
17
17
  s.test_files = `git ls-files -- spec/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
18
 
20
19
  s.add_dependency 'constructor-core', ConstructorCore::VERSION
21
20
  s.add_dependency 'constructor-pages', ConstructorCore::VERSION
22
- s.add_dependency 'russian'
23
21
 
24
22
  s.add_development_dependency 'sqlite3'
25
- s.add_development_dependency 'rspec-rails'
23
+ s.add_development_dependency 'rspec-rails', '2.14.0.rc1'
26
24
  s.add_development_dependency 'database_cleaner'
27
25
  s.add_development_dependency 'capybara'
28
26
  end
@@ -1,7 +1,7 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module ConstructorCore
4
- class ApplicationController < ApplicationController
4
+ class ApplicationController < ::ApplicationController
5
5
  before_filter :authenticate_user!, :except => [:show]
6
6
 
7
7
  helper_method :current_user
@@ -1,8 +1,8 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module ConstructorCore
4
- class UsersController < ApplicationController
5
- layout 'constructor_core/application_admin'
4
+ class UsersController < ConstructorCore::ApplicationController
5
+ layout 'constructor_core/application'
6
6
 
7
7
  def profile
8
8
  @user = current_user
@@ -3,6 +3,5 @@
3
3
  module ConstructorCore
4
4
  class User < ActiveRecord::Base
5
5
  devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable, :token_authenticatable, :timeoutable, :registerable #:confirmable, :omniauthable, :lockable, :encryptable
6
- attr_accessible :email, :password, :password_confirmation, :remember_me
7
6
  end
8
7
  end
@@ -1,15 +1,15 @@
1
1
  Devise.setup do |config|
2
2
  config.mailer_sender = 'ivanzotov@gmail.com'
3
3
 
4
- config.parent_controller = 'ActionController::Base'
4
+ #config.parent_controller = 'ActionController::Base'
5
5
 
6
6
  require 'devise/orm/active_record'
7
7
 
8
- config.case_insensitive_keys = [ :email ]
9
- config.strip_whitespace_keys = [ :email ]
10
- config.skip_session_storage = [:http_auth]
11
- config.stretches = Rails.env.test? ? 1 : 10
12
- config.reconfirmable = true
13
- config.reset_password_within = 6.hours
14
- config.sign_out_via = :delete
8
+ #config.case_insensitive_keys = [ :email ]
9
+ #config.strip_whitespace_keys = [ :email ]
10
+ #config.skip_session_storage = [:http_auth]
11
+ #config.stretches = Rails.env.test? ? 1 : 10
12
+ #config.reconfirmable = true
13
+ #config.reset_password_within = 6.hours
14
+ #config.sign_out_via = :delete
15
15
  end
@@ -17,8 +17,8 @@ Gem::Specification.new do |s|
17
17
  s.test_files = `git ls-files -- spec/*`.split("\n")
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
19
19
 
20
- s.add_dependency 'rails', '~> 3.2.13'
21
- s.add_dependency 'devise'
20
+ s.add_dependency 'rails', '~> 4.0.0.rc2'
21
+ s.add_dependency 'devise', '~> 3.0.0.rc'
22
22
  s.add_dependency 'bootstrap-sass'
23
23
  s.add_dependency 'font-awesome-sass-rails'
24
24
  end
@@ -1,3 +1,3 @@
1
1
  module ConstructorCore
2
- VERSION = '0.5.8'
2
+ VERSION = '0.6.0'
3
3
  end
@@ -13,7 +13,7 @@ module ConstructorPages
13
13
  end
14
14
 
15
15
  def create
16
- @field = Field.new params[:field]
16
+ @field = Field.new field_params
17
17
 
18
18
  if @field.save
19
19
  redirect_to edit_template_path(@field.template_id), notice: t(:field_success_added, name: @field.name)
@@ -42,7 +42,7 @@ module ConstructorPages
42
42
  field.destroy
43
43
  end
44
44
  end
45
- if @field.update_attributes params[:field]
45
+ if @field.update field_params
46
46
  redirect_to edit_template_url(@field.template.id), notice: t(:field_success_updated, name: @field.name)
47
47
  else
48
48
  render :action => "edit"
@@ -61,6 +61,15 @@ module ConstructorPages
61
61
 
62
62
  private
63
63
 
64
+ def field_params
65
+ params.require(:field).permit(
66
+ :name,
67
+ :code_name,
68
+ :template_id,
69
+ :type_value
70
+ )
71
+ end
72
+
64
73
  def move_to(to)
65
74
  @field = Field.find(params[:id])
66
75
  to == :up ? @field.move_higher : @field.move_lower
@@ -3,10 +3,8 @@
3
3
  module ConstructorPages
4
4
  class PagesController < ConstructorCore::ApplicationController
5
5
  include MoveHelper
6
- caches_page :show
7
6
 
8
7
  before_filter {@roots = Page.roots}
9
- before_filter :cache, only: [:create, :update, :destroy, :move_up, :move_down]
10
8
 
11
9
  def new
12
10
  @page, @template_id, @multipart = Page.new, Template.first.id, false
@@ -92,7 +90,7 @@ module ConstructorPages
92
90
  end
93
91
 
94
92
  def create
95
- @page = Page.new params[:page]
93
+ @page = Page.new page_params
96
94
 
97
95
  if @page.save
98
96
  redirect_to pages.pages_url, notice: t(:page_success_added, name: @page.name)
@@ -108,7 +106,7 @@ module ConstructorPages
108
106
  @page.remove_fields_values
109
107
  end
110
108
 
111
- if @page.update_attributes params[:page]
109
+ if @page.update page_params
112
110
  @page.create_fields_values
113
111
  @page.update_fields_values params[:fields]
114
112
 
@@ -129,16 +127,26 @@ module ConstructorPages
129
127
 
130
128
  private
131
129
 
132
- def error_404
133
- render file: "#{Rails.root}/public/404", layout: false, status: 404
130
+ def page_params
131
+ params.require(:page).permit(
132
+ :active,
133
+ :name,
134
+ :url,
135
+ :title,
136
+ :keywords,
137
+ :description,
138
+ :auto_url,
139
+ :parent_id,
140
+ :template_id,
141
+ :in_nav,
142
+ :in_map,
143
+ :in_menu,
144
+ :link
145
+ )
134
146
  end
135
147
 
136
- def cache
137
- expire_page :action => :show
138
- cache_dir = ActionController::Base.page_cache_directory
139
- unless cache_dir == Rails.root.to_s+"/public"
140
- FileUtils.rm_r(Dir.glob(cache_dir+"/*")) rescue Errno::ENOENT
141
- end
148
+ def error_404
149
+ render file: "#{Rails.root}/public/404", layout: false, status: 404
142
150
  end
143
151
  end
144
152
  end
@@ -8,11 +8,6 @@ module ConstructorPages
8
8
 
9
9
  def new
10
10
  @template = Template.new
11
-
12
- if params[:template]
13
- @parent = Template.find(params[:template])
14
- @template.parent_id = @parent.id
15
- end
16
11
  end
17
12
 
18
13
  def edit
@@ -20,7 +15,7 @@ module ConstructorPages
20
15
  end
21
16
 
22
17
  def create
23
- @template = Template.new params[:template]
18
+ @template = Template.new template_params
24
19
 
25
20
  if @template.save
26
21
  redirect_to templates_url, notice: t(:template_success_added, name: @template.name)
@@ -32,7 +27,7 @@ module ConstructorPages
32
27
  def update
33
28
  @template = Template.find params[:id]
34
29
 
35
- if @template.update_attributes params[:template]
30
+ if @template.update template_params
36
31
  redirect_to templates_url, notice: t(:template_success_updated, name: @template.name)
37
32
  else
38
33
  render action: :edit
@@ -47,5 +42,16 @@ module ConstructorPages
47
42
  end
48
43
 
49
44
  %w{up down}.each {|m| define_method "move_#{m}" do move_to :template, m.to_sym end}
45
+
46
+ private
47
+
48
+ def template_params
49
+ params.require(:template).permit(
50
+ :name,
51
+ :code_name,
52
+ :parent_id,
53
+ :child_id
54
+ )
55
+ end
50
56
  end
51
57
  end
@@ -5,8 +5,6 @@ module ConstructorPages
5
5
  #
6
6
  # Each field has type of value such as float, integer, string...
7
7
  class Field < ActiveRecord::Base
8
- attr_accessible :name, :code_name, :type_value, :template_id, :template
9
-
10
8
  # Adding code_name_uniqueness method
11
9
  include CodeNameUniq
12
10
 
@@ -38,7 +36,7 @@ module ConstructorPages
38
36
  def type_class; "constructor_pages/types/#{type_value}_type".classify.constantize end
39
37
 
40
38
  # Return object of type_value by page
41
- def find_type_object(page); type_class.find_by_field_id_and_page_id(id, page.id) end
39
+ def find_type_object(page); type_class.where(field_id: id, page_id: page.id).first end
42
40
 
43
41
  # Create object of type_value by page
44
42
  def create_type_object(page); type_class.create(field_id: id, page_id: page.id) end
@@ -3,11 +3,6 @@
3
3
  module ConstructorPages
4
4
  # Page model. Pages are core for company websites, blogs etc.
5
5
  class Page < ActiveRecord::Base
6
- attr_accessible :name, :title, :keywords, :description,
7
- :url, :full_url, :active, :auto_url,
8
- :parent, :parent_id, :link, :in_menu, :in_map,
9
- :in_nav, :template_id, :template
10
-
11
6
  # Adding has_many for all field types
12
7
  Field::TYPES.each do |t|
13
8
  class_eval %{
@@ -19,7 +14,7 @@ module ConstructorPages
19
14
 
20
15
  belongs_to :template
21
16
 
22
- default_scope order :lft
17
+ default_scope -> { order(:lft)}
23
18
 
24
19
  validate :template_check
25
20
 
@@ -32,7 +27,7 @@ module ConstructorPages
32
27
  # Used for find page by request. It return first page if no request given
33
28
  # @param request for example <tt>'/conditioners/split-systems/zanussi'</tt>
34
29
  def self.find_by_request_or_first(request = nil)
35
- request.nil? ? Page.first : Page.find_by_full_url(request)
30
+ request.nil? ? Page.first : Page.where(full_url: request).first
36
31
  end
37
32
 
38
33
  # Generate full_url from parent id and url
@@ -47,6 +42,7 @@ module ConstructorPages
47
42
  # field and template code_name should be uniqueness for page methods
48
43
  def self.check_code_name(code_name)
49
44
  [code_name, code_name.pluralize, code_name.singularize].each do |name|
45
+ # TODO: replace Page.first
50
46
  if Page.first.respond_to?(name)
51
47
  return false
52
48
  end
@@ -57,7 +53,7 @@ module ConstructorPages
57
53
 
58
54
  # Get field by code_name
59
55
  def field(code_name)
60
- Field.find_by_code_name_and_template_id code_name, template_id
56
+ Field.find_by code_name: code_name, template_id: template_id
61
57
  end
62
58
 
63
59
  # Get value of field by code_name
@@ -80,13 +76,16 @@ module ConstructorPages
80
76
  value = params[field.code_name.to_sym]
81
77
 
82
78
  _type_object = field.find_type_object(self)
83
- _type_object.value = 0 if field.type_value == 'boolean' and reset_booleans
84
79
 
85
- if value
86
- _type_object.value = field.type_value == 'date' ? parse_date(value).to_s : value
87
- end
80
+ if _type_object
81
+ _type_object.value = 0 if field.type_value == 'boolean' and reset_booleans
82
+
83
+ if value
84
+ _type_object.value = value
85
+ end
88
86
 
89
- _type_object.save
87
+ _type_object.save
88
+ end
90
89
  end
91
90
  end
92
91
 
@@ -107,12 +106,12 @@ module ConstructorPages
107
106
  # It determines if code_name is singular or nor
108
107
  # @param code_name template code name
109
108
  def find_page_in_branch(code_name)
110
- _template = Template.find_by_code_name code_name.singularize
109
+ _template = Template.where(code_name: code_name.singularize).first
111
110
 
112
111
  if _template
113
112
  result = []
114
113
  result = descendants.where(template_id: _template.id) if code_name == code_name.pluralize
115
- result = ancestors.find_by_template_id(_template.id) if result.empty?
114
+ result = ancestors.where(template_id: _template.id).first if result.empty?
116
115
  result
117
116
  end
118
117
  end
@@ -158,13 +157,8 @@ module ConstructorPages
158
157
  self.url = ((auto_url || url.empty?) ? translit(name) : url).parameterize
159
158
  end
160
159
 
161
- # TODO: move out
162
- def parse_date(value)
163
- Date.new(value['date(1i)'].to_i, value['date(2i)'].to_i, value['date(3i)'].to_i)
164
- end
165
-
166
160
  # TODO: add more languages
167
- # Translit to english
161
+ # translit to english
168
162
  def translit(str)
169
163
  Russian.translit(str)
170
164
  end
@@ -7,12 +7,9 @@ module ConstructorPages
7
7
  # For example:
8
8
  # template "Product" should has fields like "price", "description", "size" etc.
9
9
  class Template < ActiveRecord::Base
10
-
11
10
  # Adding code_name_uniqueness method
12
11
  include CodeNameUniq
13
12
 
14
- attr_accessible :name, :code_name, :child_id, :parent_id, :parent
15
-
16
13
  validates_presence_of :name, :code_name
17
14
  validates_uniqueness_of :code_name
18
15
  validate :code_name_uniqueness
@@ -2,9 +2,8 @@
2
2
 
3
3
  module ConstructorPages
4
4
  module Types
5
+ # Boolean type. Render as checkbox.
5
6
  class BooleanType < ActiveRecord::Base
6
- attr_accessible :value, :field_id, :field, :page_id, :page
7
-
8
7
  belongs_to :field
9
8
  belongs_to :page
10
9
  end
@@ -2,15 +2,10 @@
2
2
 
3
3
  module ConstructorPages
4
4
  module Types
5
+ # Date time. Render as three select lists (day, month, year).
5
6
  class DateType < ActiveRecord::Base
6
- attr_accessible :value, :field_id, :field, :page_id, :page
7
-
8
7
  belongs_to :field
9
8
  belongs_to :page
10
-
11
- def russian
12
- Russian::strftime(self.value, "%d %B %Y").gsub(/0(\d\D)/, '\1')
13
- end
14
9
  end
15
10
  end
16
11
  end
@@ -2,9 +2,8 @@
2
2
 
3
3
  module ConstructorPages
4
4
  module Types
5
+ # Float type. Render small text field.
5
6
  class FloatType < ActiveRecord::Base
6
- attr_accessible :value, :field_id, :field, :page_id, :page
7
-
8
7
  belongs_to :field
9
8
  belongs_to :page
10
9
  end