kangaroo 0.0.1.pre2 → 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/Gemfile.lock CHANGED
@@ -1,25 +1,26 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- kangaroo (0.0.1.pre)
4
+ kangaroo (0.0.1.pre2)
5
5
  activerecord (>= 3.0.0)
6
6
  activesupport (>= 3.0.0)
7
+ hirb
7
8
  rapuncel (~> 0.0.2)
8
9
 
9
10
  GEM
10
11
  remote: http://rubygems.org/
11
12
  specs:
12
- activemodel (3.0.3)
13
- activesupport (= 3.0.3)
13
+ activemodel (3.0.5)
14
+ activesupport (= 3.0.5)
14
15
  builder (~> 2.1.2)
15
16
  i18n (~> 0.4)
16
- activerecord (3.0.3)
17
- activemodel (= 3.0.3)
18
- activesupport (= 3.0.3)
17
+ activerecord (3.0.5)
18
+ activemodel (= 3.0.5)
19
+ activesupport (= 3.0.5)
19
20
  arel (~> 2.0.2)
20
21
  tzinfo (~> 0.3.23)
21
- activesupport (3.0.3)
22
- arel (2.0.7)
22
+ activesupport (3.0.5)
23
+ arel (2.0.9)
23
24
  builder (2.1.2)
24
25
  columnize (0.3.2)
25
26
  cucumber (0.10.0)
@@ -31,6 +32,7 @@ GEM
31
32
  diff-lcs (1.1.2)
32
33
  gherkin (2.3.3)
33
34
  json (~> 1.4.6)
35
+ hirb (0.3.6)
34
36
  i18n (0.5.0)
35
37
  json (1.4.6)
36
38
  linecache (0.43)
@@ -52,7 +54,7 @@ GEM
52
54
  ruby-debug-base (0.10.4)
53
55
  linecache (>= 0.3)
54
56
  term-ansicolor (1.0.5)
55
- tzinfo (0.3.24)
57
+ tzinfo (0.3.25)
56
58
  yard (0.6.4)
57
59
 
58
60
  PLATFORMS
data/README.md CHANGED
@@ -60,6 +60,47 @@ You can use this models like ActiveRecord models:
60
60
 
61
61
  Oo::Res::Country.create :code => 'DE', :name => 'Germany'
62
62
 
63
+ CLI
64
+ ---
65
+
66
+ Kangaroo comes with a console based on IRB, try it:
67
+
68
+ $kang -c spec/test_env/test.yml
69
+ I, [2011-04-15T23:19:41.990623 #6834] INFO -- : Loading Kangaroo configuration "spec/test_env/test.yml"
70
+ I, [2011-04-15T23:19:41.991091 #6834] INFO -- : Configured OpenERP database "kangaroo_test_database" at "127.0.0.1"
71
+ I, [2011-04-15T23:19:41.996197 #6834] INFO -- : Authenticated user "admin" for OpenERP database "kangaroo_test_database"
72
+ ruby-1.8.7-p302 :001 > Oo::Res::Country
73
+ => <Oo::Res::Country id, name, code>
74
+ ruby-1.8.7-p302 :002 > Oo::Res::Country.first
75
+ +---------+------+
76
+ | name | code |
77
+ +---------+------+
78
+ | Algeria | DZ |
79
+ +---------+------+
80
+ 1 row in set
81
+
82
+ If you omit the -c command line option, you can initialize your Kangaroo connection from the
83
+ console:
84
+
85
+ $kang
86
+ ruby-1.8.7-p302 :001 > Kang.init "port"=>8069, "database"=>{"name"=>"kangaroo_test_database", "models"=>["res.*"], "password"=>"admin", "user"=>"admin"}, "host"=>"127.0.0.1"
87
+ I, [2011-04-15T23:23:59.789551 #7017] INFO -- : Loading Kangaroo configuration {"port"=>8069, "database"=>{"name"=>"kangaroo_test_database", "models"=>["res.*"], "user"=>"admin", "password"=>"admin"}, "host"=>"127.0.0.1"}
88
+ I, [2011-04-15T23:23:59.789706 #7017] INFO -- : Configured OpenERP database "kangaroo_test_database" at "127.0.0.1"
89
+ I, [2011-04-15T23:23:59.794861 #7017] INFO -- : Authenticated user "admin" for OpenERP database "kangaroo_test_database"
90
+ => true
91
+ ruby-1.8.7-p302 :002 > Oo::Res::Country.limit(5).all
92
+ +------+-----------------------------+
93
+ | code | name |
94
+ +------+-----------------------------+
95
+ | DZ | Algeria |
96
+ | AS | American Samoa |
97
+ | AD | Andorra, Principality ofä ß |
98
+ | AO | Angola |
99
+ | AI | Anguilla |
100
+ +------+-----------------------------+
101
+ 5 rows in set
102
+
103
+
63
104
  etc.
64
105
  Please refer to {file:docs/Usage.md Usage} to learn about limitations/features not yet
65
106
  implemented.
data/bin/kang ADDED
@@ -0,0 +1,80 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ begin
4
+ require 'kangaroo'
5
+ rescue LoadError
6
+ begin
7
+ require 'rubygems'
8
+ require 'kangaroo'
9
+ rescue LoadError
10
+ require 'bundler/setup'
11
+ require 'kangaroo'
12
+ end
13
+ end
14
+
15
+ require 'ostruct'
16
+ require 'optparse'
17
+ options = {}
18
+
19
+ optparse = OptionParser.new do |opts|
20
+ opts.banner = "Usage: kang -c config_file.yaml"
21
+
22
+ options[:config_file] = nil
23
+ opts.on '-c', '--config FILE', 'Specify config file' do |file|
24
+ options[:config_file] = file
25
+ end
26
+
27
+ # This displays the help screen, all programs are
28
+ # assumed to have this option.
29
+ opts.on( '-h', '--help', 'Display this screen' ) do
30
+ puts opts
31
+ exit
32
+ end
33
+ end
34
+
35
+ optparse.parse!
36
+
37
+ Kang = OpenStruct.new
38
+ Kang.logger = Logger.new(STDOUT)
39
+
40
+ Kang.class_eval do
41
+ def inspect
42
+ "Kang console"
43
+ end
44
+
45
+ def init file_or_hash
46
+ Kang.logger.info "Loading Kangaroo configuration #{file_or_hash.inspect}"
47
+ Kang.config = Kangaroo::Util::Configuration.new file_or_hash, Kang.logger
48
+ Kang.config.login
49
+
50
+ Kangaroo::Util::Loader.new('res.*', Kang.config.database).load!
51
+ true
52
+ end
53
+ end
54
+
55
+ options[:config_file] && Kang.init(options[:config_file])
56
+
57
+ require 'irb'
58
+ require 'irb/completion'
59
+
60
+ Hirb.enable
61
+ IRB.start
62
+
63
+
64
+
65
+
66
+
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+
77
+
78
+
79
+
80
+
data/kangaroo.gemspec CHANGED
@@ -21,6 +21,7 @@ Gem::Specification.new do |s|
21
21
  s.add_dependency 'rapuncel', '~> 0.0.2'
22
22
  s.add_dependency "activerecord", ">= 3.0.0"
23
23
  s.add_dependency "activesupport", ">= 3.0.0"
24
+ s.add_dependency "hirb"
24
25
 
25
26
  s.add_development_dependency 'yard'
26
27
  s.add_development_dependency 'rspec'
data/lib/kangaroo.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'kangaroo/railtie' if defined?(Rails)
2
2
  require 'kangaroo/util/configuration'
3
3
  require 'kangaroo/model/base'
4
+ require 'kangaroo/hirb'
4
5
 
5
6
  module Kangaroo
6
7
  end
@@ -0,0 +1,22 @@
1
+ require 'hirb'
2
+
3
+ module Hirb::Views::Kangaroo
4
+ def kangaroo__model__base_view obj
5
+ { :fields => get_kangaroo_fields(obj) }
6
+ end
7
+
8
+ def get_kangaroo_fields obj
9
+ fields = obj.class.attribute_names
10
+
11
+ # if query used select
12
+ if obj.attributes.keys.sort != obj.class.attribute_names.sort
13
+ selected_columns = obj.attributes.keys
14
+ sorted_columns = obj.class.attribute_names.dup.delete_if {|e| !selected_columns.include?(e) }
15
+ sorted_columns += (selected_columns - sorted_columns)
16
+ fields = sorted_columns.map {|e| e.to_sym}
17
+ end
18
+ fields
19
+ end
20
+ end
21
+
22
+ Hirb::DynamicView.add Hirb::Views::Kangaroo, :helper => :auto_table
@@ -54,6 +54,10 @@ module Kangaroo
54
54
  def db
55
55
  @db_proxy ||= Proxy::Db.new db_service
56
56
  end
57
+
58
+ def inspect
59
+ "#Kangaroo::Util::Client:0x#{hash.to_s(16)}>"
60
+ end
57
61
  end
58
62
  end
59
63
  end
@@ -1,3 +1,3 @@
1
1
  module Kangaroo
2
- VERSION = "0.0.1.pre2"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -37,20 +37,20 @@ module Kangaroo
37
37
 
38
38
  describe '#fields_get' do
39
39
  it 'fetches details about fields of this model' do
40
- object_service.should_receive(:xmlrpc_call).with('execute', 'some_class', 'fields_get', ['a'], false).
40
+ object_service.should_receive(:xmlrpc_call).with('execute', 'some_class', 'fields_get', ['a'], {}).
41
41
  and_return({:a => {:type => "selection"}})
42
42
  @klass.fields_get(:fields => ['a']).first.read_attribute(:type).should == 'selection'
43
43
  end
44
44
 
45
45
  it 'stores the name in the Field model' do
46
- object_service.should_receive(:xmlrpc_call).with('execute', 'some_class', 'fields_get', ['a'], false).
46
+ object_service.should_receive(:xmlrpc_call).with('execute', 'some_class', 'fields_get', ['a'], {}).
47
47
  and_return({:a => {:type => "selection"}})
48
48
  @klass.fields_get(:fields => ['a']).first.name.should == :a
49
49
  end
50
50
 
51
51
  it 'uses attribute_names as default value for field list' do
52
52
  object_service.should_receive(:xmlrpc_call).
53
- with('execute', 'some_class', 'fields_get', ['a', 'b'], false).
53
+ with('execute', 'some_class', 'fields_get', ['a', 'b'], {}).
54
54
  and_return({:a => {:type => 'selection'}})
55
55
  @klass.fields_get
56
56
  end
@@ -7,7 +7,10 @@ module Kangaroo
7
7
  module RubyAdapter
8
8
  describe ClassDefinition do
9
9
  def stub_oo_model name
10
+ eval('module ::Oo ; end')
10
11
  oo_model = mock 'oo_model'
12
+ oo_model.stub_chain(:class, :namespace).and_return(Oo)
13
+ oo_model.stub_chain(:class, :database)
11
14
  oo_model.stub!('model_class_name').and_return(name)
12
15
  oo_model
13
16
  end
@@ -7,6 +7,7 @@ require 'webrick'
7
7
  module TestServices
8
8
  class ObjectService
9
9
  def execute *args
10
+ puts args.inspect
10
11
  xmlrpc_call 'execute', *args
11
12
  end
12
13
 
@@ -7,5 +7,4 @@ database:
7
7
  password: admin
8
8
 
9
9
  models:
10
- - res.*
11
- - product.product
10
+ - res.*
@@ -13,38 +13,22 @@ module Kangaroo
13
13
  end
14
14
 
15
15
  it "replaces wildcards in model names" do
16
- loader = Loader.new ['res.*']
16
+ loader = Loader.new ['res.*'], nil
17
17
 
18
18
  loader.model_names.should == ['res.%']
19
19
  end
20
20
 
21
21
  it "uses global wildcard if model_names = :all" do
22
- loader = Loader.new :all
22
+ loader = Loader.new :all, nil
23
23
 
24
24
  loader.model_names.should == ['%']
25
25
  end
26
26
 
27
27
  it 'raises error if model_names = nil or empty' do
28
- lambda { Loader.new nil }.should raise_error
29
- lambda { Loader.new [] }.should raise_error
28
+ lambda { Loader.new nil, nil }.should raise_error
29
+ lambda { Loader.new [], nil }.should raise_error
30
30
  end
31
31
 
32
- it 'loads matching models from OpenERP' do
33
- loader = Loader.new ['res.*']
34
-
35
- loaded_model = mock 'loaded_model'
36
- loaded_model.stub!('length_of_model_name').and_return(1)
37
- ruby_adapter = mock 'ruby_adapter'
38
- ruby_adapter.stub! 'to_ruby'
39
- RubyAdapter::Base.should_receive(:new).with(loaded_model).and_return(ruby_adapter)
40
-
41
- Oo::Ir::Model = mock 'model'
42
- relation = mock 'relation'
43
- relation.should_receive(:all).and_return([loaded_model])
44
- Oo::Ir::Model.should_receive(:where).with(/res\.%/).and_return(relation)
45
-
46
- loader.load!
47
- end
48
32
  end
49
33
  end
50
34
  end
metadata CHANGED
@@ -1,15 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kangaroo
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1923831973
5
- prerelease: 6
4
+ hash: 27
5
+ prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 1
10
- - pre
11
9
  - 2
12
- version: 0.0.1.pre2
10
+ version: 0.0.2
13
11
  platform: ruby
14
12
  authors:
15
13
  - Michael Eickenberg
@@ -18,7 +16,7 @@ autorequire:
18
16
  bindir: bin
19
17
  cert_chain: []
20
18
 
21
- date: 2011-02-27 00:00:00 +01:00
19
+ date: 2011-04-15 00:00:00 +02:00
22
20
  default_executable:
23
21
  dependencies:
24
22
  - !ruby/object:Gem::Dependency
@@ -70,7 +68,7 @@ dependencies:
70
68
  type: :runtime
71
69
  version_requirements: *id003
72
70
  - !ruby/object:Gem::Dependency
73
- name: yard
71
+ name: hirb
74
72
  prerelease: false
75
73
  requirement: &id004 !ruby/object:Gem::Requirement
76
74
  none: false
@@ -81,10 +79,10 @@ dependencies:
81
79
  segments:
82
80
  - 0
83
81
  version: "0"
84
- type: :development
82
+ type: :runtime
85
83
  version_requirements: *id004
86
84
  - !ruby/object:Gem::Dependency
87
- name: rspec
85
+ name: yard
88
86
  prerelease: false
89
87
  requirement: &id005 !ruby/object:Gem::Requirement
90
88
  none: false
@@ -98,7 +96,7 @@ dependencies:
98
96
  type: :development
99
97
  version_requirements: *id005
100
98
  - !ruby/object:Gem::Dependency
101
- name: ruby-debug
99
+ name: rspec
102
100
  prerelease: false
103
101
  requirement: &id006 !ruby/object:Gem::Requirement
104
102
  none: false
@@ -112,7 +110,7 @@ dependencies:
112
110
  type: :development
113
111
  version_requirements: *id006
114
112
  - !ruby/object:Gem::Dependency
115
- name: cucumber
113
+ name: ruby-debug
116
114
  prerelease: false
117
115
  requirement: &id007 !ruby/object:Gem::Requirement
118
116
  none: false
@@ -125,10 +123,24 @@ dependencies:
125
123
  version: "0"
126
124
  type: :development
127
125
  version_requirements: *id007
126
+ - !ruby/object:Gem::Dependency
127
+ name: cucumber
128
+ prerelease: false
129
+ requirement: &id008 !ruby/object:Gem::Requirement
130
+ none: false
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ hash: 3
135
+ segments:
136
+ - 0
137
+ version: "0"
138
+ type: :development
139
+ version_requirements: *id008
128
140
  description: ActiveRecord-ish OpenObject Wrapper
129
141
  email: marian@cice-online.net
130
- executables: []
131
-
142
+ executables:
143
+ - kang
132
144
  extensions: []
133
145
 
134
146
  extra_rdoc_files: []
@@ -142,6 +154,7 @@ files:
142
154
  - LICENSE
143
155
  - README.md
144
156
  - Rakefile
157
+ - bin/kang
145
158
  - config/kangaroo.yml.sample
146
159
  - docs/AdditionalServices.md
147
160
  - docs/Architecture.md
@@ -156,6 +169,7 @@ files:
156
169
  - kangaroo.gemspec
157
170
  - lib/kangaroo.rb
158
171
  - lib/kangaroo/exception.rb
172
+ - lib/kangaroo/hirb.rb
159
173
  - lib/kangaroo/model/attributes.rb
160
174
  - lib/kangaroo/model/base.rb
161
175
  - lib/kangaroo/model/condition_normalizer.rb
@@ -222,14 +236,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
222
236
  required_rubygems_version: !ruby/object:Gem::Requirement
223
237
  none: false
224
238
  requirements:
225
- - - ">"
239
+ - - ">="
226
240
  - !ruby/object:Gem::Version
227
- hash: 25
241
+ hash: 3
228
242
  segments:
229
- - 1
230
- - 3
231
- - 1
232
- version: 1.3.1
243
+ - 0
244
+ version: "0"
233
245
  requirements: []
234
246
 
235
247
  rubyforge_project: