seiya 0.0.2 → 0.0.3
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 +4 -4
- data/bin/seiya +11 -2
- data/lib/seiya/item.rb +16 -2
- data/lib/seiya/version.rb +1 -1
- data/lib/seiya.rb +64 -2
- data/sample/test/aa/items.rb +1 -1
- data/sample/test/seiya.ini +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 773e5110dc60954f583477e9d687fa0c0d4c1d12
|
|
4
|
+
data.tar.gz: ad74ed26b1ab7768498fa79a9485865d07e2019e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: b57e9683866b759e76a23fa38baab25fa4070c71226bb787d682f3f9b4e4393494e05435de93c6f1104a1bc3f11e9af4d8ca3270f21bb2e02164e135c9a2f5ce
|
|
7
|
+
data.tar.gz: 221eb7a9590ceb0e4f9a3992354ef0a7344d85701c0a71b8ef50ee496ee5491543a9c235bad5aaf1faa59573a4561cc14bf1c10be246765aed91dcdc43a67d92
|
data/bin/seiya
CHANGED
|
@@ -13,7 +13,7 @@ OptionParser.new do |opts|
|
|
|
13
13
|
options[:version] = v
|
|
14
14
|
end
|
|
15
15
|
|
|
16
|
-
opts.on '-tTask', '--task=Task', 'seiya task' do |t|
|
|
16
|
+
opts.on '-tTask', '--task=Task', 'run a seiya task' do |t|
|
|
17
17
|
options[:task] = t
|
|
18
18
|
end
|
|
19
19
|
|
|
@@ -21,6 +21,10 @@ OptionParser.new do |opts|
|
|
|
21
21
|
options[:args] = [] unless options[:args]
|
|
22
22
|
options[:args] << a
|
|
23
23
|
end
|
|
24
|
+
|
|
25
|
+
opts.on '-cTask', '--create=Task', 'create a seiya task' do |t|
|
|
26
|
+
options[:create] = t
|
|
27
|
+
end
|
|
24
28
|
end.parse!
|
|
25
29
|
|
|
26
30
|
def extend_load_path(path)
|
|
@@ -50,13 +54,18 @@ if options.key? :task
|
|
|
50
54
|
task_name = options[:task]
|
|
51
55
|
begin
|
|
52
56
|
task = Seiya.get_task task_name
|
|
53
|
-
task.run
|
|
54
57
|
rescue NameError
|
|
55
58
|
puts "No task named: #{task_name}"
|
|
56
59
|
exit!
|
|
57
60
|
end
|
|
61
|
+
task.run
|
|
58
62
|
end
|
|
59
63
|
|
|
60
64
|
if options.key? :version
|
|
61
65
|
puts Seiya::VERSION
|
|
62
66
|
end
|
|
67
|
+
|
|
68
|
+
if options.key? :create
|
|
69
|
+
task_name = options[:create]
|
|
70
|
+
Seiya.gen_task_file task_name
|
|
71
|
+
end
|
data/lib/seiya/item.rb
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
1
3
|
module Seiya
|
|
2
4
|
class Item
|
|
3
|
-
def initialize(
|
|
5
|
+
def initialize(data = {})
|
|
4
6
|
@data = {}
|
|
5
|
-
@data.merge!(
|
|
7
|
+
@data.merge!(data)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def load(json_str)
|
|
11
|
+
@data.merge!(JSON.parse json_str)
|
|
6
12
|
end
|
|
7
13
|
|
|
8
14
|
def [](key)
|
|
@@ -16,5 +22,13 @@ module Seiya
|
|
|
16
22
|
def inspect
|
|
17
23
|
@data.inspect
|
|
18
24
|
end
|
|
25
|
+
|
|
26
|
+
def to_h
|
|
27
|
+
@data
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def to_json
|
|
31
|
+
@data.to_json
|
|
32
|
+
end
|
|
19
33
|
end
|
|
20
34
|
end
|
data/lib/seiya/version.rb
CHANGED
data/lib/seiya.rb
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
require 'fileutils'
|
|
1
2
|
require 'seiya/version'
|
|
2
3
|
require 'seiya/request'
|
|
3
4
|
require 'seiya/task'
|
|
@@ -19,10 +20,11 @@ module Seiya
|
|
|
19
20
|
require 'seiya/util'
|
|
20
21
|
conf = IniFile.load conf_file
|
|
21
22
|
settings_file = conf.to_h.fetch('global', {}).fetch('settings', 'settings')
|
|
22
|
-
|
|
23
|
+
settings_require_str, settings_const_str = settings_file.split '|'
|
|
24
|
+
require settings_require_str
|
|
23
25
|
|
|
24
26
|
begin
|
|
25
|
-
pipelines =
|
|
27
|
+
pipelines = Util.get_const "#{settings_const_str.empty? ? 'Settings' : settings_const_str}::PIPELINES"
|
|
26
28
|
rescue NameError
|
|
27
29
|
pipelines = {}
|
|
28
30
|
end
|
|
@@ -49,4 +51,64 @@ module Seiya
|
|
|
49
51
|
clazz = Util::get_const task_name
|
|
50
52
|
clazz.new
|
|
51
53
|
end
|
|
54
|
+
|
|
55
|
+
def gen_task_file(task_name)
|
|
56
|
+
base_path = "#{task_name}/#{task_name}"
|
|
57
|
+
FileUtils.mkpath "#{base_path}"
|
|
58
|
+
FileUtils.mkpath "#{base_path}/tasks"
|
|
59
|
+
FileUtils.mkpath "#{base_path}/items"
|
|
60
|
+
FileUtils.mkpath "#{base_path}/pipelines"
|
|
61
|
+
File.write("#{task_name}/seiya.ini",
|
|
62
|
+
%([global]
|
|
63
|
+
settings = #{task_name}/settings|Settings
|
|
64
|
+
))
|
|
65
|
+
File.write("#{base_path}/settings.rb",
|
|
66
|
+
%(module Settings
|
|
67
|
+
PIPELINES = {
|
|
68
|
+
'#{task_name}/pipelines|Pipelines::Test' => 10,
|
|
69
|
+
}
|
|
70
|
+
end))
|
|
71
|
+
File.write("#{base_path}/items.rb", %(require 'items/test'))
|
|
72
|
+
File.write("#{base_path}/pipelines.rb", %(require 'pipelines/test'))
|
|
73
|
+
File.write("#{base_path}/tasks.rb", %(require 'tasks/test'))
|
|
74
|
+
File.write("#{base_path}/items/test.rb",
|
|
75
|
+
%(require 'seiya'
|
|
76
|
+
|
|
77
|
+
module Items
|
|
78
|
+
class Test < Seiya::Item
|
|
79
|
+
def to_s
|
|
80
|
+
inspect
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end))
|
|
84
|
+
File.write("#{base_path}/pipelines/test.rb",
|
|
85
|
+
%(require 'seiya'
|
|
86
|
+
|
|
87
|
+
module Pipelines
|
|
88
|
+
class Test < Seiya::Pipeline
|
|
89
|
+
def process_item(item)
|
|
90
|
+
puts 'I am in Test pipeline!'
|
|
91
|
+
item.to_s
|
|
92
|
+
puts item
|
|
93
|
+
item
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end))
|
|
97
|
+
File.write("#{base_path}/tasks/test.rb",
|
|
98
|
+
%(require 'seiya'
|
|
99
|
+
require_relative '../items'
|
|
100
|
+
|
|
101
|
+
module Tasks
|
|
102
|
+
class Test < Seiya::Task
|
|
103
|
+
def initialize
|
|
104
|
+
@start_urls = ['http://www.baidu.com/']
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def parse(response, enum)
|
|
108
|
+
item = Items::Test.new url: response.url
|
|
109
|
+
enum.yield item
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
end))
|
|
113
|
+
end
|
|
52
114
|
end
|
data/sample/test/aa/items.rb
CHANGED
data/sample/test/seiya.ini
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
[global]
|
|
2
|
-
settings = aa/settings
|
|
2
|
+
settings = aa/settings|Settings
|