erp_base_erp_svcs 3.0.0 → 3.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/README.md +3 -0
- data/app/models/category.rb +2 -1
- data/app/models/compass_ae_instance.rb +4 -4
- data/app/models/contact.rb +1 -1
- data/app/models/geo_country.rb +4 -3
- data/app/models/geo_zone.rb +3 -3
- data/db/migrate/20080805000020_base_erp_services.rb +0 -1
- data/lib/erp_base_erp_svcs/config.rb +4 -2
- data/lib/erp_base_erp_svcs/engine.rb +3 -1
- data/lib/erp_base_erp_svcs/extensions/active_record/to_hash.rb +39 -0
- data/lib/erp_base_erp_svcs/extensions.rb +2 -3
- data/lib/erp_base_erp_svcs/version.rb +7 -1
- data/lib/erp_base_erp_svcs.rb +89 -7
- data/lib/tasks/compass_backup.rake +9 -4
- data/spec/factories/basic.rb +3 -0
- metadata +243 -193
- data/README.rdoc +0 -2
- data/config/initializers/erp_base_erp_svcs.rb +0 -4
- data/lib/erp_base_erp_svcs/command.rb +0 -37
- data/lib/erp_base_erp_svcs/extensions/railties/engine.rb +0 -85
- data/lib/erp_base_erp_svcs/rails_template.rb +0 -93
- data/spec/dummy/db/spec.sqlite3 +0 -0
- data/spec/dummy/log/spec.log +0 -4820
data/README.md
ADDED
@@ -0,0 +1,3 @@
|
|
1
|
+
#ErpBaseErpSvcs
|
2
|
+
|
3
|
+
Contains an implementation of the ubiquitous 'party model' for managing people, organizations, roles, relationships and contact information. The models in this library are designed to be useful in a variety of circumstances, including headless SOA implementations and batch operations.
|
data/app/models/category.rb
CHANGED
@@ -2,10 +2,10 @@ class CompassAeInstance < ActiveRecord::Base
|
|
2
2
|
has_file_assets
|
3
3
|
|
4
4
|
def installed_engines
|
5
|
-
Rails
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
Rails.application.config.erp_base_erp_svcs.compass_ae_engines.map do |compass_ae_engine|
|
6
|
+
klass_name = compass_ae_engine.railtie_name.camelize
|
7
|
+
{:name => klass_name, :version => ("#{klass_name}::VERSION::STRING".constantize rescue 'N/A')}
|
8
|
+
end
|
9
9
|
end
|
10
10
|
|
11
11
|
end
|
data/app/models/contact.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
class Contact < ActiveRecord::Base
|
2
2
|
has_and_belongs_to_many :contact_purposes
|
3
3
|
belongs_to :party
|
4
|
-
belongs_to :contact_mechanism, :polymorphic => true
|
4
|
+
belongs_to :contact_mechanism, :polymorphic => true
|
5
5
|
|
6
6
|
#rather than carry our own description for the abstract -contact-, we'll
|
7
7
|
#delegate that call to the implementor of the -contact_mechanism- interface
|
data/app/models/geo_country.rb
CHANGED
@@ -2,7 +2,8 @@ class GeoCountry < ActiveRecord::Base
|
|
2
2
|
has_many :postal_addresses
|
3
3
|
has_many :geo_zones
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
validates :name, :presence => {:message => 'Name cannot be blank'}
|
6
|
+
validates :iso_code_2, :presence => {:message => 'ISO code 2 cannot be blank'}
|
7
|
+
validates :iso_code_3, :presence => {:message => 'ISO code 3 cannot be blank'}
|
8
|
+
|
8
9
|
end
|
data/app/models/geo_zone.rb
CHANGED
@@ -2,7 +2,7 @@ class GeoZone < ActiveRecord::Base
|
|
2
2
|
belongs_to :geo_country
|
3
3
|
has_many :postal_addresses
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
5
|
+
validates :geo_country_id, :presence => {:message => 'Geo country id cannot be blank'}
|
6
|
+
validates :zone_code, :presence => {:message => 'Zone code cannot be blank'}
|
7
|
+
validates :zone_name, :presence => {:message => 'Zone name cannot be blank'}
|
8
8
|
end
|
@@ -407,7 +407,6 @@ class BaseErpServices < ActiveRecord::Migration
|
|
407
407
|
add_index :notes, [:noted_record_id, :noted_record_type]
|
408
408
|
add_index :notes, :note_type_id
|
409
409
|
add_index :notes, :created_by_id
|
410
|
-
add_index :notes, :content
|
411
410
|
end
|
412
411
|
|
413
412
|
unless table_exists?(:note_types)
|
@@ -1,10 +1,12 @@
|
|
1
1
|
module ErpBaseErpSvcs
|
2
2
|
module Config
|
3
3
|
class << self
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :compass_ae_engines
|
5
5
|
|
6
6
|
def init!
|
7
|
-
@defaults = {
|
7
|
+
@defaults = {
|
8
|
+
:@compass_ae_engines => []
|
9
|
+
}
|
8
10
|
end
|
9
11
|
|
10
12
|
def reset!
|
@@ -19,8 +19,10 @@ module ErpBaseErpSvcs
|
|
19
19
|
extend ErpBaseErpSvcs::Extensions::ActiveRecord::StiInstantiation::ActMacro
|
20
20
|
end
|
21
21
|
|
22
|
+
engine = self
|
22
23
|
config.to_prepare do
|
23
|
-
|
24
|
+
ErpBaseErpSvcs.register_compass_ae_engine(engine)
|
25
|
+
ErpBaseErpSvcs.load_root_compass_ae_framework_extensions
|
24
26
|
end
|
25
27
|
|
26
28
|
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
ActiveRecord::Base.class_eval do
|
2
|
+
|
3
|
+
#takes array of method names and returns hash with key/value pairs of methods
|
4
|
+
def to_hash(options={})
|
5
|
+
{}.tap do |hash|
|
6
|
+
#check for only option to get only attributes specified
|
7
|
+
if options[:only]
|
8
|
+
options[:only].each do |attribute|
|
9
|
+
attribute = attribute.to_sym
|
10
|
+
hash[attribute] = self.send(attribute)
|
11
|
+
end
|
12
|
+
else
|
13
|
+
hash.merge!(self.attributes)
|
14
|
+
end
|
15
|
+
|
16
|
+
#check for methods option
|
17
|
+
if options[:methods]
|
18
|
+
options[:methods].each do |method|
|
19
|
+
if method.is_a?(Hash)
|
20
|
+
method.each do |k,v|
|
21
|
+
k = k.to_sym
|
22
|
+
v = v.to_sym
|
23
|
+
hash[v] = self.send(k)
|
24
|
+
end
|
25
|
+
else
|
26
|
+
method = method.to_sym
|
27
|
+
hash[method] = self.send(method)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
#check for additional values
|
33
|
+
options[:additional_values].each{|k, v| hash[k] = v} if options[:additional_values]
|
34
|
+
|
35
|
+
end#end hash tap
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
|
@@ -4,9 +4,6 @@ require 'erp_base_erp_svcs/extensions/core/hash'
|
|
4
4
|
require 'erp_base_erp_svcs/extensions/core/numbers'
|
5
5
|
require 'erp_base_erp_svcs/extensions/core/object'
|
6
6
|
|
7
|
-
#railties
|
8
|
-
require 'erp_base_erp_svcs/extensions/railties/engine'
|
9
|
-
|
10
7
|
#active record extensions
|
11
8
|
require 'erp_base_erp_svcs/extensions/active_record/acts_as_category'
|
12
9
|
require 'erp_base_erp_svcs/extensions/active_record/acts_as_erp_type'
|
@@ -17,3 +14,5 @@ require 'erp_base_erp_svcs/extensions/active_record/has_contact'
|
|
17
14
|
require 'erp_base_erp_svcs/extensions/active_record/migrator'
|
18
15
|
require 'erp_base_erp_svcs/extensions/active_record/data_migrator'
|
19
16
|
require 'erp_base_erp_svcs/extensions/active_record/sti_instantiation'
|
17
|
+
require 'erp_base_erp_svcs/extensions/active_record/to_hash'
|
18
|
+
|
data/lib/erp_base_erp_svcs.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require "erp_base_erp_svcs/version"
|
1
2
|
require "erp_base_erp_svcs/extensions"
|
2
3
|
require "erp_base_erp_svcs/ar_fixtures"
|
3
4
|
require "erp_base_erp_svcs/config"
|
@@ -5,13 +6,94 @@ require "erp_base_erp_svcs/engine"
|
|
5
6
|
require "erp_base_erp_svcs/non_escape_json_string"
|
6
7
|
|
7
8
|
module ErpBaseErpSvcs
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
class << self
|
10
|
+
def mount_compass_ae_engines(routes)
|
11
|
+
Rails.application.config.erp_base_erp_svcs.compass_ae_engines.each do |engine|
|
12
|
+
routes.mount engine => "/#{engine.name.split("::").first.underscore}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def register_compass_ae_engine(engine)
|
17
|
+
Rails.application.config.erp_base_erp_svcs.compass_ae_engines << engine
|
18
|
+
load_compass_ae_extensions(engine)
|
19
|
+
load_root_compass_ae_framework_extensions()
|
20
|
+
end
|
21
|
+
|
22
|
+
#forces rails to reload model extensions and framework extensions
|
23
|
+
def load_compass_ae_extensions(engine)
|
24
|
+
load_compass_ae_model_extensions(engine)
|
25
|
+
load_compass_ae_framework_extensions(engine)
|
26
|
+
end
|
27
|
+
|
28
|
+
def load_compass_ae_model_extensions(engine)
|
29
|
+
root_models_path = "#{Rails.root}/app/models/"
|
30
|
+
engine_path = engine.root.to_s
|
31
|
+
engine_models_path = "#{engine_path}/app/models/"
|
32
|
+
engine_extensions_path = "#{engine_models_path}extensions/"
|
33
|
+
|
34
|
+
begin
|
35
|
+
#get all files from this engines app/model directory
|
36
|
+
model_extension_files = Dir.entries(engine_extensions_path).map{|directory| directory}
|
37
|
+
#remove any .svn or .data files
|
38
|
+
model_extension_files.delete_if{|name| name =~ /^\./}
|
39
|
+
|
40
|
+
#Must use eval to run each extension so rails picks up the extension
|
41
|
+
model_extension_files.each do |filename|
|
42
|
+
#check if table exists
|
43
|
+
content = File.open(engine_extensions_path + filename) { |f| f.read }
|
44
|
+
class_name = filename[0..-4]
|
45
|
+
#if tables.include?(class_name.tableize)
|
46
|
+
eval(IO.read(engine_extensions_path + filename), binding, engine_extensions_path + filename)
|
47
|
+
#end
|
48
|
+
end
|
49
|
+
end if File.directory? engine_extensions_path
|
50
|
+
|
51
|
+
begin
|
52
|
+
#get all files from this engines app/model directory
|
53
|
+
model_files = Dir.entries(engine_models_path).map{|directory| directory}
|
54
|
+
#remove any .svn or .data files
|
55
|
+
model_files.delete_if{|name| name =~ /^\./}
|
56
|
+
#exclude the extension directory
|
57
|
+
model_files.delete_if{|name| name == "extensions"}
|
58
|
+
|
59
|
+
model_files.each do |filename|
|
60
|
+
|
61
|
+
class_name = filename[0..-4]
|
62
|
+
klass = class_name.camelize
|
63
|
+
|
64
|
+
#if there is a model in {rails_root}/app/models, it's not going to load our engine models.
|
65
|
+
#load the engine model here and change it to a class_eval
|
66
|
+
if File.exists?(root_models_path + filename)
|
67
|
+
content = File.open(engine_models_path + filename) { |f| f.read }
|
68
|
+
#make sure this class extends ActiveRecord::Base
|
69
|
+
#we only want to do this for ActiveRecord models
|
70
|
+
if content.include? '< ActiveRecord::Base'
|
71
|
+
#if tables.include?(class_name.tableize)
|
72
|
+
content.gsub!("class #{klass} < ActiveRecord::Base", "#{klass}.class_eval do")
|
73
|
+
eval(content, binding)
|
74
|
+
#end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end if File.directory? engine_models_path
|
79
|
+
|
80
|
+
end
|
81
|
+
|
82
|
+
def load_compass_ae_framework_extensions(engine)
|
83
|
+
if File.directory? File.join(engine.root,"lib",engine.railtie_name,"extensions/compass_ae")
|
84
|
+
Dir.glob(File.join(engine.root,"lib",engine.railtie_name,"extensions/compass_ae/**/*.rb")).each do |file|
|
85
|
+
load file
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
def load_root_compass_ae_framework_extensions
|
91
|
+
Dir.glob(File.join(Rails.root,"lib/extensions/compass_ae/**/*.rb")).each do |file|
|
92
|
+
load file
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
end
|
15
97
|
end
|
16
98
|
|
17
99
|
|
@@ -30,8 +30,13 @@ namespace :compass_ae do
|
|
30
30
|
end
|
31
31
|
|
32
32
|
namespace :postgres do
|
33
|
-
|
34
|
-
|
33
|
+
# age should be in days
|
34
|
+
task :purge_old, [:age] => :environment do |t,args|
|
35
|
+
age = (args.age.blank? ? @purge_dumps_older_than : args.age.to_i.days.ago)
|
36
|
+
puts "Purging postgres dumps older than #{age}"
|
37
|
+
puts green("Default is 2 weeks. You can pass in number of days if you want something different.") if args.age.blank?
|
38
|
+
puts green("Example: rake compass_ae:backup:postgres:purge_old[7]") if args.age.blank?
|
39
|
+
|
35
40
|
chdir(PG_BACKUP_DIR)
|
36
41
|
|
37
42
|
# get list of files and loop thru them
|
@@ -53,8 +58,8 @@ namespace :compass_ae do
|
|
53
58
|
timeobject = Time.parse(timestamp)
|
54
59
|
|
55
60
|
# compare time object with purge_dumps_older_than and delete if too old
|
56
|
-
if timeobject <
|
57
|
-
puts red("Purging dump #{f}: Older than #{
|
61
|
+
if timeobject < age
|
62
|
+
puts red("Purging dump #{f}: Older than #{age}")
|
58
63
|
cmd = "rm -f #{f}"
|
59
64
|
execute_command(cmd)
|
60
65
|
end
|