Class Portal
In: app/models/portal.rb
Parent: ActiveRecord::Base

ポータルのモデル。

Methods

count   pane   size   update_pattern  

Constants

LABEL_PATTERN = [ [s_("Portal|One Pane"), "AAA"], [s_("Portal|Two Panes 1"), "ABB"], [s_("Portal|Two Panes 2"), "AAB"], [s_("Portal|Three Panes"), "ABC"], ]
POSITION = {:A => 1, :B => 2, :C => 3}
ALL_POSITIONS = { :AAA => [1], :ABB => [1, 2], :AAB => [1, 2], :ABC => [1, 2, 3], }
SIZE = { :AAA => { :A => "L", }, :ABB => { :A => "S", :B => "L", }, :AAB => { :A => "L", :B => "S", }, :ABC => { :A => "S", :B => "L", :C => "S", }, }
WIDTH = { :AAA => { :A => "900px", }, :ABB => { :A => "200px", :B => "700px", }, :AAB => { :A => "700px", :B => "200px", }, :ABC => { :A => "200px", :B => "500px", :C => "200px", }, }

Public Instance methods

縦枠 abc に含まれるポートレットの個数を返す。

[Source]

    # File app/models/portal.rb, line 96
96:   def count(abc)
97:     abc = abc.to_s.upcase.to_sym
98:     pane(abc).portlets.size
99:   end

縦枠 abc に対応する pane を返す。

[Source]

    # File app/models/portal.rb, line 90
90:   def pane(abc)
91:     abc = abc.to_s.upcase.to_sym
92:     Pane.find_by_screen_id_and_position(screen.id, POSITION[abc])
93:   end

縦枠 abc の横サイズ(3段階)を返す。

[Source]

    # File app/models/portal.rb, line 84
84:   def size(abc)
85:     abc = abc.to_s.upcase.to_sym
86:     SIZE[pattern.to_sym][abc]
87:   end

パターンを next_pattern に変更する。

[Source]

     # File app/models/portal.rb, line 102
102:   def update_pattern(next_pattern)
103:     prev_pattern = pattern.to_sym
104:     next_pattern = next_pattern.to_s.upcase.to_sym
105:     return if prev_pattern == next_pattern
106:     Portal.transaction do
107:       pane_a = pane(:A)
108:       count_a = count(:A)
109:       case prev_pattern
110:       when :ABC
111:         pane_b = pane(:B)
112:         count_b = count(:B)
113:         pane_c = pane(:C)
114:         case next_pattern
115:         when :ABB
116:           pane_b.width = WIDTH[:ABB][:B]
117:           pane_b.save
118: #         portlets.each do |portlet|
119: #           if portlet.pane_id == pane_c.id
120: #             portlet.pane_id = pane_a.id 
121: #             portlet.position += count_a
122: #             portlet.save
123: #           end
124: #         end
125:         when :AAB
126:           pane_b.width = WIDTH[:AAB][:A]
127:           pane_b.save
128:           pane_b.move_to_top
129: #         portlets.each do |portlet|
130: #           if portlet.pane_id == pane_c.id
131: #             portlet.pane_id = pane_a.id
132: #             portlet.position += count_a
133: #             portlet.save
134: #           end
135: #         end
136:         when :AAA
137:           pane_b.width = WIDTH[:AAA][:A]
138:           pane_b.save
139: #         portlets.each do |portlet|
140: #           if portlet.pane_id == pane_a.id
141: #             portlet.pane_id = pane_b.id
142: #             portlet.position += count_b
143: #             portlet.save
144: #           elsif portlet.pane_id == pane_c.id
145: #             portlet.pane_id = pane_b.id
146: #             portlet.position += count_a + count_b
147: #             portlet.save
148: #           end
149: #         end
150:           pane_a.destroy
151:         else
152:           raise ArgumentError, "invild pattern: #{next_pattern}"
153:         end
154:         pane_c.destroy
155:       when :ABB
156:         pane_b = pane(:B)
157:         count_b = count(:B)
158:         case next_pattern
159:         when :ABC
160:           pane_b.width = WIDTH[:ABC][:B]
161:           pane_b.save
162:           pane_n = Pane.create :screen_id => screen.id, :width => WIDTH[:ABC][:C]
163:         when :AAB
164:           pane_a.move_to_bottom
165:         when :AAA
166:           pane_b.width = WIDTH[:AAA][:A]
167:           pane_b.save
168: #         portlets.each do |portlet|
169: #           if portlet.pane_id == pane_a.id
170: #             portlet.pane_id = pane_b.id
171: #             portlet.position += count_b
172: #             portlet.save
173: #           end
174: #         end
175:           pane_a.destroy
176:         else
177:           raise ArgumentError, "invild pattern: #{next_pattern}"
178:         end
179:       when :AAB
180:         pane_b = pane(:B)
181:         case next_pattern
182:         when :ABC
183:           pane_a.width = WIDTH[:ABC][:B]
184:           pane_a.save
185:           pane_n = Pane.create :screen_id => screen.id, :width => WIDTH[:ABC][:A]
186:           pane_n.move_to_top
187:         when :ABB
188:           pane_a.move_to_bottom
189:         when :AAA
190:           pane_a.width = WIDTH[:AAA][:A]
191:           pane_a.save
192: #         portlets.each do |portlet|
193: #           if portlet.pane_id == pane_b.id
194: #             portlet.pane_id = pane_a.id
195: #             portlet.position += count_a
196: #             portlet.save
197: #           end
198: #         end
199:           pane_b.destroy
200:         else
201:           raise ArgumentError, "invild pattern: #{next_pattern}"
202:         end
203:       when :AAA
204:         case next_pattern
205:         when :ABC
206:           pane_a.width = WIDTH[:ABC][:B]
207:           pane_a.save
208:           pane_n = Pane.create :screen_id => screen.id, :width => WIDTH[:ABC][:A]
209:           pane_n.move_to_top
210:           pane_c = Pane.create :screen_id => screen.id, :width => WIDTH[:ABC][:C]
211:         when :ABB
212:           pane_a.width = WIDTH[:ABB][:B]
213:           pane_a.save
214:           pane_n = Pane.create :screen_id => screen.id, :width => WIDTH[:ABB][:A]
215:           pane_n.move_to_top
216:         when :AAB
217:           pane_a.width = WIDTH[:AAB][:A]
218:           pane_a.save
219:           pane_n = Pane.create :screen_id => screen.id, :width => WIDTH[:AAB][:B]
220:         else
221:           raise ArgumentError, "invild pattern: #{next_pattern}"
222:         end
223:       end
224:       self.pattern = next_pattern.to_s
225:       self.save
226:     end
227:   end

[Validate]