melissa 0.0.3 → 0.0.4

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: 38aa1440526f55f5a85a72c7f8474cffeedc34f9
4
- data.tar.gz: 8f618410d0d128f51273b1b7f8a7e19d3070698b
3
+ metadata.gz: 34019bdcbd74fc8feffc090d650101e0738d358b
4
+ data.tar.gz: 761cb5a73bd180990f56a0fd0459808bee145b6c
5
5
  SHA512:
6
- metadata.gz: a9437c18332658936df21a8c11ca0a05e1d92ce49c4cc928fbfabf6eb76d98f97318eb36dab36718524e71717643fcedba6ad2146179ac60081677e203a35eb1
7
- data.tar.gz: 9b6b1801c36d49882e1e481715c59167f7ab50501674ea5af1285e985d9cb791ab0fd5c5999707326b31050727da02d9efa7031d925151500dc8e4eb71dfdd0d
6
+ metadata.gz: 11e3f93a13848c6721fe3261a1b6325105f0accf2db16f449ae490539b57b5edb474f23749d27b1a81a190220f94938cf453faf9d3ee5d993cedef138c428262
7
+ data.tar.gz: 00d2666f21c15258ba0d7aff106a4a03ca06d99b9b188470480e44c15e20b3fd521d1770ea876921d4acbc9a2d09fde90e9d2536e1ea224e21dadc06bad7ddbe
@@ -1,10 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- melissa (0.0.3)
4
+ melissa (0.0.4)
5
5
  activesupport
6
6
  ffi
7
7
  minitest
8
+ thread_safe
8
9
 
9
10
  GEM
10
11
  remote: https://rubygems.org/
@@ -52,6 +52,13 @@ module Melissa
52
52
  @@good_codes = ['AS01', 'AS02']
53
53
  @@bad_codes = ['AC02', 'AC03']
54
54
 
55
+ @@callbacks = ThreadSafe::Array.new
56
+
57
+ # Allow callbacks to intercept response and perform whatever misc stuff (hint: victim_statements)
58
+ def self.add_callback(&callback)
59
+ @@callbacks << callback
60
+ end
61
+
55
62
  def delivery_point
56
63
  "#{zip}#{plus4}#{delivery_point_code}"
57
64
  end
@@ -115,6 +115,9 @@ module Melissa
115
115
  @resultcodes = mdAddrGetResults(h_addr_lib).split(',')
116
116
  fill_attributes(h_addr_lib)
117
117
  end
118
+ @@callbacks.each do |callback|
119
+ callback.call
120
+ end
118
121
  end
119
122
 
120
123
  def valid?
@@ -39,6 +39,13 @@ module Melissa
39
39
  #@@bad_codes = ['GE01', 'GE02']
40
40
  @@fatal_codes = ['GE03', 'GE04', 'GE05']
41
41
 
42
+ @@callbacks = ThreadSafe::Array.new
43
+
44
+ # Allow callbacks to intercept response and perform whatever misc stuff (hint: victim_statements)
45
+ def self.add_callback(&callback)
46
+ @@callbacks << callback
47
+ end
48
+
42
49
  def valid?
43
50
  # Make sure there is at least 1 good code
44
51
  @is_valid
@@ -129,6 +129,10 @@ module Melissa
129
129
  end
130
130
  end
131
131
  end
132
+
133
+ @@callbacks.each do |callback|
134
+ callback.call
135
+ end
132
136
  end
133
137
  end
134
138
  end
@@ -1,3 +1,3 @@
1
1
  module Melissa
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
@@ -18,4 +18,5 @@ Gem::Specification.new do |gem|
18
18
  gem.add_dependency 'activesupport' # added to support underscore method.
19
19
  gem.add_dependency 'minitest' # added as a dependency of activesupport and for testing.
20
20
  gem.add_dependency 'ffi' #used for converting c libraries to ruby
21
+ gem.add_dependency 'thread_safe' # added to support callbacks
21
22
  end
@@ -2,15 +2,14 @@ require 'test_helper'
2
2
 
3
3
  class AddrObjTest < Minitest::Test
4
4
  describe Melissa::AddrObj do
5
-
6
- describe "live mode" do
5
+ describe 'live mode' do
7
6
  before do
8
7
  Melissa.config.mode = :live
9
8
  end
10
9
 
11
- describe "valid?" do
10
+ describe 'valid?' do
12
11
  it 'handles valid data' do
13
- skip "Not run, Melissa library not loaded" unless Melissa::AddrObjLive.lib_loaded?
12
+ skip 'Not run, Melissa library not loaded' unless Melissa::AddrObjLive.lib_loaded?
14
13
  valid_address = Melissa.addr_obj(
15
14
  address: '2517 Surfwood Dr',
16
15
  city: 'Las Vegas',
@@ -26,7 +25,7 @@ class AddrObjTest < Minitest::Test
26
25
  end
27
26
 
28
27
  it 'flags invalid data' do
29
- skip "Not run, Melissa library not loaded" unless Melissa::AddrObjLive.lib_loaded?
28
+ skip 'Not run, Melissa library not loaded' unless Melissa::AddrObjLive.lib_loaded?
30
29
  # Zip points to Schenectady, NY
31
30
  invalid_address = Melissa.addr_obj(
32
31
  address: '123 Who Dr',
@@ -38,9 +37,9 @@ class AddrObjTest < Minitest::Test
38
37
  end
39
38
  end
40
39
 
41
- describe "delivery_point" do
40
+ describe 'delivery_point' do
42
41
  it 'sets delivery point for valid data' do
43
- skip "Not run, Melissa library not loaded" unless Melissa::AddrObjLive.lib_loaded?
42
+ skip 'Not run, Melissa library not loaded' unless Melissa::AddrObjLive.lib_loaded?
44
43
  valid_address = Melissa.addr_obj(
45
44
  address: '2517 Surfwood Dr',
46
45
  city: 'Las Vegas',
@@ -53,7 +52,7 @@ class AddrObjTest < Minitest::Test
53
52
 
54
53
  describe 'number of days till licence expires' do
55
54
  it 'checks if we have more than 30 days till license expiration date' do
56
- skip "Not run, Melissa library not loaded" unless Melissa::AddrObjLive.lib_loaded?
55
+ skip 'Not run, Melissa library not loaded' unless Melissa::AddrObjLive.lib_loaded?
57
56
  valid_address = Melissa.addr_obj(
58
57
  :address => '2517 Surfwood Dr',
59
58
  :city => 'Las Vegas',
@@ -63,13 +62,32 @@ class AddrObjTest < Minitest::Test
63
62
  assert_operator 30, :<, valid_address.class.days_until_license_expiration
64
63
  end
65
64
  end
65
+
66
+ describe 'callback' do
67
+ it 'executes added callback' do
68
+ skip 'Not run, Melissa library not loaded' unless Melissa::AddrObjLive.lib_loaded?
69
+ callback_flag = false
70
+ Melissa::AddrObj.add_callback do
71
+ callback_flag = true
72
+ end
73
+
74
+ valid_address = Melissa.addr_obj(
75
+ address: '2517 Surfwood Dr',
76
+ city: 'Las Vegas',
77
+ state: 'NV',
78
+ zip: '89128'
79
+ )
80
+
81
+ assert callback_flag
82
+ end
83
+ end
66
84
  end
67
85
 
68
- describe "mock mode" do
86
+ describe 'mock mode' do
69
87
  before do
70
88
  Melissa.config.mode = :mock
71
89
  end
72
- describe "valid?" do
90
+ describe 'valid?' do
73
91
  it 'handles valid data' do
74
92
  valid_address = Melissa.addr_obj(
75
93
  address: '9802 Brompton Dr',
@@ -95,7 +113,7 @@ class AddrObjTest < Minitest::Test
95
113
  end
96
114
  end
97
115
 
98
- describe "delivery_point" do
116
+ describe 'delivery_point' do
99
117
  it 'sets delivery point for valid data' do
100
118
  valid_address = Melissa.addr_obj(
101
119
  address: '9802 Brompton Dr',
@@ -106,6 +124,24 @@ class AddrObjTest < Minitest::Test
106
124
  assert_equal '33626123426', valid_address.delivery_point
107
125
  end
108
126
  end
127
+
128
+ describe 'callback' do
129
+ it 'does not execute added callback' do
130
+ callback_flag = false
131
+ Melissa::AddrObj.add_callback do
132
+ callback_flag = true
133
+ end
134
+
135
+ valid_address = Melissa.addr_obj(
136
+ address: '2517 Surfwood Dr',
137
+ city: 'Las Vegas',
138
+ state: 'NV',
139
+ zip: '89128'
140
+ )
141
+
142
+ assert !callback_flag
143
+ end
144
+ end
109
145
  end
110
146
  end
111
147
  end
@@ -2,55 +2,101 @@
2
2
  require 'test_helper'
3
3
 
4
4
  class GeoPointTest < Minitest::Test
5
-
6
5
  describe Melissa::GeoPoint do
7
- before do
8
- Melissa.config.mode = :live
9
- end
6
+ describe 'live mode' do
7
+ before do
8
+ Melissa.config.mode = :live
9
+ end
10
10
 
11
- describe 'valid?' do
12
- it 'creates valid GeoPoint object from valid Address Object' do
13
- skip "Not run, Melissa library not loaded" unless Melissa::GeoPointLive.lib_loaded?
14
- valid_addr_obj = Melissa.addr_obj(
11
+ describe 'valid?' do
12
+ it 'creates valid GeoPoint object from valid Address Object' do
13
+ skip 'Not run, Melissa library not loaded' unless Melissa::GeoPointLive.lib_loaded?
14
+ valid_addr_obj = Melissa.addr_obj(
15
15
  address: '2517 SURFWOOD DR',
16
- city: 'LAS VEGAS',
17
- state: 'NV',
18
- zip: '89128'
19
- )
20
- geo_point_obj = Melissa.geo_point(valid_addr_obj)
21
- assert geo_point_obj.valid?
22
- assert_includes 36.2..36.3, geo_point_obj.latitude
23
- assert_includes -115.3..-115.2, geo_point_obj.longitude
24
- offset = Time.now.in_time_zone('US/Pacific').dst? ? 420 : 480
25
- assert_equal offset, geo_point_obj.time_zone_offset(valid_addr_obj.state)
26
- end
27
- it 'creates valid GeoPoint object from the Hash' do
28
- skip "Not run, Melissa library not loaded" unless Melissa::GeoPointLive.lib_loaded?
29
- geo_point_obj= Melissa.geo_point(
30
- zip: '89128',
31
- plus4: '7182',
16
+ city: 'LAS VEGAS',
17
+ state: 'NV',
18
+ zip: '89128'
19
+ )
20
+ geo_point_obj = Melissa.geo_point(valid_addr_obj)
21
+ assert geo_point_obj.valid?
22
+ assert_includes 36.2..36.3, geo_point_obj.latitude
23
+ assert_includes -115.3..-115.2, geo_point_obj.longitude
24
+ offset = Time.now.in_time_zone('US/Pacific').dst? ? 420 : 480
25
+ assert_equal offset, geo_point_obj.time_zone_offset(valid_addr_obj.state)
26
+ end
27
+ it 'creates valid GeoPoint object from the Hash' do
28
+ skip 'Not run, Melissa library not loaded' unless Melissa::GeoPointLive.lib_loaded?
29
+ geo_point_obj= Melissa.geo_point(
30
+ zip: '89128',
31
+ plus4: '7182',
32
32
  delivery_point_code: '17'
33
- )
33
+ )
34
34
 
35
- assert geo_point_obj.valid?
36
- assert_includes 36.2..36.3, geo_point_obj.latitude
37
- assert_includes -115.3..-115.2, geo_point_obj.longitude
38
- offset = Time.now.in_time_zone('US/Pacific').dst? ? 420 : 480
39
- assert_equal offset, geo_point_obj.time_zone_offset
35
+ assert geo_point_obj.valid?
36
+ assert_includes 36.2..36.3, geo_point_obj.latitude
37
+ assert_includes -115.3..-115.2, geo_point_obj.longitude
38
+ offset = Time.now.in_time_zone('US/Pacific').dst? ? 420 : 480
39
+ assert_equal offset, geo_point_obj.time_zone_offset
40
+ end
40
41
  end
41
- end
42
42
 
43
- describe 'number of days till licence expires' do
44
- it 'checks if we have more than 30 days till license expiration date' do
45
- skip "Not run, Melissa library not loaded" unless Melissa::GeoPointLive.lib_loaded?
46
- valid_addr_obj = Melissa.addr_obj(
43
+ describe 'number of days till licence expires' do
44
+ it 'checks if we have more than 30 days till license expiration date' do
45
+ skip 'Not run, Melissa library not loaded' unless Melissa::GeoPointLive.lib_loaded?
46
+ valid_addr_obj = Melissa.addr_obj(
47
+ address: '2517 SURFWOOD DR',
48
+ city: 'LAS VEGAS',
49
+ state: 'NV',
50
+ zip: '89128'
51
+ )
52
+ geo_point = Melissa.geo_point(valid_addr_obj)
53
+ assert_operator 30, :<, geo_point.class.days_until_license_expiration
54
+ end
55
+ end
56
+
57
+ describe 'callback' do
58
+ it 'executes added callback' do
59
+ skip 'Not run, Melissa library not loaded' unless Melissa::GeoPointLive.lib_loaded?
60
+ callback_flag = false
61
+ Melissa::GeoPoint.add_callback do
62
+ callback_flag = true
63
+ end
64
+
65
+ valid_addr_obj = Melissa.addr_obj(
47
66
  address: '2517 SURFWOOD DR',
48
- city: 'LAS VEGAS',
49
- state: 'NV',
50
- zip: '89128'
51
- )
52
- geo_point = Melissa.geo_point(valid_addr_obj)
53
- assert_operator 30, :<, geo_point.class.days_until_license_expiration
67
+ city: 'LAS VEGAS',
68
+ state: 'NV',
69
+ zip: '89128'
70
+ )
71
+ Melissa.geo_point(valid_addr_obj)
72
+
73
+ assert callback_flag
74
+ end
75
+ end
76
+ end
77
+
78
+ describe 'mock mode' do
79
+ before do
80
+ Melissa.config.mode = :mock
81
+ end
82
+
83
+ describe 'callback' do
84
+ it 'does not execute added callback' do
85
+ callback_flag = false
86
+ Melissa::AddrObj.add_callback do
87
+ callback_flag = true
88
+ end
89
+
90
+ valid_addr_obj = Melissa.addr_obj(
91
+ address: '2517 Surfwood Dr',
92
+ city: 'Las Vegas',
93
+ state: 'NV',
94
+ zip: '89128'
95
+ )
96
+ Melissa.geo_point(valid_addr_obj)
97
+
98
+ assert !callback_flag
99
+ end
54
100
  end
55
101
  end
56
102
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: melissa
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brad Pardee
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-05-13 00:00:00.000000000 Z
12
+ date: 2015-09-21 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -53,6 +53,20 @@ dependencies:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
55
  version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: thread_safe
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
56
70
  description: Configurable interface to Melissa Data Address and GeoPoint objects
57
71
  email:
58
72
  - bradpardee@gmail.com