constructor-pages 0.2.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 (69) hide show
  1. data/app/assets/images/constructor_pages/arrow_down.png +0 -0
  2. data/app/assets/images/constructor_pages/arrow_up.png +0 -0
  3. data/app/assets/images/constructor_pages/information.png +0 -0
  4. data/app/assets/images/constructor_pages/page_white_edit.png +0 -0
  5. data/app/assets/images/constructor_pages/photos.png +0 -0
  6. data/app/controllers/constructor_pages/fields_controller.rb +60 -0
  7. data/app/controllers/constructor_pages/pages_controller.rb +207 -0
  8. data/app/controllers/constructor_pages/templates_controller.rb +71 -0
  9. data/app/helpers/constructor_pages/fields_helper.rb +18 -0
  10. data/app/helpers/constructor_pages/pages_helper.rb +15 -0
  11. data/app/helpers/constructor_pages/templates_helper.rb +11 -0
  12. data/app/models/constructor_pages/field.rb +60 -0
  13. data/app/models/constructor_pages/page.rb +117 -0
  14. data/app/models/constructor_pages/template.rb +30 -0
  15. data/app/models/constructor_pages/types/boolean_type.rb +12 -0
  16. data/app/models/constructor_pages/types/date_type.rb +16 -0
  17. data/app/models/constructor_pages/types/float_type.rb +12 -0
  18. data/app/models/constructor_pages/types/html_type.rb +12 -0
  19. data/app/models/constructor_pages/types/image_type.rb +18 -0
  20. data/app/models/constructor_pages/types/integer_type.rb +12 -0
  21. data/app/models/constructor_pages/types/string_type.rb +12 -0
  22. data/app/models/constructor_pages/types/text_type.rb +12 -0
  23. data/app/views/constructor_pages/fields/_form.haml +28 -0
  24. data/app/views/constructor_pages/fields/edit.haml +6 -0
  25. data/app/views/constructor_pages/fields/new.haml +6 -0
  26. data/app/views/constructor_pages/fields/types/_boolean.haml +1 -0
  27. data/app/views/constructor_pages/fields/types/_date.haml +1 -0
  28. data/app/views/constructor_pages/fields/types/_float.haml +1 -0
  29. data/app/views/constructor_pages/fields/types/_html.haml +1 -0
  30. data/app/views/constructor_pages/fields/types/_image.haml +4 -0
  31. data/app/views/constructor_pages/fields/types/_integer.haml +1 -0
  32. data/app/views/constructor_pages/fields/types/_string.haml +1 -0
  33. data/app/views/constructor_pages/fields/types/_text.haml +1 -0
  34. data/app/views/constructor_pages/pages/_breadcrumbs.haml +7 -0
  35. data/app/views/constructor_pages/pages/_form.haml +98 -0
  36. data/app/views/constructor_pages/pages/_menu.haml +8 -0
  37. data/app/views/constructor_pages/pages/_submenu.haml +6 -0
  38. data/app/views/constructor_pages/pages/edit.haml +6 -0
  39. data/app/views/constructor_pages/pages/error_404.haml +23 -0
  40. data/app/views/constructor_pages/pages/index.haml +50 -0
  41. data/app/views/constructor_pages/pages/new.haml +6 -0
  42. data/app/views/constructor_pages/pages/show.haml +5 -0
  43. data/app/views/constructor_pages/pages/sitemap.haml +12 -0
  44. data/app/views/constructor_pages/templates/_form.haml +48 -0
  45. data/app/views/constructor_pages/templates/edit.haml +6 -0
  46. data/app/views/constructor_pages/templates/index.haml +38 -0
  47. data/app/views/constructor_pages/templates/new.haml +6 -0
  48. data/config/initializers/dragonfly.rb +9 -0
  49. data/config/locales/ru.yml +39 -0
  50. data/config/routes.rb +34 -0
  51. data/constructor-pages.gemspec +21 -0
  52. data/db/migrate/10_create_html_types.rb +15 -0
  53. data/db/migrate/11_create_image_types.rb +16 -0
  54. data/db/migrate/12_add_default_template.rb +13 -0
  55. data/db/migrate/1_create_pages.rb +27 -0
  56. data/db/migrate/2_create_templates.rb +18 -0
  57. data/db/migrate/3_create_fields.rb +17 -0
  58. data/db/migrate/4_create_string_types.rb +15 -0
  59. data/db/migrate/5_create_float_types.rb +15 -0
  60. data/db/migrate/6_create_boolean_types.rb +15 -0
  61. data/db/migrate/7_create_integer_types.rb +15 -0
  62. data/db/migrate/8_create_text_types.rb +15 -0
  63. data/db/migrate/9_create_date_types.rb +15 -0
  64. data/lib/constructor-pages.rb +7 -0
  65. data/lib/constructor_pages/engine.rb +6 -0
  66. data/public/hello.txt +1 -0
  67. data/spec/factories.rb +7 -0
  68. data/spec/models/page_model_spec.rb +113 -0
  69. metadata +210 -0
@@ -0,0 +1,17 @@
1
+ class CreateFields < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Field.table_name do |t|
4
+ t.string :name
5
+ t.string :code_name
6
+ t.string :type_value
7
+ t.integer :position
8
+ t.references :template
9
+
10
+ t.timestamps
11
+ end
12
+ end
13
+
14
+ def self.down
15
+ drop_table ConstructorPages::Field.table_name
16
+ end
17
+ end
@@ -0,0 +1,15 @@
1
+ class CreateStringTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::StringType.table_name do |t|
4
+ t.string :value, :default => ""
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::StringType.table_name
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateFloatTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::FloatType.table_name do |t|
4
+ t.float :value, :default => 0.0
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::FloatType.table_name
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateBooleanTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::BooleanType.table_name do |t|
4
+ t.boolean :value, :default => false
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::BooleanType.table_name
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateIntegerTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::IntegerType.table_name do |t|
4
+ t.integer :value, :default => 0
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::IntegerType.table_name
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateTextTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::TextType.table_name do |t|
4
+ t.text :value, :default => ""
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::TextType.table_name
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateDateTypes < ActiveRecord::Migration
2
+ def self.up
3
+ create_table ConstructorPages::Types::DateType.table_name do |t|
4
+ t.date :value, :default => Time.now
5
+ t.references :field
6
+ t.references :page
7
+
8
+ t.timestamps
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table ConstructorPages::Types::DateType.table_name
14
+ end
15
+ end
@@ -0,0 +1,7 @@
1
+ require 'awesome_nested_set'
2
+ require 'haml-rails'
3
+ require 'russian'
4
+ require 'redcloth'
5
+ require 'constructor_pages/engine'
6
+ require 'rack/cache'
7
+ require 'acts_as_list'
@@ -0,0 +1,6 @@
1
+ module ConstructorPages
2
+ class Engine < Rails::Engine
3
+ engine_name "constructor_pages"
4
+ isolate_namespace ConstructorPages
5
+ end
6
+ end
data/public/hello.txt ADDED
@@ -0,0 +1 @@
1
+ hello world
data/spec/factories.rb ADDED
@@ -0,0 +1,7 @@
1
+ FactoryGirl.define do
2
+ factory :page do
3
+ sequence(:title) {|n| "Page title #{n}" }
4
+ sequence(:url) {|n| "/page-#{n}" }
5
+ content ""
6
+ end
7
+ end
@@ -0,0 +1,113 @@
1
+ # encoding: utf-8
2
+
3
+ require './../spec/spec_helper'
4
+
5
+ describe Page do
6
+ describe "Title and Url" do
7
+ before :each do
8
+ Factory(:page, :title => "Hello", :url => '/hello')
9
+ end
10
+
11
+ it "should be unique" do
12
+ page = Factory.build(:page, :title => "Hello", :url => '/hello')
13
+ page.should_not be_valid
14
+ page.url = '/hello@#$%^&'
15
+ page.should_not be_valid
16
+ page.should have(1).error_on(:base)
17
+
18
+ page.url = "/world"
19
+ page.should be_valid
20
+ end
21
+
22
+ it "should be unique even before save" do
23
+ page = Factory.build(:page, :title => "Hello", :url => "")
24
+
25
+ page.should_not be_valid
26
+ page.should have(1).error_on(:base)
27
+ end
28
+ end
29
+
30
+ describe "Title" do
31
+ it "should not be empty" do
32
+ page = Factory.build(:page, :title => ' ')
33
+ page.should_not be_valid
34
+ page.should have(1).error_on(:title)
35
+ page.errors[:title].should == ['не может быть пустым']
36
+
37
+ page.title = "Title"
38
+ page.should be_valid
39
+ end
40
+ end
41
+
42
+ describe "In nav, in menu, in map" do
43
+ it "should be true by default" do
44
+ page = Page.new
45
+ page.in_nav.should be_true
46
+ page.in_menu.should be_true
47
+ page.in_map.should be_true
48
+ end
49
+
50
+ it "should change when given in new method" do
51
+ page = Page.new(:in_nav => false, :in_menu => false, :in_map => false)
52
+ page.in_nav.should be_false
53
+ page.in_menu.should be_false
54
+ page.in_map.should be_false
55
+ end
56
+ end
57
+
58
+ describe "Parent" do
59
+ it "should not be same as self" do
60
+ page = Factory(:page)
61
+ page.parent_id = page.id
62
+
63
+ page.save
64
+ page.should have(1).errors
65
+ end
66
+ end
67
+
68
+ describe "Url" do
69
+ context "Fix mistakes if remote" do
70
+ it "should fix http// and http:/" do
71
+ page = Factory(:page, :url => 'http:/myurl.com/')
72
+ page.url.should == 'http://myurl.com/'
73
+
74
+ page = Factory(:page, :url => 'http//myurl.com/')
75
+ page.url.should == 'http://myurl.com/'
76
+ end
77
+ end
78
+
79
+ context "If empty or nil" do
80
+ it "should be generated from title" do
81
+ page = Factory(:page, :title => " //Hello!@#$\%^&*() my WORLD /// привет// ", :url => ' ')
82
+ page.url.should == "\/hello-my-world\/privet"
83
+ end
84
+
85
+ it "should add parent url before if parent selected" do
86
+ page_parent = Factory(:page, :id => 1, :url => '/hello')
87
+ page = Factory(:page, :parent_id => page_parent, :title => 'World', :url => ' ')
88
+ page.url.should == '/hello/world'
89
+
90
+ # if parent not selected
91
+ page.parent_id = nil
92
+ page.url = ' '
93
+ page.save
94
+ page.url.should == '/world'
95
+ end
96
+
97
+ it "should be empty when page not valid" do
98
+ Factory(:page, :title => "Hello", :url => "/hello")
99
+ page = Factory.build(:page, :title => "Hello", :url => "")
100
+
101
+ page.should_not be_valid
102
+ page.url.should == ""
103
+ end
104
+ end
105
+
106
+ context "Finish cleanup" do
107
+ it "should cleanup url: remove spaces, fix backslashes, unknown chars etc." do
108
+ page = Factory(:page, :url => " //Hello!@#$\%^&*() my WORLD /// привет// ")
109
+ page.url.should == "\/hello-my-world\/privet"
110
+ end
111
+ end
112
+ end
113
+ end
metadata ADDED
@@ -0,0 +1,210 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: constructor-pages
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ivan Zotov
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-05-21 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: dragonfly
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: rack-cache
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: awesome_nested_set
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ~>
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: haml-rails
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ - !ruby/object:Gem::Dependency
79
+ name: russian
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ~>
84
+ - !ruby/object:Gem::Version
85
+ version: 0.6.0
86
+ type: :runtime
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ~>
92
+ - !ruby/object:Gem::Version
93
+ version: 0.6.0
94
+ - !ruby/object:Gem::Dependency
95
+ name: RedCloth
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :runtime
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ description:
111
+ email:
112
+ executables: []
113
+ extensions: []
114
+ extra_rdoc_files: []
115
+ files:
116
+ - app/assets/images/constructor_pages/arrow_down.png
117
+ - app/assets/images/constructor_pages/arrow_up.png
118
+ - app/assets/images/constructor_pages/information.png
119
+ - app/assets/images/constructor_pages/page_white_edit.png
120
+ - app/assets/images/constructor_pages/photos.png
121
+ - app/controllers/constructor_pages/fields_controller.rb
122
+ - app/controllers/constructor_pages/pages_controller.rb
123
+ - app/controllers/constructor_pages/templates_controller.rb
124
+ - app/helpers/constructor_pages/fields_helper.rb
125
+ - app/helpers/constructor_pages/pages_helper.rb
126
+ - app/helpers/constructor_pages/templates_helper.rb
127
+ - app/models/constructor_pages/field.rb
128
+ - app/models/constructor_pages/page.rb
129
+ - app/models/constructor_pages/template.rb
130
+ - app/models/constructor_pages/types/boolean_type.rb
131
+ - app/models/constructor_pages/types/date_type.rb
132
+ - app/models/constructor_pages/types/float_type.rb
133
+ - app/models/constructor_pages/types/html_type.rb
134
+ - app/models/constructor_pages/types/image_type.rb
135
+ - app/models/constructor_pages/types/integer_type.rb
136
+ - app/models/constructor_pages/types/string_type.rb
137
+ - app/models/constructor_pages/types/text_type.rb
138
+ - app/views/constructor_pages/fields/_form.haml
139
+ - app/views/constructor_pages/fields/edit.haml
140
+ - app/views/constructor_pages/fields/new.haml
141
+ - app/views/constructor_pages/fields/types/_boolean.haml
142
+ - app/views/constructor_pages/fields/types/_date.haml
143
+ - app/views/constructor_pages/fields/types/_float.haml
144
+ - app/views/constructor_pages/fields/types/_html.haml
145
+ - app/views/constructor_pages/fields/types/_image.haml
146
+ - app/views/constructor_pages/fields/types/_integer.haml
147
+ - app/views/constructor_pages/fields/types/_string.haml
148
+ - app/views/constructor_pages/fields/types/_text.haml
149
+ - app/views/constructor_pages/pages/_breadcrumbs.haml
150
+ - app/views/constructor_pages/pages/_form.haml
151
+ - app/views/constructor_pages/pages/_menu.haml
152
+ - app/views/constructor_pages/pages/_submenu.haml
153
+ - app/views/constructor_pages/pages/edit.haml
154
+ - app/views/constructor_pages/pages/error_404.haml
155
+ - app/views/constructor_pages/pages/index.haml
156
+ - app/views/constructor_pages/pages/new.haml
157
+ - app/views/constructor_pages/pages/show.haml
158
+ - app/views/constructor_pages/pages/sitemap.haml
159
+ - app/views/constructor_pages/templates/_form.haml
160
+ - app/views/constructor_pages/templates/edit.haml
161
+ - app/views/constructor_pages/templates/index.haml
162
+ - app/views/constructor_pages/templates/new.haml
163
+ - config/initializers/dragonfly.rb
164
+ - config/locales/ru.yml
165
+ - config/routes.rb
166
+ - constructor-pages.gemspec
167
+ - db/migrate/10_create_html_types.rb
168
+ - db/migrate/11_create_image_types.rb
169
+ - db/migrate/12_add_default_template.rb
170
+ - db/migrate/1_create_pages.rb
171
+ - db/migrate/2_create_templates.rb
172
+ - db/migrate/3_create_fields.rb
173
+ - db/migrate/4_create_string_types.rb
174
+ - db/migrate/5_create_float_types.rb
175
+ - db/migrate/6_create_boolean_types.rb
176
+ - db/migrate/7_create_integer_types.rb
177
+ - db/migrate/8_create_text_types.rb
178
+ - db/migrate/9_create_date_types.rb
179
+ - lib/constructor-pages.rb
180
+ - lib/constructor_pages/engine.rb
181
+ - public/hello.txt
182
+ - spec/factories.rb
183
+ - spec/models/page_model_spec.rb
184
+ homepage:
185
+ licenses: []
186
+ post_install_message:
187
+ rdoc_options: []
188
+ require_paths:
189
+ - lib
190
+ required_ruby_version: !ruby/object:Gem::Requirement
191
+ none: false
192
+ requirements:
193
+ - - ! '>='
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
196
+ required_rubygems_version: !ruby/object:Gem::Requirement
197
+ none: false
198
+ requirements:
199
+ - - ! '>='
200
+ - !ruby/object:Gem::Version
201
+ version: '0'
202
+ requirements: []
203
+ rubyforge_project:
204
+ rubygems_version: 1.8.25
205
+ signing_key:
206
+ specification_version: 3
207
+ summary: Pages for ConstructorCms
208
+ test_files:
209
+ - spec/factories.rb
210
+ - spec/models/page_model_spec.rb