stockor-core 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.
Files changed (221) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +6 -0
  4. data/Guardfile +13 -0
  5. data/LICENSE.txt +674 -0
  6. data/README.md +88 -0
  7. data/Rakefile +58 -0
  8. data/config/database.yml +9 -0
  9. data/db/migrate/20120110142845_create_skr_sequential_ids.rb +35 -0
  10. data/db/migrate/20140202185309_create_skr_gl_accounts.rb +15 -0
  11. data/db/migrate/20140202193316_create_skr_gl_periods.rb +16 -0
  12. data/db/migrate/20140202193318_create_skr_gl_transactions.rb +14 -0
  13. data/db/migrate/20140202193319_create_skr_gl_postings.rb +16 -0
  14. data/db/migrate/20140202193700_create_skr_gl_manual_entries.rb +13 -0
  15. data/db/migrate/20140213040608_create_skr_payment_terms.rb +16 -0
  16. data/db/migrate/20140220031700_create_skr_addresses.rb +19 -0
  17. data/db/migrate/20140220031800_create_skr_locations.rb +19 -0
  18. data/db/migrate/20140220190836_create_skr_vendors.rb +22 -0
  19. data/db/migrate/20140220203029_create_skr_customers.rb +22 -0
  20. data/db/migrate/20140224034759_create_skr_skus.rb +22 -0
  21. data/db/migrate/20140225032853_create_skr_sku_locs.rb +21 -0
  22. data/db/migrate/20140320030501_create_skr_uoms.rb +19 -0
  23. data/db/migrate/20140321031604_create_skr_sku_vendors.rb +18 -0
  24. data/db/migrate/20140322012143_create_skr_ia_reasons.rb +14 -0
  25. data/db/migrate/20140322014401_create_skr_inventory_adjustments.rb +16 -0
  26. data/db/migrate/20140322023453_create_skr_ia_lines.rb +18 -0
  27. data/db/migrate/20140322035024_create_skr_sku_trans.rb +21 -0
  28. data/db/migrate/20140322223912_create_skr_sales_orders.rb +27 -0
  29. data/db/migrate/20140322223920_create_skr_so_lines.rb +25 -0
  30. data/db/migrate/20140323001446_create_so_details_view.rb +81 -0
  31. data/db/migrate/20140327202102_create_skr_purchase_orders.rb +20 -0
  32. data/db/migrate/20140327202107_create_skr_po_lines.rb +25 -0
  33. data/db/migrate/20140327202207_create_skr_pick_tickets.rb +16 -0
  34. data/db/migrate/20140327202209_create_skr_pt_lines.rb +23 -0
  35. data/db/migrate/20140327224000_create_skr_invoices.rb +25 -0
  36. data/db/migrate/20140327224002_create_skr_inv_lines.rb +23 -0
  37. data/db/migrate/20140330232808_create_skr_sku_loc_details_view.rb +31 -0
  38. data/db/migrate/20140330232810_create_skr_sku_qty_details_view.rb +48 -0
  39. data/db/migrate/20140400164729_create_skr_vouchers.rb +22 -0
  40. data/db/migrate/20140400164733_create_skr_vo_lines.rb +21 -0
  41. data/db/migrate/20140401164729_create_skr_po_receipt.rb +16 -0
  42. data/db/migrate/20140401164740_create_skr_por_line.rb +21 -0
  43. data/db/migrate/20140422024010_create_skr_inv_details_view.rb +42 -0
  44. data/lib/generators/stockor/migrations/install_generator.rb +42 -0
  45. data/lib/skr/address.rb +97 -0
  46. data/lib/skr/business_entity.rb +25 -0
  47. data/lib/skr/concerns/acts_as_uom.rb +47 -0
  48. data/lib/skr/concerns/all.rb +30 -0
  49. data/lib/skr/concerns/association_extensions.rb +85 -0
  50. data/lib/skr/concerns/attr_accessor_with_default.rb +54 -0
  51. data/lib/skr/concerns/code_identifier.rb +43 -0
  52. data/lib/skr/concerns/export_associations.rb +52 -0
  53. data/lib/skr/concerns/export_join_tables.rb +39 -0
  54. data/lib/skr/concerns/export_methods.rb +104 -0
  55. data/lib/skr/concerns/export_scope.rb +66 -0
  56. data/lib/skr/concerns/exported_limit_evaluator.rb +17 -0
  57. data/lib/skr/concerns/gl_tran_extensions.rb +18 -0
  58. data/lib/skr/concerns/has_gl_transaction.rb +67 -0
  59. data/lib/skr/concerns/has_sku_loc_lines.rb +47 -0
  60. data/lib/skr/concerns/immutable_model.rb +32 -0
  61. data/lib/skr/concerns/inv_extensions.rb +24 -0
  62. data/lib/skr/concerns/is_order_like.rb +47 -0
  63. data/lib/skr/concerns/is_sku_loc_line.rb +65 -0
  64. data/lib/skr/concerns/json_attribute_access.rb +55 -0
  65. data/lib/skr/concerns/locked_fields.rb +84 -0
  66. data/lib/skr/concerns/pt_extensions.rb +22 -0
  67. data/lib/skr/concerns/pub_sub.rb +105 -0
  68. data/lib/skr/concerns/queries.rb +20 -0
  69. data/lib/skr/concerns/random_hash_code.rb +40 -0
  70. data/lib/skr/concerns/sanitize_json.rb +49 -0
  71. data/lib/skr/concerns/sku_extensions.rb +52 -0
  72. data/lib/skr/concerns/so_extensions.rb +30 -0
  73. data/lib/skr/concerns/state_machine.rb +62 -0
  74. data/lib/skr/concerns/track_modifications.rb +48 -0
  75. data/lib/skr/concerns/visible_id_identifier.rb +53 -0
  76. data/lib/skr/core.rb +30 -0
  77. data/lib/skr/core/configuration.rb +87 -0
  78. data/lib/skr/core/db.rb +82 -0
  79. data/lib/skr/core/db/migration_helpers.rb +178 -0
  80. data/lib/skr/core/db/migrations.rb +15 -0
  81. data/lib/skr/core/db/seed.rb +46 -0
  82. data/lib/skr/core/db/seed/chart_of_accounts.yml +168 -0
  83. data/lib/skr/core/db/seed/payment_terms.yml +60 -0
  84. data/lib/skr/core/logger.rb +36 -0
  85. data/lib/skr/core/numbers.rb +71 -0
  86. data/lib/skr/core/rails_engine.rb +5 -0
  87. data/lib/skr/core/standard_pricing_provider.rb +15 -0
  88. data/lib/skr/core/strings.rb +57 -0
  89. data/lib/skr/core/testing.rb +11 -0
  90. data/lib/skr/core/testing/assertions.rb +44 -0
  91. data/lib/skr/core/testing/fixtures.rb +25 -0
  92. data/lib/skr/core/testing/fixtures/skr/addresses.yml +53 -0
  93. data/lib/skr/core/testing/fixtures/skr/customers.yml +43 -0
  94. data/lib/skr/core/testing/fixtures/skr/gl_accounts.yml +86 -0
  95. data/lib/skr/core/testing/fixtures/skr/gl_manual_entries.yml +4 -0
  96. data/lib/skr/core/testing/fixtures/skr/gl_periods.yml +26 -0
  97. data/lib/skr/core/testing/fixtures/skr/gl_postings.yml +88 -0
  98. data/lib/skr/core/testing/fixtures/skr/gl_transactions.yml +35 -0
  99. data/lib/skr/core/testing/fixtures/skr/ia_lines.yml +7 -0
  100. data/lib/skr/core/testing/fixtures/skr/ia_reasons.yml +15 -0
  101. data/lib/skr/core/testing/fixtures/skr/inv_lines.yml +22 -0
  102. data/lib/skr/core/testing/fixtures/skr/inventory_adjustments.yml +6 -0
  103. data/lib/skr/core/testing/fixtures/skr/invoices.yml +10 -0
  104. data/lib/skr/core/testing/fixtures/skr/locations.yml +24 -0
  105. data/lib/skr/core/testing/fixtures/skr/payment_terms.yml +42 -0
  106. data/lib/skr/core/testing/fixtures/skr/pick_tickets.yml +4 -0
  107. data/lib/skr/core/testing/fixtures/skr/po_lines.yml +44 -0
  108. data/lib/skr/core/testing/fixtures/skr/po_receipts.yml +5 -0
  109. data/lib/skr/core/testing/fixtures/skr/por_lines.yml +13 -0
  110. data/lib/skr/core/testing/fixtures/skr/pt_lines.yml +12 -0
  111. data/lib/skr/core/testing/fixtures/skr/purchase_orders.yml +16 -0
  112. data/lib/skr/core/testing/fixtures/skr/sales_orders.yml +32 -0
  113. data/lib/skr/core/testing/fixtures/skr/sku_locs.yml +78 -0
  114. data/lib/skr/core/testing/fixtures/skr/sku_trans.yml +9 -0
  115. data/lib/skr/core/testing/fixtures/skr/sku_vendors.yml +35 -0
  116. data/lib/skr/core/testing/fixtures/skr/skus.yml +50 -0
  117. data/lib/skr/core/testing/fixtures/skr/so_lines.yml +71 -0
  118. data/lib/skr/core/testing/fixtures/skr/uoms.yml +61 -0
  119. data/lib/skr/core/testing/fixtures/skr/vendors.yml +48 -0
  120. data/lib/skr/core/testing/fixtures/skr/vo_lines.yml +12 -0
  121. data/lib/skr/core/testing/fixtures/skr/vouchers.yml +8 -0
  122. data/lib/skr/core/testing/helper.rb +18 -0
  123. data/lib/skr/core/testing/test_case.rb +17 -0
  124. data/lib/skr/core/version.rb +5 -0
  125. data/lib/skr/customer.rb +34 -0
  126. data/lib/skr/gl_account.rb +56 -0
  127. data/lib/skr/gl_manual_entry.rb +31 -0
  128. data/lib/skr/gl_period.rb +13 -0
  129. data/lib/skr/gl_posting.rb +54 -0
  130. data/lib/skr/gl_transaction.rb +174 -0
  131. data/lib/skr/ia_line.rb +129 -0
  132. data/lib/skr/ia_reason.rb +16 -0
  133. data/lib/skr/inv_line.rb +90 -0
  134. data/lib/skr/inventory_adjustment.rb +60 -0
  135. data/lib/skr/invoice.rb +159 -0
  136. data/lib/skr/location.rb +31 -0
  137. data/lib/skr/model.rb +37 -0
  138. data/lib/skr/null_user.rb +30 -0
  139. data/lib/skr/payment_term.rb +30 -0
  140. data/lib/skr/pick_ticket.rb +71 -0
  141. data/lib/skr/po_line.rb +69 -0
  142. data/lib/skr/po_receipt.rb +51 -0
  143. data/lib/skr/por_line.rb +80 -0
  144. data/lib/skr/pt_line.rb +74 -0
  145. data/lib/skr/purchase_order.rb +112 -0
  146. data/lib/skr/sales_order.rb +159 -0
  147. data/lib/skr/sequential_id.rb +23 -0
  148. data/lib/skr/sku.rb +99 -0
  149. data/lib/skr/sku_loc.rb +94 -0
  150. data/lib/skr/sku_tran.rb +111 -0
  151. data/lib/skr/sku_vendor.rb +26 -0
  152. data/lib/skr/so_line.rb +159 -0
  153. data/lib/skr/uom.rb +63 -0
  154. data/lib/skr/user_proxy.rb +60 -0
  155. data/lib/skr/validators/all.rb +2 -0
  156. data/lib/skr/validators/email.rb +17 -0
  157. data/lib/skr/validators/set.rb +18 -0
  158. data/lib/skr/vendor.rb +33 -0
  159. data/lib/skr/vo_line.rb +35 -0
  160. data/lib/skr/voucher.rb +119 -0
  161. data/lib/stockor/core.rb +9 -0
  162. data/stockor-core.gemspec +37 -0
  163. data/tasks/migrations.rake +23 -0
  164. data/tasks/publish.rake +8 -0
  165. data/test/address_test.rb +57 -0
  166. data/test/concerns/attr_with_default_test.rb +45 -0
  167. data/test/concerns/code_identifier_test.rb +46 -0
  168. data/test/concerns/export_associations_test.rb +7 -0
  169. data/test/concerns/export_methods_test.rb +31 -0
  170. data/test/concerns/export_scope_test.rb +16 -0
  171. data/test/concerns/exported_limits_test.rb +47 -0
  172. data/test/concerns/json_attribute_access_test.rb +27 -0
  173. data/test/concerns/pub_sub_test.rb +83 -0
  174. data/test/concerns/sanitize_json_test.rb +47 -0
  175. data/test/core/configuration_test.rb +24 -0
  176. data/test/core/numbers_test.rb +26 -0
  177. data/test/core/strings_test.rb +41 -0
  178. data/test/customer_test.rb +34 -0
  179. data/test/gl_account_test.rb +23 -0
  180. data/test/gl_manual_entry_test.rb +17 -0
  181. data/test/gl_period_test.rb +12 -0
  182. data/test/gl_posting_test.rb +39 -0
  183. data/test/gl_transaction_test.rb +58 -0
  184. data/test/ia_line_test.rb +68 -0
  185. data/test/ia_reason_test.rb +11 -0
  186. data/test/inv_line_test.rb +58 -0
  187. data/test/inventory_adjustment_test.rb +72 -0
  188. data/test/invoice_test.rb +63 -0
  189. data/test/location_test.rb +10 -0
  190. data/test/payment_term_test.rb +25 -0
  191. data/test/pick_ticket_test.rb +27 -0
  192. data/test/po_line_test.rb +36 -0
  193. data/test/po_receipt_test.rb +93 -0
  194. data/test/por_line_test.rb +79 -0
  195. data/test/pt_line_test.rb +29 -0
  196. data/test/purchase_order_test.rb +44 -0
  197. data/test/sales_order_test.rb +74 -0
  198. data/test/sku_loc_test.rb +50 -0
  199. data/test/sku_test.rb +45 -0
  200. data/test/sku_tran_test.rb +21 -0
  201. data/test/sku_vendor_test.rb +13 -0
  202. data/test/so_line_test.rb +89 -0
  203. data/test/test_helper.rb +1 -0
  204. data/test/uom_test.rb +14 -0
  205. data/test/vendor_test.rb +35 -0
  206. data/test/vo_line_test.rb +20 -0
  207. data/test/voucher_test.rb +35 -0
  208. data/yard_ext/all.rb +9 -0
  209. data/yard_ext/code_identifier_handler.rb +33 -0
  210. data/yard_ext/concern_meta_methods.rb +60 -0
  211. data/yard_ext/config_options.rb +27 -0
  212. data/yard_ext/exported_scope.rb +4 -0
  213. data/yard_ext/immutable_handler.rb +17 -0
  214. data/yard_ext/json_attr_accessor.rb +22 -0
  215. data/yard_ext/locked_fields_handler.rb +21 -0
  216. data/yard_ext/templates/default/layout/html/layout.erb +20 -0
  217. data/yard_ext/templates/default/method_details/html/github_link.erb +1 -0
  218. data/yard_ext/templates/default/method_details/setup.rb +3 -0
  219. data/yard_ext/validators.rb +1 -0
  220. data/yard_ext/visible_id_handler.rb +38 -0
  221. metadata +448 -0
@@ -0,0 +1,60 @@
1
+ -
2
+ code: CREDCARD
3
+ description: Payment due at time of sale with credit card
4
+ days: 0
5
+ discount_days: 0
6
+ discount_amount: 0
7
+ -
8
+ code: CHECK
9
+ description: Payment due at time of sale by check
10
+ days: 0
11
+ discount_days: 0
12
+ discount_amount: 0
13
+ -
14
+ code: CASH
15
+ description: Payment due at time of sale with cash
16
+ days: 0
17
+ discount_days: 0
18
+ discount_amount: 0
19
+ -
20
+ code: NET10
21
+ description: Payment due in 10 days, no discount for early payment
22
+ days: 10
23
+ discount_days: 0
24
+ discount_amount: 0
25
+
26
+ -
27
+ code: NET15
28
+ description: Payment due in 15 days, no discount for early payment
29
+ days: 15
30
+ discount_days: 0
31
+ discount_amount: 0
32
+
33
+ -
34
+ code: NET30
35
+ description: Payment due in 30 days, no discount for early payment
36
+ days: 30
37
+ discount_days: 0
38
+ discount_amount: 0
39
+
40
+ -
41
+ code: NET45
42
+ description: Payment due in 45 days, no discount for early payment
43
+ days: 45
44
+ discount_days: 0
45
+ discount_amount: 0
46
+
47
+ -
48
+ code: NET60
49
+ description: Payment due in 60 days, no discount for early payment
50
+ days: 60
51
+ discount_days: 0
52
+ discount_amount: 0
53
+
54
+ -
55
+ code: 2P10NET30
56
+ description: Payment due in 30 days, 2 % discount if payed with 10 days
57
+ days: 30
58
+ discount_days: 10
59
+ discount_amount: 2
60
+
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ module Skr::Core
4
+
5
+ class << self
6
+ def logger
7
+ @logger ||= (
8
+ if defined?(::Rails)
9
+ Rails.logger
10
+ else
11
+ Logger.new(STDERR)
12
+ end
13
+ )
14
+ end
15
+
16
+ def logger=( logger )
17
+ @logger = logger
18
+ end
19
+
20
+ def silence_logs( &block )
21
+ old_logger = Skr::Core.logger
22
+ begin
23
+ Skr::Core.logger=Logger.new( StringIO.new )
24
+ yield
25
+ ensure
26
+ Skr::Core.logger=old_logger
27
+ end
28
+ end
29
+
30
+ def logger_debug( output )
31
+ logger.debug '⚡ '*40
32
+ logger.debug '⚡ ' + output
33
+ logger.debug '⚡ '*40
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,71 @@
1
+ # * Utility methods that manipulate Numbers
2
+
3
+ module Skr::Core::Numbers extend self
4
+ # Document the responsibility of the class
5
+ #
6
+ # == Heading
7
+ #
8
+ # Use headings to break up descriptions
9
+ #
10
+ # == Formatting
11
+ #
12
+ # Embody +parameters+ or +options+ in Teletype Text tags. You can also use
13
+ # *bold* or *italics* but must use HTML tags for <b>multiple words</b>,
14
+ # <i>like this</i> and <tt>like this</tt>.
15
+ # - See more at: http://blog.firsthand.ca/2010/09/ruby-rdoc-example.html#sthash.q9Jkcjrl.dpuf
16
+
17
+
18
+ # ### PercNum
19
+ #
20
+ #
21
+ # A "percnum" is a Stockor invention *(or abomination, depending on your POV)*.
22
+ # It's a string that contains a number and an optional percent sign.
23
+ # If the percent sign is present, the number is treated as a percentage.
24
+ # If desired the user may also input negative numbers which will invert the sense of the method.
25
+ #
26
+ # It's intended to be a user-friendly method to provide one input box for "discount" or "surcharge",
27
+ # and allow the user to input either a flat amount such as 4.50, or a percentage like 20%
28
+ #
29
+ class PercNum
30
+ # @param perc_or_num [BigDecimal,String, Integer] any value that BigDecimal will accept
31
+ def initialize( perc_or_num )
32
+ @is_perc = !! perc_or_num.to_s.match( /\%\s*$/ )
33
+ @right_side = BigDecimal.new( perc_or_num, 5 )
34
+ if is_percentage?
35
+ @right_side *= 0.01
36
+ end
37
+ end
38
+
39
+ # Adds the PercNum to the specified amount.
40
+ # @param amount[BigDecimal] the amount that should be added to the PercNum
41
+ # @return [BigDecimal] The result of either adding (non percent) or multiplying by (percent) the amount
42
+ # @example
43
+ # PercNum.new( '23.42' ).credit_to( 33 ).to_s #=> '56.42'
44
+ # PercNum.new( '25%' ).credit_to( 100 ).to_s #=> '125.0'
45
+ def credit_to( amount )
46
+ is_percentage? ? ( 1 + @right_side ) * amount : amount += @right_side
47
+ end
48
+
49
+ # Subtracts the PercNum to the specified amount.
50
+ # @param amount[BigDecimal] the amount that should be added to the PercNum
51
+ # @return [BigDecimal] The result of either adding (non percent) or multiplying by (percent) the amount
52
+ # @example
53
+ # PercNum.new( '23.42' ).debit_from( 42.42 ).to_s #=> '19.00'
54
+ # PercNum.new( '25%' ).debit_from( 100 ).to_s #=> '75.0'
55
+ def debit_from( amount )
56
+ is_percentage? ? ( 1 - @right_side ) * amount : amount -= @right_side
57
+ end
58
+
59
+ ## If PercNum was initialized with a blank string
60
+ def present?
61
+ ! @right_side.zero?
62
+ end
63
+
64
+ # Is the PercNum percentage based or absolute
65
+ def is_percentage?
66
+ @is_perc
67
+ end
68
+ end
69
+
70
+
71
+ end
@@ -0,0 +1,5 @@
1
+ module Skr::Core
2
+ class RailsEngine < Rails::Engine
3
+ config.autoload_paths += Dir["#{config.root}/lib/**/"]
4
+ end
5
+ end
@@ -0,0 +1,15 @@
1
+ module Skr
2
+ module Core
3
+
4
+ class StandardPricingProvider
5
+
6
+ # The default implementation returns the price for the given UOM
7
+ # Custom implementations will return from a pricing library
8
+ # @return [BigDecimal] the "standard" price for the SKU
9
+ def self.price( sku_loc: nil, customer: nil, uom: nil, qty: 1 )
10
+ sku_loc.sku.uoms.with_code( uom.code ).price
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,57 @@
1
+ module Skr
2
+ module Core
3
+ module Strings
4
+
5
+ # list of characters that should not be used
6
+ BAD_RAND_CHARS = %w{ B 8 o O 0 i l I 1 }
7
+
8
+ # characters that should be randomly chosen from
9
+ RAND_CHARS = ( ('A'..'Z').to_a + ('a'..'z').to_a + ('0'..'9').to_a ) - BAD_RAND_CHARS
10
+
11
+ # Generates a random string without using commonly confused numbers and letters.
12
+ # It's intended for use in situations where the code will have to be
13
+ # read and re-entered later.
14
+ #
15
+ # The characters in BAD_RAND_CHARS are avoided since they can be confused with one another:
16
+ # @return [String] a random string <length> characters long.
17
+ def self.random( length = 12 )
18
+ 1.upto(length).each_with_object(''){|i,s| s << RAND_CHARS[ rand(RAND_CHARS.length) ] }
19
+ end
20
+
21
+ # Attempts to shorten a string while keeping it somewhat
22
+ # like it's original self.
23
+ # Useful for suggesting a code for a given entity name.
24
+ # @param string [String] the string to shorten.
25
+ # @param length [Integer] how long the returned code should be
26
+ # @param padding [String] What to pad the code with if it is shorter than length. False indicates no padding should be performed
27
+ # @return [String] a shortened version of the name with:
28
+ # * Upper cased
29
+ # * Spaces stripped
30
+ # * Made up of a proportional number of chars from each word
31
+ # #### Examples:
32
+ # Skr::Core::Strings.to_code_identifier('General Acme Corp') #=> 'GENACMCORP'
33
+ # Skr::Core::Strings.code_identifier('General I B', padding:false) #=> 'GENERALIB' *(no trailing X)*
34
+ # Skr::Core::Strings.to_code_identifier('Top Cat', maxlen: 5 ) #=> 'TOCAT'
35
+ def self.code_identifier( string, length:10, padding: 'X' )
36
+ stripped = string.gsub(/\W/, '').upcase
37
+ if stripped.length < length
38
+ return padding.present? ? stripped.ljust( length, padding ) : stripped
39
+ end
40
+ result = ''
41
+ words = string.gsub(/[^\w\s-]/,'').split(/\s+|-|_/)
42
+ 0.upto(words.length + 1).each_with_index do | attempt_num |
43
+ remainder = length
44
+ result = ''
45
+ string = words.each_with_index do | word, index |
46
+ chars = ( remainder / (words.length-index) + attempt_num )
47
+ result << word[0...chars]
48
+ remainder = length - result.length
49
+ end
50
+ break if result.length >= length
51
+ end
52
+ result[0...length].upcase
53
+ end
54
+
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,11 @@
1
+ require 'pathname'
2
+
3
+ module Skr
4
+ module Core
5
+ module Testing
6
+ def self.fixtures_path
7
+ Pathname.new(__FILE__).dirname.join('testing/fixtures')
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,44 @@
1
+ module MiniTest
2
+ module Assertions
3
+
4
+ def assert_logs_matching( regex, failure_message=nil, &block )
5
+ old_logger = Skr::Core.logger
6
+ begin
7
+ output = ""
8
+ Skr::Core.logger=Logger.new( StringIO.new(output) )
9
+ yield
10
+ assert_match( regex, output, failure_message )
11
+ ensure
12
+ Skr::Core.logger=old_logger
13
+ end
14
+ end
15
+
16
+
17
+ def assert_saves( model )
18
+ assert model.save, "#{model.class} failed to save: #{model.errors.full_messages.join(',')}"
19
+ end
20
+ def refute_saves( model, *errors )
21
+ refute model.save, "#{model.class} saved successfully when it should not have"
22
+ errors.each do |error|
23
+ if model.errors[error.to_sym].empty?
24
+ raise MiniTest::Assertion, "expected #{model.class} to have an error on #{error}"
25
+ end
26
+ end
27
+
28
+ end
29
+
30
+
31
+ def assert_event_fires( klass, event, &block )
32
+ @event_results = []
33
+ klass.observe(event) do | *args |
34
+ @event_results = args
35
+ end
36
+ yield
37
+ raise MiniTest::Assertion, "Event #{event} was not fired" if @event_results.empty?
38
+ end
39
+
40
+ def last_event_results
41
+ @event_results
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,25 @@
1
+ module FixtureHelpers
2
+
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ alias_method_chain :table_rows, :custom_autoset_fields
7
+ end
8
+
9
+ def table_rows_with_custom_autoset_fields
10
+ results = table_rows_without_custom_autoset_fields
11
+ if model_class
12
+ results[ table_name ].each do | row |
13
+ row['visible_id'] = Skr::SequentialId.next_for( model_class ) if model_class.column_names.include?('visible_id')
14
+ row['hash_code' ] = Skr::Core::Strings.random if model_class.column_names.include?('hash_code')
15
+ row['created_at'] = Time.now if model_class.column_names.include?('created_at')
16
+ row['updated_at'] = Time.now if model_class.column_names.include?('updated_at')
17
+ row['created_by_id'] = 593363170 if model_class.column_names.include?('created_by_id')
18
+ row['updated_by_id'] = 593363170 if model_class.column_names.include?('updated_by_id')
19
+ end
20
+ end
21
+ results
22
+ end
23
+ end
24
+
25
+ ActiveRecord::FixtureSet.send :include, FixtureHelpers
@@ -0,0 +1,53 @@
1
+
2
+
3
+ office:
4
+ name: Argosity Office
5
+ line1: 619 E Capitol Ave
6
+ city: Jefferson City
7
+ state: Missouri
8
+ postal_code: 65101
9
+
10
+ junk:
11
+ name: Junk Spot
12
+ line1: 623 E Capitol Ave
13
+ city: Jefferson City
14
+ state: Missouri
15
+ postal_code: 65101
16
+
17
+ amazon:
18
+ name: Amazon, Inc.
19
+ line1: 1200 12th Ave. South, Ste. 1200
20
+ city: Seattle
21
+ state: WA
22
+ postal_code: 98144
23
+
24
+ away:
25
+ name: Away
26
+ line1: 12727 Southview Dr
27
+ city: Holts Summit
28
+ state: Missouri
29
+ postal_code: 65043
30
+
31
+ bigco:
32
+ name: Big Co
33
+ email: orders@bgigco.biz
34
+ line1: 23 Wall Street
35
+ city: Manhattan
36
+ state: New York
37
+ postal_code: 10005
38
+
39
+ bigco_wh:
40
+ name: Big Co WH
41
+ line1: Industrial Drive
42
+ city: Manhattan
43
+ state: New York
44
+ postal_code: 10005
45
+
46
+ joe:
47
+ name: Joe Man
48
+ line1: joe
49
+ city: Freeburg
50
+ state: Missouri
51
+ postal_code: 12344
52
+
53
+
@@ -0,0 +1,43 @@
1
+
2
+
3
+ argosity:
4
+ code: ARGOSITY
5
+ terms: net30
6
+ name: Argosity
7
+ shipping_address: office
8
+ billing_address: away
9
+ gl_receivables_account: ar
10
+ open_balance: 13.88
11
+
12
+ web_customer:
13
+ code: WEB
14
+ terms: cred_card
15
+ name: Website Customer
16
+ shipping_address: office
17
+ billing_address: away
18
+ gl_receivables_account: ar
19
+
20
+ antonio:
21
+ code: KILLER
22
+ terms: cash
23
+ name: Antonio Montoya
24
+ shipping_address: office
25
+ billing_address: away
26
+ gl_receivables_account: ar
27
+
28
+
29
+ joe:
30
+ code: JOE
31
+ terms: 10net30
32
+ name: Joe Man
33
+ shipping_address: joe
34
+ billing_address: joe
35
+ gl_receivables_account: ar
36
+
37
+ bigco:
38
+ code: BIGCO
39
+ terms: 10net30
40
+ name: Big Company
41
+ shipping_address: bigco
42
+ billing_address: bigco
43
+ gl_receivables_account: ar
@@ -0,0 +1,86 @@
1
+
2
+ cash:
3
+ number: 1010
4
+ name: Cash
5
+ description: Checking account balance (as shown in company records), currency, coins, checks received from customers but not yet deposited.
6
+
7
+ bank_checking:
8
+ number: 1011
9
+ name: Cash
10
+ description: Checking account balance (as shown in company records), currency, coins, checks received from customers but not yet deposited.
11
+
12
+ inventory:
13
+ number: 1100
14
+ name: Inventory Assets
15
+ description: Inventory on hand and awaiting sale
16
+
17
+ transfers:
18
+ number: 1115
19
+ name: Inventory in Transist
20
+ description: Inventory on a transfer between locations
21
+
22
+ deposits:
23
+ number: 1200
24
+ name: Deposits
25
+ description: Deposit holding account
26
+
27
+ inv_recpt:
28
+ number: 2600
29
+ name: Accounts Receivable Clearing
30
+ description: Inventory Receipts clearing
31
+
32
+ ar:
33
+ number: 1220
34
+ name: Accounts Receivable
35
+ description: Amounts owed to the company for services performed or products sold but not yet paid for.
36
+
37
+ tax:
38
+ number: 2250
39
+ name: Sales Tax Recv
40
+ description: Tax collected
41
+
42
+ ap:
43
+ number: 2200
44
+ name: Accounts Payable
45
+ description: Amounts owed to the outside vendors for services performed or products received but not yet paid for.
46
+
47
+ retained_earnings:
48
+ number: 3100
49
+ name: Retained Earnings
50
+ description: Stockholders equity (Common Stock, Retained Earnings)
51
+
52
+ sales:
53
+ number: 4000
54
+ name: Sales
55
+ description: Amounts earned from selling physical goods. When a sale is provided on credit, both this account and Accounts Receivable will increase. When a service is provided for immediate cash, both this account and Cash will increase.
56
+
57
+ marketing:
58
+ number: 6100
59
+ name: Marketing
60
+ description: Marketing Expenses
61
+
62
+ inventory_write_off:
63
+ number: 6800
64
+ name: Inv Write Off
65
+ description: Cost of inventory written off
66
+
67
+
68
+ inventory_purchase:
69
+ number: 5000
70
+ name: Merchandise Inventory Purchases
71
+ description: Expenses incurred purchasing items for resale
72
+
73
+ rent:
74
+ number: 6600
75
+ name: Rent Expense
76
+ description: Cost of occupying rented facilities during the accounting period.
77
+
78
+ shipping:
79
+ number: 6410
80
+ name: Outbound Shipping Expense
81
+ description: Cost of shipping products to customers
82
+
83
+ inbound_shipping:
84
+ number: 6420
85
+ name: Inbound Shipping Expense
86
+ description: Cost of vendors shipping products to us