skynet-core 0.0.3 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,16 +1,33 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
- require 'echoe'
4
3
 
5
- Echoe.new('skynet-core', '0.0.3') do |s|
6
- s.description = "Datamining Bot"
7
- s.url = "http://github.com/a2c/skynet-core"
8
- s.author = "Henry Hamon"
9
- s.email = "henry.hamon@a2c.com.br"
10
- s.ignore_pattern = ["tmp/*", "script/*"]
11
- s.runtime_dependencies = ["json", "nokogiri",
12
- "mechanize", "activerecord", "simpleconsole"]
13
- s.development_dependencies = ["rspec"]
14
- end
4
+ # task :default => :gem
5
+ #
6
+ # task :gem do
7
+ require 'echoe'
8
+ Echoe.new('skynet-core', '0.0.4') do |s|
9
+ s.description = "Datamining Bot"
10
+ s.url = "http://github.com/a2c/skynet-core"
11
+ s.author = "Henry Hamon"
12
+ s.email = "henry.hamon@a2c.com.br"
13
+ s.ignore_pattern = ["tmp/*", "script/*"]
14
+ s.runtime_dependencies = ["json", "nokogiri", "mechanize", "activerecord"]
15
+ s.development_dependencies = ["rspec"]
16
+ end
15
17
 
16
- Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
18
+ Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
19
+ # end
20
+ #
21
+ # desc "Migrate the database through scripts in db/migrate. Target specific version with VERSION=x"
22
+ # task :migrate => :environment do
23
+ # ActiveRecord::Migrator.migrate('lib/skynet-core/db/migrate', ENV["VERSION"] ? ENV["VERSION"].to_i : nil )
24
+ # end
25
+ #
26
+ # task :environment do
27
+ # require 'active_record'
28
+ # require 'yaml'
29
+ #
30
+ # database_config = YAML::load(File.open('config/database.yml'))
31
+ # ActiveRecord::Base.establish_connection database_config[ENV["ENV"] ? ENV["ENV"] : "development"]["skynet"]
32
+ # end
33
+ #
@@ -1,10 +1,6 @@
1
1
  development:
2
2
  skynet:
3
- adapter: mysql
4
- database: skynet_staging
5
- username: root
6
- password: toor
7
- encoding: utf8
3
+ path: '/home/henry/workspace/db/skynet.db'
8
4
 
9
5
  ibrands:
10
6
  adapter: mysql
@@ -16,14 +12,7 @@ development:
16
12
 
17
13
  production:
18
14
  skynet:
19
- adapter: mysql
20
- encoding: utf8
21
- database: skynet
22
- username: skynet
23
- password: "MXQuE4KW9NhjEr7t"
24
- host: "vps3.clubedeautores.com.br"
25
- port: 3300
26
- # socket: /var/run/mysqld/mysqld.sock
15
+ path: '/home/henry/workspace/db/skynet.db'
27
16
 
28
17
  ibrands:
29
18
  adapter: mysql
@@ -1,4 +1,5 @@
1
1
  require "#{SKYNET_ROOT}/lib/skynet-core/db/ibrands"
2
+ require "#{SKYNET_ROOT}/lib/skynet-core/db/hippocampus"
2
3
 
3
4
  module Skynet
4
5
  extend self
@@ -1,12 +1,70 @@
1
1
  require File.expand_path("#{File.dirname(__FILE__)}/../../skynet-core")
2
- require 'activerecord'
2
+ require 'xapian-fu'
3
+ include XapianFu
3
4
 
4
- Skynet.load_config
5
- unless Skynet.database_config.nil?
6
- ActiveRecord::Base.establish_connection( Skynet.database_config[Skynet.app_config['enviroment']]['skynet'] )
5
+ module Skynet
6
+ extend self
7
+
8
+ class Queue
9
+ attr_accessor :url, :source, :post, :author, :description, :brand_id, :tracked_network_id,
10
+ :network_type, :slot_1, :slot_2, :slot_3, :integrated, :published_at,
11
+ :created_at
12
+
13
+ def initialize(attributes = nil)
14
+ self.attributes = attributes unless attributes.nil?
15
+ end
16
+
17
+ def save
18
+ output = false
19
+ if uniqueness?
20
+ Skynet.queue << to_hash
21
+ Skynet.queue.flush
22
+ output = true
23
+ end if required?
24
+ output
25
+ end
26
+
27
+ def self.create(attributes = nil)
28
+ if attributes.is_a?(Array)
29
+ attributes.collect { |attr| create(attr) }
30
+ else
31
+ object = new(attributes)
32
+ object.save
33
+ object
34
+ end
35
+ end
36
+
37
+ protected
38
+
39
+ def attributes=(value)
40
+ value.each_pair do |key, value|
41
+ begin
42
+ instance_variable_set("@#{key}", value)
43
+ rescue
44
+ puts 'attribute not found'
45
+ end
46
+ end
47
+ end
48
+
49
+ def to_hash
50
+ {
51
+ :url => self.url, :source => self.source , :post => self.post.nil? ? '' : self.post,
52
+ :author => self.author.nil? ? '' : self.author, :description => self.description.nil? ? '' : self.description,
53
+ :brand_id => self.brand_id ,
54
+ :tracked_network_id => self.tracked_network_id , :network_type => self.network_type ,
55
+ :slot_1 => self.slot_1.nil? ? 0 : self.slot_1, :slot_2 => self.slot_2.nil? ? 0 : self.slot_2,
56
+ :slot_3 => self.slot_3.nil? ? 0 : self.slot_3,
57
+ :integrated => 0, :published_at => self.published_at, :created_at => DateTime.now
58
+ }
59
+ end
60
+
61
+ def uniqueness?
62
+ Skynet.queue.search("url:#{self.url.gsub('+','>')} network_type:#{self.network_type}").size < 1
63
+ end
64
+
65
+ def required?
66
+ !self.tracked_network_id.nil? || !self.url.nil? || !self.network_type.nil?
67
+ end
7
68
 
8
- class Memory < ActiveRecord::Base
9
- validates_presence_of :url
10
- validates_uniqueness_of :url, :scope => :tracked_network_id
11
69
  end
12
70
  end
@@ -1,9 +1,5 @@
1
- require 'rubygems'
2
- require 'activerecord'
3
- require 'lib/skynet/hippocampus'
4
-
5
- #ActiveRecord::Schema.define do
6
1
  class CreateMemoriesAndLogs < ActiveRecord::Migration
2
+ def self.up
7
3
 
8
4
  create_table :memories do |t|
9
5
  t.column :brand_id, :integer
@@ -32,5 +28,13 @@ class CreateMemoriesAndLogs < ActiveRecord::Migration
32
28
  table.column :created_at, :datetime
33
29
  end
34
30
 
35
- end
36
31
 
32
+ end
33
+
34
+ def self.down
35
+ remove_index :memories, [:url, :tracked_network_id]
36
+ drop_table :memories
37
+ drop_table :logs
38
+
39
+ end
40
+ end
@@ -1,5 +1,7 @@
1
1
  require "#{SKYNET_ROOT}/lib/skynet-core"
2
2
  require "#{SKYNET_ROOT}/lib/skynet-core/db/ibrands"
3
+ require "#{SKYNET_ROOT}/lib/skynet-core/db/hippocampus"
4
+
3
5
  require 'open-uri'
4
6
 
5
7
  module Skynet
data/lib/skynet-core.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require "rubygems"
2
2
  require "yaml"
3
3
 
4
+ require 'xapian-fu'
5
+ include XapianFu
6
+
4
7
  SKYNET_ROOT = File.expand_path("#{File.dirname(__FILE__)}/..") unless defined?(SKYNET_ROOT)
5
8
 
6
9
  Dir[File.dirname(__FILE__) + '/skynet-core/*.rb'].each {|file| require file }
@@ -10,7 +13,7 @@ SKYNET_ENV = ENV["SKYNET_ENV"] ||= ENV["RACK_ENV"] ||= "development" unless defi
10
13
  #
11
14
  module Skynet
12
15
 
13
- attr_reader :_app_config, :_database_config
16
+ attr_reader :_app_config, :_database_config, :_queue
14
17
 
15
18
  class ApplicationLoadError < RuntimeError #:nodoc:
16
19
  end
@@ -56,6 +59,10 @@ module Skynet
56
59
  @_database_config ||= set_database_config
57
60
  end
58
61
 
62
+ def queue
63
+ @_queue ||= load_queue_database
64
+ end
65
+
59
66
  def require_dependencies(*paths)
60
67
  # Extract all files to load
61
68
  files = paths.map { |path| Dir[path] }.flatten
@@ -107,5 +114,32 @@ module Skynet
107
114
  YAML::load(File.open(root("config/database.yml"))) if File.exist?(root("config/database.yml"))
108
115
  end
109
116
 
117
+ def load_queue_database
118
+
119
+ XapianDb.new(:dir => self.database_config[self.app_config['enviroment']]['skynet']['path'], :create => true,
120
+ :fields => {
121
+ :url => { :store => true },
122
+ :source => { :store => true },
123
+ :post => { :store => true },
124
+ :author => { :store => true },
125
+ :description => { :store => true },
126
+ :brand_id => { :type => Integer, :store => true },
127
+ :tracked_network_id => { :type => Integer, :store => true },
128
+ :network_type => { :type => Integer, :store => true },
129
+ :slot_1 => { :type => Integer, :store => true },
130
+ :slot_2 => { :type => Integer, :store => true },
131
+ :slot_3 => { :type => Integer, :store => true },
132
+ :integrated => { :type => Integer, :store => true },
133
+ :published_at => { :type => DateTime, :store => true },
134
+ :created_at => { :type => DateTime, :store => true }
135
+ }, :store => [
136
+ :url, :source, :post, :author, :description, :brand_id, :tracked_network_id,
137
+ :network_type, :slot_1, :slot_2, :slot_3, :integrated, :published_at,
138
+ :created_at
139
+ ]
140
+ ) unless @_database_config.nil? & self.database_config[self.app_config['enviroment']]['skynet'].nil?
141
+
142
+ end
143
+
110
144
  end # self
111
145
  end
data/skynet-core.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{skynet-core}
5
- s.version = "0.0.3"
5
+ s.version = "0.0.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Henry Hamon"]
9
- s.date = %q{2010-06-09}
9
+ s.date = %q{2010-06-11}
10
10
  s.description = %q{Datamining Bot}
11
11
  s.email = %q{henry.hamon@a2c.com.br}
12
12
  s.extra_rdoc_files = ["README.mkdn", "lib/skynet-core.rb", "lib/skynet-core/cyberdyne.rb", "lib/skynet-core/db/hippocampus.rb", "lib/skynet-core/db/ibrands.rb", "lib/skynet-core/db/migrate/001_create_actives_and_logs.rb", "lib/skynet-core/db/migrate/002_pimp_log.rb", "lib/skynet-core/db/migration.rb", "lib/skynet-core/extend_string.rb", "lib/skynet-core/harvest.rb"]
@@ -27,14 +27,12 @@ Gem::Specification.new do |s|
27
27
  s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
28
28
  s.add_runtime_dependency(%q<mechanize>, [">= 0"])
29
29
  s.add_runtime_dependency(%q<activerecord>, [">= 0"])
30
- s.add_runtime_dependency(%q<simpleconsole>, [">= 0"])
31
30
  s.add_development_dependency(%q<rspec>, [">= 0"])
32
31
  else
33
32
  s.add_dependency(%q<json>, [">= 0"])
34
33
  s.add_dependency(%q<nokogiri>, [">= 0"])
35
34
  s.add_dependency(%q<mechanize>, [">= 0"])
36
35
  s.add_dependency(%q<activerecord>, [">= 0"])
37
- s.add_dependency(%q<simpleconsole>, [">= 0"])
38
36
  s.add_dependency(%q<rspec>, [">= 0"])
39
37
  end
40
38
  else
@@ -42,7 +40,6 @@ Gem::Specification.new do |s|
42
40
  s.add_dependency(%q<nokogiri>, [">= 0"])
43
41
  s.add_dependency(%q<mechanize>, [">= 0"])
44
42
  s.add_dependency(%q<activerecord>, [">= 0"])
45
- s.add_dependency(%q<simpleconsole>, [">= 0"])
46
43
  s.add_dependency(%q<rspec>, [">= 0"])
47
44
  end
48
45
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: skynet-core
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Henry Hamon
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-06-09 00:00:00 -03:00
18
+ date: 2010-06-11 00:00:00 -03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -74,24 +74,10 @@ dependencies:
74
74
  version: "0"
75
75
  type: :runtime
76
76
  version_requirements: *id004
77
- - !ruby/object:Gem::Dependency
78
- name: simpleconsole
79
- prerelease: false
80
- requirement: &id005 !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
89
- type: :runtime
90
- version_requirements: *id005
91
77
  - !ruby/object:Gem::Dependency
92
78
  name: rspec
93
79
  prerelease: false
94
- requirement: &id006 !ruby/object:Gem::Requirement
80
+ requirement: &id005 !ruby/object:Gem::Requirement
95
81
  none: false
96
82
  requirements:
97
83
  - - ">="
@@ -101,7 +87,7 @@ dependencies:
101
87
  - 0
102
88
  version: "0"
103
89
  type: :development
104
- version_requirements: *id006
90
+ version_requirements: *id005
105
91
  description: Datamining Bot
106
92
  email: henry.hamon@a2c.com.br
107
93
  executables: []