nostos-source-illiad 0.0.1
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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +32 -0
- data/Rakefile +2 -0
- data/lib/illiad/transaction.rb +11 -0
- data/lib/nostos-source-illiad.rb +56 -0
- data/lib/nostos-source-illiad/config.rb +7 -0
- data/lib/nostos-source-illiad/railtie.rb +21 -0
- data/lib/nostos-source-illiad/record.rb +34 -0
- data/lib/nostos-source-illiad/version.rb +5 -0
- data/nostos-source-illiad.gemspec +22 -0
- metadata +75 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# Nostos Source Driver: Illiad
|
2
|
+
|
3
|
+
This is an Illiad source driver for Nostos.
|
4
|
+
|
5
|
+
See [Nostos](https://github.com/bricestacey/nostos) for more information.
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add the following to your Gemfile and run `bundle install`
|
10
|
+
|
11
|
+
gem 'nostos-source-illiad'
|
12
|
+
|
13
|
+
## Configuration
|
14
|
+
|
15
|
+
In `config/application.rb` add the following options:
|
16
|
+
|
17
|
+
config.source_illiad.number_of_days_to_poll = 2
|
18
|
+
config.source_illiad.db = {
|
19
|
+
:dataserver => '',
|
20
|
+
:adapter => 'sqlserver',
|
21
|
+
:host => '',
|
22
|
+
:dsn => '',
|
23
|
+
:username => '',
|
24
|
+
:password => '',
|
25
|
+
:database => ''
|
26
|
+
}
|
27
|
+
|
28
|
+
`dataserver` is the name for your server as defined in freetds.conf. `number_of_days_to_poll` is how many days you want to poll into the past. This number must be greater than how often you run Nostos in order to stay synchronized. I recommend polling 2-3 days in the past at most.
|
29
|
+
|
30
|
+
# Author
|
31
|
+
|
32
|
+
Nostos was written by [Brice Stacey](https://github.com/bricestacey)
|
data/Rakefile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# Extend Illiad::Transaction to map to a Source::Illiad object.
|
2
|
+
module Illiad
|
3
|
+
class Transaction
|
4
|
+
def to_record
|
5
|
+
Source::Illiad::Record.new(:id => read_attribute(:TransactionNumber),
|
6
|
+
:title => read_attribute(:LoanTitle),
|
7
|
+
:due_date => read_attribute(:DueDate),
|
8
|
+
:charged => charged?)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# Source::Illiad, Nostos Source Driver for Illiad
|
2
|
+
|
3
|
+
require 'nostos-source-illiad/railtie.rb'
|
4
|
+
require 'nostos-source-illiad/config.rb'
|
5
|
+
require 'nostos-source-illiad/record.rb'
|
6
|
+
require 'illiad/transaction.rb'
|
7
|
+
require 'activerecord-illiad-adapter'
|
8
|
+
|
9
|
+
|
10
|
+
# activerecord-illiad-adapter is named Illiad, so we must rename it to avoid
|
11
|
+
# naming conflict.
|
12
|
+
IlliadAR = Illiad
|
13
|
+
|
14
|
+
module Source
|
15
|
+
module Illiad
|
16
|
+
def self.config
|
17
|
+
@@config ||= Source::Illiad::Config.new
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.configure
|
21
|
+
yield self.config
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.find(id)
|
25
|
+
IlliadAR::Transaction.find(id).to_record
|
26
|
+
end
|
27
|
+
|
28
|
+
# Poll Illiad for new transactions to process. The strategy is to find
|
29
|
+
# all transactions that have had the status Customer Notified Via E-Mail
|
30
|
+
# within the past `number_of_days_old_transactions` days. We must join
|
31
|
+
# the Tracking table because a transaction theoretically could go from
|
32
|
+
# `Customer Notified Via E-Mail` to another status quicker than our
|
33
|
+
# processing runs.
|
34
|
+
def self.poll
|
35
|
+
# SQL to identify records as old as 60 days
|
36
|
+
sql = <<-SQL
|
37
|
+
SELECT
|
38
|
+
Tracking.TransactionNumber
|
39
|
+
, Username
|
40
|
+
, LoanTitle
|
41
|
+
, LoanAuthor
|
42
|
+
, DueDate
|
43
|
+
, TransactionStatus
|
44
|
+
FROM
|
45
|
+
Tracking
|
46
|
+
INNER JOIN Transactions ON Tracking.TransactionNumber = Transactions.TransactionNumber
|
47
|
+
WHERE
|
48
|
+
Tracking.ChangedTo = 'Customer Notified Via E-Mail' AND
|
49
|
+
Tracking.DateTime > CURRENT_TIMESTAMP - #{config.number_of_days_to_poll} AND
|
50
|
+
Transactions.RequestType = 'Loan'
|
51
|
+
SQL
|
52
|
+
|
53
|
+
IlliadAR::Transaction.find_by_sql(sql).map {|t| t.to_record}
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rails'
|
2
|
+
require 'activerecord-illiad-adapter'
|
3
|
+
|
4
|
+
module Source
|
5
|
+
module Illiad
|
6
|
+
class Railtie < Rails::Railtie
|
7
|
+
config.source_illiad = ActiveSupport::OrderedOptions.new
|
8
|
+
|
9
|
+
initializer "source_illiad.configure" do |app|
|
10
|
+
Source::Illiad.configure do |config|
|
11
|
+
config.number_of_days_to_poll = app.config.source_illiad[:number_of_days_to_poll]
|
12
|
+
config.db = app.config.source_illiad[:db]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
initializer "source_illiad.establish_connection", :after => "source_illiad.configure" do |app|
|
17
|
+
IlliadAR::Base.establish_connection(Source::Illiad.config.db)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module Source
|
2
|
+
module Illiad
|
3
|
+
class Record
|
4
|
+
|
5
|
+
def initialize(attributes = {})
|
6
|
+
@id = attributes[:id]
|
7
|
+
@title = attributes[:title]
|
8
|
+
@charged = attributes[:charged]
|
9
|
+
@due_date = attributes[:due_date]
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :id, :title, :due_date
|
13
|
+
|
14
|
+
def charged?(force = false)
|
15
|
+
if force then
|
16
|
+
t = IlliadAR::Transaction.find(@id)
|
17
|
+
@due_date = t.due_date
|
18
|
+
@charged = t.charged?
|
19
|
+
end
|
20
|
+
|
21
|
+
@charged
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
attr_reader :charged
|
27
|
+
attr_writer :id, :title, :due_date, :charged
|
28
|
+
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "nostos-source-illiad/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "nostos-source-illiad"
|
7
|
+
s.version = Source::Illiad::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Brice Stacey"]
|
10
|
+
s.email = ["bricestacey@gmail.com"]
|
11
|
+
s.homepage = "https://github.com/bricestacey/nostos-source-illiad"
|
12
|
+
s.summary = %q{Nostos Source Driver for Illiad}
|
13
|
+
s.description = %q{Nostos Source Driver for Illiad}
|
14
|
+
|
15
|
+
s.rubyforge_project = "nostos-source-illiad"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
s.add_dependency('activerecord-illiad-adapter')
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nostos-source-illiad
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Brice Stacey
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-04-12 00:00:00 Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: activerecord-illiad-adapter
|
17
|
+
prerelease: false
|
18
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
19
|
+
none: false
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: "0"
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: *id001
|
26
|
+
description: Nostos Source Driver for Illiad
|
27
|
+
email:
|
28
|
+
- bricestacey@gmail.com
|
29
|
+
executables: []
|
30
|
+
|
31
|
+
extensions: []
|
32
|
+
|
33
|
+
extra_rdoc_files: []
|
34
|
+
|
35
|
+
files:
|
36
|
+
- .gitignore
|
37
|
+
- Gemfile
|
38
|
+
- README.md
|
39
|
+
- Rakefile
|
40
|
+
- lib/illiad/transaction.rb
|
41
|
+
- lib/nostos-source-illiad.rb
|
42
|
+
- lib/nostos-source-illiad/config.rb
|
43
|
+
- lib/nostos-source-illiad/railtie.rb
|
44
|
+
- lib/nostos-source-illiad/record.rb
|
45
|
+
- lib/nostos-source-illiad/version.rb
|
46
|
+
- nostos-source-illiad.gemspec
|
47
|
+
homepage: https://github.com/bricestacey/nostos-source-illiad
|
48
|
+
licenses: []
|
49
|
+
|
50
|
+
post_install_message:
|
51
|
+
rdoc_options: []
|
52
|
+
|
53
|
+
require_paths:
|
54
|
+
- lib
|
55
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: "0"
|
61
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
requirements: []
|
68
|
+
|
69
|
+
rubyforge_project: nostos-source-illiad
|
70
|
+
rubygems_version: 1.7.2
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: Nostos Source Driver for Illiad
|
74
|
+
test_files: []
|
75
|
+
|