smoke_monster 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  module SmokeMonster
2
- class ViewModel
2
+ class Cover
3
3
  def initialize(subject)
4
4
  @subject = subject
5
5
  end
@@ -7,7 +7,11 @@ module SmokeMonster
7
7
  def method_missing(meth, *args, &blk)
8
8
  @subject.send(meth, *args, &blk)
9
9
  rescue
10
- SmokeMonster::ViewModel.new nil
10
+ SmokeMonster::Cover.new nil
11
+ end
12
+
13
+ def the_original_subject
14
+ @subject
11
15
  end
12
16
  end
13
17
  end
@@ -0,0 +1,5 @@
1
+ class Proc
2
+ def to_object
3
+ SmokeMonster::LazyCover.new self
4
+ end
5
+ end
@@ -0,0 +1,27 @@
1
+ module SmokeMonster
2
+ class LazyCover < Cover
3
+ def initialize(block)
4
+ @block = block
5
+ self.public_methods.select{ |x| x.to_s.include?("the_original_subject") == false }.each do |method|
6
+ remove_method method
7
+ end
8
+ @can_allow_method_missing_to_work_now = true
9
+ end
10
+
11
+ alias :old_the_original_subject :the_original_subject
12
+ def the_original_subject
13
+ @subject = @block.call
14
+ old_the_original_subject
15
+ end
16
+
17
+ private
18
+
19
+ alias :old_method_missing :method_missing
20
+ def method_missing(meth, *args, &blk)
21
+ return nil unless @can_allow_method_missing_to_work_now
22
+ @subject = @block.call
23
+ old_method_missing meth, *args, &blk
24
+ end
25
+
26
+ end
27
+ end
@@ -1,3 +1,3 @@
1
1
  module SmokeMonster
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
@@ -1,12 +1,12 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
- describe SmokeMonster::ViewModel do
3
+ describe SmokeMonster::Cover do
4
4
  before do
5
5
  end
6
6
 
7
7
  describe "when given an Object" do
8
8
  before do
9
- @view_model = SmokeMonster::ViewModel.new Object.new
9
+ @view_model = SmokeMonster::Cover.new Object.new
10
10
  end
11
11
 
12
12
  it "should not throw an exception on methods that do not exist" do
@@ -15,8 +15,8 @@ describe SmokeMonster::ViewModel do
15
15
  end
16
16
 
17
17
  it "should return a view model if the method does not exist" do
18
- @view_model.should_be_a_view_model.must_be_instance_of SmokeMonster::ViewModel
19
- @view_model.another_test.must_be_instance_of SmokeMonster::ViewModel
18
+ @view_model.should_be_a_view_model.must_be_instance_of SmokeMonster::Cover
19
+ @view_model.another_test.must_be_instance_of SmokeMonster::Cover
20
20
  end
21
21
 
22
22
  it "should return new view models each time on methods that do not exist" do
@@ -36,7 +36,7 @@ describe SmokeMonster::ViewModel do
36
36
 
37
37
  before do
38
38
  @person = Person.new
39
- @view_model = SmokeMonster::ViewModel.new @person
39
+ @view_model = SmokeMonster::Cover.new @person
40
40
  end
41
41
 
42
42
  [["John", "Galt"], ["Howard", "Roark"]].each do |name|
@@ -69,7 +69,7 @@ describe SmokeMonster::ViewModel do
69
69
 
70
70
  before do
71
71
  @thing = Thing.new
72
- @view_model = SmokeMonster::ViewModel.new @thing
72
+ @view_model = SmokeMonster::Cover.new @thing
73
73
  end
74
74
 
75
75
  it "should call the block" do
@@ -79,4 +79,16 @@ describe SmokeMonster::ViewModel do
79
79
  Thing.test_value.must_equal true
80
80
  end
81
81
  end
82
+
83
+ [1, "abc", Object.new].each do |subject|
84
+ describe "#the_original_subject" do
85
+ before do
86
+ @cover = SmokeMonster::Cover.new subject
87
+ end
88
+
89
+ it "should return the original" do
90
+ @cover.the_original_subject.must_equal subject
91
+ end
92
+ end
93
+ end
82
94
  end
@@ -0,0 +1,45 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+
3
+ describe "lambda to object" do
4
+
5
+ describe "to_object on a lambda that returns nil" do
6
+ before do
7
+ @value = -> { nil }.to_object
8
+ end
9
+ it "should return a LazyCover object" do
10
+ @value.class.must_equal SmokeMonster::LazyCover
11
+ end
12
+
13
+ it "should remember the original value is nil" do
14
+ @value.the_original_subject.must_equal nil
15
+ end
16
+ end
17
+
18
+ describe "to_object on a lambda that returns an integer" do
19
+ before do
20
+ @value = -> { 1 }.to_object
21
+ end
22
+ it "should return a LazyCover object" do
23
+ @value.class.must_equal SmokeMonster::LazyCover
24
+ end
25
+
26
+ it "should remember the original value is 1" do
27
+ @value.the_original_subject.must_equal 1
28
+ end
29
+
30
+ it "should be able to use the value as an integer" do
31
+ (@value + 1).must_equal 2
32
+ end
33
+ end
34
+
35
+ describe "to_object on a lambda, but never accessing the variable" do
36
+ before do
37
+ @was_called = false
38
+ @value = -> { raise 'it was called' }.to_object
39
+ end
40
+
41
+ it "should not be called" do
42
+ #will throw an exception if it was called above
43
+ end
44
+ end
45
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smoke_monster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.2.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -26,11 +26,14 @@ files:
26
26
  - Rakefile
27
27
  - lib/smoke_monster.rb
28
28
  - lib/smoke_monster/array_to_object.rb
29
+ - lib/smoke_monster/cover.rb
30
+ - lib/smoke_monster/lambda_to_object.rb
31
+ - lib/smoke_monster/lazy_cover.rb
29
32
  - lib/smoke_monster/version.rb
30
- - lib/smoke_monster/view_model.rb
31
33
  - smoke_monster.gemspec
32
34
  - spec/smoke_monster/array_to_object_spec.rb
33
- - spec/smoke_monster/view_model_spec.rb
35
+ - spec/smoke_monster/cover_spec.rb
36
+ - spec/smoke_monster/lambda_to_object_spec.rb
34
37
  - spec/spec_helper.rb
35
38
  homepage: http://www.github.com/darrencauthon/smoke_monster
36
39
  licenses: []
@@ -58,5 +61,6 @@ specification_version: 3
58
61
  summary: Unexplained, dark magic.
59
62
  test_files:
60
63
  - spec/smoke_monster/array_to_object_spec.rb
61
- - spec/smoke_monster/view_model_spec.rb
64
+ - spec/smoke_monster/cover_spec.rb
65
+ - spec/smoke_monster/lambda_to_object_spec.rb
62
66
  - spec/spec_helper.rb