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

count(abc)

縦枠 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

pane(abc)

縦枠 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

size(abc)

縦枠 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

update_pattern(next_pattern)

パターンを 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]