DataMgr 0.1.1.1.pre → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1dbac8cd85c6be82abd3eb4bdd123106217b1977
4
- data.tar.gz: 75ed3af46d91f8cc1fcdf845f05656e74f1bd453
3
+ metadata.gz: 2854606538cea24237e00b8ee35155cb3dcdc977
4
+ data.tar.gz: 6c379a4ddb9a6e77953866dfd5d2408763279a26
5
5
  SHA512:
6
- metadata.gz: d2f486c8859c5df8aa5c162428b2bdf964e4c2c0a08feea2855e80e0e138bb51c29e7439320ec43230b51ef2970f44d1a97797c537586657861b264a0fd37548
7
- data.tar.gz: 13f0e524e024a22946f9acca7b7da8eb33a3a808081658a464f477de8fadb38cdd615f117ccaf0159daede94234a643a67c881116af805e1bd9b3c684b0ee0bf
6
+ metadata.gz: 5d0c3f600915c9ad34e2d656b7e43795dd9913069691b4b3f2cc6ef889fb89aeb292169a986c7e8f6cb4aae3fdf5f9b065d62ad7cad06e10e89ec4b2f23b401f
7
+ data.tar.gz: 74eeb52a6d38e76d383dfe26a476f60e4493b65094d101817a9b4178503edf30b7eff18128271cb740e9ce643b076fa0c1f191cc7fc2cac531431a897937f4cb
data/.gitignore CHANGED
@@ -1,5 +1,5 @@
1
1
  /.bundle/
2
- /.idea/
2
+ /.idea
3
3
  /.yardoc
4
4
  /Gemfile.lock
5
5
  /_yardoc/
@@ -31,5 +31,4 @@ Gem::Specification.new do |spec|
31
31
  spec.add_development_dependency "rake", "~> 10.0"
32
32
  spec.add_development_dependency "rspec", "~> 3.0"
33
33
  spec.add_development_dependency "json", ">= 1.8.3"
34
- spec.add_development_dependency "tiny_tds"
35
34
  end
data/README.md CHANGED
@@ -1,10 +1,18 @@
1
1
  # DataMgr
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/DataMgr`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ Data manager that provides support for JSON, YAML, and Database (e.g .SQL Server) dataware. Provides
4
+ the ability to manage the state of your data - creation, retrieve, and execute (SQL), then manage
5
+ those results for re-use later .. in your automation framework, app. code, etc.
6
+
7
+ Put your Ruby code in the file `lib/DataMgr`. To experiment with that code, run `bin/console` for an interactive prompt.
4
8
 
5
9
 
6
10
  ## Installation
7
11
 
12
+ ### Prerequisite
13
+
14
+ http://stackoverflow.com/questions/33102569/installing-tiny-tds-gives-error-on-on-mac-os-10-10-5
15
+
8
16
  Add this line to your application's Gemfile:
9
17
 
10
18
  ```ruby
@@ -21,7 +29,21 @@ Or install it yourself as:
21
29
 
22
30
  ## Usage
23
31
 
24
- TODO: Write usage instructions here
32
+ ### Creating a connection configuration YAML file
33
+
34
+ MyConnectID:
35
+ user: sasquatch
36
+ password: kale
37
+ host: somewhere-in-the-woods.com
38
+ port: 2080
39
+ description: Big Foot
40
+ ---
41
+ AnotherConnectID:
42
+ user: bigbird
43
+ password: yellow
44
+ host: sesame-street
45
+ port: 2080
46
+ description: Sesame Street Gang
25
47
 
26
48
  ## Development
27
49
 
@@ -4,105 +4,35 @@
4
4
  #
5
5
  require 'singleton'
6
6
  require 'yaml'
7
- require 'tiny_tds'
8
7
 
9
8
  module DataMgr
10
9
 
10
+ class DBConnectionError < StandardError
11
+ def initialize(msg="Connect - Unsupported. Install pre-release for DB support (e.g. gem install DataMgr --pre)")
12
+ super
13
+ end
14
+ end
15
+
11
16
  class DB
12
17
  include Singleton
13
18
 
14
19
  attr_accessor :clients
15
20
  attr_accessor :config
16
- attr_accessor :debug
17
21
 
18
22
  def initialize
19
23
  @clients={}
20
- @debug=false
21
24
  end
22
25
 
23
26
  def close(_id)
24
- rc=disconnect(_id)
25
- puts "close(#{_id}): #{rc}" if @debug
26
- rc
27
- end
28
-
29
- def _execute(c, q)
30
-
31
- begin
32
- if c.active?
33
- puts "execute(#{q} ..." if @debug
34
- rc=c.execute(q)
35
-
36
- puts "rc : #{rc.class} : #{rc}"
37
-
38
- h={}
39
-
40
- if rc.is_a?(TinyTds::Result)
41
- rc.each_with_index do |row, i|
42
-
43
- h[i]=row
44
-
45
- puts "#{i}. #{row.class} : #{row}" if @debug
46
- end
47
- end
48
-
49
- rc=h.to_yaml
50
- puts h.to_yaml
51
- end
52
- rescue => ex
53
- ;
54
- end
55
-
56
- puts "_execute(c, #{q}): #{h}" if @debug
57
- h
58
- end
59
-
60
-
61
- def run(_id, q)
62
- rc=nil
63
- puts "run(#{_id}, #{q})" if @debug
64
-
65
- begin
66
- if @clients.has_key?(_id)
67
-
68
- if @clients[_id].active?
69
- puts "=> active" if @debug
70
-
71
- rc=_execute(@clients[_id], q)
72
- else
73
- puts "warning: connection #{_id} is not active." if @debug
74
- end
75
- else
76
-
77
- puts "run(#{_id}, #{q}) : WARN - not connected."
78
- _c = getConfig(_id)
79
- if !_c.nil? && _c.connect(_id)
80
- if _c.active?
81
- rc=_execute(@clients[_id], q)
82
- end
83
- end
84
-
85
- end
86
- rescue => ex
87
- puts "Exception: #{ex.class}"
88
- puts ex.backtrace
89
- end
90
- rc
27
+ disconnect(_id)
91
28
  end
92
29
 
93
30
  def disconnect(_id)
94
31
  rc=false
95
- begin
96
- if @clients.has_key?(_id)
97
- @clients[_id].close
98
- rc=true
99
- end
100
- rescue => ex
101
- puts "Exception: #{ex.class}"
102
- puts ex.backtrace
32
+ if @clients.has_key?(_id)
33
+ @clients[_id].close
34
+ rc=true
103
35
  end
104
-
105
- puts "disconnect(#{_id}): #{rc}" if @debug
106
36
  rc
107
37
  end
108
38
 
@@ -110,40 +40,40 @@ module DataMgr
110
40
  def connect(_id)
111
41
  rc=false
112
42
  begin
113
- conn=getConfig(_id)
43
+ conn=get(_id)
114
44
 
115
45
  if !conn.nil?
116
46
 
117
- puts ".. connect(#{_id}) ..." if @debug
47
+ raise DBConnectionError
118
48
 
119
- @clients[_id] = TinyTds::Client.new username: conn['user'],
120
- password: conn['password'],
121
- host: conn['host'],
122
- port: conn['port']
123
- rc=@clients[_id].active?
49
+ #@clients[_id] = TinyTds::Client.new username: conn['user'],
50
+ # password: conn['password'],
51
+ # host: conn['host'],
52
+ # port: conn['port']
53
+ #rc=true if @clients[_id].active?
124
54
  else
125
55
  puts __FILE__ + (__LINE__).to_s + " WARN: client #{_id} is not defined."
126
56
  end
127
57
 
58
+ rescue DBConnectionError => ex
59
+ raise ex
60
+
128
61
  rescue => ex
129
62
  ;
130
63
  end
131
64
 
132
- puts "connect(#{_id}) : #{rc}" if @debug
133
65
  rc
134
66
  end
135
67
 
136
68
 
137
- def getConfig(_id)
69
+ def get(_id)
138
70
  @config.each do |_c|
71
+ puts __FILE__ + (__LINE__).to_s + " get => #{_c}"
139
72
  if _c.has_key?(_id)
140
- puts __FILE__ + (__LINE__).to_s + " get(#{_id}) => #{_c[_id]}" if @debug
141
73
  return _c[_id]
142
74
  end
143
75
  end
144
76
 
145
- puts "get(#{_id}) => not found. (nil)"
146
-
147
77
  nil
148
78
  end
149
79
 
@@ -157,10 +87,9 @@ module DataMgr
157
87
  puts __FILE__ + (__LINE__).to_s + " #{ex.class}: Invalid file: #{_config} - abort processing."
158
88
  puts ex.backtrace
159
89
  end
160
-
161
- puts "load(#{_config}): #{rc}" if @debug
162
90
  rc
163
91
  end
92
+
164
93
  end
165
94
 
166
95
 
@@ -0,0 +1,70 @@
1
+
2
+ require 'singleton'
3
+
4
+ module DataMgr
5
+
6
+ class DSL
7
+ include Singleton
8
+
9
+ def initialize()
10
+
11
+ end
12
+
13
+
14
+ # Ex. './spec/fixtures/connect.yml'
15
+ def loadDB(_f)
16
+ DataMgr::DB.instance.load(_f)
17
+ end
18
+
19
+ def cmd(opts)
20
+ # puts "cmd => #{opts}"
21
+ rc=false
22
+ _cmd=nil
23
+
24
+ if opts.has_key?(:cmd)
25
+ _cmd=opts[:cmd]
26
+ else
27
+ return false
28
+ end
29
+
30
+ if _cmd.match(/^\s*loaddb\s*\(.*\)\s*$/i)
31
+ dbName = _cmd.match(/^\s*loaddb\s*\((.*)\)\s*$/i)[1].to_s
32
+ rc=DataMgr::DB.instance.load(dbName)
33
+
34
+ elsif opts.has_key?(:cmd) && opts[:cmd].match(/^\s*connect\s*\((.*)\)\s*$/)
35
+ _connectID = opts[:cmd].match(/^\s*connect\s*\((.*)\)\s*$/i)[1].to_s
36
+ rc=DataMgr::DB.instance.connect(_connectID)
37
+
38
+ elsif _cmd.match(/^\s*getDB\s*\(.*\)\.get\(.*\)\s*$/)
39
+ db = _cmd.match(/^\s*getDB\s*\(\s*(.*)\s*\)\.get\(.*\)\s*$/)[1].to_s
40
+ # puts "db => #{db}"
41
+ # rc = queries.getDataElement(hit)
42
+ else
43
+ STDERR.puts " Unknown command: #{opts}"
44
+ end
45
+
46
+
47
+ rc
48
+
49
+ end
50
+
51
+ def connect(id)
52
+ DataMgr::DB.instance.connect(id)
53
+ end
54
+
55
+
56
+ def loadData(_f)
57
+ DataMgr::DataModel.new(_f)
58
+ end
59
+
60
+
61
+
62
+
63
+
64
+
65
+ end
66
+
67
+
68
+
69
+
70
+ end
@@ -5,8 +5,10 @@ module DataMgr
5
5
  class DataModel
6
6
  attr_accessor :_file
7
7
  attr_accessor :app_model
8
+ attr_accessor :debug
8
9
 
9
10
  def initialize(f=nil)
11
+ @debug=false
10
12
 
11
13
  if !f.nil?
12
14
  @_file=f
@@ -20,13 +22,26 @@ module DataMgr
20
22
  end
21
23
 
22
24
  def saveAs(_fname, _json)
23
- _f=File.open(_fname, 'w')
24
- _f.puts _json.to_json
25
- _f.close
25
+ rc=false
26
+ begin
27
+ _f=File.open(_fname, 'w')
28
+ _f.puts _json.to_json
29
+ _f.close
30
+ rc=true
31
+
32
+ rescue => ex
33
+ ;
34
+ end
35
+ rc
26
36
  end
27
37
 
38
+
28
39
  def loadPages(jlist)
29
40
 
41
+ if jlist.nil? || jlist.empty?
42
+ return nil
43
+ end
44
+
30
45
  json_list=[]
31
46
  if jlist.kind_of?(String)
32
47
  json_list << jlist
@@ -36,25 +51,44 @@ module DataMgr
36
51
 
37
52
  jsonData={}
38
53
  json_list.each { |f|
39
- puts __FILE__ + (__LINE__).to_s + " JSON.parse(#{f})"
40
54
 
41
55
  begin
42
- data_hash = JSON.parse File.read(f)
43
- jsonData.merge!(data_hash)
56
+
57
+ _fd=nil
58
+ _contents=nil
59
+ _ext=File.extname(f)
60
+
61
+ if _ext.match(/\.(yaml|yml|json|jsn)\s*$/i)
62
+ _fd = File.open(f, 'r')
63
+ _contents=_fd.read
64
+ _fd.close
65
+
66
+ _contents = JSON.dump(YAML::load(_contents)) if _ext.match(/(yaml|yml)/i)
67
+
68
+ if !_contents.nil?
69
+ data_hash = JSON.parse _contents
70
+ jsonData.merge!(data_hash)
71
+ end
72
+
73
+ end
74
+
44
75
  rescue JSON::ParserError
45
- Scoutui::Logger::LogMgr.instance.fatal "raise JSON::ParseError - #{f.to_s}"
76
+ STDERR.puts " raise JSON::ParseError - #{f.to_s}"
46
77
  raise "JSONLoadError"
78
+
79
+ rescue => ex
80
+ STDERR.puts " Exception: #{ex.class}"
47
81
  end
48
82
 
49
83
  }
50
- puts "merged jsonData => " + jsonData.to_json
84
+ puts "merged jsonData => " + jsonData.to_json if @debug
51
85
  @app_model = jsonData
52
86
  end
53
87
 
54
88
 
55
89
  # getDataElement("data(address).get(city).get(zip)")
56
90
  def getDataElement(s)
57
- puts __FILE__ + (__LINE__).to_s + " getDataElement(#{s})"
91
+ puts __FILE__ + (__LINE__).to_s + " getDataElement(#{s})" if @debug
58
92
 
59
93
  hit=@app_model
60
94
 
@@ -66,18 +100,18 @@ module DataMgr
66
100
  getter = elt.split(/\(/)[0]
67
101
  _obj = elt.match(/\((.*)\)/)[1]
68
102
 
69
- puts __FILE__ + (__LINE__).to_s + " getter : #{getter} obj: #{_obj}"
103
+ puts __FILE__ + (__LINE__).to_s + " getter : #{getter} obj: #{_obj}" if @debug
70
104
 
71
105
  if getter.downcase.match(/^\s*(getData)\s*/i)
72
- puts __FILE__ + (__LINE__).to_s + " -- process page --"
106
+ puts __FILE__ + (__LINE__).to_s + " -- process page --" if @debug
73
107
  hit=@app_model[_obj]
74
108
  elsif getter.downcase=='get'
75
109
  hit=hit[_obj]
76
110
  else
77
- puts __FILE__ + (__LINE__).to_s + " getter : #{getter} is unknown."
111
+ puts __FILE__ + (__LINE__).to_s + " getter : #{getter} is unknown." if @debug
78
112
  return nil
79
113
  end
80
- puts __FILE__ + (__LINE__).to_s + " HIT => #{hit}"
114
+ puts __FILE__ + (__LINE__).to_s + " HIT => #{hit}" if @debug
81
115
  }
82
116
 
83
117
  hit
@@ -93,20 +127,13 @@ module DataMgr
93
127
  if h.is_a?(Hash)
94
128
 
95
129
  h.each do |k, v|
96
- puts __FILE__ + (__LINE__).to_s + " Key: #{k} => #{v}"
130
+ puts __FILE__ + (__LINE__).to_s + " Key: #{k} => #{v}" if @debug
97
131
  if k == condition
98
- # h[k].each {|k, v| result[k] = v } # <= tweak here
132
+
99
133
  if !v.is_a?(Array) && v.match(/^\s*#{_action}\s*\((.*)\)\s*$/i)
100
134
 
101
135
  dataObject=v.match(/^\s*#{_action}\s*\((.*)\)\s*$/i)[1]
102
136
 
103
- puts __FILE__ + (__LINE__).to_s + " <pg, pageObject> : <#{pg}, #{dataObject}>"
104
- # result[k] = v
105
-
106
- # puts '*******************'
107
- # puts __FILE__ + (__LINE__).to_s + " HIT : #{h[k]}"
108
- # result << { h[k] => v }
109
-
110
137
  if pg.nil?
111
138
  result << parent
112
139
  elsif pg == dataObject
@@ -117,15 +144,11 @@ module DataMgr
117
144
  elsif v.is_a?(Array)
118
145
 
119
146
  v.each do |vh|
120
- puts " =====> #{vh}"
121
147
 
122
148
  if vh.is_a?(Hash) && vh.has_key?(condition) && vh[condition].match(/^\s*#{_action}\s*/i)
123
149
 
124
150
  pageObject=vh[condition].match(/^\s*#{_action}\s*\((.*)\)\s*$/i)[1]
125
151
 
126
-
127
- puts __FILE__ + (__LINE__).to_s + " matched on #{_action}, pg:#{pg}, #{pageObject}"
128
-
129
152
  if pg.nil?
130
153
  result << parent
131
154
  elsif pg == pageObject
@@ -145,33 +168,20 @@ module DataMgr
145
168
  _rc = hits("#{parent}.get(#{k})", h[k], condition, _action, pg)
146
169
  end
147
170
 
148
-
149
171
  if !(_rc.nil? || _rc.empty?)
150
-
151
-
152
172
  result << _rc
153
-
154
- puts __FILE__ + (__LINE__).to_s + " ADDING #{k} : #{_rc}"
155
- # puts "====> #{k} : #{_rc.class} : #{_rc.length}"
156
-
157
-
158
173
  result.flatten!
159
174
  end
160
-
161
-
162
175
  end
163
176
  end
164
177
 
165
178
  end
166
179
 
167
-
168
180
  result=nil if result.empty?
169
- puts __FILE__ + (__LINE__).to_s + " result : #{result}"
181
+ puts __FILE__ + (__LINE__).to_s + " result : #{result}" if @debug
170
182
  result
171
183
  end
172
184
 
173
-
174
-
175
185
  end
176
186
 
177
187
 
@@ -1,3 +1,3 @@
1
1
  module DataMgr
2
- VERSION = "0.1.1.1.pre"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: DataMgr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1.1.pre
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Kim
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-08-02 00:00:00.000000000 Z
11
+ date: 2016-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -66,20 +66,6 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.8.3
69
- - !ruby/object:Gem::Dependency
70
- name: tiny_tds
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - ">="
74
- - !ruby/object:Gem::Version
75
- version: '0'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - ">="
81
- - !ruby/object:Gem::Version
82
- version: '0'
83
69
  description: Manage dynamic data used for test input and output management.
84
70
  email:
85
71
  - h20dragon@outlook.com
@@ -90,7 +76,6 @@ files:
90
76
  - ".gitignore"
91
77
  - ".idea/DataMgr.iml"
92
78
  - ".idea/encodings.xml"
93
- - ".idea/vagrant.xml"
94
79
  - ".rspec"
95
80
  - ".travis.yml"
96
81
  - CODE_OF_CONDUCT.md
@@ -103,6 +88,7 @@ files:
103
88
  - bin/setup
104
89
  - lib/DataMgr.rb
105
90
  - lib/DataMgr/DB/db.rb
91
+ - lib/DataMgr/DSL/dsl.rb
106
92
  - lib/DataMgr/Model/data_model.rb
107
93
  - lib/DataMgr/version.rb
108
94
  homepage: https://github.com/h20dragon
@@ -120,9 +106,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
120
106
  version: '0'
121
107
  required_rubygems_version: !ruby/object:Gem::Requirement
122
108
  requirements:
123
- - - ">"
109
+ - - ">="
124
110
  - !ruby/object:Gem::Version
125
- version: 1.3.1
111
+ version: '0'
126
112
  requirements: []
127
113
  rubyforge_project:
128
114
  rubygems_version: 2.6.2