scintillation 1.0.11 → 1.1.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.
- data/VERSION +1 -1
- data/lib/scintillation.rb +7 -96
- data/lib/scintillation/controller.rb +25 -0
- data/lib/scintillation/message_queue.rb +24 -0
- data/lib/scintillation/message_queue/message.rb +22 -0
- data/lib/scintillation/view.rb +16 -0
- data/scintillation.gemspec +10 -4
- data/spec/scintillation/controller_spec.rb +37 -0
- data/spec/scintillation/message_queue_spec.rb +70 -0
- metadata +12 -6
- data/spec/scintillation_spec.rb +0 -32
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.1.1
|
data/lib/scintillation.rb
CHANGED
@@ -1,99 +1,10 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'scintillation/controller'
|
3
|
+
require 'scintillation/view'
|
4
|
+
|
1
5
|
module Scintillation
|
2
|
-
|
3
|
-
def self.included(base)
|
4
|
-
base.send(:include, Controller)
|
5
|
-
end
|
6
|
-
|
7
|
-
module Controller
|
8
|
-
def self.included(base)
|
9
|
-
base.extend(ClassMethods)
|
10
|
-
end
|
11
|
-
|
12
|
-
module ClassMethods
|
13
|
-
def scintillate(options = {})
|
14
|
-
include InstanceMethods
|
15
|
-
ActionView::Base.send(:include, Scintillation::View)
|
16
|
-
|
17
|
-
options.reverse_merge!(:scope => :messages)
|
18
|
-
|
19
|
-
# import flash messages
|
20
|
-
before_filter { |c| c.send(:flash).each { |t, m| c.messages.add(m, t) } }
|
21
|
-
|
22
|
-
helper_method :messages
|
23
|
-
|
24
|
-
define_method(:messages) do
|
25
|
-
@messages ||= Scintillation::SessionMessages.new(session, :scope => options[:scope])
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
module InstanceMethods
|
31
|
-
def method_missing(method, *args, &block)
|
32
|
-
case method.to_s
|
33
|
-
when /^((\w+)_)?msg(_for_(\w+))?$/ then messages.add(args[0], $2, $4)
|
34
|
-
when /^((\w+)_)?msgs$/ then messages.get($2)
|
35
|
-
else super
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
##################################################
|
42
|
-
|
43
|
-
module View
|
44
|
-
def self.included(base)
|
45
|
-
base.send(:include, InstanceMethods)
|
46
|
-
end
|
47
|
-
|
48
|
-
module InstanceMethods
|
49
|
-
def method_missing(method, *args, &block)
|
50
|
-
if method.to_s =~ /^((\w+)_)?msgs$/
|
51
|
-
messages.get($2)
|
52
|
-
else
|
53
|
-
super
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def display_messages(msgs)
|
58
|
-
content_tag(:ul) { msgs.map { |m| content_tag(:li, m, :class => m.tone) } }
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
##################################################
|
64
|
-
|
65
|
-
class SessionMessages
|
66
|
-
def initialize(session, options = {})
|
67
|
-
options.reverse_merge!(:scope => :messages)
|
68
|
-
@session = session
|
69
|
-
@session_scope = options[:scope]
|
70
|
-
@temp_msgs = {}
|
71
|
-
end
|
72
|
-
|
73
|
-
def msgs
|
74
|
-
@session[@session_scope] ||= {}
|
75
|
-
end
|
76
|
-
|
77
|
-
def add(obj, tone = nil, scope = nil)
|
78
|
-
msgs[scope.to_s] ||= []
|
79
|
-
|
80
|
-
case obj
|
81
|
-
when ActiveModel::Errors then obj.full_messages
|
82
|
-
else Array(obj)
|
83
|
-
end.each do |m|
|
84
|
-
msgs[scope.to_s] << Scintillation::Message.new(m.to_s, tone)
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
def get(scope = nil)
|
89
|
-
@temp_msgs[scope.to_s] ||= (msgs.delete(scope.to_s) || [])
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
##################################################
|
94
|
-
|
95
|
-
Message = Struct.new(:to_s, :tone)
|
96
|
-
|
97
6
|
end
|
98
7
|
|
99
|
-
|
8
|
+
if defined?(Rails)
|
9
|
+
ActionController::Base.send(:extend, Scintillation::Controller)
|
10
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'scintillation/message_queue'
|
2
|
+
|
3
|
+
module Scintillation
|
4
|
+
module Controller
|
5
|
+
|
6
|
+
def scintillate(options = {})
|
7
|
+
include MessageQueue
|
8
|
+
include InstanceMethods
|
9
|
+
|
10
|
+
ActionView::Base.send(:include, Scintillation::View)
|
11
|
+
|
12
|
+
options.reverse_merge!(:scope => :messages)
|
13
|
+
|
14
|
+
helper_method :message_store
|
15
|
+
|
16
|
+
define_method(:scintillation_scope) { options[:scope] }
|
17
|
+
end
|
18
|
+
|
19
|
+
module InstanceMethods
|
20
|
+
def message_store
|
21
|
+
@message_store ||= (session[scintillation_scope] ||= {})
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'scintillation/message_queue/message'
|
2
|
+
|
3
|
+
module Scintillation
|
4
|
+
module MessageQueue
|
5
|
+
|
6
|
+
def message_store
|
7
|
+
@message_store ||= {}
|
8
|
+
end
|
9
|
+
|
10
|
+
def method_missing(method, *args, &block)
|
11
|
+
case method.to_s
|
12
|
+
when /^((\w+)_)?msg(_for_(\w+))?$/
|
13
|
+
(message_store[$4] ||= []) << Message.new(args[0], $2)
|
14
|
+
when /^has_((\w+)_)?msgs\?$/
|
15
|
+
!message_store[$2].empty?
|
16
|
+
when /^((\w+)_)?msgs$/
|
17
|
+
message_store.delete($2) || []
|
18
|
+
else
|
19
|
+
super
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Scintillation
|
2
|
+
module MessageQueue
|
3
|
+
class Message
|
4
|
+
def initialize(text, tone)
|
5
|
+
self.text, self.tone = text, tone
|
6
|
+
end
|
7
|
+
|
8
|
+
attr_accessor :tone
|
9
|
+
attr_reader :text
|
10
|
+
|
11
|
+
alias_method :to_s, :text
|
12
|
+
|
13
|
+
def text=(val)
|
14
|
+
@text = val.to_s
|
15
|
+
end
|
16
|
+
|
17
|
+
def ==(message)
|
18
|
+
text == message.text && tone == message.tone
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Scintillation
|
2
|
+
module View
|
3
|
+
|
4
|
+
def method_missing(method, *args, &block)
|
5
|
+
case method.to_s
|
6
|
+
when /^has_((\w+)_)?msgs\?$/
|
7
|
+
message_store[$2] && !message_store[$2].empty?
|
8
|
+
when /^((\w+)_)?msgs$/
|
9
|
+
message_store.delete($2) || []
|
10
|
+
else
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
data/scintillation.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{scintillation}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.1.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Austin Schneider"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-06-27}
|
13
13
|
s.description = %q{A flash messages replacement}
|
14
14
|
s.email = %q{soccer022483@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -24,8 +24,13 @@ Gem::Specification.new do |s|
|
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
26
|
"lib/scintillation.rb",
|
27
|
+
"lib/scintillation/controller.rb",
|
28
|
+
"lib/scintillation/message_queue.rb",
|
29
|
+
"lib/scintillation/message_queue/message.rb",
|
30
|
+
"lib/scintillation/view.rb",
|
27
31
|
"scintillation.gemspec",
|
28
|
-
"spec/
|
32
|
+
"spec/scintillation/controller_spec.rb",
|
33
|
+
"spec/scintillation/message_queue_spec.rb",
|
29
34
|
"spec/spec_helper.rb"
|
30
35
|
]
|
31
36
|
s.homepage = %q{http://github.com/soccer022483/scintillation}
|
@@ -34,7 +39,8 @@ Gem::Specification.new do |s|
|
|
34
39
|
s.rubygems_version = %q{1.3.6}
|
35
40
|
s.summary = %q{A flash messages replacement}
|
36
41
|
s.test_files = [
|
37
|
-
"spec/
|
42
|
+
"spec/scintillation/controller_spec.rb",
|
43
|
+
"spec/scintillation/message_queue_spec.rb",
|
38
44
|
"spec/spec_helper.rb"
|
39
45
|
]
|
40
46
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'action_controller'
|
3
|
+
|
4
|
+
class ControllerTest < ActionController::Base
|
5
|
+
extend Scintillation::Controller
|
6
|
+
|
7
|
+
def session
|
8
|
+
@session ||= {}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
describe Scintillation::Controller do
|
13
|
+
describe "scintillate" do
|
14
|
+
before do
|
15
|
+
ControllerTest.scintillate(:scope => :messages)
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "an instance" do
|
19
|
+
before do
|
20
|
+
@ct = ControllerTest.new
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should be a message queue" do
|
24
|
+
@ct.is_a?(Scintillation::MessageQueue).should be_true
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should have a scintillation_scope" do
|
28
|
+
@ct.scintillation_scope.should == :messages
|
29
|
+
end
|
30
|
+
|
31
|
+
it "messages should setup the session" do
|
32
|
+
@ct.message_store.should == {}
|
33
|
+
@ct.session.should == {:messages => {}}
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class MessageQueueTest
|
4
|
+
include Scintillation::MessageQueue
|
5
|
+
end
|
6
|
+
|
7
|
+
describe Scintillation::MessageQueue do
|
8
|
+
before do
|
9
|
+
@mqt = MessageQueueTest.new
|
10
|
+
end
|
11
|
+
|
12
|
+
def create_message(text, tone)
|
13
|
+
Scintillation::MessageQueue::Message.new(text, tone)
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "adding messages" do
|
17
|
+
it "should be able to add messages with no tone or scope" do
|
18
|
+
args = ["msg", nil]
|
19
|
+
msg = create_message(*args)
|
20
|
+
Scintillation::MessageQueue::Message.stub!(:new).with(*args).and_return(msg)
|
21
|
+
@mqt.msg(args[0])
|
22
|
+
@mqt.message_store.should == {nil => [msg]}
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should be able to add messages with a tone" do
|
26
|
+
args = ["msg", "cool"]
|
27
|
+
msg = create_message(*args)
|
28
|
+
Scintillation::MessageQueue::Message.stub!(:new).with(*args).and_return(msg)
|
29
|
+
@mqt.cool_msg(args[0])
|
30
|
+
@mqt.message_store.should == {nil => [msg]}
|
31
|
+
end
|
32
|
+
|
33
|
+
it "should be able to add messages with a scope" do
|
34
|
+
args = ["msg", nil]
|
35
|
+
msg = create_message(*args)
|
36
|
+
Scintillation::MessageQueue::Message.stub!(:new).with(*args).and_return(msg)
|
37
|
+
@mqt.msg_for_login(args[0])
|
38
|
+
@mqt.message_store.should == {'login' => [msg]}
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should be able to add messages with a tone and scope" do
|
42
|
+
args = ["msg", "cool"]
|
43
|
+
msg = create_message(*args)
|
44
|
+
Scintillation::MessageQueue::Message.stub!(:new).with(*args).and_return(msg)
|
45
|
+
@mqt.cool_msg_for_login(args[0])
|
46
|
+
@mqt.message_store.should == {'login' => [msg]}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "with some messages added" do
|
51
|
+
before do
|
52
|
+
@mqt.msg("msg")
|
53
|
+
@mqt.cool_msg("cool msg")
|
54
|
+
@mqt.msg_for_login("msg for login")
|
55
|
+
@mqt.cool_msg_for_login("cool msg for login")
|
56
|
+
end
|
57
|
+
|
58
|
+
it "should retrieve messages by scope" do
|
59
|
+
@mqt.msgs.should == [
|
60
|
+
create_message("msg", nil),
|
61
|
+
create_message("cool msg", "cool"),
|
62
|
+
]
|
63
|
+
@mqt.login_msgs.should == [
|
64
|
+
create_message("msg for login", nil),
|
65
|
+
create_message("cool msg for login", "cool"),
|
66
|
+
]
|
67
|
+
@mqt.message_store.should be_empty
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 1
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 1.
|
7
|
+
- 1
|
8
|
+
- 1
|
9
|
+
version: 1.1.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Austin Schneider
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-06-27 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -46,8 +46,13 @@ files:
|
|
46
46
|
- Rakefile
|
47
47
|
- VERSION
|
48
48
|
- lib/scintillation.rb
|
49
|
+
- lib/scintillation/controller.rb
|
50
|
+
- lib/scintillation/message_queue.rb
|
51
|
+
- lib/scintillation/message_queue/message.rb
|
52
|
+
- lib/scintillation/view.rb
|
49
53
|
- scintillation.gemspec
|
50
|
-
- spec/
|
54
|
+
- spec/scintillation/controller_spec.rb
|
55
|
+
- spec/scintillation/message_queue_spec.rb
|
51
56
|
- spec/spec_helper.rb
|
52
57
|
has_rdoc: true
|
53
58
|
homepage: http://github.com/soccer022483/scintillation
|
@@ -80,5 +85,6 @@ signing_key:
|
|
80
85
|
specification_version: 3
|
81
86
|
summary: A flash messages replacement
|
82
87
|
test_files:
|
83
|
-
- spec/
|
88
|
+
- spec/scintillation/controller_spec.rb
|
89
|
+
- spec/scintillation/message_queue_spec.rb
|
84
90
|
- spec/spec_helper.rb
|
data/spec/scintillation_spec.rb
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
-
|
3
|
-
module ActiveRecord; Errors = Struct.new(nil); end
|
4
|
-
|
5
|
-
describe Scintillation::SessionMessages do
|
6
|
-
it "should add/get messages" do
|
7
|
-
sm = Scintillation::SessionMessages.new({})
|
8
|
-
|
9
|
-
sm.add("a")
|
10
|
-
sm.add("b", 'x')
|
11
|
-
sm.add("c", nil, 'y')
|
12
|
-
sm.add("d", 'x', 'y')
|
13
|
-
|
14
|
-
messages = sm.get
|
15
|
-
messages.size.should == 2
|
16
|
-
messages.map { |m| [m.to_s, m.tone] }.should == [['a', nil], ['b', 'x']]
|
17
|
-
|
18
|
-
messages = sm.get('z')
|
19
|
-
messages.size.should == 0
|
20
|
-
|
21
|
-
messages = sm.get('y')
|
22
|
-
messages.size.should == 2
|
23
|
-
messages.map { |m| [m.to_s, m.tone] }.should == [['c', nil], ['d', 'x']]
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
describe Scintillation::Message do
|
28
|
-
it "should create" do
|
29
|
-
m = Scintillation::Message.new("message", 'positive')
|
30
|
-
[m.to_s, m.tone].should == ['message', 'positive']
|
31
|
-
end
|
32
|
-
end
|