kvo 0.0.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.
@@ -0,0 +1,4 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
4
+ *.lock
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in kvo.gemspec
4
+ gemspec
@@ -0,0 +1,14 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ begin
5
+ require 'rspec/core/rake_task'
6
+ desc "Run all rspecs"
7
+ RSpec::Core::RakeTask.new(:spec) do |t|
8
+ t.pattern = 'spec/**/*_spec.rb'
9
+ end
10
+ task :default => :spec
11
+ rescue LoadError
12
+ puts "please install rspec to run tests"
13
+ puts "install with gem install rspec"
14
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "kvo/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "kvo"
7
+ s.version = Kvo::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Shawn Anderson"]
10
+ s.email = ["shawn42@gmail.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{KVO in ruby}
13
+ s.description = %q{KVO in ruby.}
14
+
15
+ s.rubyforge_project = "kvo"
16
+
17
+ s.add_dependency 'publisher'
18
+ s.add_development_dependency 'rspec'
19
+ s.add_development_dependency 'mocha'
20
+
21
+ s.files = `git ls-files`.split("\n")
22
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
23
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
24
+ s.require_paths = ["lib"]
25
+ end
@@ -0,0 +1,25 @@
1
+ require 'publisher'
2
+ module Kvo
3
+ module ClassMethods
4
+ def kvo_attr_accessor(*kvo_symbols)
5
+ kvo_symbols.each do |kvo|
6
+ class_eval <<-METHODS
7
+ can_fire :#{kvo}_changed
8
+ def #{kvo}
9
+ @kvo_#{kvo}
10
+ end
11
+ def #{kvo}=(newVal)
12
+ old = @kvo_#{kvo}
13
+ @kvo_#{kvo}=newVal
14
+ fire :#{kvo}_changed, old, newVal
15
+ end
16
+ METHODS
17
+ end
18
+ end
19
+ end
20
+
21
+ def self.included(receiver)
22
+ receiver.extend Publisher
23
+ receiver.extend ClassMethods
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module Kvo
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,5 @@
1
+ require 'kvo'
2
+ require 'rspec'
3
+ RSpec.configure do |config|
4
+ config.mock_with :mocha
5
+ end
@@ -0,0 +1,40 @@
1
+ require File.join(File.dirname(__FILE__),'helper')
2
+
3
+ describe 'kvo' do
4
+ before do
5
+ @target = Foo.new
6
+ @target.bar = :old
7
+
8
+ @fired = nil
9
+ @target.when :bar_changed do |old, new|
10
+ @fired = {:old => old, :new => new}
11
+ end
12
+ end
13
+
14
+ it 'notifies on setting of same value' do
15
+ old_val = @target.bar
16
+ @target.bar = old_val
17
+ @fired.should_not be_nil
18
+ @fired[:old].should == old_val
19
+ @fired[:new].should == old_val
20
+ end
21
+
22
+ it 'notifies on setting of different value' do
23
+ old_val = @target.bar
24
+ @target.bar = :yar
25
+ @fired.should_not be_nil
26
+ @fired[:old].should == old_val
27
+ @fired[:new].should == :yar
28
+ end
29
+
30
+ it 'is not available for direct setting' do
31
+ @target.bar = :yar
32
+ @target.instance_variable_get("@bar").should be_nil
33
+ end
34
+ end
35
+
36
+
37
+ class Foo
38
+ include Kvo
39
+ kvo_attr_accessor :bar, :baz
40
+ end
metadata ADDED
@@ -0,0 +1,111 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: kvo
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Shawn Anderson
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-01-13 00:00:00 -05:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: publisher
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ none: false
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ segments:
29
+ - 0
30
+ version: "0"
31
+ type: :runtime
32
+ version_requirements: *id001
33
+ - !ruby/object:Gem::Dependency
34
+ name: rspec
35
+ prerelease: false
36
+ requirement: &id002 !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ version: "0"
44
+ type: :development
45
+ version_requirements: *id002
46
+ - !ruby/object:Gem::Dependency
47
+ name: mocha
48
+ prerelease: false
49
+ requirement: &id003 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ type: :development
58
+ version_requirements: *id003
59
+ description: KVO in ruby.
60
+ email:
61
+ - shawn42@gmail.com
62
+ executables: []
63
+
64
+ extensions: []
65
+
66
+ extra_rdoc_files: []
67
+
68
+ files:
69
+ - .gitignore
70
+ - Gemfile
71
+ - Rakefile
72
+ - kvo.gemspec
73
+ - lib/kvo.rb
74
+ - lib/kvo/version.rb
75
+ - spec/helper.rb
76
+ - spec/kvo_spec.rb
77
+ has_rdoc: true
78
+ homepage: ""
79
+ licenses: []
80
+
81
+ post_install_message:
82
+ rdoc_options: []
83
+
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ segments:
92
+ - 0
93
+ version: "0"
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ segments:
100
+ - 0
101
+ version: "0"
102
+ requirements: []
103
+
104
+ rubyforge_project: kvo
105
+ rubygems_version: 1.3.7
106
+ signing_key:
107
+ specification_version: 3
108
+ summary: KVO in ruby
109
+ test_files:
110
+ - spec/helper.rb
111
+ - spec/kvo_spec.rb