bosdk 1.0.3-universal-java-1.6 → 1.1.0-universal-java-1.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ README.rdoc
2
+ lib/**/*.rb
3
+ bin/*
4
+ features/**/*.feature
5
+ LICENSE
@@ -0,0 +1,21 @@
1
+ ## MAC OS
2
+ .DS_Store
3
+
4
+ ## TEXTMATE
5
+ *.tmproj
6
+ tmtags
7
+
8
+ ## EMACS
9
+ *~
10
+ \#*
11
+ .\#*
12
+
13
+ ## VIM
14
+ *.swp
15
+
16
+ ## PROJECT::GENERAL
17
+ coverage
18
+ rdoc
19
+ pkg
20
+
21
+ ## PROJECT::SPECIFIC
File without changes
@@ -51,8 +51,17 @@ Disconnects @boe from the cms.
51
51
  query(stmt)
52
52
  Runs the provided query on @boe and returns the resulting InfoObject array.
53
53
 
54
- open(docid)
55
- Opens the specified InfoObject using a ReportEngine and returns the doc handle.
54
+ open_webi(docid)
55
+ Opens the specified InfoObject using a ReportEngine and returns a handle to the
56
+ WebiInstance. It also creates the following instance variables: @doc, @objs and
57
+ @vars. @doc is a handle to the WebiInstance, @objs is an alias for @doc.objects
58
+ and @vars is an alias for @doc.variables.
59
+
60
+ objects
61
+ Shortcut to @objs which is an alias for @doc.objects
62
+
63
+ variables
64
+ Shortcut to @vars which is an alias for @doc.variables
56
65
 
57
66
  == Resources
58
67
 
data/Rakefile CHANGED
@@ -1,26 +1,53 @@
1
+ require 'rubygems'
2
+ require 'rake'
1
3
  require 'rake/clean'
2
4
 
3
- CLEAN.include %w( doc )
4
- CLOBBER.include %w( *.gem )
5
+ CLOBBER.include 'pkg'
5
6
 
6
- desc 'generate documentation'
7
- task :rdoc do
8
- sh 'hanna README.rdoc MIT-LICENSE lib -U'
7
+ begin
8
+ require 'jeweler'
9
+ Jeweler::Tasks.new do |gem|
10
+ gem.name = "bosdk"
11
+ gem.summary = "JRuby Business Object Java SDK wrapper"
12
+ gem.description = "A JRuby wrapper for the Business Objects Java SDK"
13
+ gem.email = "semmons99@gmail.com"
14
+ gem.homepage = "http://semmons99.github.com/bosdk"
15
+ gem.authors = ["Shane Emmons"]
16
+ gem.platform = Gem::Platform::CURRENT
17
+ gem.requirements = "An environment variable 'BOE_JAVA_LIB' pointing to the Business Objects Java SDK directory"
18
+ gem.add_development_dependency "rspec", ">= 1.3.0"
19
+ gem.add_development_dependency "hanna", ">= 0.1.12"
20
+ end
21
+ Jeweler::GemcutterTasks.new
22
+ rescue LoadError
23
+ puts "Jeweler (or a dependency) not available. Install it with gem install jeweler"
9
24
  end
10
25
 
11
- desc 'build gem'
12
- task :gem do
13
- sh 'gem build bosdk.gemspec'
26
+ require 'spec/rake/spectask'
27
+ Spec::Rake::SpecTask.new(:spec) do |spec|
28
+ spec.libs << 'lib' << 'spec'
29
+ spec.spec_files = FileList['spec/**/*_spec.rb']
14
30
  end
15
31
 
16
- desc 'upload gem'
17
- task :upload => :gem do
18
- Dir.glob('bosdk*.gem') do |gem|
19
- sh "gem push #{gem}"
20
- end
32
+ desc "Run specs with '--format specdoc'"
33
+ Spec::Rake::SpecTask.new(:specdoc) do |spec|
34
+ spec.libs << 'lib' << 'spec'
35
+ spec.spec_files = FileList['spec/**/*_spec.rb']
36
+ spec.spec_opts << '--format specdoc'
21
37
  end
22
38
 
23
- desc 'run unit tests'
24
- task :test do
25
- ruby '-S spec -f s -c spec/*_spec.rb'
39
+ task :spec => :check_dependencies
40
+
41
+ task :default => :spec
42
+
43
+ task :test => :spec
44
+
45
+ require 'hanna/rdoctask'
46
+ Rake::RDocTask.new do |rdoc|
47
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
48
+
49
+ rdoc.rdoc_dir = 'rdoc'
50
+ rdoc.title = "bosdk #{version}"
51
+ rdoc.rdoc_files.include('README*')
52
+ rdoc.rdoc_files.include('lib/**/*.rb')
26
53
  end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 1.1.0
data/bin/boirb CHANGED
@@ -46,7 +46,18 @@ def query(stmt)
46
46
  end
47
47
 
48
48
  def open_webi(docid)
49
- @boe.open_webi(docid) if connected?
49
+ @doc = @boe.open_webi(docid) if connected?
50
+ @objs = @doc.objects
51
+ @vars = @doc.variables
52
+ @doc
53
+ end
54
+
55
+ def objects
56
+ @objs
57
+ end
58
+
59
+ def variables
60
+ @vars
50
61
  end
51
62
 
52
63
  IRB.start_session(Kernel.binding)
@@ -1,31 +1,72 @@
1
- Gem::Specification.new do |s|
2
- s.name = "bosdk"
3
- s.version = "1.0.3"
4
-
5
- s.author = "Shane Emmons"
6
- s.description = "A JRuby wrapper for the Business Objects Java SDK"
7
- s.email = "semmons99@gmail.com"
8
- s.files = [
9
- "README.rdoc", "MIT-LICENSE", "bosdk.gemspec", "Rakefile",
10
- "bin/boirb",
11
- "lib/bosdk.rb",
12
- "lib/bosdk/enterprise_session.rb",
13
- "lib/bosdk/info_object.rb",
14
- "lib/bosdk/webi_report_engine.rb",
15
- "spec/enterprise_session_spec.rb",
16
- "spec/info_object_spec.rb",
17
- "spec/webi_report_engine_spec.rb",
18
- ]
19
- s.bindir = "bin"
20
- s.executables = ["boirb"]
21
- s.default_executable = "boirb"
22
-
23
- s.homepage = "http://semmons99.github.com/bosdk"
24
- s.summary = "JRuby Business Object Java SDK wrapper"
25
- s.platform = Gem::Platform::CURRENT
26
- s.requirements = "An environment variable 'BOE_JAVA_LIB' pointing to the Business Objects Java SDK directory"
27
- s.has_rdoc = true
28
- s.extra_rdoc_files = ["README.rdoc", "MIT-LICENSE"]
29
- s.add_development_dependency("rspec", ">= 1.3.0")
30
- s.add_development_dependency("hanna", ">= 0.1.12")
31
- end
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{bosdk}
8
+ s.version = "1.1.0"
9
+ s.platform = %q{universal-java-1.6}
10
+
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
+ s.authors = ["Shane Emmons"]
13
+ s.date = %q{2010-02-09}
14
+ s.default_executable = %q{boirb}
15
+ s.description = %q{A JRuby wrapper for the Business Objects Java SDK}
16
+ s.email = %q{semmons99@gmail.com}
17
+ s.executables = ["boirb"]
18
+ s.extra_rdoc_files = [
19
+ "LICENSE",
20
+ "README.rdoc"
21
+ ]
22
+ s.files = [
23
+ ".document",
24
+ ".gitignore",
25
+ "LICENSE",
26
+ "README.rdoc",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "bin/boirb",
30
+ "bosdk.gemspec",
31
+ "lib/bosdk.rb",
32
+ "lib/bosdk/enterprise_session.rb",
33
+ "lib/bosdk/info_object.rb",
34
+ "lib/bosdk/webi_instance.rb",
35
+ "lib/bosdk/webi_report_engine.rb",
36
+ "spec/bosdk_spec.rb",
37
+ "spec/enterprise_session_spec.rb",
38
+ "spec/info_object_spec.rb",
39
+ "spec/webi_instance_spec.rb",
40
+ "spec/webi_report_engine_spec.rb"
41
+ ]
42
+ s.homepage = %q{http://semmons99.github.com/bosdk}
43
+ s.rdoc_options = ["--charset=UTF-8"]
44
+ s.require_paths = ["lib"]
45
+ s.requirements = ["An environment variable 'BOE_JAVA_LIB' pointing to the Business Objects Java SDK directory"]
46
+ s.rubygems_version = %q{1.3.5}
47
+ s.summary = %q{JRuby Business Object Java SDK wrapper}
48
+ s.test_files = [
49
+ "spec/bosdk_spec.rb",
50
+ "spec/enterprise_session_spec.rb",
51
+ "spec/info_object_spec.rb",
52
+ "spec/webi_instance_spec.rb",
53
+ "spec/webi_report_engine_spec.rb"
54
+ ]
55
+
56
+ if s.respond_to? :specification_version then
57
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
+ s.specification_version = 3
59
+
60
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
61
+ s.add_development_dependency(%q<rspec>, [">= 1.3.0"])
62
+ s.add_development_dependency(%q<hanna>, [">= 0.1.12"])
63
+ else
64
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
65
+ s.add_dependency(%q<hanna>, [">= 0.1.12"])
66
+ end
67
+ else
68
+ s.add_dependency(%q<rspec>, [">= 1.3.0"])
69
+ s.add_dependency(%q<hanna>, [">= 0.1.12"])
70
+ end
71
+ end
72
+
@@ -29,6 +29,7 @@ include_class "com.businessobjects.rebean.wi.ReportEngines"
29
29
  require 'bosdk/enterprise_session'
30
30
  require 'bosdk/info_object'
31
31
  require 'bosdk/webi_report_engine'
32
+ require 'bosdk/webi_instance'
32
33
 
33
34
  module BOSDK
34
35
  # A closure over EnterpriseSession
@@ -1,6 +1,3 @@
1
- require 'bosdk/info_object'
2
- require 'bosdk/webi_report_engine'
3
-
4
1
  module BOSDK
5
2
  # Creates a wrapper around the Business Objects Java SDK.
6
3
  class EnterpriseSession
@@ -51,7 +48,7 @@ module BOSDK
51
48
  # Open a Webi document from the provided docid
52
49
  def open_webi(docid)
53
50
  @webi_report_engine ||= WebiReportEngine.new(@session, @locale)
54
- @webi_report_engine.open(docid)
51
+ WebiInstance.new(@webi_report_engine.open(docid))
55
52
  end
56
53
  end
57
54
  end
@@ -10,9 +10,14 @@ module BOSDK
10
10
  @obj = obj
11
11
  end
12
12
 
13
+ # Returns the Business Objects ID (alias for #getID).
14
+ def docid
15
+ getID
16
+ end
17
+
13
18
  # Returns true/false if #obj is a root node.
14
19
  def is_root?
15
- parent_id.nil? or parent_id == 0 or parent_id == getID
20
+ parent_id.nil? or parent_id == 0 or parent_id == docid
16
21
  end
17
22
 
18
23
  # Returns the parent of #obj as an InfoObject
@@ -0,0 +1,46 @@
1
+ module BOSDK
2
+ # Creates a wrapper around a DocumentInstance
3
+ class WebiInstance
4
+ # The underlying DocumentInstance
5
+ attr_reader :instance
6
+
7
+ # Create a new WebiInstance from the provided DocumentInstance
8
+ def initialize(instance)
9
+ @instance = instance
10
+ end
11
+
12
+ # Returns an array of hashes representing report objects.
13
+ def objects
14
+ return @objects unless @objects.nil?
15
+ objs = []
16
+ dict = @instance.getDictionary
17
+ (0 ... dict.getChildCount).each do |i|
18
+ obj = dict.getChildAt(i)
19
+ objs << {
20
+ :name => obj.getName,
21
+ :qual => obj.getQualification.toString.downcase.to_sym,
22
+ :type => obj.getType.toString.downcase.to_sym,
23
+ :object => obj,
24
+ }
25
+ end
26
+ @objects = objs
27
+ end
28
+
29
+ # Returns an array of hashes representing report variables.
30
+ def variables
31
+ return @variables unless @variables.nil?
32
+ vars = []
33
+ dict = @instance.getDictionary
34
+ dict.getVariables.each do |var|
35
+ vars << {
36
+ :name => var.getName,
37
+ :qual => var.getQualification.toString.downcase.to_sym,
38
+ :type => var.getType.toString.downcase.to_sym,
39
+ :formula => var.getFormula.getValue,
40
+ :variable => var,
41
+ }
42
+ end
43
+ @variables = vars
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,21 @@
1
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
2
+ require 'bosdk'
3
+
4
+ module BOSDK
5
+ describe BOSDK do
6
+ describe "#connect" do
7
+ before(:each) do
8
+ @es = mock("EnterpriseSession").as_null_object
9
+ class EnterpriseSession; end
10
+ EnterpriseSession.should_receive(:new).once.with('cms', 'Administrator', '', {:locale => "en_US"}).and_return(@es)
11
+ @es.should_receive(:disconnect).once.with.and_return
12
+ end
13
+
14
+ specify "wraps EnterpriseSession#new in a closure" do
15
+ BOSDK.connect('cms', 'Administrator', '', :locale => "en_US") do |session|
16
+ session.should == @es
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
3
2
  require 'bosdk/enterprise_session'
4
3
 
@@ -18,111 +17,154 @@ module BOSDK
18
17
  @es = EnterpriseSession.new('cms', 'Administrator', '')
19
18
  end
20
19
 
21
- specify "#new should accept an optional locale setting" do
22
- EnterpriseSession.new('cms', 'Administrator', '', :locale => 'en_CA')
20
+ describe "#new" do
21
+ it "should accept an optional locale setting" do
22
+ EnterpriseSession.new('cms', 'Administrator', '', :locale => 'en_CA')
23
+ end
23
24
  end
24
25
 
25
- specify "#connected? returns 'true' when connected to a CMS" do
26
- @es.connected?.should be_true
27
- end
26
+ describe "#connected?" do
27
+ before(:each) do
28
+ @session.should_receive(:logoff).at_most(1).with.and_return
29
+ end
28
30
 
29
- specify "#connected? returns 'false' when not connected to a CMS" do
30
- @session.should_receive(:logoff).once.with.and_return
31
+ it "returns 'true' when connected to a CMS" do
32
+ @es.connected?.should be_true
33
+ end
31
34
 
32
- @es.disconnect
33
- @es.connected?.should be_false
35
+ it "returns 'false' when not connected to a CMS" do
36
+ @es.disconnect
37
+ @es.connected?.should be_false
38
+ end
34
39
  end
35
40
 
36
- specify "#disconnect should disconnect from the CMS" do
37
- @session.should_receive(:logoff).once.with.and_return
38
-
39
- @es.disconnect
40
- @es.connected?.should be_false
41
- end
41
+ describe "#disconnect" do
42
+ before(:each) do
43
+ @session.should_receive(:logoff).once.with.and_return
44
+ end
42
45
 
43
- specify "#disconnect shouldn't raise an error when not connected" do
44
- @session.should_receive(:logoff).once.with.and_return
46
+ it "should disconnect from the CMS" do
47
+ @es.disconnect
48
+ @es.connected?.should be_false
49
+ end
45
50
 
46
- lambda{2.times{ @es.disconnect }}.should_not raise_exception
51
+ it "shouldn't raise an error when not connected" do
52
+ lambda{2.times{ @es.disconnect }}.should_not raise_exception
53
+ end
47
54
  end
48
55
 
49
- specify "#path_to_sql should convert a path query to an sql query" do
50
- path_query = 'path://SystemObjects/Users/Administrator@SI_ID'
51
- stmt = "SELECT SI_ID FROM CI_SYSTEMOBJECTS WHERE SI_KIND='User' AND SI_NAME='Administrator'"
52
-
53
- @stateless_page_info = mock("IStatelessPageInfo").as_null_object
54
-
55
- class PagingQueryOptions; end
56
- PagingQueryOptions.should_receive(:new).once.with
57
- @infostore.should_receive(:getStatelessPageInfo).once.with(path_query, nil).and_return(@stateless_page_info)
58
- @stateless_page_info.should_receive(:getPageSQL).once.with.and_return(stmt)
59
-
60
- @es.path_to_sql(path_query).should == stmt
56
+ describe "#path_to_sql" do
57
+ before(:each) do
58
+ @path_query = 'path://SystemObjects/Users/Administrator@SI_ID'
59
+ @stmt = "SELECT SI_ID FROM CI_SYSTEMOBJECTS WHERE SI_KIND='User' AND SI_NAME='Administrator'"
60
+
61
+ @stateless_page_info = mock("IStatelessPageInfo").as_null_object
62
+
63
+ class PagingQueryOptions; end
64
+ PagingQueryOptions.should_receive(:new).once.with
65
+ @infostore.should_receive(:getStatelessPageInfo).once.with(@path_query, nil).and_return(@stateless_page_info)
66
+ @stateless_page_info.should_receive(:getPageSQL).once.with.and_return(@stmt)
67
+ end
68
+
69
+ it "should convert a path query to an sql query" do
70
+ @es.path_to_sql(@path_query).should == @stmt
71
+ end
61
72
  end
62
73
 
63
- specify "#query should send the statement to the underlying InfoStore" do
64
- stmt = 'SELECT * FROM CI_INFOOBJECTS'
65
- @infostore.should_receive(:query).once.with(stmt).and_return([])
66
-
67
- @es.query(stmt)
74
+ describe "#query" do
75
+ context "when :type => sql" do
76
+ before(:each) do
77
+ @stmt = 'SELECT * FROM CI_INFOOBJECTS'
78
+ @infostore.should_receive(:query).once.with(@stmt).and_return([])
79
+ end
80
+
81
+ it "should send the statement to the underlying InfoStore" do
82
+ @es.query(@stmt)
83
+ end
84
+ end
85
+
86
+ context "when :type => path://" do
87
+ before(:each) do
88
+ @path_query = 'path://SystemObjects/Users/Administrator@SI_ID'
89
+ @stmt = "SELECT * FROM CI_SYSTEMOBJECTS WHERE SI_KIND='User' AND SI_NAME='Administator'"
90
+
91
+ @es.should_receive(:path_to_sql).once.with(@path_query).and_return(@stmt)
92
+ @infostore.should_receive(:query).once.with(@stmt).and_return([])
93
+ end
94
+
95
+ it "should convert a path:// query to sql before execution" do
96
+ @es.query(@path_query)
97
+ end
98
+ end
99
+
100
+ context "when :type => query://" do
101
+ before(:each) do
102
+ @path_query = 'query://{SELECT * FROM CI_INFOOBJECTS}'
103
+ @stmt = 'SELECT * FROM CI_INFOOBJECTS'
104
+
105
+ @es.should_receive(:path_to_sql).once.with(@path_query).and_return(@stmt)
106
+ @infostore.should_receive(:query).once.with(@stmt).and_return([])
107
+ end
108
+
109
+ it "should convert a query:// query to sql before execution" do
110
+ @es.query(@path_query)
111
+ end
112
+ end
113
+
114
+ context "when :type => cuid://" do
115
+ before(:each) do
116
+ @path_query = 'cuid://ABC'
117
+ @stmt = "SELECT * FROM CI_INFOOBJECTS WHERE SI_CUID='ABC'"
118
+
119
+ @es.should_receive(:path_to_sql).once.with(@path_query).and_return(@stmt)
120
+ @infostore.should_receive(:query).once.with(@stmt).and_return([])
121
+ end
122
+
123
+ it "should convert a cuid:// query to sql before execution" do
124
+ @es.query(@path_query)
125
+ end
126
+ end
68
127
  end
69
128
 
70
- specify "#query should convert a path:// query to sql before execution" do
71
- path_query = 'path://SystemObjects/Users/Administrator@SI_ID'
72
- stmt = "SELECT * FROM CI_SYSTEMOBJECTS WHERE SI_KIND='User' AND SI_NAME='Administator'"
73
-
74
- @es.should_receive(:path_to_sql).once.with(path_query).and_return(stmt)
75
- @infostore.should_receive(:query).once.with(stmt).and_return([])
76
-
77
- @es.query(path_query)
78
- end
79
-
80
- specify "#query should convert a query:// query to sql before execution" do
81
- path_query = 'query://{SELECT * FROM CI_INFOOBJECTS}'
82
- stmt = 'SELECT * FROM CI_INFOOBJECTS'
83
-
84
- @es.should_receive(:path_to_sql).once.with(path_query).and_return(stmt)
85
- @infostore.should_receive(:query).once.with(stmt).and_return([])
86
-
87
- @es.query(path_query)
88
- end
89
-
90
- specify "#query should convert a cuid:// query to sql before execution" do
91
- path_query = 'cuid://ABC'
92
- stmt = "SELECT * FROM CI_INFOOBJECTS WHERE SI_CUID='ABC'"
93
-
94
- @es.should_receive(:path_to_sql).once.with(path_query).and_return(stmt)
95
- @infostore.should_receive(:query).once.with(stmt).and_return([])
96
-
97
- @es.query(path_query)
98
- end
99
-
100
- specify "#open_webi should create a WebiReportEngine and call #open" do
101
- @webi_report_engine = mock("WebiReportEngine").as_null_object
102
- class WebiReportEngine; end
103
- WebiReportEngine.should_receive(:new).once.with(@session, 'en_US').and_return(@webi_report_engine)
104
- @webi_report_engine.should_receive(:open).once.with("1234")
105
-
106
- @es.open_webi("1234")
107
- end
108
-
109
- specify "#open_webi should only create a WebiReportEngine once" do
110
- @webi_report_engine = mock("WebiReportEngine").as_null_object
111
- class WebiReportEngine; end
112
- WebiReportEngine.should_receive(:new).once.with(@session, 'en_US').and_return(@webi_report_engine)
113
- @webi_report_engine.should_receive(:open).twice.with("1234")
114
-
115
- 2.times{@es.open_webi("1234")}
116
- end
117
-
118
- specify "#open_webi should pass any specified locale" do
119
- @webi_report_engine = mock("WebiReportEngine").as_null_object
120
- class WebiReportEngine; end
121
- WebiReportEngine.should_receive(:new).once.with(@session, 'en_CA').and_return(@webi_report_engine)
122
- @webi_report_engine.should_receive(:open).once.with("1234")
123
-
124
- es = EnterpriseSession.new('cms', 'Administrator', '', :locale => 'en_CA')
125
- es.open_webi("1234")
129
+ describe "#open_webi" do
130
+ before(:each) do
131
+ @webi_report_engine = mock("WebiReportEngine").as_null_object
132
+ @document_instance = mock("DocumentInstance").as_null_object
133
+ @webi_instance = mock("WebiInstance").as_null_object
134
+ class WebiReportEngine; end
135
+ class WebiInstance; end
136
+ WebiInstance.should_receive(:new).at_least(1).with(@document_instance).and_return(@webi_instance)
137
+ @webi_report_engine.should_receive(:open).at_least(1).with("1234").and_return(@document_instance)
138
+ end
139
+
140
+ context "when :locale => en_US" do
141
+ before(:each) do
142
+ WebiReportEngine.should_receive(:new).once.with(@session, 'en_US').and_return(@webi_report_engine)
143
+ end
144
+
145
+ it "should create a WebiReportEngine and call #open" do
146
+ @es.open_webi("1234")
147
+ end
148
+
149
+ it "should only create a WebiReportEngine once" do
150
+ 2.times{@es.open_webi("1234")}
151
+ end
152
+
153
+ it "should create a WebiInstance and return it" do
154
+ @es.open_webi("1234").should == @webi_instance
155
+ end
156
+ end
157
+
158
+ context "when :locale => en_CA" do
159
+ before(:each) do
160
+ WebiReportEngine.should_receive(:new).once.with(@session, 'en_CA').and_return(@webi_report_engine)
161
+ end
162
+
163
+ it "should pass any specified locale" do
164
+ es = EnterpriseSession.new('cms', 'Administrator', '', :locale => 'en_CA')
165
+ es.open_webi("1234")
166
+ end
167
+ end
126
168
  end
127
169
  end
128
170
  end
@@ -1,111 +1,149 @@
1
- # encoding: utf-8
2
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
3
2
  require 'bosdk/info_object'
4
3
 
5
4
  module BOSDK
6
5
  describe InfoObject do
7
6
  before(:each) do
8
- # mocks
9
7
  @infoobject = mock("IInfoObject").as_null_object
10
8
 
11
9
  @obj = InfoObject.new(@infoobject)
12
10
  end
11
+
12
+ describe "#docid" do
13
+ before(:each) do
14
+ @infoobject.should_receive(:getID).once.with.and_return(1)
15
+ end
13
16
 
14
- specify "#is_root? should return true when #parent_id is nil" do
15
- @infoobject.should_receive(:parent_id).once.with.and_return(nil)
16
-
17
- @obj.is_root?.should be_true
18
- end
19
-
20
- specify "#is_root? should return true when #parent_id is '0'" do
21
- @infoobject.should_receive(:parent_id).once.with.and_return(0)
22
-
23
- @obj.is_root?.should be_true
24
- end
25
-
26
- specify "#is_root? should return true when #parent_id == #getID" do
27
- @infoobject.should_receive(:parent_id).once.with.and_return(1)
28
- @infoobject.should_receive(:getID).once.with.and_return(1)
29
-
30
- @obj.is_root?.should be_true
31
- end
32
-
33
- specify "#is_root? should return false when #parent_id is not: nil, '0' or #getID" do
34
- @infoobject.should_receive(:parent_id).once.with.and_return(1)
35
- @infoobject.should_receive(:getID).once.with.and_return(2)
17
+ it "should call #getID and return the result" do
18
+ @obj.docid.should == 1
19
+ end
36
20
 
37
- @obj.is_root?.should be_false
21
+ it "should only call #getID once" do
22
+ 2.times{@obj.docid.should == 1}
23
+ end
38
24
  end
39
25
 
40
- specify "#parent should return nil if #is_root? == true" do
41
- @infoobject.should_receive(:parent_id).once.with.and_return(nil)
26
+ describe "#is_root?" do
27
+ context "when #parent_id == nil" do
28
+ before(:each) do
29
+ @infoobject.should_receive(:parent_id).once.with.and_return(nil)
30
+ end
42
31
 
43
- @obj.parent.should be_nil
44
- end
32
+ it "should return true" do
33
+ @obj.is_root?.should be_true
34
+ end
35
+ end
45
36
 
46
- specify "#parent should return results of #getParent if #is_root? == false" do
47
- parent_obj = mock("IInfoObject").as_null_object
48
- @infoobject.should_receive(:parent_id).once.with.and_return(1)
49
- @infoobject.should_receive(:getID).once.with.and_return(2)
50
- @infoobject.should_receive(:getParent).once.with.and_return(parent_obj)
37
+ context "when #parent_id == 0" do
38
+ before(:each) do
39
+ @infoobject.should_receive(:parent_id).once.with.and_return(0)
40
+ end
51
41
 
52
- parent = @obj.parent
53
- parent.should be_instance_of InfoObject
54
- parent.obj.should == parent_obj
55
- end
42
+ it "should return true" do
43
+ @obj.is_root?.should be_true
44
+ end
45
+ end
56
46
 
57
- specify "#parent should only call the underlying #getParent once" do
58
- parent_obj = mock("IInfoObject").as_null_object
59
- @infoobject.should_receive(:parent_id).once.with.and_return(1)
60
- @infoobject.should_receive(:getID).once.with.and_return(2)
61
- @infoobject.should_receive(:getParent).once.with.and_return(parent_obj)
47
+ context "when #parent_id == #getID" do
48
+ before(:each) do
49
+ @infoobject.should_receive(:parent_id).once.with.and_return(1)
50
+ @infoobject.should_receive(:getID).once.with.and_return(1)
51
+ end
62
52
 
63
- 2.times{@obj.parent}
64
- end
53
+ it "should return true" do
54
+ @obj.is_root?.should be_true
55
+ end
56
+ end
65
57
 
66
- specify "#path should return /#title if #is_root? == true" do
67
- @infoobject.should_receive(:parent_id).once.with.and_return(nil)
68
- @infoobject.should_receive(:title).once.with.and_return('test obj')
58
+ context "when #parent_id != nil, 0 or #getID" do
59
+ before(:each) do
60
+ @infoobject.should_receive(:parent_id).once.with.and_return(1)
61
+ @infoobject.should_receive(:getID).once.with.and_return(2)
62
+ end
69
63
 
70
- @obj.path.should == '/test obj'
64
+ it "should return false" do
65
+ @obj.is_root?.should be_false
66
+ end
67
+ end
71
68
  end
72
69
 
73
- specify "#path should return #parent_title/../#title if #is_root? == false" do
74
- parent_obj = mock("IInfoObject").as_null_object
75
- parent_obj.should_receive(:parent_id).once.with.and_return(nil)
76
- parent_obj.should_receive(:title).once.with.and_return('test parent')
70
+ describe "#parent" do
71
+ context "when #is_root? == true" do
72
+ before(:each) do
73
+ @infoobject.should_receive(:parent_id).once.with.and_return(nil)
74
+ end
77
75
 
78
- @infoobject.should_receive(:parent_id).once.with.and_return(1)
79
- @infoobject.should_receive(:getID).once.with.and_return(2)
80
- @infoobject.should_receive(:title).once.with.and_return('test obj')
81
- @infoobject.should_receive(:getParent).once.with.and_return(parent_obj)
76
+ it "should return nil" do
77
+ @obj.parent.should be_nil
78
+ end
79
+ end
82
80
 
83
- @obj.path.should == '/test parent/test obj'
81
+ context "when #is_root? == false" do
82
+ before(:each) do
83
+ @parent_obj = mock("IInfoObject").as_null_object
84
+ @infoobject.should_receive(:parent_id).once.with.and_return(1)
85
+ @infoobject.should_receive(:getID).once.with.and_return(2)
86
+ @infoobject.should_receive(:getParent).once.with.and_return(@parent_obj)
87
+ end
88
+
89
+ it "should return results of #getParent" do
90
+ parent = @obj.parent
91
+ parent.should be_instance_of InfoObject
92
+ parent.obj.should == @parent_obj
93
+ end
94
+
95
+ it "should only call the underlying #getParent once" do
96
+ 2.times{@obj.parent}
97
+ end
98
+ end
84
99
  end
85
100
 
86
- specify "#path should only call the underlying #title, #parent#path, etc. once" do
87
- parent_obj = mock("IInfoObject").as_null_object
88
- parent_obj.should_receive(:parent_id).once.with.and_return(nil)
89
- parent_obj.should_receive(:title).once.with.and_return('test parent')
101
+ describe "#path" do
102
+ context "when #is_root? == true" do
103
+ before(:each) do
104
+ @infoobject.should_receive(:parent_id).once.with.and_return(nil)
105
+ @infoobject.should_receive(:title).once.with.and_return('test obj')
106
+ end
90
107
 
91
- @infoobject.should_receive(:parent_id).once.with.and_return(1)
92
- @infoobject.should_receive(:getID).once.with.and_return(2)
93
- @infoobject.should_receive(:title).once.with.and_return('test obj')
94
- @infoobject.should_receive(:getParent).once.with.and_return(parent_obj)
108
+ it "should return /#title" do
109
+ @obj.path.should == '/test obj'
110
+ end
111
+ end
95
112
 
96
- 2.times{@obj.path}
113
+ context "when #is_root? == false" do
114
+ before(:each) do
115
+ @parent_obj = mock("IInfoObject").as_null_object
116
+ @parent_obj.should_receive(:parent_id).once.with.and_return(nil)
117
+ @parent_obj.should_receive(:title).once.with.and_return('test parent')
118
+
119
+ @infoobject.should_receive(:parent_id).once.with.and_return(1)
120
+ @infoobject.should_receive(:getID).once.with.and_return(2)
121
+ @infoobject.should_receive(:title).once.with.and_return('test obj')
122
+ @infoobject.should_receive(:getParent).once.with.and_return(@parent_obj)
123
+ end
124
+
125
+ it "should return #parent_title/../#title" do
126
+ @obj.path.should == '/test parent/test obj'
127
+ end
128
+
129
+ it "should only call the underlying #title, #parent#path, etc. once" do
130
+ 2.times{@obj.path}
131
+ end
132
+ end
97
133
  end
98
134
 
99
- specify "#<=> should use #title" do
100
- objs = []
101
- ('a'..'c').to_a.reverse.each do |ltr|
102
- obj = mock("IInfoObject").as_null_object
103
- obj.should_receive(:title).once.with.and_return(ltr)
104
- objs << InfoObject.new(obj)
135
+ describe "#<=>" do
136
+ it "should use #title" do
137
+ objs = []
138
+ ('a'..'c').to_a.reverse.each do |ltr|
139
+ obj = mock("IInfoObject").as_null_object
140
+ obj.should_receive(:title).once.with.and_return(ltr)
141
+ objs << InfoObject.new(obj)
142
+ end
143
+
144
+ sorted_objs = objs.sort
145
+ sorted_objs.should == objs.reverse
105
146
  end
106
-
107
- sorted_objs = objs.sort
108
- sorted_objs.should == objs.reverse
109
147
  end
110
148
  end
111
149
  end
@@ -0,0 +1,112 @@
1
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
2
+ require 'bosdk/webi_instance'
3
+
4
+ module BOSDK
5
+ describe WebiInstance do
6
+ before(:each) do
7
+ @document_instance = mock("DocumentInstance").as_null_object
8
+
9
+ @webi = WebiInstance.new(@document_instance)
10
+ end
11
+
12
+ describe "#new" do
13
+ it "should store the passed DocumentInstance in @doc_instance" do
14
+ @webi.instance.should == @document_instance
15
+ end
16
+ end
17
+
18
+ describe "#objects" do
19
+ before(:each) do
20
+ @report_dictionary = mock("ReportDictionary").as_null_object
21
+ @report_expression_1 = mock("ReportExpression").as_null_object
22
+ @report_expression_2 = mock("ReportExpression").as_null_object
23
+ @object_qualification_1 = mock("ObjectQualification").as_null_object
24
+ @object_qualification_2 = mock("ObjectQualification").as_null_object
25
+ @object_type_1 = mock("ObjectType").as_null_object
26
+ @object_type_2 = mock("ObjectType").as_null_object
27
+
28
+ @document_instance.should_receive(:getDictionary).once.with.and_return(@report_dictionary)
29
+
30
+ @report_dictionary.should_receive(:getChildCount).once.with.and_return(2)
31
+ @report_dictionary.should_receive(:getChildAt).once.with(0).and_return(@report_expression_1)
32
+ @report_dictionary.should_receive(:getChildAt).once.with(1).and_return(@report_expression_2)
33
+
34
+ @report_expression_1.should_receive(:getName).once.with.and_return("Object1")
35
+ @report_expression_1.should_receive(:getQualification).once.with.and_return(@object_qualification_1)
36
+ @report_expression_1.should_receive(:getType).once.with.and_return(@object_type_1)
37
+
38
+ @report_expression_2.should_receive(:getName).once.with.and_return("Object2")
39
+ @report_expression_2.should_receive(:getQualification).once.with.and_return(@object_qualification_2)
40
+ @report_expression_2.should_receive(:getType).once.with.and_return(@object_type_2)
41
+
42
+ @object_qualification_1.should_receive(:toString).once.with.and_return("DIMENSION")
43
+ @object_qualification_2.should_receive(:toString).once.with.and_return("MEASURE")
44
+
45
+ @object_type_1.should_receive(:toString).once.with.and_return("TEXT")
46
+ @object_type_2.should_receive(:toString).once.with.and_return("NUMERIC")
47
+
48
+ @objects = [
49
+ {:name => 'Object1', :qual => :dimension, :type => :text, :object => @report_expression_1},
50
+ {:name => 'Object2', :qual => :measure, :type => :numeric, :object => @report_expression_2},
51
+ ]
52
+ end
53
+
54
+ it "should return an array of report objects" do
55
+ @webi.objects.should == @objects
56
+ end
57
+
58
+ it "should cache results" do
59
+ 2.times{@webi.objects}
60
+ end
61
+ end
62
+
63
+ describe "#variables" do
64
+ before(:each) do
65
+ @report_dictionary = mock("ReportDictionary").as_null_object
66
+ @variable_expression_1 = mock("VariableExpression").as_null_object
67
+ @variable_expression_2 = mock("VariableExpression").as_null_object
68
+ @object_qualification_1 = mock("ObjectQualification").as_null_object
69
+ @object_qualification_2 = mock("ObjectQualification").as_null_object
70
+ @object_type_1 = mock("ObjectType").as_null_object
71
+ @object_type_2 = mock("ObjectType").as_null_object
72
+ @formula_expression_1 = mock("FormulaExpression").as_null_object
73
+ @formula_expression_2 = mock("FormulaExpression").as_null_object
74
+
75
+ @document_instance.should_receive(:getDictionary).once.with.and_return(@report_dictionary)
76
+ @report_dictionary.should_receive(:getVariables).once.with.and_return([@variable_expression_1, @variable_expression_2])
77
+
78
+ @variable_expression_1.should_receive(:getName).once.with.and_return("Variable1")
79
+ @variable_expression_1.should_receive(:getQualification).once.with.and_return(@object_qualification_1)
80
+ @variable_expression_1.should_receive(:getType).once.with.and_return(@object_type_1)
81
+ @variable_expression_1.should_receive(:getFormula).once.with.and_return(@formula_expression_1)
82
+
83
+ @variable_expression_2.should_receive(:getName).once.with.and_return("Variable2")
84
+ @variable_expression_2.should_receive(:getQualification).once.with.and_return(@object_qualification_2)
85
+ @variable_expression_2.should_receive(:getType).once.with.and_return(@object_type_2)
86
+ @variable_expression_2.should_receive(:getFormula).once.with.and_return(@formula_expression_2)
87
+
88
+ @object_qualification_1.should_receive(:toString).once.with.and_return("DIMENSION")
89
+ @object_qualification_2.should_receive(:toString).once.with.and_return("MEASURE")
90
+
91
+ @object_type_1.should_receive(:toString).once.with.and_return("TEXT")
92
+ @object_type_2.should_receive(:toString).once.with.and_return("NUMERIC")
93
+
94
+ @formula_expression_1.should_receive(:getValue).once.with.and_return('If([Object1]="Object1";"Yes";"False")')
95
+ @formula_expression_2.should_receive(:getValue).once.with.and_return('Sum([Object2])')
96
+
97
+ @variables = [
98
+ {:name => 'Variable1', :qual => :dimension, :type => :text, :formula => 'If([Object1]="Object1";"Yes";"False")', :variable => @variable_expression_1},
99
+ {:name => 'Variable2', :qual => :measure, :type => :numeric, :formula => 'Sum([Object2])', :variable => @variable_expression_2},
100
+ ]
101
+ end
102
+
103
+ it "should return an array of variables" do
104
+ @webi.variables.should == @variables
105
+ end
106
+
107
+ it "should cache results" do
108
+ 2.times{@webi.variables}
109
+ end
110
+ end
111
+ end
112
+ end
@@ -1,4 +1,3 @@
1
- # encoding: utf-8
2
1
  $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
3
2
  require 'bosdk/webi_report_engine'
4
3
 
@@ -13,21 +12,28 @@ module BOSDK
13
12
  module ReportEngines; module ReportEngineType; module WI_REPORT_ENGINE; end; end; end
14
13
  @report_engines.should_receive(:getService).at_least(1).with(ReportEngines::ReportEngineType::WI_REPORT_ENGINE).and_return(@webi_report_engine)
15
14
  @webi_report_engine.should_receive(:setLocale).at_least(1).with("en_US")
16
- #@enterprise_session.should_receive(:setAttribute).at_least(1).with("widReportEngine", @webi_report_engine)
17
15
 
18
16
  @wre = WebiReportEngine.new(@enterprise_session)
19
17
  end
20
18
 
21
- specify "#new should allow you to set the locale" do
22
- @webi_report_engine.should_receive(:setLocale).once.with("en_CA")
19
+ describe "#new" do
20
+ before(:each) do
21
+ @webi_report_engine.should_receive(:setLocale).once.with("en_CA")
22
+ end
23
23
 
24
- WebiReportEngine.new(@enterprise_session, "en_CA")
24
+ it "should allow you to set the locale" do
25
+ WebiReportEngine.new(@enterprise_session, "en_CA")
26
+ end
25
27
  end
26
28
 
27
- specify "#open should call the underlying #openDocument with the supplied docid" do
28
- @webi_report_engine.should_receive(:openDocument).once.with("1234")
29
+ describe "#open" do
30
+ before(:each) do
31
+ @webi_report_engine.should_receive(:openDocument).once.with("1234")
32
+ end
29
33
 
30
- @wre.open("1234")
34
+ it "should call the underlying #openDocument with the supplied docid" do
35
+ @wre.open("1234")
36
+ end
31
37
  end
32
38
  end
33
39
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bosdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: universal-java-1.6
6
6
  authors:
7
7
  - Shane Emmons
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2010-02-03 00:00:00 -05:00
12
+ date: 2010-02-09 00:00:00 -05:00
13
13
  default_executable: boirb
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -39,28 +39,34 @@ executables:
39
39
  extensions: []
40
40
 
41
41
  extra_rdoc_files:
42
+ - LICENSE
42
43
  - README.rdoc
43
- - MIT-LICENSE
44
44
  files:
45
+ - .document
46
+ - .gitignore
47
+ - LICENSE
45
48
  - README.rdoc
46
- - MIT-LICENSE
47
- - bosdk.gemspec
48
49
  - Rakefile
50
+ - VERSION
49
51
  - bin/boirb
52
+ - bosdk.gemspec
50
53
  - lib/bosdk.rb
51
54
  - lib/bosdk/enterprise_session.rb
52
55
  - lib/bosdk/info_object.rb
56
+ - lib/bosdk/webi_instance.rb
53
57
  - lib/bosdk/webi_report_engine.rb
58
+ - spec/bosdk_spec.rb
54
59
  - spec/enterprise_session_spec.rb
55
60
  - spec/info_object_spec.rb
61
+ - spec/webi_instance_spec.rb
56
62
  - spec/webi_report_engine_spec.rb
57
63
  has_rdoc: true
58
64
  homepage: http://semmons99.github.com/bosdk
59
65
  licenses: []
60
66
 
61
67
  post_install_message:
62
- rdoc_options: []
63
-
68
+ rdoc_options:
69
+ - --charset=UTF-8
64
70
  require_paths:
65
71
  - lib
66
72
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -82,5 +88,9 @@ rubygems_version: 1.3.5
82
88
  signing_key:
83
89
  specification_version: 3
84
90
  summary: JRuby Business Object Java SDK wrapper
85
- test_files: []
86
-
91
+ test_files:
92
+ - spec/bosdk_spec.rb
93
+ - spec/enterprise_session_spec.rb
94
+ - spec/info_object_spec.rb
95
+ - spec/webi_instance_spec.rb
96
+ - spec/webi_report_engine_spec.rb