toolhound-ruby 1.0.4 → 1.0.5

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: 365f0baac45b1ec5b6b28fbd679cf71d7f405bad
4
- data.tar.gz: 5b7f413f4130392a675606641f1ee5f45a62ea91
3
+ metadata.gz: 7c0caeb8b12ac9170f28f99f65d227fbd17cffd3
4
+ data.tar.gz: ddde04f9f3fb97c0beeebe5b83250ca0f2300a79
5
5
  SHA512:
6
- metadata.gz: 4ab1bf011348d24008412d59fc7581f912e66a969dcc053512cbee943bd26904a1e47e13521dd82be00d364eefbd7cd135ccfe488b50eb9a30ab4a153ae19e2f
7
- data.tar.gz: dd830cc1fbd1c5c4ea232843800686891ed4d9f3d536d5e1da58f71c5aaddb7396d67dfca2224ad1eb5b6497ff1f905725032400990dc1c340ecac44fc1cc74a
6
+ metadata.gz: ce0815e9d2315fe05c9411e2c241f2a49f4f5e211c12bb2aa2a2dff6ef081d965ddfeb68ac12e33e17cab9ec88fd0ea4bb1387ff7f2cbd3978671b200ec2eb4d
7
+ data.tar.gz: 1f748ccb5c8bb16825528f708e5d26bf813da4f956780d0d530234533b531822a9055a7f2128fb94b990ecca5e8202379a3b5fd761a9cfc039e76020e9d6399f
@@ -7,6 +7,8 @@
7
7
  # require "nearmiss-ruby/raise_error"
8
8
  # require "nearmiss-ruby/version"
9
9
  require "tiny_tds"
10
+ require "toolhound-ruby/util"
11
+
10
12
  require "toolhound-ruby/core_ext/string"
11
13
  require "toolhound-ruby/configurable"
12
14
  # require "nearmiss-ruby/response"
@@ -15,6 +17,16 @@ require "toolhound-ruby/default"
15
17
  require "toolhound-ruby/base"
16
18
 
17
19
  require "toolhound-ruby/project"
20
+ require "toolhound-ruby/inventory"
21
+ require "toolhound-ruby/inventory_item"
22
+ require "toolhound-ruby/rental"
23
+ require "toolhound-ruby/rental_item"
24
+ require "toolhound-ruby/rental_charge"
25
+
26
+ require "toolhound-ruby/vendor"
27
+ require "toolhound-ruby/manufacturer"
28
+ require "toolhound-ruby/purchase_order"
29
+
18
30
  # require "nearmiss-ruby/util"
19
31
 
20
32
  module Toolhound
@@ -12,10 +12,6 @@ module Toolhound
12
12
  !!(@username && @password && @dataserver)
13
13
  end
14
14
 
15
- # dataserver: 'pbssrvr\sqlexpress',
16
- # port: 1433,
17
- # username: 'mklooth',
18
- # password: 'ToolHound'
19
15
 
20
16
  def sign_in
21
17
  @connection ||= begin
@@ -1,23 +1,27 @@
1
1
  module Toolhound
2
2
 
3
3
  class Base
4
+ DB_TYPE_REGEX = /^(int|dec|var|bol|dte|bin)/
4
5
 
5
- attr_accessor :attributes
6
+ include Toolhound::Util
7
+ attr_accessor :connection
6
8
 
7
9
  def self.table_name
8
- @@table_name
10
+ @@table_name[self.name]
9
11
  end
10
12
 
11
13
  def self.primary_key
12
- @@primary_key
14
+ @@primary_key[self.name]
13
15
  end
14
16
 
15
17
  def self.table_name=(table_name)
16
- @@table_name = table_name
18
+ @@table_name ||= {}
19
+ @@table_name[self.name] = table_name
17
20
  end
18
21
 
19
22
  def self.primary_key=(primary_key)
20
- @@primary_key = primary_key
23
+ @@primary_key ||= {}
24
+ @@primary_key[self.name] = primary_key
21
25
  end
22
26
 
23
27
 
@@ -30,32 +34,265 @@ module Toolhound
30
34
  @@rename_attributes ||= {}
31
35
  end
32
36
 
33
- def self.find(id)
34
- # table_includes = ""
35
- results = query "SELECT TOP(1) * FROM #{table_name} #{table_includes} WHERE #{primary_key} = #{id}"
37
+ # def self.connection
38
+ # @connection ||= Toolhound.connection
39
+ # end
40
+ #
41
+ def initialize(connection, options = {})
42
+ @connection = connection
43
+ # @original = attrs
44
+ # self.attributes = transform_attributes(attrs)
45
+ end
46
+ def table_name
47
+ name = self.class.table_name || demodulize(self.class.name)
48
+ formatted_table_name(name)
49
+ end
50
+ def primary_key
51
+ id = self.class.primary_key || "int#{demodulize(self.class.name)}ID"
52
+ formmatted_column_name(id)
53
+ end
54
+
55
+ def locale
56
+ @locale ||= "EN-US"
57
+ end
58
+
59
+ def default_wheres
60
+ []
61
+ end
62
+
63
+ def default_selects
64
+ {}
65
+ end
66
+ def default_joins
67
+ []
68
+ end
69
+
70
+ def all(options = {})
71
+ options = merge_options({selects: default_selects, joins: default_joins, where: default_wheres}, options)
72
+ build_and_query options
73
+ end
74
+
75
+ def find(id, options = {})
76
+ # "tblInventory.bolIsActive = 1 AND tblInventory.bolDeleted = 0 AND tblInventory.intInventoryID = #{id}"
77
+ # wheres = [] + default_wheres
78
+ wheres = default_wheres + [{:"#{primary_key}" => id}]
79
+ options = merge_options({limit: 1, selects: default_selects, joins: default_joins, where: wheres}, options)
80
+ results = build_and_query options
36
81
  results.first
37
82
  end
38
83
 
39
- def self.all(options = {})
40
- results = query "SELECT * FROM #{table_name}"
84
+ def merge_options(defaults, options = {})
85
+ where = options.delete :where
86
+ selects = options.delete :selects
87
+ joins = options.delete :joins
88
+ defaults[:where] = (defaults[:where] || []) + (where || [])
89
+ defaults[:selects] = defaults[:selects].merge(selects || {})
90
+ defaults[:joins] = defaults[:joins] + (joins || [])
91
+ defaults.merge options
92
+
93
+ end
94
+
95
+ # def where(wheres, options = {})
96
+ #
97
+ # sql = build_sql(limit: 1, selects: default_selects, joins: default_joins, where: wheres)
98
+ #
99
+ # end
100
+
101
+ # def find(id)
102
+ # # table_includes = ""
103
+ # results = query "SELECT TOP(1) * FROM #{table_name} #{table_includes} WHERE #{primary_key} = #{id}"
104
+ # results.first
105
+ # end
106
+ #
107
+ # def all(options = {})
108
+ # results = query "SELECT * FROM #{table_name}"
109
+ # end
41
110
 
111
+
112
+
113
+ def formatted_table_name(table)
114
+ table = table.to_s
115
+ unless /^tbl/i =~ table
116
+ table = "tbl#{camelize(table, true)}"
117
+ end
118
+ camelize(table, false)
119
+ end
120
+
121
+ def formmatted_column_name(column)
122
+ column = column.to_s
123
+ camelize(column, false)
124
+ end
125
+
126
+ def build_selects(selects)
127
+ _build_selects(selects).join(", ")
42
128
  end
43
129
 
44
- def self.query(query)
45
- klass = self
130
+ def _build_selects(selects)
131
+ arr = []
132
+ aggs = {
133
+ count: "COUNT",
134
+ max: "MAX",
135
+ min: "MIN",
136
+ average: "AVERAGE"
137
+ }
138
+ selects.each do |table, values|
139
+
140
+ values.each do |v|
141
+ if v.is_a? Hash
142
+
143
+ end
144
+ # select = "#{formatted_table_name(table)}."
145
+ if v.is_a? Hash
146
+ select = "#{formatted_table_name(table)}.#{formmatted_column_name(v.first[0])}"
147
+ options = v.first[1]
148
+ if options.is_a? Hash
149
+ if options[:agg]
150
+ select = "#{aggs[options[:agg]]}(#{select})"
151
+ end
152
+ if options[:as]
153
+ select += " AS #{formmatted_column_name(options[:as])}"
154
+ end
155
+ else
156
+ select += " AS #{formmatted_column_name(options)}"
157
+ end
158
+ #
159
+ else
160
+ select = "#{formatted_table_name(table)}.#{formmatted_column_name(v)}"
161
+ end
162
+ arr << select
163
+ end
164
+ end
165
+ arr
166
+ end
167
+
168
+
169
+ def build_joins(joins)
170
+ _build_joins(joins).join(" ")
171
+ end
172
+
173
+ def _build_joins(joins)
174
+ join_types = {
175
+ inner: "INNER JOIN",
176
+ left: "LEFT OUTER JOIN",
177
+ left_outer: "LEFT OUTER JOIN",
178
+ left_inner: "LEFT INNER JOIN",
179
+ right: "RIGHT OUTER JOIN",
180
+ right_outer: "RIGHT OUTER JOIN",
181
+ right_inner: "RIGHT INNER JOIN",
182
+ }
183
+
184
+ # joins_query = joins.map do |join|
185
+ # type = join_types[join[:type] || :inner]
186
+ # table = formatted_table_name(join[:table])
187
+ # on = join[:on]
188
+ #
189
+ # on_str = on ? "ON #{on}" : ""
190
+ # "#{type} #{table} #{on_str}"
191
+ # end
192
+ # joins_query.join(" ")
193
+ joins
194
+ end
195
+
196
+
197
+ def build_where(wheres)
198
+ arr = _build_where(wheres)
199
+ arr.join(" AND ")
200
+ end
201
+
202
+ def _build_where(wheres)
203
+ arr = []
204
+ case wheres.class.to_s
205
+ when "String"
206
+ return wheres
207
+ when "Hash"
208
+ wheres.each do |k, v|
209
+ table, column = formatted_table_and_column(k)
210
+ op = :eq
211
+ if v.is_a? Hash
212
+ op = v.delete :op
213
+ v = v.delete :value
214
+ end
215
+
216
+
217
+ arr << "#{table}.#{column} #{get_operator(op, v)}"
218
+ # if v.is_a? Hash
219
+ # # key, value = v.first
220
+ # # op
221
+ # # arr <<
222
+ # v.each do |k1, v1|
223
+ # arr << "#{formatted_table_name(k)}.#{formmatted_column_name(k1)} = '#{v1}'"
224
+ # end
225
+ # else
226
+ # arr << "#{formatted_table_name(table_name)}.#{formmatted_column_name(k)} = '#{v}'"
227
+ # end
228
+ end
229
+ when "Array"
230
+ wheres.each do |v|
231
+ arr += _build_where(v)
232
+ end
233
+ end
234
+ arr
235
+ end
236
+
237
+ def get_operator(op, value)
238
+ operators = {eq: "=", gt: ">", gte: ">=", lt: "<", lte: "<=", ne: "!=", in: "IN", nin: "NOT IN", like: "LIKE", between: "BETWEEN"}
239
+ ops = operators.values
240
+ operator = operators[op]
241
+ unless operator
242
+ operator = ops.include?(op) ? op : "="
243
+ end
244
+
245
+ if operator == "IN" || operator == "NOT IN"
246
+ value = "(#{value})"
247
+ elsif operator == "BETWEEN"
248
+ value = "'#{value[0]}' AND '#{value[1]}'"
249
+ else
250
+ value = "'#{value}'"
251
+ end
252
+ "#{operator} #{value}"
253
+ end
254
+
255
+ def formatted_table_and_column(key)
256
+ key = key.to_s
257
+ first, second = key.split(".")
258
+ if first && second
259
+ [formatted_table_name(first), formmatted_column_name(second)]
260
+ elsif(first)
261
+ [table_name, formmatted_column_name(first)]
262
+ end
263
+
264
+ end
265
+
266
+ def query(query, options)
267
+ data = []
46
268
  results = connection.execute(query)
47
- results.map do |row|
48
- klass.new row
269
+ results.each(:cache_rows => false) do |row|
270
+ data << transform_attributes(row)
49
271
  end
272
+ data
50
273
  end
51
274
 
52
- def self.connection
53
- @connection ||= Toolhound.connection
275
+ def build_and_query(options, query_options = {})
276
+ sql = build_sql(options)
277
+ results = query(sql, query_options)
54
278
  end
55
279
 
56
- def initialize(attrs = {}, options = {})
57
- # @original = attrs
58
- self.attributes = transform_attributes(attrs)
280
+
281
+ def build_sql(obj)
282
+ limit = obj[:limit]
283
+ selects = obj[:selects] ? build_selects(obj[:selects]) : "*"
284
+ joins = obj[:joins] ? build_joins(obj[:joins]) : ""
285
+ from = obj[:from] ? formatted_table_name(obj[:from]) : table_name
286
+ where = obj[:where] ? build_where(obj[:where]) : nil
287
+ order = obj[:order]
288
+
289
+ limit_str = limit ? "TOP(#{limit})" : ""
290
+ where_str = where.length > 0 ? "WHERE #{where}" : ""
291
+ order_str = order ? "ORDER BY #{order}" : ""
292
+
293
+ sql = "SELECT #{limit_str} #{selects} FROM #{from} #{joins} #{where_str} #{order_str}"
294
+ puts sql
295
+ sql
59
296
  end
60
297
 
61
298
  # def attributes=(hash)
@@ -71,7 +308,11 @@ module Toolhound
71
308
  hash = {}
72
309
  attrs.each do |k, v|
73
310
  key = transform_attribute_key(k)
74
- hash[key] = v
311
+ if hash.include? key
312
+ hash[:"#{key}1"] = v
313
+ else
314
+ hash[key] = v
315
+ end
75
316
  end
76
317
  hash
77
318
  end
@@ -80,13 +321,16 @@ module Toolhound
80
321
  renamed = self.class.renamed_attributes
81
322
  if renamed.include? key
82
323
  renamed[key].to_sym
83
- elsif key == self.class.primary_key
84
- :id
85
324
  else
86
325
  # "varTransferReceiptPrefix"
87
- word = key[3..key.length]
88
- word.underscore.to_sym
326
+ if DB_TYPE_REGEX =~ key
327
+ word = key[3..key.length]
328
+ underscore(word).to_sym
329
+ else
330
+ underscore(key).to_sym
331
+ end
89
332
  end
333
+
90
334
  end
91
335
 
92
336
  end
@@ -10,7 +10,7 @@ module Toolhound
10
10
  class Client
11
11
  include Toolhound::Authentication
12
12
  include Toolhound::Configurable
13
-
13
+ include Toolhound::Util
14
14
  include Toolhound::Client::Projects
15
15
  # include Toolhound::Client::Bookmarks
16
16
  # include Toolhound::Client::Categories
@@ -74,6 +74,7 @@ module Toolhound
74
74
  end
75
75
 
76
76
 
77
+
77
78
  # Set username for authentication
78
79
  #
79
80
  # @param value [String] Toolhound-field username
@@ -94,6 +95,94 @@ module Toolhound
94
95
  @connection = nil
95
96
  end
96
97
 
98
+ def inventory
99
+ @inventory ||= Toolhound::Inventory.new(connection)
100
+ end
101
+
102
+ def inventory_item
103
+ @inventory_item ||= Toolhound::InventoryItem.new(connection)
104
+ end
105
+
106
+ def project
107
+ @project ||= Toolhound::Project.new(connection)
108
+ end
109
+
110
+ def rental
111
+ @rental ||= Toolhound::Rental.new(connection)
112
+ end
113
+
114
+ def rental_item
115
+ @rental_item ||= Toolhound::RentalItem.new(connection)
116
+ end
117
+ def rental_charge
118
+ @rental_charge ||= Toolhound::RentalCharge.new(connection)
119
+ end
120
+
121
+ def vendor
122
+ @vendor ||= Toolhound::Vendor.new(connection)
123
+ end
124
+ def manufacturer
125
+ @vendor ||= Toolhound::Manufacturer.new(connection)
126
+ end
127
+ def purchase_order
128
+ @vendor ||= Toolhound::PurchaseOrder.new(connection)
129
+ end
130
+
131
+
132
+
133
+ def query(query, options = {})
134
+ klass = self
135
+
136
+
137
+
138
+ results = connection.execute(query)
139
+ results.map do |row|
140
+ transform_attributes(row)
141
+ end
142
+ end
143
+
144
+ def transform_attributes(attrs)
145
+ hash = {}
146
+ attrs.each do |k, v|
147
+ key = transform_attribute_key(k)
148
+ if hash.include? key
149
+ hash[:"#{key}1"] = v
150
+ else
151
+ hash[key] = v
152
+ end
153
+ end
154
+ hash
155
+ end
156
+
157
+ DB_TYPE_REGEX = /^(int|dec|var|bol|dte|bin)/
158
+
159
+ #"SELECT column_name, data_type FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'tblRentalCharge' AND TABLE_SCHEMA='dbo'"
160
+
161
+ # "SELECT * FROM information_schema.tables ORDER BY table_name"
162
+ #
163
+ # Find project from job number
164
+ # "SELECT tblEntity.intEntityID, tblEntity.varEntityID AS job_no, tblLocation.intLocationID, tblLocationText.varLocationName FROM tblEntity INNER JOIN tblLocation ON tblLocation.intEntityID = tblEntity.intEntityID INNER JOIN tblLocationText ON tblLocationText.intLocationID = tblLocation.intLocationID WHERE varEntityID LIKE '%10526.00%' "
165
+
166
+ # "SELECT MAX(dteStartDate) AS max_date, MIN(dteStartDate) AS min_date FROM tblRentalCharge WHERE intEntityID = 100044"
167
+ #
168
+ def transform_attribute_key(key)
169
+ # renamed = self.class.renamed_attributes
170
+ # if renamed.include? key
171
+ # renamed[key].to_sym
172
+ # elsif key == self.class.primary_key
173
+ # :id
174
+ # else
175
+ # # "varTransferReceiptPrefix"
176
+ # word = key[3..key.length]
177
+ # word.underscore.to_sym
178
+ # end
179
+ word = key
180
+ if DB_TYPE_REGEX =~ key
181
+ word = key[3..key.length]
182
+ end
183
+ underscore(word).to_sym
184
+ end
185
+
97
186
 
98
187
  # Wrapper around Kernel#warn to print warnings unless
99
188
  # TOOLHOUND_SILENT is set to true.
@@ -1,16 +1,28 @@
1
1
  class String
2
2
 
3
- def underscore()
4
- camel_cased_word = self
5
- acronym_regex = /#{["REST"].join("|")}/
6
- return camel_cased_word unless camel_cased_word =~ /[A-Z-]|::/
7
- word = camel_cased_word.to_s.gsub('::'.freeze, '/'.freeze)
8
- word.gsub!(/(?:(?<=([A-Za-z\d]))|\b)(#{acronym_regex})(?=\b|[^a-z])/) { "#{$1 && '_'.freeze }#{$2.downcase}" }
9
- word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2'.freeze)
10
- word.gsub!(/([a-z\d])([A-Z])/, '\1_\2'.freeze)
11
- word.tr!("-".freeze, "_".freeze)
12
- word.downcase!
13
- word
14
- end
3
+ # def underscore()
4
+ # camel_cased_word = self
5
+ # acronym_regex = /#{["REST"].join("|")}/
6
+ # return camel_cased_word unless camel_cased_word =~ /[A-Z-]|::/
7
+ # word = camel_cased_word.to_s.gsub('::'.freeze, '/'.freeze)
8
+ # word.gsub!(/(?:(?<=([A-Za-z\d]))|\b)(#{acronym_regex})(?=\b|[^a-z])/) { "#{$1 && '_'.freeze }#{$2.downcase}" }
9
+ # word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2'.freeze)
10
+ # word.gsub!(/([a-z\d])([A-Z])/, '\1_\2'.freeze)
11
+ # word.tr!("-".freeze, "_".freeze)
12
+ # word.downcase!
13
+ # word
14
+ # end
15
+ #
16
+ # def camelize(term, uppercase_first_letter = true)
17
+ # string = term.to_s
18
+ # if uppercase_first_letter
19
+ # string = string.sub(/^[a-z\d]*/) { |match| inflections.acronyms[match] || match.capitalize }
20
+ # else
21
+ # string = string.sub(/^(?:#{inflections.acronym_regex}(?=\b|[A-Z_])|\w)/) { |match| match.downcase }
22
+ # end
23
+ # string.gsub!(/(?:_|(\/))([a-z\d]*)/i) { "#{$1}#{inflections.acronyms[$2] || $2.capitalize}" }
24
+ # string.gsub!('/'.freeze, '::'.freeze)
25
+ # string
26
+ # end
15
27
 
16
28
  end
@@ -8,12 +8,90 @@ module Toolhound
8
8
  class Inventory < Base
9
9
  # attr_accessor :owner, :name, :id
10
10
 
11
- self.table_name = "tblInventory"
12
- self.primary_key = "intInventoryID"
11
+ # self.table_name = "tblInventory"
12
+ # self.primary_key = "intInventoryID"
13
+
14
+
15
+ def default_selects
16
+ selects = {
17
+ inventory: ["intInventoryID", "intCategoryID", "intSubCategoryID", "intManufacturerID", "intVendorID", "dteCreatedDate", "dteModifiedDate"],
18
+ inventory_text: ["varPartNo", "varDescription", "txtNotes", {varUserField1: "varGlRevenue"}, {varUserField2: "varGlCOGSCode"}, {varUserField3: "varPhaseCode"}],
19
+ unit_of_measure_text: ["varUnitOfMeasure"],
20
+ category: ["varCategory"],
21
+ sub_category: ["varCategory"]
22
+ }
23
+ end
24
+ def default_joins
25
+ arr = []
26
+ arr << "INNER JOIN tblInventoryType ON tblInventory.intInventoryTypeID = tblInventoryType.intInventoryTypeID"
27
+ arr << "INNER JOIN tblInventoryText ON (tblInventoryText.intInventoryID = tblInventory.intInventoryID AND tblInventoryText.varLocaleID = '#{locale}')"
28
+ arr << "LEFT OUTER JOIN tblUnitOfMeasureText ON (tblUnitOfMeasureText.intUofMID = tblInventory.intUofMID )"
29
+ arr << "LEFT OUTER JOIN tblCategoryText AS tblCategory ON (tblCategory.intCategoryID = tblInventory.intCategoryID AND tblCategory.varLocaleID = '#{locale}')"
30
+ arr << "LEFT OUTER JOIN tblCategoryText AS tblSubCategory ON (tblSubCategory.intCategoryID = tblInventory.intSubCategoryID AND tblSubCategory.varLocaleID = '#{locale}')"
31
+ end
32
+
33
+ def default_wheres
34
+ [{bolIsActive: 1}, {bolDeleted: 0}]
35
+ end
36
+ # include_selects tblInventoryText: [:varPartNo, :varDescription, :txtNotes ],
37
+ # tblInventory: [:intInventoryID, :intCategoryID]
38
+ # def selects
39
+ # arr = build_selects(selects)
40
+ #
41
+ # arr.join(", ")
42
+ # end
43
+
44
+
45
+ # def joins
46
+ # # LEFT OUTER JOIN tblInventoryID ON tblInventoryID.intInventoryID = tblInventory.intInventoryID
47
+ # [
48
+ # {type: :inner, table: :inventory_type, on: "intInventoryTypeID"},
49
+ # {type: :inner, table: :inventory_text, on: ["intInventoryTypeID", varLocaleID: locale]},
50
+ # {type: :left_outer, table: :unit_of_measure_text, on: "intUofMID"},
51
+ # {type: :left_outer, table: :category_text, on: ["intUofMID", varLocaleID: locale], as: :category},
52
+ #
53
+ # ]
54
+ # arr.join(" ")
55
+ # end
56
+
57
+ def build_join(join)
58
+ join_types = {
59
+ inner: "INNER JOIN",
60
+ left: "LEFT OUTER JOIN",
61
+ left_outer: "LEFT OUTER JOIN",
62
+ left_inner: "LEFT INNER JOIN",
63
+ right: "RIGHT OUTER JOIN",
64
+ right_outer: "RIGHT OUTER JOIN",
65
+ right_inner: "RIGHT INNER JOIN",
66
+ }
67
+
68
+ type = join_types[join[:type] || :inner]
69
+ table = formatted_table_name(join[:table])
70
+
71
+ table_str = "#{table} "
72
+ if join[:as]
73
+ table = formatted_table_name(join[:as])
74
+ table_str += "AS #{table} "
75
+ end
76
+
77
+ on = join[:on]
78
+ case on.class.to_s
79
+ when "String"
80
+
81
+ end
82
+
83
+ # on_str = on ? "ON #{on}" : ""
84
+ "#{type} #{table_str} #{on_str}"
85
+
86
+
87
+ end
13
88
 
14
89
  # includes :tblInventoryText,
15
90
  # rename_attributes intLocationID: 'location_id'
16
91
 
17
-
92
+
93
+
94
+
95
+
18
96
  end
19
97
  end
@@ -8,10 +8,33 @@ module Toolhound
8
8
  self.table_name = "tblLocation"
9
9
  self.primary_key = "intLocationID"
10
10
 
11
- # rename_attributes intLocationID: 'location_id'
12
- def inventory_items
11
+ def default_selects
12
+ #{ }"SELECT tblEntity.intEntityID, tblEntity.varEntityID AS job_no, tblLocation.intLocationID, tblLocationText.varLocationName FROM tblEntity INNER JOIN tblLocation ON tblLocation.intEntityID = tblEntity.intEntityID INNER JOIN tblLocationText ON tblLocationText.intLocationID = tblLocation.intLocationID WHERE varEntityID LIKE '%10526.00%'"
13
+ {
14
+ location: [:int_location_id, :dte_created_date, :dte_modified_date],
15
+ location_text: [:var_location_name],
16
+ entity: [:int_entity_id, var_entity_id: :job_no ]
17
+ }
18
+ end
19
+
20
+ def default_joins
21
+ arr = []
22
+ arr << "INNER JOIN tblEntity ON (tblEntity.intEntityID = tblLocation.intEntityID)"
23
+ arr << "INNER JOIN tblLocationText ON (tblLocationText.intLocationID = tblLocation.intLocationID)"
24
+
25
+ arr
26
+ end
13
27
 
28
+ def find_by_entity_id(id)
29
+ all(limit: 1, where: [{int_entity_id: id}]).first
14
30
  end
15
31
 
32
+ def find_by_job_no(job_no)
33
+ all(limit: 1, where: [{"entity.var_entity_id" => {value: "%#{job_no}%", op: :like} }]).first
34
+
35
+ end
36
+
37
+ # rename_attributes intLocationID: 'location_id'
38
+
16
39
  end
17
40
  end
@@ -1,3 +1,3 @@
1
1
  module Toolhound
2
- VERSION = "1.0.4"
2
+ VERSION = "1.0.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: toolhound-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Markus Klooth
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-03 00:00:00.000000000 Z
11
+ date: 2016-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tiny_tds