scintillation 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 1.0.0
data/lib/scintillation.rb CHANGED
@@ -1,42 +1,87 @@
1
- module Soccer022483
2
- module Scintillation
3
- class Messages
4
- def initialize
5
- @messages = []
1
+ module Scintillation
2
+
3
+ module ControllerHelpers
4
+ def self.included(base)
5
+ base.helper_method(:messages)
6
+ base.before_filter { |c| c.send(:flash).each { |t, m| c.messages.add(m, t) } }
7
+ end
8
+
9
+ def messages
10
+ @messages ||= Scintillation::SessionMessages.new(session)
11
+ end
12
+
13
+ def method_missing(method, *args, &block)
14
+ if /^((\w+)_)?msg(_for_(\w+))?$/.match(method.to_s)
15
+ messages.add(args[0], $2, $4)
16
+ elsif /^((\w+)_)?msgs$/.match(method.to_s)
17
+ messages.get($2)
18
+ else
19
+ super
6
20
  end
7
-
8
- def method_missing(name, *args)
9
- if /^(([a-z]+)_)?(message(s)?)(_for_([a -z]+))?$/.match(name.to_s)
10
- options = {:tone => $2, :scope => $6}
11
- ($3 == 'message') ? send(:add, args.first, options) : send(:get, options)
12
- else
13
- super
14
- end
21
+ end
22
+ end
23
+
24
+ ##################################################
25
+
26
+ module ViewHelpers
27
+ def method_missing(method, *args, &block)
28
+ if /^((\w+)_)?msgs$/.match(method.to_s)
29
+ messages.get($2)
30
+ else
31
+ super
15
32
  end
16
-
17
- private
18
-
19
- def add(body, options = {})
20
- @messages << Message.new(body, options[:tone], options[:scope])
33
+ end
34
+
35
+ def display_messages(msgs)
36
+ unless msgs.empty?
37
+ "<ul>\n " + msgs.map { |m| "<li class=\"#{m.tone}\">#{m}</li>" }.join("\n ") + "\n</ul>"
21
38
  end
39
+ end
40
+ end
41
+
42
+ ##################################################
43
+
44
+ class SessionMessages
45
+ def initialize(session)
46
+ @session = session
47
+ @session[:messages] ||= {}
48
+ @temp_msgs = {}
49
+ end
50
+
51
+ def add(obj, tone = nil, scope = nil)
52
+ @session[:messages][scope.to_s] ||= []
22
53
 
23
- def get(options = {})
24
- msgs = []
25
- @messages.delete_if do |m|
26
- msgs << m if {:tone => m.tone, :scope => m.scope} == options
27
- end
28
- msgs
54
+ case obj
55
+ when String, Symbol then @session[:messages][scope.to_s] << Scintillation::Message.new(obj, tone)
56
+ when ActiveRecord::Errors then add(obj.full_messages, tone, scope)
57
+ when Enumerable then obj.each { |o| add(o, tone, scope) }
58
+ else add(obj.to_s, tone, scope)
29
59
  end
30
60
  end
31
61
 
32
- class Message
33
- attr_reader :to_s, :tone, :scope
34
-
35
- def initialize(body, tone = nil, scope = nil)
36
- @to_s = body.to_s
37
- @tone = tone.to_s unless tone !~ /\S/
38
- @scope = scope.to_s unless scope !~ /\S/
62
+ def get(scope = nil)
63
+ @temp_msgs[scope.to_s] ||= (@session[:messages].delete(scope.to_s) || [])
64
+ end
65
+ end
66
+
67
+ ##################################################
68
+
69
+ Message = Struct.new(:to_s, :tone)
70
+
71
+ end
72
+
73
+ if defined? Rails
74
+ #a fix until they patch
75
+ module ActionController
76
+ class Base
77
+ def method_missing(method, *args, &block)
78
+ super(method.to_sym, args, &block)
79
+ rescue NoMethodError
80
+ default_render
39
81
  end
40
82
  end
41
83
  end
84
+
85
+ ActionController::Base.send(:include, Scintillation::ControllerHelpers)
86
+ ActionView::Base.send(:include, Scintillation::ViewHelpers)
42
87
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{scintillation}
8
- s.version = "0.1.1"
8
+ s.version = "1.0.0"
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{2009-10-14}
12
+ s.date = %q{2009-10-16}
13
13
  s.description = %q{A flash messages replacement}
14
14
  s.email = %q{soccer022483@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -1,49 +1,32 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
- SampleData = Struct.new(:setter_method, :getter_method, :tone, :scope) do
4
- def body
5
- setter_method
6
- end
7
- end
3
+ module ActiveRecord; Errors = Struct.new(nil); end
8
4
 
9
- describe "Scintillation" do
10
- it "messages" do
11
- msgs_obj = Soccer022483::Scintillation::Messages.new
12
- msgs_obj.instance_variable_get(:@messages).should be_empty
5
+ describe Scintillation::SessionMessages do
6
+ it "should add/get messages" do
7
+ sm = Scintillation::SessionMessages.new({})
13
8
 
14
- samples = []
15
- samples << SampleData.new('message', 'messages', nil, nil)
16
- samples << SampleData.new('positive_message', 'positive_messages', 'positive', nil)
17
- samples << SampleData.new('message_for_login', 'messages_for_login', nil, 'login')
18
- samples << SampleData.new('negative_message_for_user', 'negative_messages_for_user', 'negative', 'user')
9
+ sm.add("a")
10
+ sm.add("b", 'x')
11
+ sm.add("c", nil, 'y')
12
+ sm.add("d", 'x', 'y')
19
13
 
20
- samples.each { |s| msgs_obj.send(s.setter_method, s.body) }
14
+ messages = sm.get
15
+ messages.size.should == 2
16
+ messages.map { |m| [m.to_s, m.tone] }.should == [['a', nil], ['b', 'x']]
21
17
 
22
- size = 4
18
+ messages = sm.get('z')
19
+ messages.size.should == 0
23
20
 
24
- samples.each do |s|
25
- msgs_obj.instance_variable_get(:@messages).size.should == size
26
- msgs = msgs_obj.send(s.getter_method)
27
- msgs.size.should == 1
28
- msgs.map { |m| [m.to_s, m.tone, m.scope] }.should == [[s.body, s.tone, s.scope]]
29
- size -= 1
30
- end
21
+ messages = sm.get('y')
22
+ messages.size.should == 2
23
+ messages.map { |m| [m.to_s, m.tone] }.should == [['c', nil], ['d', 'x']]
31
24
  end
32
-
33
- it "message" do
34
- m = Soccer022483::Scintillation::Message.new("message")
35
- [m.to_s, m.tone, m.scope].should == ['message', nil, nil]
36
-
37
- m = Soccer022483::Scintillation::Message.new("message", nil, nil)
38
- [m.to_s, m.tone, m.scope].should == ['message', nil, nil]
39
-
40
- m = Soccer022483::Scintillation::Message.new("message", '', '')
41
- [m.to_s, m.tone, m.scope].should == ['message', nil, nil]
42
-
43
- m = Soccer022483::Scintillation::Message.new("message", ' ', ' ')
44
- [m.to_s, m.tone, m.scope].should == ['message', nil, nil]
45
-
46
- m = Soccer022483::Scintillation::Message.new("message", 'positive', 'login')
47
- [m.to_s, m.tone, m.scope].should == ['message', 'positive', 'login']
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']
48
31
  end
49
32
  end
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  $LOAD_PATH.unshift(File.dirname(__FILE__))
2
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
3
- require 'scintillation'
3
+ require 'scintillation.rb'
4
4
  require 'spec'
5
5
  require 'spec/autorun'
6
6
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: scintillation
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Austin Schneider
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-14 00:00:00 -04:00
12
+ date: 2009-10-16 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency