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 CHANGED
@@ -1 +1 @@
1
- 1.0.11
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
- ActionController::Base.send(:include, Scintillation) if defined?(Rails)
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
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{scintillation}
8
- s.version = "1.0.11"
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-04-27}
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/scintillation_spec.rb",
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/scintillation_spec.rb",
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
- - 0
8
- - 11
9
- version: 1.0.11
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-04-27 00:00:00 -04:00
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/scintillation_spec.rb
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/scintillation_spec.rb
88
+ - spec/scintillation/controller_spec.rb
89
+ - spec/scintillation/message_queue_spec.rb
84
90
  - spec/spec_helper.rb
@@ -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