luruju 0.1.0 → 0.2.0
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 +21 -8
- data/bin/access_jruby_with_command.rb +5 -0
- data/lib/luruju.rb +12 -16
- data/lib/luruju/configuration.rb +11 -0
- data/lib/luruju/dto.rb +8 -0
- data/lib/luruju/enjoy_ruby.rb +186 -0
- data/lib/luruju/jude_api/add_dynamic_method.rb +9 -3
- data/lib/luruju/jude_api/jude_base.rb +89 -1
- data/lib/luruju/jude_api_loader.rb +7 -158
- data/lib/luruju/jude_api_loader_for_cache.rb +22 -0
- data/lib/luruju/jude_api_loader_for_locked_project.rb +37 -0
- data/lib/luruju/jude_api_loader_in_cruby.rb +38 -0
- data/lib/luruju/jude_api_loader_in_jruby.rb +113 -0
- data/lib/luruju/jude_meta.rb +75 -0
- data/lib/luruju/luruju_client.rb +20 -0
- data/lib/luruju/prepare.rb +16 -0
- data/lib/luruju/server/luruju_server.rb +33 -0
- data/lib/luruju/version.rb +2 -4
- data/lib/tasks/luruju.rb +5 -0
- data/lib/tasks/server.rake +21 -0
- data/test/abstract_unit.rb +26 -12
- data/test/{jude_api_test.rb → class_diagram_test.rb} +6 -1
- data/test/configuration_test.rb +108 -0
- data/test/er_diagram_test.rb +1 -1
- data/test/jude/base.jude +0 -0
- data/test/jude/community-5.0.2/class_diagram/dummy.jude +1 -0
- data/test/jude/community-5.0.2/class_diagram/locked.jude +0 -0
- data/test/jude/community-5.0.2/class_diagram/locked.jude.test +0 -0
- data/test/jude/community-5.0.2/locked.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/dummy.jude +1 -0
- data/test/jude/professional-5.1/class_diagram/locked.jude +0 -0
- data/test/jude/professional-5.1/class_diagram/locked.jude.test +0 -0
- data/test/jude_api_loader_for_locked_project_test.rb +97 -0
- data/test/jude_base_test.rb +71 -0
- data/test/luruju_server_test.rb +77 -0
- metadata +78 -47
- data/lib/luruju/customize_inflector.rb +0 -3
- data/lib/luruju/dynamic_method.rb +0 -16
- data/lib/luruju/easy_breakpoint.rb +0 -22
- data/lib/luruju/jude_api/add_method.rb +0 -52
data/Rakefile
CHANGED
@@ -7,6 +7,12 @@ require 'rake/gempackagetask'
|
|
7
7
|
# TODO require 'rake/contrib/rubyforgepublisher'
|
8
8
|
require File.join(File.dirname(__FILE__), 'lib', 'luruju', 'version')
|
9
9
|
|
10
|
+
#require 'tasks/luruju' rescue nil
|
11
|
+
|
12
|
+
#config = Luruju::Configuration.install do |config|
|
13
|
+
# config.drb_port = 9999
|
14
|
+
#end
|
15
|
+
|
10
16
|
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
|
11
17
|
PKG_NAME = 'luruju'
|
12
18
|
PKG_VERSION = Luruju::VERSION::STRING + PKG_BUILD
|
@@ -16,34 +22,34 @@ PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
|
16
22
|
Rake::TestTask.new('test') do |t|
|
17
23
|
t.libs << "test"
|
18
24
|
t.pattern = "test/**/*_test.rb"
|
19
|
-
|
25
|
+
# t.warning = true
|
20
26
|
end
|
21
27
|
|
22
28
|
# Create compressed packages
|
23
|
-
dist_dirs = [ "lib", "test" ]
|
29
|
+
dist_dirs = [ "lib", "test", "bin" ]
|
24
30
|
|
25
31
|
spec = Gem::Specification.new do |s|
|
26
32
|
s.platform = Gem::Platform::RUBY
|
27
33
|
s.name = PKG_NAME
|
28
34
|
s.version = PKG_VERSION
|
29
35
|
s.summary = "A library for coordinating with Ruby And JUDE."
|
30
|
-
# TODO s.description = %q{}
|
36
|
+
# TODO s.description = %q{}
|
31
37
|
|
32
38
|
s.author = "Shuhei Nomura"
|
33
|
-
# TODO s.email = "david@loudthinking.com"
|
39
|
+
# TODO s.email = "david@loudthinking.com"
|
34
40
|
s.rubyforge_project = PKG_NAME
|
35
41
|
s.homepage = "http://luruju.com"
|
36
42
|
|
37
43
|
s.has_rdoc = false # TODO
|
38
|
-
# TODO s.extra_rdoc_files = ["README"]
|
44
|
+
# TODO s.extra_rdoc_files = ["README"]
|
39
45
|
s.requirements << 'JUDE Community'
|
40
46
|
s.add_dependency('activesupport', '>= 1.4.2' + PKG_BUILD)
|
41
47
|
s.require_path = 'lib'
|
42
48
|
s.autorequire = 'luruju'
|
43
49
|
|
44
50
|
s.files = [ "LICENSE", "Rakefile"]
|
45
|
-
# TODO s.files << "CHANGELOG"
|
46
|
-
# TODO s.files << "README"
|
51
|
+
# TODO s.files << "CHANGELOG"
|
52
|
+
# TODO s.files << "README"
|
47
53
|
dist_dirs.each do |dir|
|
48
54
|
s.files = s.files + Dir.glob( "#{dir}/**/*" ).delete_if { |i| (/^\.svn/ =~ i) or (/\~\z/) =~ i }
|
49
55
|
end
|
@@ -53,7 +59,7 @@ end
|
|
53
59
|
Rake::GemPackageTask.new(spec) do |p|
|
54
60
|
p.gem_spec = spec
|
55
61
|
p.need_tar = true
|
56
|
-
p.need_zip =
|
62
|
+
p.need_zip = false
|
57
63
|
end
|
58
64
|
|
59
65
|
task :lines do
|
@@ -78,4 +84,11 @@ task :lines do
|
|
78
84
|
end
|
79
85
|
|
80
86
|
puts "Total: Lines #{total_lines}, LOC #{total_codelines}"
|
87
|
+
end
|
88
|
+
|
89
|
+
task :install_localhost => [:repackage] do
|
90
|
+
%x{gem uninstall luruju}
|
91
|
+
%x{gem install pkg/#{PKG_FILE_NAME}.gem -l}
|
92
|
+
%x{jruby -S gem uninstall luruju}
|
93
|
+
%x{jruby -S gem install pkg/#{PKG_FILE_NAME}.gem -l}
|
81
94
|
end
|
data/lib/luruju.rb
CHANGED
@@ -1,19 +1,15 @@
|
|
1
1
|
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
-
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
3
|
|
4
|
-
|
5
|
-
|
6
|
-
$:.unshift(File.dirname(__FILE__) + "/../../activesupport/lib")
|
7
|
-
require 'active_support'
|
8
|
-
rescue LoadError
|
9
|
-
require 'rubygems'
|
10
|
-
require 'active_support'
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
require 'luruju/easy_breakpoint'
|
15
|
-
require 'luruju/customize_inflector'
|
16
|
-
require 'luruju/jude_api_loader'
|
17
|
-
require 'luruju/dynamic_method'
|
18
|
-
require 'luruju/jude_api/jude_base'
|
4
|
+
require 'rubygems'
|
5
|
+
require 'active_support'
|
19
6
|
|
7
|
+
require 'luruju/prepare'
|
8
|
+
require 'luruju/enjoy_ruby'
|
9
|
+
require 'luruju/configuration'
|
10
|
+
require 'luruju/jude_meta'
|
11
|
+
require 'luruju/luruju_client'
|
12
|
+
require 'luruju/jude_api_loader'
|
13
|
+
require "luruju/jude_api_loader_in_#{ruby_vm_name}"
|
14
|
+
require 'luruju/dto'
|
15
|
+
require 'luruju/jude_api/jude_base'
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Luruju
|
2
|
+
|
3
|
+
class Configuration
|
4
|
+
|
5
|
+
include Configuratable
|
6
|
+
define_config :access_jruby_with, :default => :drb, :validate => lambda{|val|[:drb,:command].include?(val)}
|
7
|
+
define_config :drb_port, :default => 3937, :validate => lambda{|val|val.to_i > 0}
|
8
|
+
define_config :use_jude_cache, :default => true, :validate => lambda{|val|[true,false].include?(val)}
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
data/lib/luruju/dto.rb
ADDED
@@ -0,0 +1,186 @@
|
|
1
|
+
|
2
|
+
module Luruju
|
3
|
+
|
4
|
+
module DynamicMethod
|
5
|
+
|
6
|
+
class IsNotMyRole < StandardError ; end
|
7
|
+
|
8
|
+
def method_missing method, *args, &b
|
9
|
+
methods.select{|m|/^dyna_.*/ =~ m.to_s}.sort.each do |dyna_method|
|
10
|
+
return send(dyna_method, method, *args, &b) rescue IsNotMyRole
|
11
|
+
end
|
12
|
+
super method, *args, &b
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
module MethodWrappable
|
18
|
+
|
19
|
+
def self.included(base) base.extend ClassMethods end
|
20
|
+
|
21
|
+
module ClassMethods
|
22
|
+
|
23
|
+
@@wrapped_class_methods = []
|
24
|
+
|
25
|
+
def wrap_class_method *names
|
26
|
+
@@wrapped_class_methods += names
|
27
|
+
names.each { |name| do_wrap_class_method name rescue NameError }
|
28
|
+
end
|
29
|
+
|
30
|
+
def singleton_method_added(name)
|
31
|
+
return if /^original_/ =~ name.to_s
|
32
|
+
file, line, method = caller[1].match(/^(.+?):(\d+)(?::in `(.*?)')?/).captures
|
33
|
+
return if file == __FILE__ and ["do_wrap_class_method","singleton_method_added"].include?(method)
|
34
|
+
do_wrap_class_method(name) if @@wrapped_class_methods.include? name.to_sym
|
35
|
+
ensure
|
36
|
+
super
|
37
|
+
end
|
38
|
+
|
39
|
+
def do_wrap_class_method name
|
40
|
+
self.module_eval <<-EOD
|
41
|
+
class << self
|
42
|
+
alias :original_#{name.to_s} :#{name.to_s}
|
43
|
+
def #{name.to_s} *args
|
44
|
+
bucket_brigade methods.select{|x|/^wrap_#{name}/=~x}.sort!.push("original_#{name.to_s}"), *args
|
45
|
+
end
|
46
|
+
end
|
47
|
+
EOD
|
48
|
+
end
|
49
|
+
|
50
|
+
def bucket_brigade wraps, *args
|
51
|
+
current = wraps.shift
|
52
|
+
send(current, *args) do |*args|
|
53
|
+
wraps.empty? ? send(current, *args) : bucket_brigade(wraps, *args)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
module Configuratable
|
62
|
+
|
63
|
+
def self.included base
|
64
|
+
base.parent.class_eval <<-EOD
|
65
|
+
@@config = nil
|
66
|
+
def self.config() @@config || #{base.name}.default end
|
67
|
+
def self.config=(config) @@config = config end
|
68
|
+
EOD
|
69
|
+
base.class_eval <<-EOD
|
70
|
+
@@default_configurations = {}
|
71
|
+
def self.default() new end
|
72
|
+
def self.uninstall() parent.config = nil end
|
73
|
+
def self.install(config=default, &block)
|
74
|
+
return parent.config = config unless block_given?
|
75
|
+
parent.config = new {|config|yield config}
|
76
|
+
end
|
77
|
+
def self.define_config key, options={}
|
78
|
+
@@default_configurations[key] = Config.new(key, options[:default], options[:validate])
|
79
|
+
end
|
80
|
+
def initialize
|
81
|
+
@configrations = {}
|
82
|
+
@@default_configurations.each{|key, value| @configrations[key] = value.dup}
|
83
|
+
yield self if block_given?
|
84
|
+
end
|
85
|
+
def self.singleton_method_added name
|
86
|
+
return unless name.to_s.match(/default_(.+)$/)
|
87
|
+
key = $1.to_sym
|
88
|
+
return unless @@default_configurations[key]
|
89
|
+
@@default_configurations[key].default = method(name).call
|
90
|
+
end
|
91
|
+
EOD
|
92
|
+
end
|
93
|
+
|
94
|
+
class Config
|
95
|
+
attr_accessor :key, :default, :value
|
96
|
+
def initialize(key, default=nil, validate=nil)
|
97
|
+
@key, @default, @validate = key, default, validate
|
98
|
+
end
|
99
|
+
def value() @value.nil? ? @default : @value end
|
100
|
+
def value=(value)
|
101
|
+
if @validate
|
102
|
+
raise ArgumentError.new("invarid value[#{value}]. key[#{key}]") unless @validate.call(value)
|
103
|
+
end
|
104
|
+
@value = value
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def method_missing method, *args
|
109
|
+
return @configrations[method].value if @configrations.key? method.to_sym
|
110
|
+
if args.size == 1
|
111
|
+
sym = method.to_s.match(/^(.+?)=$/).captures[0].to_sym
|
112
|
+
return @configrations[sym].value = args[0] if @configrations.key? sym
|
113
|
+
end
|
114
|
+
super
|
115
|
+
end
|
116
|
+
|
117
|
+
end
|
118
|
+
|
119
|
+
end
|
120
|
+
|
121
|
+
require 'pp'
|
122
|
+
|
123
|
+
#eval(easy_breakpoint)
|
124
|
+
module Kernel
|
125
|
+
|
126
|
+
def easy_breakpoint
|
127
|
+
<<-EOS
|
128
|
+
puts 'easy-breakpoint>'
|
129
|
+
input = STDIN.readline.chop!
|
130
|
+
unless input == "stop"
|
131
|
+
begin
|
132
|
+
eval(input)
|
133
|
+
rescue => e
|
134
|
+
p e
|
135
|
+
pp e.backtrace
|
136
|
+
end
|
137
|
+
eval easy_breakpoint
|
138
|
+
end
|
139
|
+
EOS
|
140
|
+
end
|
141
|
+
|
142
|
+
end
|
143
|
+
|
144
|
+
__END__
|
145
|
+
|
146
|
+
class Hoge
|
147
|
+
|
148
|
+
include Luruju::MethodWrappable
|
149
|
+
|
150
|
+
wrap_class_method :hoge
|
151
|
+
|
152
|
+
def self.hoge arg1, arg2
|
153
|
+
p "hoge call #{arg1} #{arg2}"
|
154
|
+
"A"
|
155
|
+
end
|
156
|
+
|
157
|
+
def aaa
|
158
|
+
end
|
159
|
+
|
160
|
+
def self.wrap_hoge_aaa arg1, arg2
|
161
|
+
p "wrap enter aaa #{arg1} #{arg2}"
|
162
|
+
rtn = yield arg1, arg2
|
163
|
+
p "wrap leave aaa #{arg1} #{arg2}"
|
164
|
+
rtn + "B"
|
165
|
+
end
|
166
|
+
|
167
|
+
def self.wrap_hoge_bbb arg1, arg2
|
168
|
+
p "wrap enter bbb #{arg1} #{arg2}"
|
169
|
+
rtn = yield arg1, arg2
|
170
|
+
p "wrap leave bbb #{arg1} #{arg2}"
|
171
|
+
rtn + "C"
|
172
|
+
end
|
173
|
+
|
174
|
+
end
|
175
|
+
|
176
|
+
begin
|
177
|
+
result = Hoge.hoge "x", "y"
|
178
|
+
rescue LocalJumpError
|
179
|
+
p $!
|
180
|
+
p $!.reason
|
181
|
+
p $!.exit_value
|
182
|
+
require "pp"
|
183
|
+
pp $!.backtrace
|
184
|
+
end
|
185
|
+
|
186
|
+
p result
|
@@ -25,9 +25,10 @@ module Luruju
|
|
25
25
|
end
|
26
26
|
|
27
27
|
def dyna_is_kind_of? method, *args
|
28
|
-
raise IsNotMyRole unless /^kind_of_(
|
29
|
-
|
30
|
-
|
28
|
+
raise IsNotMyRole unless /^kind_of_([^?]+?)\?$/ =~ method.to_s
|
29
|
+
c = "JudeApi::Jude#{$1.classify}Methods"
|
30
|
+
c = 'JudeApi::JudeClassMethods' if c == 'JudeApi::JudeClasMethods'
|
31
|
+
return self.kind_of?(eval(c)) rescue false
|
31
32
|
end
|
32
33
|
|
33
34
|
def dyna_owned_elements method, *args
|
@@ -44,6 +45,11 @@ module Luruju
|
|
44
45
|
send(method.to_s.pluralize.to_sym, *args)[0]
|
45
46
|
end
|
46
47
|
|
48
|
+
def dyna_search method, *args, &block
|
49
|
+
raise IsNotMyRole unless /^search_(.+?)$/ =~ method.to_s
|
50
|
+
JudeBase.search search{|x|x.send("kind_of_#{$1.singularize}?")}, *args, &block
|
51
|
+
end
|
52
|
+
|
47
53
|
end
|
48
54
|
end
|
49
55
|
end
|
@@ -1,2 +1,90 @@
|
|
1
1
|
require 'luruju/jude_api/add_dynamic_method'
|
2
|
-
|
2
|
+
|
3
|
+
module Luruju
|
4
|
+
|
5
|
+
module JudeApi
|
6
|
+
|
7
|
+
class JudeBase
|
8
|
+
|
9
|
+
attr_writer :tagged
|
10
|
+
attr_reader :members
|
11
|
+
|
12
|
+
def initialize(members) @members = members end
|
13
|
+
|
14
|
+
def search options={}, &block
|
15
|
+
JudeBase.search members, options, &block
|
16
|
+
end
|
17
|
+
|
18
|
+
def tagged
|
19
|
+
return @tagged if @tagged
|
20
|
+
@tagged = HashWithIndifferentAccess.new
|
21
|
+
tagged_values.each {|x| @tagged[x.key.to_sym] = x.value}
|
22
|
+
@tagged
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.search members, options={}
|
26
|
+
members.collect do |member|
|
27
|
+
if options.key?(:name)
|
28
|
+
next unless member.is_a?(JudeNamedElementMethods)
|
29
|
+
next unless member.name == options[:name]
|
30
|
+
end
|
31
|
+
next if options.key?(:id) and member.id != options[:id]
|
32
|
+
if block_given?
|
33
|
+
next unless yield(member)
|
34
|
+
end
|
35
|
+
member
|
36
|
+
end.compact
|
37
|
+
end
|
38
|
+
|
39
|
+
def inspect() "<#{self.class}: id=#{self.instance_eval('@id')}>" end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
module JudeNamedElementAddMethod
|
44
|
+
def inspect() "<#{self.class}: name=#{self.name} id=#{self.instance_eval('@id')}>" end
|
45
|
+
end
|
46
|
+
|
47
|
+
module JudeErAttributeAddMethod
|
48
|
+
def constraint(constraint_name) constraints.find{|x|constraint_name == x.name} end
|
49
|
+
end
|
50
|
+
|
51
|
+
module JudeModelAddMethod
|
52
|
+
attr_accessor :mtime
|
53
|
+
end
|
54
|
+
|
55
|
+
module JudeClassAddMethod
|
56
|
+
def default?
|
57
|
+
return unless owner
|
58
|
+
return unless owner.kind_of_element?
|
59
|
+
return unless owner.owner
|
60
|
+
['lang', 'util'].include?(owner.name) and owner.owner.name == 'java'
|
61
|
+
end
|
62
|
+
|
63
|
+
def super_classes() generalizations.collect{|g|g.super_type} end
|
64
|
+
def sub_classes() specializations.collect{|s|s.sub_type} end
|
65
|
+
|
66
|
+
end
|
67
|
+
|
68
|
+
module JudeAttributeAddMethod
|
69
|
+
def broad_aggregate?() is_aggregate? or is_composite? end
|
70
|
+
def not_broad_aggregate?() !broad_aggregate? end
|
71
|
+
def contra() association.attributes.find{|b|b != self} end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
77
|
+
|
78
|
+
class Class
|
79
|
+
|
80
|
+
alias :include_except_luruju :include
|
81
|
+
|
82
|
+
def include *included
|
83
|
+
return include_except_luruju(*included) unless self.ancestors.include?(Luruju::JudeApi::JudeBase)
|
84
|
+
if Luruju::JudeApi.constants.include? "#{self.name}AddMethod".split("::").last
|
85
|
+
included[0].send :include, eval("#{self.name}AddMethod")
|
86
|
+
end
|
87
|
+
include_except_luruju(*included)
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
@@ -1,164 +1,13 @@
|
|
1
|
-
require 'java'
|
2
|
-
|
3
1
|
module Luruju
|
4
|
-
|
5
|
-
JUDEAPI_PHEAD = 'com.change_vision.jude.api.inf'
|
6
|
-
include_class "#{JUDEAPI_PHEAD}.project.ProjectAccessorFactory"
|
7
|
-
|
8
|
-
class JudeApiLoader
|
9
|
-
|
10
|
-
def self.load jude_file
|
11
|
-
project_accessor = ProjectAccessorFactory.getProjectAccessor
|
12
|
-
project_accessor.open jude_file
|
13
|
-
getter = project_accessor.getClass.getDeclaredMethod "getProject", nil
|
14
|
-
new.build project_accessor, getter
|
15
|
-
ensure
|
16
|
-
project_accessor.close rescue Exception
|
17
|
-
end
|
18
|
-
|
19
|
-
def initialize
|
20
|
-
@already_builded = {}
|
21
|
-
end
|
22
|
-
|
23
|
-
def build java_parent, java_getter
|
24
|
-
|
25
|
-
return nil if java_getter.getGenericParameterTypes.length > 0
|
26
|
-
|
27
|
-
begin
|
28
|
-
java_obj = java_parent.send java_getter.getName
|
29
|
-
rescue NativeException
|
30
|
-
# p "Warning(#{__FILE__},#{__LINE__}) " + java_getter.getName
|
31
|
-
end
|
32
|
-
return nil if java_obj == nil
|
33
|
-
|
34
|
-
java_return_class = java_getter.getReturnType
|
35
|
-
if is_jude_class? java_return_class
|
36
|
-
return build_judeapi(java_obj)
|
37
|
-
elsif java_return_class.isArray
|
38
|
-
return build_array(java_obj, java_getter)
|
39
|
-
else
|
40
|
-
return java_obj
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def build_array java_obj, java_getter
|
45
|
-
|
46
|
-
comp_type = java_getter.getReturnType.getComponentType
|
47
|
-
|
48
|
-
if is_jude_class? comp_type
|
49
|
-
jude_objects = Array.new
|
50
|
-
java_obj.each {|i| jude_objects << build_judeapi(i) }
|
51
|
-
return jude_objects
|
52
|
-
else
|
53
|
-
return java_obj.to_a
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
def build_judeapi java_obj
|
58
|
-
|
59
|
-
if is_jude_named_element?(java_obj) and @already_builded.key?(java_obj.getId)
|
60
|
-
return @already_builded[java_obj.getId]
|
61
|
-
end
|
62
|
-
|
63
|
-
java_if = java_obj.getClass.getInterfaces[0]
|
64
|
-
jude_class = JudeApi.module_eval java_if.getSimpleName.jude_class
|
65
|
-
jude_object = jude_class.new
|
66
|
-
|
67
|
-
@already_builded[java_obj.getId] = jude_object if jude_object.kind_of_named_element?
|
68
|
-
|
69
|
-
java_if.getMethods.each do |java_method|
|
70
|
-
next if java_method.getGenericParameterTypes.length > 0
|
71
|
-
setter_name = java_method.getName.sub(/^(get)/,'').underscore << "="
|
72
|
-
jude_object.send setter_name, build(java_obj, java_method)
|
73
|
-
end
|
74
|
-
return jude_object
|
75
|
-
end
|
76
|
-
|
77
|
-
def is_jude_class? java_class
|
78
|
-
java_class.getName.index(JUDEAPI_PHEAD) == 0
|
79
|
-
end
|
80
|
-
|
81
|
-
def self.define_jude_class class_id
|
82
|
-
judeapi_class_name = class_id.to_s.jude_class
|
83
|
-
JudeApi.module_eval "class #{judeapi_class_name} < JudeBase ; end"
|
84
|
-
judeapi_class = JudeApi.module_eval judeapi_class_name
|
85
|
-
judeapi_module_name = class_id.to_s.jude_module
|
86
|
-
judeapi_module = JudeApi.module_eval judeapi_module_name
|
87
|
-
judeapi_class.send :include, judeapi_module
|
88
|
-
judeapi_class
|
89
|
-
end
|
90
|
-
|
91
|
-
def self.define_jude_module module_id
|
92
|
-
|
93
|
-
java_if = java.lang.Class.forName "#{JUDEAPI_PHEAD}.model.#{module_id.to_s.java_if}"
|
94
|
-
judeapi_module_name = java_if.getSimpleName.jude_module
|
95
|
-
JudeApi.module_eval "module #{judeapi_module_name} ; end"
|
96
|
-
judeapi_module = JudeApi.module_eval judeapi_module_name
|
97
|
-
java_if.getGenericInterfaces().each do |generic_if|
|
98
|
-
JudeApi.module_eval generic_if.getSimpleName.jude_class
|
99
|
-
judeapi_module.send :include, JudeApi.module_eval(generic_if.getSimpleName.jude_module)
|
100
|
-
end
|
101
|
-
|
102
|
-
java_if.getDeclaredMethods.each do |method|
|
103
|
-
next if method.getGenericParameterTypes.length > 0
|
104
|
-
java_method_name = method.getName
|
105
|
-
attr_name = java_method_name.sub(/^(get)/,'').underscore
|
106
|
-
judeapi_module.module_eval "attr_accessor :#{attr_name}"
|
107
|
-
if /^is_/ =~ attr_name
|
108
|
-
judeapi_module.send :alias_method,
|
109
|
-
"#{attr_name}?".to_sym, attr_name.to_sym
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
java_if.getDeclaredFields.each do |f|
|
114
|
-
judeapi_module.module_eval "#{f.getName} = #{f.get(nil)}"
|
115
|
-
end
|
116
|
-
judeapi_module
|
117
|
-
end
|
118
|
-
|
119
|
-
def is_jude_named_element? jude_obj
|
120
|
-
jude_obj.getClass.getMethod "getId", nil
|
121
|
-
return true
|
122
|
-
rescue java.lang.NoSuchMethodException
|
123
|
-
return false
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
class String
|
130
|
-
|
131
|
-
def is_jude_class?
|
132
|
-
/^Jude/ =~ self and not /Methods$/ =~ self
|
2
|
+
class ProjectNotFoundException < Exception #:nodoc:
|
133
3
|
end
|
134
|
-
|
135
|
-
def is_jude_module?
|
136
|
-
/^Jude/ =~ self and /Methods$/ =~ self
|
4
|
+
class ProjectLockedException < Exception #:nodoc:
|
137
5
|
end
|
138
|
-
|
139
|
-
def jude_class
|
140
|
-
'Jude' + sub(/^(I|Jude)/,'').sub(/ER/, "Er").sub(/Methods$/, '')
|
6
|
+
class UnexpectedNativeException < Exception #:nodoc:
|
141
7
|
end
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
end
|
146
|
-
|
147
|
-
def java_if
|
148
|
-
sub(/^(I|Jude)/,'I').sub(/Er/, "ER").sub(/Methods$/, '')
|
8
|
+
class JudeApiLoader
|
9
|
+
include MethodWrappable
|
10
|
+
wrap_class_method :load
|
149
11
|
end
|
150
|
-
|
151
12
|
end
|
152
|
-
|
153
|
-
class Module
|
154
|
-
|
155
|
-
alias :const_missing_except_luruju :const_missing
|
156
|
-
|
157
|
-
def const_missing class_id
|
158
|
-
return const_missing_except_luruju(class_id) unless self == Luruju::JudeApi
|
159
|
-
return Luruju::JudeApiLoader::define_jude_class(class_id) if class_id.to_s.is_jude_class?
|
160
|
-
return Luruju::JudeApiLoader::define_jude_module(class_id) if class_id.to_s.is_jude_module?
|
161
|
-
raise NameError
|
162
|
-
end
|
163
|
-
|
164
|
-
end
|
13
|
+
require 'luruju/jude_api_loader_for_cache'
|