ov 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YzE1ZGI3NDVhMmZjZjYzOGM0MmMxNzQyZDc5OTA2NWNjN2E2NDk1Ng==
4
+ NmM0ZWU4ODJhZGE2NjA2ZjE4ZGU3YWQ5NWJlOGUwOWRmNWU2OWYwNg==
5
5
  data.tar.gz: !binary |-
6
- NjI0YTcwZDQ5MWZlYmRhZjhmOGE5OTY5YTk0YjhmZTgxYWMwODczMA==
6
+ N2UxYWIzMGI2ZGVmMTU4NjM4MDJiMDBiNWYyMjcyZTcxNjU2OGI3Mw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTBhZGEwMmJhNjM3NTE4ZTczMmY4ZmY3MDdjY2I1NzAxMTE2MTkzMjk2M2M5
10
- MjllZjU3NjA0Y2Q3YzEwZWI5OGE4ODgxNDNlZDg0MDBiNzc3ZGUzZjc1ODQ5
11
- NzgyNGU1ZWNiNDRlNTQzMjk4YTQ2YzZmY2U5M2I2MzY1NGU1ZmI=
9
+ ZDA1ZTBkNGQ3OWMzMTVkNDFkZWFkNGI5OTc3MGM1Mjg1ZTI2OTIyZWIwOTJk
10
+ MWNhMWExM2ZkMWNhODAxZjllZTJkNGZjOTEyZmQxOGQ1YTRjYjc1NzIwNmQ3
11
+ OTBjMjhhNzljMmI5OWFmOWE2OWEzMTVkNDBiOGQ1YjNkOTQyNmY=
12
12
  data.tar.gz: !binary |-
13
- ODUzZTZmOWZjMDlkNGIyMjIzODM4YzY1MzMyMjVmY2M3YTcwZTc3NjQxYjBi
14
- MDMyYzI2NzY3N2I2MWYxMjZkZGUxZGQ2YjFmNDVlZGU2NTQ3MTEzODFiZmJm
15
- NGIyYzhhZDQxYTNlZmI4ZDQ3ZjE0ODBkYzE4MzA4ZDhkODg1Y2M=
13
+ OWI2OTcyOWZkZmMzM2JkMGFkMGU2M2I1ZTBkZmVmNjZjYTQ2OGE5NWJiNzY3
14
+ MWQ0NjMxNzZjMDY1ODhhYTkzYjAyODI1MTZlN2NhZDU5ZmQxNDJkYjgzZWYy
15
+ NWQ0MmM1YzVlOWIyY2U5ZTRmMThjNDM3M2Q2N2E3ZWRhZjNjNGM=
data/.gitignore CHANGED
@@ -17,3 +17,5 @@ test/version_tmp
17
17
  tmp
18
18
  .rspec
19
19
  .swp
20
+ .redcar/
21
+
data/README.md CHANGED
@@ -21,16 +21,16 @@ Or install it yourself as:
21
21
  Firstly include `Ov` in you class
22
22
 
23
23
  ```ruby
24
- class MyClass
24
+ class MyClass
25
25
  include Ov
26
26
  end
27
- ```
27
+ ```
28
28
 
29
29
  After define method with types:
30
30
 
31
- ```ruby
31
+ ```ruby
32
32
  class MyClass
33
- include Ov
33
+ include Ov
34
34
 
35
35
  #with Fixnum type
36
36
  let :cool_method, Fixnum do |num|
@@ -46,13 +46,34 @@ end
46
46
  #And now
47
47
  my_class = MyClass.new
48
48
  my_class.cool_method(3) # => 300
49
- my_class.cool_method("foo") # => foo!
49
+ my_class.cool_method("foo") # => foo!
50
+ ```
51
+
52
+ Class Methods
53
+ --------------
54
+
55
+ ```ruby
56
+ class MyClass
57
+ self << class
58
+ let :cool_method, Fixnum do |f|
59
+ f + 1
60
+ end
61
+ let :cool_method, String do |s|
62
+ "{s}"
63
+ end
64
+ end
65
+ end
66
+
67
+
68
+ MyClass.cool_method(1) #=> 2
69
+ MyClass.cool_method("test") #=> "test"
50
70
  ```
51
71
 
72
+
52
73
  Any Type
53
74
  ----------
54
75
 
55
- ```ruby
76
+ ```ruby
56
77
  class MyClass
57
78
  include Ov
58
79
  let :cool_method, Any do |any|
data/lib/ov.rb CHANGED
@@ -56,18 +56,37 @@ require "ov/exception"
56
56
  # Is the same so ruby `def`
57
57
  #
58
58
  #
59
+ # == Define as class methods
60
+ #
61
+ # class MyClass
62
+ # self << class
63
+ # let :cool_method, Fixnum do |f|
64
+ # f + 1
65
+ # end
66
+ # let :cool_method, String do |s|
67
+ # "{s}"
68
+ # end
69
+ # end
70
+ # end
71
+ #
72
+ #
73
+ # MyClass.cool_method(1) #=> 2
74
+ # MyClass.cool_method("test") #=> "test"
75
+ #
59
76
  module Ov
77
+
60
78
  def self.included(base) # :nodoc:
61
79
  base.extend(self)
62
80
  base.class_eval do
63
- class_variable_set(:@@__overridable_methods, OA.new)
81
+ class_variable_set(:@@__overridable_methods, OA.new) if !class_variable_defined?(:@@__overridable_methods)
64
82
  end
65
83
  end
66
-
84
+
67
85
  def __overridable_methods # :nodoc:
68
86
  send(:class_variable_get, :@@__overridable_methods)
69
87
  end
70
-
88
+
89
+ private :__overridable_methods
71
90
  ##
72
91
  # Create new method with +name+ and +types+
73
92
  # When method called +block+ will be executed
@@ -82,23 +101,28 @@ module Ov
82
101
 
83
102
  if !self.method_defined?(name)
84
103
  self.instance_exec do
85
- message = if self.class == Module
104
+ message = if self.class == Module
86
105
  :define_singleton_method
87
106
  else
88
107
  :define_method
89
- end
108
+ end
109
+
90
110
  self.send(message, name) do |*args, &block|
91
111
  types = *args.map(&:class)
92
112
  owner = if self.class == Module
93
113
  self
114
+ elsif self.respond_to?(:ancestors) && self == ancestors.first
115
+ self.singleton_class
94
116
  else
95
117
  self.class
96
118
  end
97
-
119
+
98
120
  method = OverrideMethod.new(name, types, owner)
99
-
100
- z = owner.__overridable_methods.where(method)
101
- raise NotImplementError.new("Method `#{name}` in `#{self}` class with types `#{types}` not implemented.") if z.nil?
121
+ z = owner.send(:__overridable_methods).where(method)
122
+
123
+ if z.nil?
124
+ raise NotImplementError.new("Method `#{name}` in `#{self}` class with types `#{types.join(', ')}` not implemented.")
125
+ end
102
126
  instance_exec(*args, &z.body)
103
127
  end
104
128
  end
data/lib/ov/ov_array.rb CHANGED
@@ -26,19 +26,5 @@ module Ov
26
26
  end
27
27
 
28
28
  alias :get :result
29
-
30
- private
31
-
32
- def compare(a, b)
33
- return false if a.size != b.size
34
- !a.zip(b).map do |arr|
35
- first, last = arr
36
- true if (first == Ov::Any) || (last == Ov::Any) || (first == last)
37
- end.include?(nil)
38
- end
39
-
40
- def compare0(a, b)
41
-
42
- end
43
29
  end
44
30
  end
data/lib/ov/ov_method.rb CHANGED
@@ -12,25 +12,25 @@ module Ov
12
12
  end
13
13
  end
14
14
 
15
- def eql?(other)
15
+ def eql?(other) #:nodoc:
16
16
  return true if @name == other.name && @types == other.types && @owner == other.owner
17
17
  false
18
18
  end
19
19
 
20
- def eql0?(other)
21
- @ancestors.find{|a|
20
+ def eql0?(other) #:nodoc:
21
+ @ancestors.find{|a|
22
22
  a.__overridable_methods.find{|m|
23
23
  m.name == other.name && m.types == other.types
24
24
  }
25
25
  }
26
26
  end
27
27
 
28
- def like?(other)
29
- return compare?(types, other.types) if @name == other.name
28
+ def like?(other) #:nodoc:
29
+ return compare?(types, other.types) if @name == other.name
30
30
  false
31
31
  end
32
32
 
33
- def like0?(other)
33
+ def like0?(other) #:nodoc:
34
34
  @ancestors.find{|a|
35
35
  a.__overridable_methods.find{|m|
36
36
  m.like?(other)
data/lib/ov/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ov
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -0,0 +1,23 @@
1
+ require 'ov'
2
+
3
+
4
+ class A
5
+ include Ov
6
+ let :test0, String do |s|
7
+ s
8
+ end
9
+ class << self
10
+ include Ov
11
+
12
+ let :test0, String do |s|
13
+ s
14
+ end
15
+ let :test0, Fixnum do |f|
16
+ f
17
+ end
18
+ end
19
+ end
20
+
21
+ p A.test0("das")
22
+ p A.test0(1)
23
+ p A.new.test0("dsa")
data/samples/myarray.rb CHANGED
@@ -29,4 +29,3 @@ p MyArray.new(3, true)
29
29
 
30
30
 
31
31
 
32
-
@@ -52,4 +52,47 @@ class TestAny
52
52
  let :my_instance_method, Any do |any|
53
53
  any
54
54
  end
55
- end
55
+ end
56
+
57
+ class TestSingletonClass
58
+ include Ov
59
+ let :my_instance_method, String do |str|
60
+ str
61
+ end
62
+
63
+ class << self
64
+ include Ov
65
+
66
+ let :my_instance_method, Array, String do |arr, str|
67
+ arr << str
68
+ arr
69
+ end
70
+
71
+ let :my_instance_method, String do |str|
72
+ str
73
+ end
74
+
75
+ let :my_instance_method, Fixnum do |fixnum|
76
+ my_instance_method([], my_instance_method("bar"))
77
+ end
78
+ end
79
+ end
80
+
81
+ module TestModule
82
+ include Ov
83
+ extend self
84
+
85
+ let :my_instance_method, Array, String do |arr, str|
86
+ arr << str
87
+ arr
88
+ end
89
+
90
+ let :my_instance_method, String do |str|
91
+ str
92
+ end
93
+
94
+ let :my_instance_method, Fixnum do |fixnum|
95
+ my_instance_method([], my_instance_method("bar"))
96
+ end
97
+ end
98
+
@@ -1,5 +1,12 @@
1
1
  require 'spec_helper'
2
2
 
3
+ class A
4
+ extend Ov
5
+
6
+
7
+ end
8
+
9
+
3
10
  describe Ov do
4
11
  context "instance methods" do
5
12
  context "#my_instance_method" do
@@ -75,7 +82,60 @@ describe Ov do
75
82
  expect{ test.my_instance_method()}.to raise_error(NotImplementError)
76
83
  end
77
84
  end
85
+
86
+ describe "#for module" do
87
+ context "#my_instance_method" do
88
+ let(:test){TestModule}
89
+
90
+ it "return array" do
91
+ result = test.my_instance_method(["foo", "bar"], "baz")
92
+ result.should eq ["foo", "bar", "baz"]
93
+ end
94
+
95
+ it "return string" do
96
+ result = test.my_instance_method("baz")
97
+ result.should eq "baz"
98
+ end
99
+
100
+ it "return overridable method" do
101
+ result = test.my_instance_method(1)
102
+ result.should eq ["bar"]
103
+ end
104
+ end
105
+ end
106
+
107
+ describe "#let class methods" do
108
+ context "#my_instance_method" do
109
+ let(:test){TestSingletonClass}
110
+ let(:test_ins){TestSingletonClass.new}
111
+
112
+ it "return array" do
113
+ result = test.my_instance_method(["foo", "bar"], "baz")
114
+ result.should eq ["foo", "bar", "baz"]
115
+ end
116
+
117
+ it "return string" do
118
+ result = test.my_instance_method("baz")
119
+ result.should eq "baz"
120
+ end
121
+
122
+ it "return overridable method" do
123
+ result = test.my_instance_method(1)
124
+ result.should eq ["bar"]
125
+ end
126
+
127
+ it "instance return string" do
128
+ result = test_ins.my_instance_method("baz")
129
+ result.should eq "baz"
130
+ end
131
+
132
+ it "exception when not defined" do
133
+ expect{ test_ins.my_instance_method(1,2,3)}.to raise_error(NotImplementError)
134
+ end
135
+ end
136
+ end
78
137
  end
79
138
 
80
139
 
81
140
 
141
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ov
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - fntzr
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-10 00:00:00.000000000 Z
11
+ date: 2013-12-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -71,6 +71,7 @@ files:
71
71
  - lib/ov/ov_method.rb
72
72
  - lib/ov/version.rb
73
73
  - ov.gemspec
74
+ - samples/class_methods.rb
74
75
  - samples/myarray.rb
75
76
  - samples/pm.rb
76
77
  - samples/rack.rb