moosex 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6ae15fab2ae12017db0a5a7e381c775b46c40524
4
- data.tar.gz: 48e95c3c56d0619fb9234129e135cda3ba2589c8
3
+ metadata.gz: 4148ee310961686e2246bd4ce922984b2d5890f4
4
+ data.tar.gz: 5cd59e49ecd649fa8eec2e14949aa91b7ac53e78
5
5
  SHA512:
6
- metadata.gz: 731e2f45aea9a0a06a2e51b5ddd165e7cb01d03c6d838ce4fa9e2255eb7391e0cb2beef874df75ccb11384acd50d0d784110e9b83ca593b5f3284958b06b7089
7
- data.tar.gz: de01caaca1d5b8278f37299b1d99abdcbcbfcc93cb3b65d015b36f605ca80c643f28ecc75cc8b7b0903ca664b3c6904b5c40e87e398cc3f8b56d0e7b093174e7
6
+ metadata.gz: fccc982b45dbf7bc095acb933df761ddacdddd202fe4afbda18e361e55d576209772aa734a01906e8acf37a83dff2ee8ba71a4f7528bf955c0986cce54f23839
7
+ data.tar.gz: ef15d0179cf5f72b49b7f0978162f8780f2dc5b3c4a6a346e0d4dcfbe56bbe3f32d9a5aa06148c77db1414ffcef397bb4a2f2b1d30301482608afb7c0b1bc893
data/Changelog CHANGED
@@ -1,6 +1,9 @@
1
+ 0.0.5 - 2014-01-31
2
+ - should support handles #13 (partial)
3
+
1
4
  0.0.4 - 2014-01-31
2
5
  - fix an issue related to ruby > 1.9.2
3
-
6
+
4
7
  0.0.3 - 2014-01-31
5
8
  - add support to clearer #26
6
9
  - add support to predicate #11
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- moosex (0.0.4)
4
+ moosex (0.0.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -40,7 +40,7 @@ A postmodern object system for Ruby [![Build Status](https://travis-ci.org/pecze
40
40
  include MooseX
41
41
 
42
42
  has :bam, {
43
- :is => :ro,
43
+ :is => :ro, # read-only, you should specify in new only
44
44
  :isa => lambda {|x| # you should add your own validator
45
45
  raise 'x should be less than 100' if x > 100
46
46
  },
@@ -67,12 +67,31 @@ A postmodern object system for Ruby [![Build Status](https://travis-ci.org/pecze
67
67
  }
68
68
  end
69
69
 
70
+ class Target
71
+ def method_x
72
+ 1024
73
+ end
74
+ end
75
+
76
+ class Proxy
77
+ include MooseX
78
+
79
+ has :target, {
80
+ :is => :ro,
81
+ :default => lambda { Target.new() },
82
+ :handles => {
83
+ :my_method_x => :method_x,# create my_method_x in Proxy
84
+ }, # this will delegate to @target.method_x
85
+ }
86
+ end
87
+
70
88
  # now you have a generic constructor
71
89
  p1 = Point.new # x and y will be 0
72
90
  p2 = Point.new( :x => 5 ) # y will be 0
73
91
  p3 = Point.new( :x => 5, :y => 4)
74
92
  foo = Foo.new( :bar => 123 ) # without bar will raise exception
75
93
  baz = Baz.new( :bam => 99 ) # if bam > 100 will raise exception
94
+ Proxy.new.my_method_x # will call method_x in target, return 1024
76
95
  ```
77
96
 
78
97
  ## Installation
data/lib/moosex.rb CHANGED
@@ -70,6 +70,7 @@ module MooseX
70
70
  :required => false,
71
71
  :predicate => false,
72
72
  :isa => lambda { |x| true },
73
+ :handles => {},
73
74
  }
74
75
 
75
76
  REQUIRED = [ :is ]
@@ -80,6 +81,7 @@ module MooseX
80
81
  raise "invalid value for field '#{field_name}' is '#{is}', must be one of :rw, :rwp, :ro or :lazy"
81
82
  end
82
83
  end,
84
+ :handles => lambda {|handles, field_name| true }, # TODO: add implementation
83
85
  };
84
86
 
85
87
  COERCE = {
@@ -130,6 +132,12 @@ module MooseX
130
132
  # create a nested exception here
131
133
  raise "cannot coerce field clearer to a symbol for #{field_name}: #{e}"
132
134
  end
135
+ end,
136
+ :handles => lambda do |handles, field_name|
137
+ # TODO:
138
+ # if single method
139
+ # if array of methods
140
+ handles
133
141
  end,
134
142
  };
135
143
 
@@ -160,6 +168,7 @@ module MooseX
160
168
  @required = o[:required]
161
169
  @predicate = o[:predicate]
162
170
  @clearer = o[:clearer]
171
+ @handles = o[:handles]
163
172
  end
164
173
 
165
174
  def init(object, args)
@@ -168,6 +177,13 @@ module MooseX
168
177
  setter = @attr_symbol.to_s.concat("=").to_sym
169
178
  value = nil
170
179
 
180
+ attr_symbol = @attr_symbol
181
+ @handles.each_pair do | method, target_method |
182
+ object.define_singleton_method method do |*args|
183
+ self.send(attr_symbol).send(target_method, *args)
184
+ end
185
+ end
186
+
171
187
  if @predicate
172
188
  object.define_singleton_method @predicate do
173
189
  instance_variable_defined? inst_variable_name
@@ -1,3 +1,3 @@
1
1
  module Moosex
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/spec/moosex_spec.rb CHANGED
@@ -68,6 +68,46 @@ class Lol
68
68
  }
69
69
  end
70
70
 
71
+ class Target
72
+ def method_x
73
+ 1024
74
+ end
75
+
76
+ def method_y(a,b,c)
77
+ a + b + c
78
+ end
79
+ end
80
+
81
+ class Proxy
82
+ include MooseX
83
+
84
+ has :target, {
85
+ :is => :ro,
86
+ :isa => Target,
87
+ :default => lambda { Target.new() },
88
+ :handles => {
89
+ :my_method_x => :method_x,
90
+ :my_method_y => :method_y,
91
+ },
92
+ }
93
+ end
94
+
95
+ describe "Proxy" do
96
+ it "should delegate method_x to the target" do
97
+ p = Proxy.new
98
+
99
+ p.target.method_x.should == 1024
100
+ p.my_method_x.should == 1024
101
+ end
102
+
103
+ it "should delegate method_y to the target" do
104
+ p = Proxy.new
105
+
106
+ p.target.method_y(1,2,3).should == 6
107
+ p.my_method_y(1,2,3).should == 6
108
+ end
109
+ end
110
+
71
111
  describe "Point" do
72
112
  describe "should has an intelligent constructor" do
73
113
  it "without arguments, should initialize with default values" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moosex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tiago Peczenyj