typed 0.2.5 → 0.2.6

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/.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