typed 0.2.5 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,4 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ tmp
data/lib/typed.rb CHANGED
@@ -10,5 +10,6 @@ module Typed
10
10
  autoload :Default, "typed/default"
11
11
  autoload :Changes, "typed/changes"
12
12
  autoload :Events , "typed/events"
13
+ autoload :Scala , "typed/scala"
13
14
  end
14
15
 
@@ -0,0 +1,60 @@
1
+ module Typed
2
+ module Scala
3
+ def vars
4
+ unless @vars
5
+ vars = Typed::Hash.new
6
+ self.class.types.each_pair do |name, obj|
7
+ # vars.default[name] = obj
8
+ vars[name] = obj
9
+ end
10
+ @vars = vars
11
+ end
12
+ return @vars
13
+ end
14
+
15
+ def types
16
+ self.class.types
17
+ end
18
+
19
+ module Var
20
+ ParseError = Class.new(SyntaxError)
21
+ def types
22
+ @types ||= {}
23
+ end
24
+
25
+ def register_var(name, obj)
26
+ types[name] = obj
27
+
28
+ define_method(name) { vars[name.to_s] }
29
+ define_method("#{name}=") {|v| vars[name.to_s] = v }
30
+ end
31
+
32
+ def parse_var_name(caller)
33
+ # "/tmp/adsvr/dsl.rb:23"
34
+ case caller
35
+ when %r{^(.*?):(\d+)}o
36
+ file = $1
37
+ line = $2.to_i
38
+ @lines ||= File.readlines(file)
39
+ case @lines[line-1].to_s
40
+ when /^\s*var\s+(\S+)\s+=/o
41
+ return $1
42
+ else
43
+ raise ParseError, "#{self} from file:#{file} (line: #{line})"
44
+ end
45
+ else
46
+ raise ParseError, "#{self} from caller:#{caller[0]}"
47
+ end
48
+ end
49
+
50
+ def var(obj)
51
+ name = parse_var_name(caller[0])
52
+ register_var(name, obj)
53
+ end
54
+ end
55
+
56
+ def self.included(klass)
57
+ klass.extend Scala::Var
58
+ end
59
+ end
60
+ end
data/lib/typed/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Typed
2
- VERSION = "0.2.5"
2
+ VERSION = "0.2.6"
3
3
  end
@@ -0,0 +1,56 @@
1
+ require "spec_helper"
2
+
3
+ describe Typed::Scala do
4
+ before { write_and_load(source) }
5
+
6
+ let(:source) { commented_source.gsub(/^\s*#/m, '') }
7
+ let(:user) { User.new }
8
+ subject { user}
9
+
10
+ def write_and_load(code)
11
+ path = tmp_path("scala/inline.rb")
12
+ path.parent.mkpath
13
+ path.open("w+"){|f| f.puts(code) }
14
+ load(path.to_s)
15
+ end
16
+
17
+ context "User" do
18
+ # comment outed for the editor issues
19
+ let(:commented_source) { <<-EOF
20
+ # class User
21
+ # include Typed::Scala
22
+ #
23
+ # var name = String
24
+ # var age = Fixnum
25
+ # end
26
+ EOF
27
+ }
28
+
29
+ it { should respond_to(:name) }
30
+ it { should respond_to(:age) }
31
+ it { should_not respond_to(:xxx) }
32
+
33
+ describe "#types" do
34
+ its(:types) { should == {
35
+ "age" => Fixnum,
36
+ "name" => String,
37
+ } }
38
+ end
39
+
40
+ describe ".types" do
41
+ specify "same as User#type" do
42
+ user.types.should == User.types
43
+ end
44
+ end
45
+
46
+ describe "#name=" do
47
+ specify "accept 'maiha'" do
48
+ (user.name = 'maiha').should == 'maiha'
49
+ end
50
+
51
+ specify "reject 100" do
52
+ lambda { user.name = 100 }.should raise_error(TypeError)
53
+ end
54
+ end
55
+ end
56
+ end
data/spec/spec_helper.rb CHANGED
@@ -3,3 +3,6 @@ $:.unshift File.expand_path('../../lib', __FILE__)
3
3
  require 'rspec'
4
4
  require 'typed'
5
5
 
6
+ def tmp_path(file)
7
+ Pathname(File.dirname(__FILE__)) + "../tmp" + file
8
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typed
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 5
10
- version: 0.2.5
9
+ - 6
10
+ version: 0.2.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - maiha
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-08-17 00:00:00 Z
18
+ date: 2013-08-26 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: activesupport
@@ -80,6 +80,7 @@ files:
80
80
  - lib/typed/default.rb
81
81
  - lib/typed/events.rb
82
82
  - lib/typed/hash.rb
83
+ - lib/typed/scala.rb
83
84
  - lib/typed/schema.rb
84
85
  - lib/typed/version.rb
85
86
  - spec/changes_spec.rb
@@ -89,6 +90,7 @@ files:
89
90
  - spec/hash_spec.rb
90
91
  - spec/merge_spec.rb
91
92
  - spec/path_spec.rb
93
+ - spec/scala_spec.rb
92
94
  - spec/schema_spec.rb
93
95
  - spec/spec_helper.rb
94
96
  - spec/time_spec.rb