rpv_core 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/Rakefile +3 -0
  2. data/bin/rpv +68 -0
  3. data/lib/rpv/autoload.rb +36 -0
  4. data/lib/rpv/base_presenter.rb +41 -0
  5. data/lib/rpv/event_publisher.rb +125 -0
  6. data/lib/rpv/generators/app_generator.rb +17 -0
  7. data/lib/rpv/generators/base.rb +130 -0
  8. data/lib/rpv/generators/presenter_generator.rb +28 -0
  9. data/lib/rpv/generators/templates/app/README +12 -0
  10. data/lib/rpv/generators/templates/app/Rakefile +3 -0
  11. data/lib/rpv/generators/templates/app/app/main.rb +4 -0
  12. data/lib/rpv/generators/templates/app/app/setup.rb +11 -0
  13. data/lib/rpv/generators/templates/app/spec/spec_helper.rb +5 -0
  14. data/lib/rpv/generators/templates/app/tasks/rspec.rake +9 -0
  15. data/lib/rpv/generators/templates/presenter/presenter.rb.erb +10 -0
  16. data/lib/rpv/generators/templates/presenter/presenter_spec.rb.erb +22 -0
  17. data/lib/rpv/inflector.rb +68 -0
  18. data/lib/rpv/method.rb +13 -0
  19. data/lib/rpv/method_helper.rb +9 -0
  20. data/lib/rpv/option_extractor.rb +15 -0
  21. data/lib/rpv/spec_helper.rb +118 -0
  22. data/lib/rpv/wiring/base.rb +49 -0
  23. data/lib/rpv/wiring/callable.rb +20 -0
  24. data/lib/rpv/wiring/converting.rb +36 -0
  25. data/lib/rpv/wiring/helpers.rb +23 -0
  26. data/lib/rpv/wiring/simple.rb +19 -0
  27. data/lib/rpv/wiring/unidirectional.rb +38 -0
  28. data/lib/rpv/wiring.rb +4 -0
  29. data/lib/rpv.rb +20 -0
  30. data/spec/autoload_spec.rb +24 -0
  31. data/spec/base_presenter_spec.rb +16 -0
  32. data/spec/event_publisher_spec.rb +121 -0
  33. data/spec/files/autoload/b/some_module.rb +2 -0
  34. data/spec/files/autoload/some_class.rb +3 -0
  35. data/spec/files/bar/presenter.rb.erb +5 -0
  36. data/spec/files/bar/view.rb.erb +3 -0
  37. data/spec/files/foo/Rakefile +0 -0
  38. data/spec/files/foo/app/main.rb.erb +1 -0
  39. data/spec/files/foo/app/models/templates/lala.html.erb +2 -0
  40. data/spec/generators/base_spec.rb +81 -0
  41. data/spec/generators/presenter_spec.rb +27 -0
  42. data/spec/method_helper_spec.rb +19 -0
  43. data/spec/method_spec.rb +12 -0
  44. data/spec/option_extractor_spec.rb +22 -0
  45. data/spec/spec_helper.rb +1 -0
  46. data/spec/spec_helper_spec.rb +15 -0
  47. data/spec/wiring/base_spec.rb +17 -0
  48. data/spec/wiring/callable_spec.rb +50 -0
  49. data/spec/wiring/helpers_spec.rb +29 -0
  50. data/spec/wiring/simple_spec.rb +47 -0
  51. data/spec/wiring/unidirectional_spec.rb +46 -0
  52. data/tasks/rdoc.rake +10 -0
  53. data/tasks/rspec.rake +10 -0
  54. metadata +118 -0
@@ -0,0 +1 @@
1
+ require 'rpv/spec_helper'
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+
3
+ describe "mock_event_publisher" do
4
+ it "should have null object like behaviour" do
5
+ m = mock_event_publisher
6
+ lambda { m.dfdskfsa.sadf.sfa.sadfasfd = 1 }.should_not raise_error
7
+ end
8
+
9
+ it "should fire events" do
10
+ v = mock_event_publisher { |m| m.fires :foo }
11
+ p = mock_block("p") { |m| m.should_receive(:bar) }
12
+ v.subscribe :foo, RPV::Method.new(p, :bar)
13
+ v.do_fire(:foo)
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ require 'rpv/wiring/base'
4
+
5
+ describe "base wiring" do
6
+ it "should not accept model and presenter at the same time" do
7
+ lambda { RPV::Wiring::Base.new :view => "bar.text", :model => "foo", :presenter => "lala" }.should raise_error(ArgumentError)
8
+ end
9
+
10
+ it "should match view against args" do
11
+ wiring = RPV::Wiring::Base.new :view => "bar.text", :model => "foo"
12
+ wiring.view_match(:only => /^bar\.(.*)/).should be_true
13
+ wiring.view_match(:only => /^bar\.(.*)/, :except => /text$/).should be_false
14
+ wiring.model_match(:except => /foo/).should be_false
15
+ wiring.view_match().should be_true
16
+ end
17
+ end
@@ -0,0 +1,50 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ require 'rpv/wiring/callable'
4
+
5
+ describe "callable wiring" do
6
+ share_examples_for "Both" do
7
+ it "should call the to view block" do
8
+ @view.should_receive(:foo=).with("to_view")
9
+ @model.should_receive(:bar).and_return('')
10
+ @wiring.update_view(@model, @view, nil)
11
+ end
12
+
13
+ it "should call the from view block" do
14
+ @view.should_receive(:foo).and_return('')
15
+ @model.should_receive(:bar=).with("from_view")
16
+ @wiring.update_model(@model, @view, nil)
17
+ end
18
+ end
19
+
20
+ describe "using a Proc" do
21
+ before(:all) do
22
+ @view = mock('view')
23
+ @model = mock('model')
24
+ @wiring = RPV::Wiring::Callable.new :view => "foo", :model => "bar",
25
+ :to_view => lambda { |v| "to_view" },
26
+ :from_view => lambda { |v| "from_view" }
27
+ end
28
+
29
+ it_should_behave_like "Both"
30
+ end
31
+
32
+ describe "using a method" do
33
+ before(:each) do
34
+ converter = mock_block("converter") do |m|
35
+ m.stub(:to_view).and_return("to_view")
36
+ m.stub(:from_view).and_return("from_view")
37
+ end
38
+ @view = mock('view')
39
+ @model = mock('model')
40
+ @wiring = RPV::Wiring::Callable.new :view => "foo", :model => "bar",
41
+ :to_view => RPV::Method.new(converter, :to_view),
42
+ :from_view => RPV::Method.new(converter, :from_view)
43
+ end
44
+
45
+ it_should_behave_like "Both"
46
+ end
47
+
48
+
49
+
50
+ end
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ require 'rpv/wiring/helpers'
4
+
5
+ describe "wiring helpers" do
6
+ before :all do
7
+ @klass = Class.new do
8
+ include RPV::Wiring::WireHelpers
9
+ end
10
+ end
11
+
12
+ describe "simple" do
13
+ it "should add a simple wiring" do
14
+ @klass.simple(:view => "a", :model => "b").should be_kind_of(RPV::Wiring::Simple)
15
+ end
16
+ end
17
+
18
+ describe "unidirectional" do
19
+ it "should add a unidirectional wiring" do
20
+ @klass.unidirectional(@klass.simple(:view => "a", :model => "b"), :view_only).should be_kind_of(RPV::Wiring::Unidirectional)
21
+ end
22
+ end
23
+
24
+ describe "callable" do
25
+ it "should add a simple wiring" do
26
+ @klass.callable(:view => "a", :model => "b").should be_kind_of(RPV::Wiring::Callable)
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ require 'rpv/wiring/simple'
4
+
5
+ describe "simple wiring" do
6
+ before(:all) do
7
+ @view = mock('view')
8
+ @presenter = mock('presenter')
9
+ @model = mock('model')
10
+ end
11
+
12
+ it "should update the view" do
13
+ str = "dlksaf"
14
+ str1 = "ldksafdsalfkjasd"
15
+
16
+ @view.stub_chain(:bar, :text=)
17
+ @view.should_receive(:foo=).with(str1)
18
+ @model.should_receive(:foo).and_return(str)
19
+ @presenter.should_receive(:bar).and_return(str1)
20
+
21
+ wiring = RPV::Wiring::Simple.new :view => "bar.text", :model => "foo"
22
+ wiring.update_view(@model, @view, @presenter)
23
+
24
+ wiring = RPV::Wiring::Simple.new :view => "foo", :presenter => "bar"
25
+ wiring.update_view(@model, @view, @presenter)
26
+ end
27
+
28
+ it "should update the model" do
29
+ str = "dlksaf"
30
+
31
+ @view.stub_chain(:bar, :text).and_return(str)
32
+ @model.should_receive(:foo=).with(str)
33
+
34
+ wiring = RPV::Wiring::Simple.new :view => "bar.text", :model => "foo"
35
+ wiring.update_model(@model, @view, nil)
36
+ end
37
+
38
+ it "should update the presenter" do
39
+ str = "dlksaf"
40
+
41
+ @view.stub_chain(:bar, :text).and_return(str)
42
+ @presenter.should_receive(:foo=).with(str)
43
+
44
+ wiring = RPV::Wiring::Simple.new :view => "bar.text", :presenter => "foo"
45
+ wiring.update_presenter(nil, @view, @presenter)
46
+ end
47
+ end
@@ -0,0 +1,46 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper.rb'
2
+
3
+ require 'rpv/wiring/unidirectional'
4
+
5
+ def call_all(wiring)
6
+ wiring.update_model()
7
+ wiring.update_presenter()
8
+ wiring.update_view()
9
+ end
10
+
11
+ describe "unidirectional wiring" do
12
+ it "should not call update_(model|presenter)" do
13
+ wiring = RPV::Wiring::Unidirectional.new(m = mock('wiring'), :view_only)
14
+ m.should_not_receive(:update_model)
15
+ m.should_not_receive(:update_presenter)
16
+ m.should_receive(:update_view)
17
+ call_all(wiring)
18
+ end
19
+
20
+ it "should not call update_(view|presenter)" do
21
+ wiring = RPV::Wiring::Unidirectional.new(m = mock('wiring'), :model_only)
22
+ m.should_receive(:update_model)
23
+ m.should_not_receive(:update_presenter)
24
+ m.should_not_receive(:update_view)
25
+ call_all(wiring)
26
+ end
27
+
28
+ it "should not call update_(view|model)" do
29
+ wiring = RPV::Wiring::Unidirectional.new(m = mock('wiring'), :presenter_only)
30
+ m.should_not_receive(:update_model)
31
+ m.should_receive(:update_presenter)
32
+ m.should_not_receive(:update_view)
33
+ call_all(wiring)
34
+ end
35
+
36
+ it "should proxy the matchers" do
37
+ args = {:only => "something"}
38
+ wiring = RPV::Wiring::Unidirectional.new(m = mock('wiring'), :presenter_only)
39
+ m.should_receive(:view_match).with(args)
40
+ m.should_receive(:model_match).with(args)
41
+ m.should_receive(:presenter_match).with(args)
42
+ wiring.view_match(args)
43
+ wiring.model_match(args)
44
+ wiring.presenter_match(args)
45
+ end
46
+ end
data/tasks/rdoc.rake ADDED
@@ -0,0 +1,10 @@
1
+ require 'rdoc/task'
2
+
3
+ RDoc::Task.new do |rdoc|
4
+ rdoc.main = "Readme.rdoc"
5
+ rdoc.rdoc_dir = "doc"
6
+ rdoc.title = "RPV"
7
+ rdoc.rdoc_files.include("Readme.rdoc")
8
+ rdoc.rdoc_files.include('lib/**/*.rb')
9
+ rdoc.options << '--line-numbers' << '--inline-source'
10
+ end
data/tasks/rspec.rake ADDED
@@ -0,0 +1,10 @@
1
+ require 'rake'
2
+ require 'spec/rake/spectask'
3
+
4
+ desc "Run all specs"
5
+ Spec::Rake::SpecTask.new('spec') do |t|
6
+ t.spec_opts = ["--colour", "--format progress", "--loadby mtime"]
7
+ t.spec_files = FileList['spec/**/*_spec.rb']
8
+ t.libs = [File.dirname(__FILE__) + '/../lib']
9
+ end
10
+
metadata ADDED
@@ -0,0 +1,118 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rpv_core
3
+ version: !ruby/object:Gem::Version
4
+ hash: 15
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 2
9
+ version: "0.2"
10
+ platform: ruby
11
+ authors:
12
+ - Martin Vielsmaier
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-07-07 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: A simple, modular framework for implementing the Passive View pattern. This pattern descended from the Model View Presenter pattern.
22
+ email: martin.vielsmaier@gmail.com
23
+ executables:
24
+ - rpv
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - Rakefile
31
+ - spec/wiring/base_spec.rb
32
+ - spec/wiring/simple_spec.rb
33
+ - spec/wiring/callable_spec.rb
34
+ - spec/wiring/unidirectional_spec.rb
35
+ - spec/wiring/helpers_spec.rb
36
+ - spec/spec_helper.rb
37
+ - spec/method_spec.rb
38
+ - spec/base_presenter_spec.rb
39
+ - spec/spec_helper_spec.rb
40
+ - spec/autoload_spec.rb
41
+ - spec/files/autoload/some_class.rb
42
+ - spec/files/autoload/b/some_module.rb
43
+ - spec/files/bar/view.rb.erb
44
+ - spec/files/bar/presenter.rb.erb
45
+ - spec/files/foo/app/main.rb.erb
46
+ - spec/files/foo/app/models/templates/lala.html.erb
47
+ - spec/files/foo/Rakefile
48
+ - spec/option_extractor_spec.rb
49
+ - spec/event_publisher_spec.rb
50
+ - spec/generators/base_spec.rb
51
+ - spec/generators/presenter_spec.rb
52
+ - spec/method_helper_spec.rb
53
+ - tasks/rspec.rake
54
+ - tasks/rdoc.rake
55
+ - lib/rpv.rb
56
+ - lib/rpv/wiring/unidirectional.rb
57
+ - lib/rpv/wiring/base.rb
58
+ - lib/rpv/wiring/simple.rb
59
+ - lib/rpv/wiring/helpers.rb
60
+ - lib/rpv/wiring/converting.rb
61
+ - lib/rpv/wiring/callable.rb
62
+ - lib/rpv/spec_helper.rb
63
+ - lib/rpv/wiring.rb
64
+ - lib/rpv/inflector.rb
65
+ - lib/rpv/method_helper.rb
66
+ - lib/rpv/event_publisher.rb
67
+ - lib/rpv/base_presenter.rb
68
+ - lib/rpv/autoload.rb
69
+ - lib/rpv/option_extractor.rb
70
+ - lib/rpv/generators/presenter_generator.rb
71
+ - lib/rpv/generators/base.rb
72
+ - lib/rpv/generators/app_generator.rb
73
+ - lib/rpv/generators/templates/app/tasks/rspec.rake
74
+ - lib/rpv/generators/templates/app/spec/spec_helper.rb
75
+ - lib/rpv/generators/templates/app/app/main.rb
76
+ - lib/rpv/generators/templates/app/app/setup.rb
77
+ - lib/rpv/generators/templates/app/Rakefile
78
+ - lib/rpv/generators/templates/app/README
79
+ - lib/rpv/generators/templates/presenter/presenter.rb.erb
80
+ - lib/rpv/generators/templates/presenter/presenter_spec.rb.erb
81
+ - lib/rpv/method.rb
82
+ - bin/rpv
83
+ has_rdoc: true
84
+ homepage: http://moserei.de
85
+ licenses: []
86
+
87
+ post_install_message:
88
+ rdoc_options: []
89
+
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ none: false
94
+ requirements:
95
+ - - ">="
96
+ - !ruby/object:Gem::Version
97
+ hash: 3
98
+ segments:
99
+ - 0
100
+ version: "0"
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 3
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ requirements: []
111
+
112
+ rubyforge_project:
113
+ rubygems_version: 1.3.7
114
+ signing_key:
115
+ specification_version: 3
116
+ summary: A simple framework for implementing the Passive View pattern.
117
+ test_files: []
118
+