objective-ruby 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.
- data/Rakefile +7 -0
- data/lib/objective-ruby/version.rb +1 -1
- data/lib/objective-ruby.rb +91 -30
- data/spec/objective-ruby_spec.rb +148 -0
- metadata +4 -2
data/Rakefile
CHANGED
data/lib/objective-ruby.rb
CHANGED
@@ -2,45 +2,106 @@ require "objective-ruby/version"
|
|
2
2
|
|
3
3
|
module ObjectiveRuby
|
4
4
|
class << self
|
5
|
-
|
6
|
-
|
7
|
-
end
|
5
|
+
def included(base)
|
6
|
+
base.extend ClassMethods
|
8
7
|
end
|
8
|
+
end
|
9
9
|
|
10
10
|
module ClassMethods
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
11
|
+
def objr method, input = {}, &block
|
12
|
+
define_method(method) do |method_input = {}|
|
13
|
+
block_input = {}
|
14
|
+
method_input.each do |k,v|
|
15
|
+
new_key = k.to_s.sub!(/(with_|and_)/, '').to_sym
|
16
|
+
|
17
|
+
if input[new_key].nil?
|
18
|
+
raise ArgumentError.new "invalid input field #{new_key}"
|
19
|
+
end
|
20
|
+
|
21
|
+
unless v.is_a? input[new_key]
|
22
|
+
raise ArgumentError.new "invalid type for #{new_key} expected #{input[new_key]}"
|
23
|
+
end
|
24
|
+
|
25
|
+
block_input[new_key] = v
|
26
|
+
end
|
27
|
+
|
28
|
+
input.each do |k,v|
|
29
|
+
if block_input[k].nil?
|
30
|
+
raise ArgumentError.new "missing input field #{k}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
block.call block_input
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def objr_d method, input = {}, &block
|
39
|
+
define_method(method) do |method_input = {}|
|
40
|
+
block_input = {}
|
41
|
+
method_input.each do |k,v|
|
42
|
+
new_key = k.to_s.sub!(/(with_|and_)/, '').to_sym
|
43
|
+
|
44
|
+
if input.index(new_key).nil?
|
45
|
+
raise ArgumentError.new "invalid input field #{new_key}"
|
46
|
+
end
|
47
|
+
|
48
|
+
block_input[new_key] = v
|
49
|
+
end
|
50
|
+
|
51
|
+
input.each do |k,v|
|
52
|
+
if block_input[k].nil?
|
53
|
+
raise ArgumentError.new "missing input field #{k}"
|
23
54
|
end
|
24
|
-
|
25
|
-
block.call block_input
|
26
55
|
end
|
56
|
+
|
57
|
+
block.call block_input
|
58
|
+
end
|
27
59
|
end
|
60
|
+
|
61
|
+
def objc method, input = {}, &block
|
62
|
+
define_method(method) do |method_input = {}|
|
63
|
+
block_input = {}
|
64
|
+
method_input.each do |k,v|
|
65
|
+
if input[k].nil?
|
66
|
+
raise ArgumentError.new "invalid input field #{k}"
|
67
|
+
end
|
68
|
+
|
69
|
+
unless v.is_a? input[k][1]
|
70
|
+
raise ArgumentError.new "invalid type for #{k} expected #{input[k][1]}"
|
71
|
+
end
|
72
|
+
|
73
|
+
block_input[input[k][0]] = v
|
74
|
+
end
|
28
75
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
76
|
+
input.each do |k,v|
|
77
|
+
if block_input[v[0]].nil?
|
78
|
+
raise ArgumentError.new "missing input field #{k}"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
block.call block_input
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def objc_d method, input = {}, &block
|
87
|
+
define_method(method) do |method_input = {}|
|
88
|
+
block_input = {}
|
89
|
+
method_input.each do |k,v|
|
90
|
+
if input[k].nil?
|
91
|
+
raise ArgumentError.new "invalid input field #{k}"
|
92
|
+
end
|
93
|
+
|
94
|
+
block_input[input[k]] = v
|
95
|
+
end
|
96
|
+
|
97
|
+
input.each do |k,v|
|
98
|
+
if block_input[v].nil?
|
99
|
+
raise ArgumentError.new "missing input field #{k}"
|
40
100
|
end
|
41
|
-
|
42
|
-
block.call block_input
|
43
101
|
end
|
102
|
+
|
103
|
+
block.call block_input
|
104
|
+
end
|
44
105
|
end
|
45
106
|
end
|
46
107
|
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require 'minitest/spec'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
require 'date'
|
4
|
+
|
5
|
+
require_relative '../lib/objective-ruby'
|
6
|
+
|
7
|
+
class Test
|
8
|
+
include ObjectiveRuby
|
9
|
+
|
10
|
+
objr :objr_method, foo: String, bar: Fixnum do |input|
|
11
|
+
input
|
12
|
+
end
|
13
|
+
|
14
|
+
objr_d :objr_d_method, [:foo, :bar] do |input|
|
15
|
+
input
|
16
|
+
end
|
17
|
+
|
18
|
+
objc :objc_method, with_foo: [:foo, String], also_bar: [:bar, Fixnum] do |input|
|
19
|
+
input
|
20
|
+
end
|
21
|
+
|
22
|
+
objc_d :objc_d_method, with_foo: :foo, also_bar: :bar do |input|
|
23
|
+
input
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe ObjectiveRuby do
|
28
|
+
|
29
|
+
before do
|
30
|
+
@test = Test.new
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'self.objr' do
|
34
|
+
it 'should do the right thing with correct input' do
|
35
|
+
result = @test.objr_method with_foo: 'hello', and_bar: 12
|
36
|
+
result.must_equal foo: 'hello', bar: 12
|
37
|
+
end
|
38
|
+
|
39
|
+
it 'should allow for interchangable prefixes' do
|
40
|
+
results = Array.new
|
41
|
+
results << (@test.objr_method with_foo: 'hello', and_bar: 12)
|
42
|
+
results << (@test.objr_method and_foo: 'hello', with_bar: 12)
|
43
|
+
results << (@test.objr_method with_foo: 'hello', with_bar: 12)
|
44
|
+
results << (@test.objr_method and_foo: 'hello', and_bar: 12)
|
45
|
+
results.each { |result| result.must_equal foo: 'hello', bar: 12 }
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'should raise an error for invalid types' do
|
49
|
+
error = ( -> { @test.objr_method(with_foo: 1, and_bar: 12) }.must_raise ArgumentError )
|
50
|
+
error.message.must_equal 'invalid type for foo expected String'
|
51
|
+
|
52
|
+
error = ( -> { @test.objr_method(with_foo: 'hello', and_bar: nil) }.must_raise ArgumentError )
|
53
|
+
error.message.must_equal 'invalid type for bar expected Fixnum'
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'should raise an error for missing parameters' do
|
57
|
+
error = ( -> { @test.objr_method(with_foo: 'hello') }.must_raise ArgumentError )
|
58
|
+
error.message.must_equal 'missing input field bar'
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'should raise an error for extra parameters' do
|
62
|
+
error = ( -> { @test.objr_method(with_foo: 'hello', and_bar: 12, and_extra: 'this is extra!') }.must_raise ArgumentError )
|
63
|
+
error.message.must_equal 'invalid input field extra'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe 'self.objr_d' do
|
68
|
+
it 'should do the right thing with correct input' do
|
69
|
+
result = @test.objr_d_method with_foo: 'hello', and_bar: 12
|
70
|
+
result.must_equal foo: 'hello', bar: 12
|
71
|
+
end
|
72
|
+
|
73
|
+
it 'should allow for duck typing' do
|
74
|
+
now = DateTime.now
|
75
|
+
result = @test.objr_d_method with_foo: now , and_bar: 'something'
|
76
|
+
result.must_equal foo: now, bar: 'something'
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'should allow for interchangable prefixes' do
|
80
|
+
results = Array.new
|
81
|
+
results << (@test.objr_d_method with_foo: 'hello', and_bar: 12)
|
82
|
+
results << (@test.objr_d_method and_foo: 'hello', with_bar: 12)
|
83
|
+
results << (@test.objr_d_method with_foo: 'hello', with_bar: 12)
|
84
|
+
results << (@test.objr_d_method and_foo: 'hello', and_bar: 12)
|
85
|
+
results.each { |result| result.must_equal foo: 'hello', bar: 12 }
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should raise an error for missing parameters' do
|
89
|
+
error = ( -> { @test.objr_d_method(with_foo: 'hello') }.must_raise ArgumentError )
|
90
|
+
error.message.must_equal 'missing input field bar'
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'should raise an error for extra parameters' do
|
94
|
+
error = ( -> { @test.objr_d_method(with_foo: 'hello', and_bar: 12, and_extra: 'this is extra!') }.must_raise ArgumentError )
|
95
|
+
error.message.must_equal 'invalid input field extra'
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
describe 'self.objc' do
|
100
|
+
it 'should do the right thing with correct input' do
|
101
|
+
result = @test.objc_method with_foo: 'hello', also_bar: 12
|
102
|
+
result.must_equal foo: 'hello', bar: 12
|
103
|
+
end
|
104
|
+
|
105
|
+
it 'should raise an error for missing parameters' do
|
106
|
+
error = ( -> { @test.objc_method(with_foo: 'hello') }.must_raise ArgumentError )
|
107
|
+
error.message.must_equal 'missing input field also_bar'
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should raise an error for extra parameters' do
|
111
|
+
error = ( -> { @test.objc_method(with_foo: 'hello', also_bar: 12, and_extra: 'this is extra!') }.must_raise ArgumentError )
|
112
|
+
error.message.must_equal 'invalid input field and_extra'
|
113
|
+
end
|
114
|
+
|
115
|
+
it 'should raise an error for invalid types' do
|
116
|
+
error = ( -> { @test.objc_method(with_foo: 1, also_bar: 12) }.must_raise ArgumentError )
|
117
|
+
error.message.must_equal 'invalid type for with_foo expected String'
|
118
|
+
|
119
|
+
error = ( -> { @test.objc_method(with_foo: 'hello', also_bar: nil) }.must_raise ArgumentError )
|
120
|
+
error.message.must_equal 'invalid type for also_bar expected Fixnum'
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
describe 'self.objc_d' do
|
125
|
+
it 'should do the right thing with correct input' do
|
126
|
+
result = @test.objc_d_method with_foo: 'hello', also_bar: 12
|
127
|
+
result.must_equal foo: 'hello', bar: 12
|
128
|
+
end
|
129
|
+
|
130
|
+
it 'should allow for duck typing' do
|
131
|
+
now = DateTime.now
|
132
|
+
result = @test.objc_d_method with_foo: now , also_bar: 'something'
|
133
|
+
result.must_equal foo: now, bar: 'something'
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'should raise an error for missing parameters' do
|
137
|
+
error = ( -> { @test.objc_d_method(with_foo: 'hello') }.must_raise ArgumentError )
|
138
|
+
error.message.must_equal 'missing input field also_bar'
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'should raise an error for extra parameters' do
|
142
|
+
error = ( -> { @test.objc_d_method(with_foo: 'hello', also_bar: 12, and_extra: 'this is extra!') }.must_raise ArgumentError )
|
143
|
+
error.message.must_equal 'invalid input field and_extra'
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
148
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: objective-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -26,6 +26,7 @@ files:
|
|
26
26
|
- lib/objective-ruby.rb
|
27
27
|
- lib/objective-ruby/version.rb
|
28
28
|
- objective-ruby.gemspec
|
29
|
+
- spec/objective-ruby_spec.rb
|
29
30
|
homepage: ''
|
30
31
|
licenses: []
|
31
32
|
post_install_message:
|
@@ -50,5 +51,6 @@ rubygems_version: 1.8.17
|
|
50
51
|
signing_key:
|
51
52
|
specification_version: 3
|
52
53
|
summary: Objective-C style Ruby.
|
53
|
-
test_files:
|
54
|
+
test_files:
|
55
|
+
- spec/objective-ruby_spec.rb
|
54
56
|
has_rdoc:
|