constructor-pages 0.8.1 → 0.8.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c078ab91ea33dd0cdfc25092efd3969d3978861f
4
- data.tar.gz: b943b4a056a152bdac0d0d858ade1fca1b61c79f
3
+ metadata.gz: f7c99ad910ed090f671a97bb20daac6d2c794705
4
+ data.tar.gz: 738a7f27c0dfaa1c1cb5bdb8684b42cc640599ad
5
5
  SHA512:
6
- metadata.gz: f674c9622f7be5947ddc8a6b63e00a3251edccfa56ac4096039d09b60e883f95feac19e52f9e70207588024ab6aa50172f3b0e31ab8988eb4f2bf17438cab930
7
- data.tar.gz: 39fdf84915c22c79bb1e11e92541f78fbb7a5a220483558df018935e908163d29a72c092c6200ecaaab070c20de23f0b26f73b736dfbf3e9c5f26e9fd9cbe0d6
6
+ metadata.gz: 21cd621106d968f6458280fbf8046f1e51dc92352311a986ddfef188d91a718beb2ea0d157ca7069cca17a3977c7a2e89d50ce2d73a24151211f423a250f097e
7
+ data.tar.gz: 072ac7bd7b8a4975c62181809f41faf45477d4b5af133d3d5ff24fc0af3502d759dcd36d10ee7ceaca96371e9e5612af7bdffdadcb937897cdebb6a04d4e9793
@@ -33,20 +33,6 @@ module ConstructorPages
33
33
  render template: "templates/#{_code_name}"
34
34
  end
35
35
 
36
- def search
37
- @page = Page.find_by_request_or_first("/#{params[:all]}")
38
-
39
- _params = request.query_parameters
40
- _params.each_pair {|k,v| v || (_params.delete(k); next)
41
- _params[k] = v.numeric? ? v.to_f : (v.to_boolean if v.boolean?)}
42
-
43
- @pages = Page.in(@page).by(_params).search(params[:what_search])
44
-
45
- @page.template.code_name.tap {|c| [c.pluralize, c.singularize].each {|name|
46
- instance_variable_set('@'+name, @pages)}
47
- render template: "templates/#{c}_search"}
48
- end
49
-
50
36
  def edit
51
37
  @page = Page.find(params[:id])
52
38
  @parent_id, @template_id = @page.parent.try(:id), @page.template.id
@@ -47,13 +47,19 @@ module ConstructorPages
47
47
  end
48
48
 
49
49
  def search(what_search = nil)
50
- (@where_search.is_a?(String) ? Page.find_by(full_url: @where_search) : @where_search)
51
- .tap {|p| @result = @where_search ? p ? p.descendants : [] : Page.all }
52
- what_search && Template.find_by(code_name: what_search.to_s.singularize.downcase)
53
- .tap {|t| @result = t ? @result.where(template: t) : [] }
54
- @params_search && @params_search.each_pair {|k,v| @result = @result.select {|p| p.send(k) == v}}
50
+ hash_search, array_search = {}, []
51
+
52
+ @where_search = Page.find_by(full_url: @where_search) if @where_search.is_a?(String)
53
+ array_search = ['lft > ? and rgt < ?', @where_search.lft, @where_search.rgt] if @where_search
54
+
55
+ what_search && what_search = what_search.to_s.singularize.downcase
56
+ hash_search[:template_id] = ConstructorPages::Template.find_by(code_name: what_search).try(:id) if what_search
57
+
58
+ hash_search[:id] = ids_by_params(@params_search) if @params_search
59
+
55
60
  @where_search = @params_search = nil
56
- @result
61
+
62
+ hash_search.empty? && array_search.empty? ? [] : Page.where(hash_search).where(array_search).to_a
57
63
  end
58
64
 
59
65
  def in(where_search = nil); tap {@where_search = where_search} end
@@ -61,6 +67,45 @@ module ConstructorPages
61
67
 
62
68
  def search_in(where_search = nil); self.in(where_search).search end
63
69
  def search_by(params_search = nil); self.by(params_search).search end
70
+
71
+
72
+ def ids_by_params(params)
73
+ _hash = {}
74
+
75
+ params.each_pair do |key, value|
76
+ next if key == 'utf8'
77
+
78
+ key = key.to_s
79
+ _key, _value = key.gsub(/>|</, ''), value
80
+
81
+ if _value.is_a?(String)
82
+ next if _value.strip.empty?
83
+ _value = _value.gsub(/>|</, '')
84
+ _value = _value.numeric? ? _value.to_f : (_value.to_boolean if _value.boolean?)
85
+ end
86
+
87
+ sign = '='
88
+
89
+ if key =~ />$/ || value =~ /^>/
90
+ sign = '>'
91
+ elsif key =~ /<$/ || value =~ /^</
92
+ sign = '<'
93
+ end
94
+
95
+ _fields = ConstructorPages::Field.where(code_name: _key)
96
+
97
+ _ids = []
98
+
99
+ _fields.each do |_field|
100
+ _hash[:field_id] = _field.id
101
+ _ids << _field.type_class.where("value #{sign} #{_value}").where(_hash).map(&:page_id)
102
+ end
103
+
104
+ _hash[:page_id] = _ids.flatten.uniq
105
+ end
106
+
107
+ return _hash[:page_id] || []
108
+ end
64
109
  end
65
110
 
66
111
  def search(what_search = nil); Page.in(self).search(what_search) end
data/config/routes.rb CHANGED
@@ -17,7 +17,6 @@ ConstructorPages::Engine.routes.draw do
17
17
 
18
18
  root :to => 'pages#show'
19
19
 
20
- get '*all/search/:what_search' => 'pages#search', format: false
21
20
  get '*all.:format' => 'pages#show'
22
21
  get '*all' => 'pages#show'
23
22
  end
@@ -70,7 +70,7 @@ module ConstructorPages
70
70
  @content_field = Field.create name: 'Content', code_name: 'content', template: @brand_template, type_value: 'text'
71
71
  @check_field = Field.create name: 'Check', code_name: 'check', template: @brand_template, type_value: 'boolean'
72
72
  @brand_price_field = Field.create name: 'Price', code_name: 'price', template: @brand_template, type_value: 'float'
73
- @brand_area_field = Field.create name: 'Area', code_name: 'area', template: @brand_template, type_value: 'integer'
73
+ @brand_area_field = Field.create name: 'Area', code_name: 'brand_area', template: @brand_template, type_value: 'integer'
74
74
 
75
75
  @page = Page.create name: 'Fresco', template: @template
76
76
  @page.price = 15000
@@ -82,21 +82,23 @@ module ConstructorPages
82
82
 
83
83
  @first_brand_page = Page.create name: 'Midea', template: @brand_template, parent: @page
84
84
  @first_brand_page.price = 20000
85
- @first_brand_page.area = 25
85
+ @first_brand_page.brand_area = 25
86
86
  @first_brand_page.content = 'This is first brand page'
87
87
  @first_brand_page.check = true
88
88
 
89
89
  @second_brand_page = Page.create name: 'Dantex', template: @brand_template, parent: @page
90
90
  @second_brand_page.price = 30000
91
- @second_brand_page.area = 55
91
+ @second_brand_page.brand_area = 55
92
92
  @second_brand_page.content = 'This is second brand page'
93
93
  @second_brand_page.check = false
94
+ @second_brand_page.reload
94
95
 
95
96
  @third_brand_page = Page.create name: 'LG', template: @brand_template, parent: @second_page
96
97
  @third_brand_page.price = 10000
97
- @third_brand_page.area = 38
98
+ @third_brand_page.brand_area = 38
98
99
  @third_brand_page.content = 'This is third brand page'
99
100
  @third_brand_page.check = true
101
+ @third_brand_page.reload
100
102
 
101
103
  @page.reload
102
104
  @second_page.reload
@@ -104,7 +106,6 @@ module ConstructorPages
104
106
 
105
107
  context 'search in all pages' do
106
108
  it 'should search with what search' do
107
- Page.search.should == [@page, @first_brand_page, @second_brand_page, @second_page, @third_brand_page]
108
109
  Page.search(:hello).should == []
109
110
  Page.search(:brand).should == [@first_brand_page, @second_brand_page, @third_brand_page]
110
111
  Page.search(:brands).should == [@first_brand_page, @second_brand_page, @third_brand_page]
@@ -121,22 +122,23 @@ module ConstructorPages
121
122
  Page.in(@second_page).search('brand').should == [@third_brand_page]
122
123
  end
123
124
 
124
- it 'it should search with by params' do
125
- Page.in(@page).search_by(area: 25).should == [@first_brand_page]
125
+ it 'should search with by params' do
126
+ @page.reload
127
+ Page.in(@page).search_by(brand_area: 25).should == [@first_brand_page]
126
128
  Page.search_by(area: 10).should == [@second_page]
127
129
  Page.search_by(price: 15000).should == [@page]
128
- Page.in(@page).by(area: 25).search(:brand).should == [@first_brand_page]
129
- Page.in(@second_page).by(area: 38).search(:brand).should == [@third_brand_page]
130
- Page.in(@second_page).by(area: 40).search(:brand).should == []
131
- Page.in('/world').search_by(area: 10).should == []
130
+ Page.in(@page).by(brand_area: 25).search(:brand).should == [@first_brand_page]
131
+ Page.in(@second_page).by(brand_area: 38).search(:brand).should == [@third_brand_page]
132
+ Page.in(@second_page).by(brand_area: 40).search(:brand).should == []
133
+ Page.in('/world').search_by(brand_area: 10).should == []
132
134
  end
133
135
 
134
136
  it 'should search with less' do
135
- pending#Page.search(price: ['<', 20000]).should == [@page]
137
+ Page.search_by('price<' => '20000').should == [@page, @second_page, @third_brand_page]
136
138
  end
137
139
 
138
140
  it 'should search with more' do
139
- pending#Page.search(price: ['<', 20000], price: ['>', 5000]).should == [@page, @second_page]
141
+ Page.search_by('price>' => 20000).should == [@second_brand_page]
140
142
  end
141
143
  end
142
144
 
@@ -149,7 +151,7 @@ module ConstructorPages
149
151
  end
150
152
 
151
153
  it 'it should search with by params' do
152
- @page.search_by(area: 25).should == [@first_brand_page]
154
+ @page.search_by(brand_area: 25).should == [@first_brand_page]
153
155
  @page.search_by(price: 30000).should == [@second_brand_page]
154
156
  @page.by(price: 30000).search.should == [@second_brand_page]
155
157
  @page.search_by(area: 10).should == []
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: constructor-pages
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Zotov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-06-28 00:00:00.000000000 Z
11
+ date: 2013-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: constructor-core
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 0.8.1
19
+ version: 0.8.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 0.8.1
26
+ version: 0.8.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: dragonfly
29
29
  requirement: !ruby/object:Gem::Requirement