DataMgr 0.1.1.1.pre → 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.
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