enop 0.1.3 → 0.1.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 +4 -4
- data/bin/console +0 -0
- data/bin/setup +0 -0
- data/exe/enop +18 -2
- data/exe/makemigrate +11 -7
- data/lib/enop.rb +5 -139
- data/lib/enop/dbutil.rb +4 -0
- data/lib/enop/dbutil/dbmgr.rb +19 -0
- data/lib/{dbutil_enop.rb → enop/dbutil/enopmgr.rb} +5 -14
- data/lib/enop/enop.rb +140 -0
- data/lib/enop/version.rb +1 -1
- metadata +26 -24
- data/lib/en_oauth.rb +0 -314
- data/lib/ennb.rb +0 -149
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1fa944930a75dae78c4a3c7555fdc0ddec16bc02
|
4
|
+
data.tar.gz: ba1657c161e1ef665034808cf59de98c9a40a6c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ed7565163dfe70302e7ba820e317380f8c7787a3ff7f9f8ba75bfd3de1b8b538e3c43c4d3b6583f00adf40fe97d72f5e6d2d70593c391e97aea91b58bba8e69
|
7
|
+
data.tar.gz: c0d2b09c2d36844b9a428db743aac9640c7271cd357493bf0b8438c81e840ccb0bebabf1cf49380b563f82d59a3a296deb73510b7c6b26e1608fac4183ac0c95
|
data/bin/console
CHANGED
File without changes
|
data/bin/setup
CHANGED
File without changes
|
data/exe/enop
CHANGED
@@ -1,9 +1,25 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
+
require 'arxutils'
|
3
4
|
require "enop"
|
4
5
|
|
5
|
-
|
6
|
+
dbconfig = Arxutils::Dbutil::DBCONFIG_MYSQL
|
7
|
+
dbconfig = Arxutils::Dbutil::DBCONFIG_SQLITE3
|
6
8
|
|
7
|
-
|
9
|
+
token = ARGV[0]
|
10
|
+
hs = {
|
11
|
+
"db_dir" => Arxutils::Dbutil::DB_DIR,
|
12
|
+
"migrate_dir" => Arxutils::Dbutil::MIGRATE_DIR,
|
13
|
+
"config_dir" => Arxutils::Dbutil::CONFIG_DIR,
|
14
|
+
"dbconfig" => dbconfig,
|
15
|
+
"log_fname" => Arxutils::Dbutil::DATABASELOG,
|
16
|
+
}
|
17
|
+
|
18
|
+
|
19
|
+
enop = Enop::Enop.new(
|
20
|
+
token,
|
21
|
+
:db,
|
22
|
+
hs
|
23
|
+
)
|
8
24
|
enop.connect
|
9
25
|
enop.list_notebooks
|
data/exe/makemigrate
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
# -*- coding: utf-8 -*-
|
3
3
|
|
4
|
-
require '
|
5
|
-
require 'migrate'
|
4
|
+
require 'arxutils'
|
6
5
|
require 'enop'
|
7
6
|
|
8
7
|
data_ary = [
|
@@ -42,9 +41,14 @@ data_ary = [
|
|
42
41
|
},
|
43
42
|
]
|
44
43
|
|
44
|
+
dbconfig = Arxutils::Dbutil::DBCONFIG_MYSQL
|
45
|
+
dbconfig = Arxutils::Dbutil::DBCONFIG_SQLITE3
|
46
|
+
|
45
47
|
forced = true
|
46
|
-
|
47
|
-
data_ary
|
48
|
-
|
49
|
-
|
50
|
-
|
48
|
+
Arxutils::Migrate.migrate(
|
49
|
+
data_ary,
|
50
|
+
0,
|
51
|
+
dbconfig,
|
52
|
+
forced
|
53
|
+
)
|
54
|
+
|
data/lib/enop.rb
CHANGED
@@ -1,144 +1,10 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
-
|
2
|
+
require "arxutils"
|
3
3
|
require "enop/version"
|
4
|
-
|
5
|
-
require
|
6
|
-
require
|
7
|
-
require
|
8
|
-
|
9
|
-
require 'forwardable'
|
10
|
-
require 'dbutil_base'
|
11
|
-
require 'dbutil_enop'
|
4
|
+
require "enop/enop"
|
5
|
+
require "enop/dbutil"
|
6
|
+
#require "enop/dbutil/dbmgr"
|
7
|
+
#require "enop/dbutil/enopmgr"
|
12
8
|
|
13
9
|
module Enop
|
14
|
-
class Enop
|
15
|
-
extend Forwardable
|
16
|
-
|
17
|
-
def_delegator( :@dbmgr , :add , :db_add)
|
18
|
-
|
19
|
-
def initialize( db_dir , migrate_dir , config_dir, dbconfig , log_fname , authToken)
|
20
|
-
|
21
|
-
@stack_hs = {}
|
22
|
-
@nbinfos = {}
|
23
|
-
@notebookinfo = Struct.new("NotebookInfo", :name, :stack, :defaultNotebook, :count , :tags )
|
24
|
-
|
25
|
-
@authToken = authToken
|
26
|
-
|
27
|
-
register_time = Arxutils::Dbutil::DbMgr.init( db_dir , migrate_dir , config_dir, dbconfig , log_fname )
|
28
|
-
|
29
|
-
@dbmgr = Dbutil::DbMgr.new( register_time )
|
30
|
-
|
31
|
-
evernoteHost = "www.evernote.com"
|
32
|
-
userStoreUrl = "https://#{evernoteHost}/edam/user"
|
33
|
-
userStoreTransport = Thrift::HTTPClientTransport.new(userStoreUrl)
|
34
|
-
userStoreProtocol = Thrift::BinaryProtocol.new(userStoreTransport)
|
35
|
-
@userStore = Evernote::EDAM::UserStore::UserStore::Client.new(userStoreProtocol)
|
36
|
-
|
37
|
-
versionOK = @userStore.checkVersion("Evernote EDAMTest (Ruby)",
|
38
|
-
Evernote::EDAM::UserStore::EDAM_VERSION_MAJOR,
|
39
|
-
Evernote::EDAM::UserStore::EDAM_VERSION_MINOR)
|
40
|
-
puts "Is my Evernote API version up to date? #{versionOK}"
|
41
|
-
puts
|
42
|
-
exit(1) unless versionOK
|
43
|
-
|
44
|
-
set_output_dest( get_output_filename_base )
|
45
|
-
end
|
46
|
-
|
47
|
-
def set_output_dest( fname )
|
48
|
-
if fname
|
49
|
-
fname_txt = fname + ".txt"
|
50
|
-
fname_csv = fname + ".csv"
|
51
|
-
@output = File.open( fname_txt , "w" , { :encoding => 'UTF-8' } )
|
52
|
-
@output_csv = CSV.open( fname_csv , "w" , { :encoding => 'UTF-8' } )
|
53
|
-
else
|
54
|
-
@output = STDOUT
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def get_output_filename_base
|
59
|
-
Time.now.strftime("ennblist-%Y-%m-%d-%H-%M-%S")
|
60
|
-
end
|
61
|
-
|
62
|
-
def putsx( str )
|
63
|
-
@output.puts( str )
|
64
|
-
end
|
65
|
-
|
66
|
-
def connect
|
67
|
-
# Get the URL used to interact with the contents of the user's account
|
68
|
-
# When your application authenticates using OAuth, the NoteStore URL will
|
69
|
-
# be returned along with the auth token in the final OAuth request.
|
70
|
-
# In that case, you don't need to make this call.
|
71
|
-
#noteStoreUrl = userStore.getNoteStoreUrl(authToken)
|
72
|
-
noteStoreUrl = "https://www.evernote.com/shard/s18/notestore"
|
73
|
-
|
74
|
-
noteStoreTransport = Thrift::HTTPClientTransport.new(noteStoreUrl)
|
75
|
-
noteStoreProtocol = Thrift::BinaryProtocol.new(noteStoreTransport)
|
76
|
-
@noteStore = Evernote::EDAM::NoteStore::NoteStore::Client.new(noteStoreProtocol)
|
77
|
-
end
|
78
|
-
|
79
|
-
def list_notebooks
|
80
|
-
# List all of the notebooks in the user's account
|
81
|
-
filter = Evernote::EDAM::NoteStore::NoteFilter.new
|
82
|
-
|
83
|
-
begin
|
84
|
-
notebooks = @noteStore.listNotebooks(@authToken)
|
85
|
-
rescue => ex
|
86
|
-
puts "Can't call listNotebooks"
|
87
|
-
exit
|
88
|
-
end
|
89
|
-
|
90
|
-
puts "Found #{notebooks.size} notebooks:"
|
91
|
-
memo = notebooks.inject({:defaultNotebook => nil , :nbinfo => []}) do |memo , notebook|
|
92
|
-
notebook_name = ( notebook.name == nil ? "" : notebook.name )
|
93
|
-
stack_name = ( notebook.stack == nil ? "" : notebook.stack )
|
94
|
-
|
95
|
-
filter.notebookGuid = notebook.guid
|
96
|
-
|
97
|
-
ret = nil
|
98
|
-
begin
|
99
|
-
ret = @noteStore.findNoteCounts(@authToken , filter , false )
|
100
|
-
rescue => ex
|
101
|
-
puts "Can't call findNoteCounts with #{notebook_name}"
|
102
|
-
end
|
103
|
-
|
104
|
-
if ret
|
105
|
-
if ret.notebookCounts
|
106
|
-
notebookCounts = ret.notebookCounts[notebook.guid]
|
107
|
-
else
|
108
|
-
notebookCounts = 0
|
109
|
-
end
|
110
|
-
tagcount = 0
|
111
|
-
if ret.tagCounts
|
112
|
-
tagcount = ret.tagCounts.size
|
113
|
-
end
|
114
|
-
nbinfo = @notebookinfo.new( notebook_name , stack_name , notebook.defaultNotebook , notebookCounts , tagcount )
|
115
|
-
# CSVファイルへ追加(自動的に出力)
|
116
|
-
register_notebook( nbinfo.stack , nbinfo )
|
117
|
-
# dbへの登録
|
118
|
-
db_add( nbinfo.stack , nbinfo.name , nbinfo.count , nbinfo.tags.size )
|
119
|
-
|
120
|
-
# p notebook
|
121
|
-
memo[:defaultNotebook] = nbinfo if nbinfo.defaultNotebook
|
122
|
-
memo[:nbinfo] << nbinfo
|
123
|
-
end
|
124
|
-
|
125
|
-
memo
|
126
|
-
end
|
127
|
-
|
128
|
-
@stack_hs.keys.sort.each do |k|
|
129
|
-
# TXTファイルに出力
|
130
|
-
putsx "#{k},#{@stack_hs[k]}"
|
131
|
-
end
|
132
|
-
|
133
|
-
pp memo[:defaultNotebook]
|
134
|
-
end
|
135
|
-
|
136
|
-
def register_notebook( stack , nbinfo )
|
137
|
-
@stack_hs[stack] ||= []
|
138
|
-
@stack_hs[stack] << nbinfo
|
139
|
-
@nbinfos[nbinfo.name] = nbinfo
|
140
|
-
|
141
|
-
@output_csv << [ stack , nbinfo.name , nbinfo.count ]
|
142
|
-
end
|
143
|
-
end
|
144
10
|
end
|
data/lib/enop/dbutil.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'enop/dbutil/enopmgr'
|
3
|
+
require 'forwardable'
|
4
|
+
require 'pp'
|
5
|
+
|
6
|
+
module Enop
|
7
|
+
module Dbutil
|
8
|
+
class DbMgr
|
9
|
+
extend Forwardable
|
10
|
+
|
11
|
+
def_delegator( :@ennblistmgr , :add, :add)
|
12
|
+
|
13
|
+
def initialize( register_time )
|
14
|
+
@ennblistmgr = EnopMgr.new( register_time )
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
require 'active_record'
|
2
3
|
require 'forwardable'
|
3
4
|
require 'pp'
|
4
5
|
|
@@ -20,21 +21,9 @@ module Enop
|
|
20
21
|
class Countdatetime < ActiveRecord::Base
|
21
22
|
end
|
22
23
|
|
23
|
-
class DbMgr
|
24
|
-
extend Forwardable
|
25
|
-
|
26
|
-
def_delegator( :@ennblistmgr , :add, :add)
|
27
|
-
|
28
|
-
def initialize( register_time )
|
29
|
-
@ennblistmgr = EnopMgr.new( register_time )
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
24
|
class EnopMgr
|
35
|
-
|
36
25
|
extend Forwardable
|
37
|
-
|
26
|
+
|
38
27
|
def initialize(register_time)
|
39
28
|
@register_time = register_time
|
40
29
|
@ct = Countdatetime.create( countdatetime: @register_time )
|
@@ -79,7 +68,7 @@ module Enop
|
|
79
68
|
end
|
80
69
|
ennblist
|
81
70
|
end
|
82
|
-
|
71
|
+
|
83
72
|
def post_process( dir_id )
|
84
73
|
h_ids = Currentennblist.pluck(:org_id)
|
85
74
|
t_ids = @hs_by_id.keys
|
@@ -93,3 +82,5 @@ module Enop
|
|
93
82
|
end
|
94
83
|
end
|
95
84
|
end
|
85
|
+
|
86
|
+
|
data/lib/enop/enop.rb
ADDED
@@ -0,0 +1,140 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'evernote-thrift'
|
3
|
+
require 'csv'
|
4
|
+
require 'pp'
|
5
|
+
|
6
|
+
require 'forwardable'
|
7
|
+
|
8
|
+
module Enop
|
9
|
+
class Enop
|
10
|
+
extend Forwardable
|
11
|
+
|
12
|
+
def_delegator( :@dbmgr , :add , :db_add)
|
13
|
+
|
14
|
+
def initialize( authToken , kind, hs )
|
15
|
+
|
16
|
+
@stack_hs = {}
|
17
|
+
@nbinfos = {}
|
18
|
+
@notebookinfo = Struct.new("NotebookInfo", :name, :stack, :defaultNotebook, :count , :tags )
|
19
|
+
|
20
|
+
@authToken = authToken
|
21
|
+
|
22
|
+
@dbmgr = Arxutils::Store.init(kind , hs ){ | register_time |
|
23
|
+
Dbutil::DbMgr.new( register_time )
|
24
|
+
}
|
25
|
+
|
26
|
+
evernoteHost = "www.evernote.com"
|
27
|
+
userStoreUrl = "https://#{evernoteHost}/edam/user"
|
28
|
+
userStoreTransport = Thrift::HTTPClientTransport.new(userStoreUrl)
|
29
|
+
userStoreProtocol = Thrift::BinaryProtocol.new(userStoreTransport)
|
30
|
+
@userStore = Evernote::EDAM::UserStore::UserStore::Client.new(userStoreProtocol)
|
31
|
+
|
32
|
+
versionOK = @userStore.checkVersion("Evernote EDAMTest (Ruby)",
|
33
|
+
Evernote::EDAM::UserStore::EDAM_VERSION_MAJOR,
|
34
|
+
Evernote::EDAM::UserStore::EDAM_VERSION_MINOR)
|
35
|
+
puts "Is my Evernote API version up to date? #{versionOK}"
|
36
|
+
puts
|
37
|
+
exit(1) unless versionOK
|
38
|
+
|
39
|
+
set_output_dest( get_output_filename_base )
|
40
|
+
end
|
41
|
+
|
42
|
+
def set_output_dest( fname )
|
43
|
+
if fname
|
44
|
+
fname_txt = fname + ".txt"
|
45
|
+
fname_csv = fname + ".csv"
|
46
|
+
@output = File.open( fname_txt , "w" , { :encoding => 'UTF-8' } )
|
47
|
+
@output_csv = CSV.open( fname_csv , "w" , { :encoding => 'UTF-8' } )
|
48
|
+
else
|
49
|
+
@output = STDOUT
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def get_output_filename_base
|
54
|
+
Time.now.strftime("ennblist-%Y-%m-%d-%H-%M-%S")
|
55
|
+
end
|
56
|
+
|
57
|
+
def putsx( str )
|
58
|
+
@output.puts( str )
|
59
|
+
end
|
60
|
+
|
61
|
+
def connect
|
62
|
+
# Get the URL used to interact with the contents of the user's account
|
63
|
+
# When your application authenticates using OAuth, the NoteStore URL will
|
64
|
+
# be returned along with the auth token in the final OAuth request.
|
65
|
+
# In that case, you don't need to make this call.
|
66
|
+
#noteStoreUrl = userStore.getNoteStoreUrl(authToken)
|
67
|
+
noteStoreUrl = "https://www.evernote.com/shard/s18/notestore"
|
68
|
+
|
69
|
+
noteStoreTransport = Thrift::HTTPClientTransport.new(noteStoreUrl)
|
70
|
+
noteStoreProtocol = Thrift::BinaryProtocol.new(noteStoreTransport)
|
71
|
+
@noteStore = Evernote::EDAM::NoteStore::NoteStore::Client.new(noteStoreProtocol)
|
72
|
+
end
|
73
|
+
|
74
|
+
def list_notebooks
|
75
|
+
# List all of the notebooks in the user's account
|
76
|
+
filter = Evernote::EDAM::NoteStore::NoteFilter.new
|
77
|
+
|
78
|
+
begin
|
79
|
+
notebooks = @noteStore.listNotebooks(@authToken)
|
80
|
+
rescue => ex
|
81
|
+
puts "Can't call listNotebooks"
|
82
|
+
exit
|
83
|
+
end
|
84
|
+
|
85
|
+
puts "Found #{notebooks.size} notebooks:"
|
86
|
+
memo = notebooks.inject({:defaultNotebook => nil , :nbinfo => []}) do |memo , notebook|
|
87
|
+
notebook_name = ( notebook.name == nil ? "" : notebook.name )
|
88
|
+
stack_name = ( notebook.stack == nil ? "" : notebook.stack )
|
89
|
+
|
90
|
+
filter.notebookGuid = notebook.guid
|
91
|
+
|
92
|
+
ret = nil
|
93
|
+
begin
|
94
|
+
ret = @noteStore.findNoteCounts(@authToken , filter , false )
|
95
|
+
rescue => ex
|
96
|
+
puts "Can't call findNoteCounts with #{notebook_name}"
|
97
|
+
end
|
98
|
+
|
99
|
+
if ret
|
100
|
+
if ret.notebookCounts
|
101
|
+
notebookCounts = ret.notebookCounts[notebook.guid]
|
102
|
+
else
|
103
|
+
notebookCounts = 0
|
104
|
+
end
|
105
|
+
tagcount = 0
|
106
|
+
if ret.tagCounts
|
107
|
+
tagcount = ret.tagCounts.size
|
108
|
+
end
|
109
|
+
nbinfo = @notebookinfo.new( notebook_name , stack_name , notebook.defaultNotebook , notebookCounts , tagcount )
|
110
|
+
# CSVファイルへ追加(自動的に出力)
|
111
|
+
register_notebook( nbinfo.stack , nbinfo )
|
112
|
+
# dbへの登録
|
113
|
+
db_add( nbinfo.stack , nbinfo.name , nbinfo.count , nbinfo.tags.size )
|
114
|
+
|
115
|
+
# p notebook
|
116
|
+
memo[:defaultNotebook] = nbinfo if nbinfo.defaultNotebook
|
117
|
+
memo[:nbinfo] << nbinfo
|
118
|
+
end
|
119
|
+
|
120
|
+
memo
|
121
|
+
end
|
122
|
+
|
123
|
+
@stack_hs.keys.sort.each do |k|
|
124
|
+
# TXTファイルに出力
|
125
|
+
putsx "#{k},#{@stack_hs[k]}"
|
126
|
+
end
|
127
|
+
|
128
|
+
pp memo[:defaultNotebook]
|
129
|
+
end
|
130
|
+
|
131
|
+
def register_notebook( stack , nbinfo )
|
132
|
+
@stack_hs[stack] ||= []
|
133
|
+
@stack_hs[stack] << nbinfo
|
134
|
+
@nbinfos[nbinfo.name] = nbinfo
|
135
|
+
|
136
|
+
@output_csv << [ stack , nbinfo.name , nbinfo.count ]
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
data/lib/enop/version.rb
CHANGED
metadata
CHANGED
@@ -1,111 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enop
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yasuo kominami
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-09-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: evernote_oauth
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activerecord
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: sqlite3
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: arxutils
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: bundler
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - ~>
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '1.10'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - ~>
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.10'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rake
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - ~>
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '10.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - ~>
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '10.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - ">="
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - ">="
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: evernote operation.
|
@@ -117,9 +117,9 @@ executables:
|
|
117
117
|
extensions: []
|
118
118
|
extra_rdoc_files: []
|
119
119
|
files:
|
120
|
-
- .gitignore
|
121
|
-
- .rspec
|
122
|
-
- .travis.yml
|
120
|
+
- ".gitignore"
|
121
|
+
- ".rspec"
|
122
|
+
- ".travis.yml"
|
123
123
|
- Gemfile
|
124
124
|
- README.md
|
125
125
|
- Rakefile
|
@@ -128,10 +128,11 @@ files:
|
|
128
128
|
- enop.gemspec
|
129
129
|
- exe/enop
|
130
130
|
- exe/makemigrate
|
131
|
-
- lib/dbutil_enop.rb
|
132
|
-
- lib/en_oauth.rb
|
133
|
-
- lib/ennb.rb
|
134
131
|
- lib/enop.rb
|
132
|
+
- lib/enop/dbutil.rb
|
133
|
+
- lib/enop/dbutil/dbmgr.rb
|
134
|
+
- lib/enop/dbutil/enopmgr.rb
|
135
|
+
- lib/enop/enop.rb
|
135
136
|
- lib/enop/version.rb
|
136
137
|
- lib/evernote_config.rb
|
137
138
|
homepage: ''
|
@@ -143,12 +144,12 @@ require_paths:
|
|
143
144
|
- lib
|
144
145
|
required_ruby_version: !ruby/object:Gem::Requirement
|
145
146
|
requirements:
|
146
|
-
- -
|
147
|
+
- - ">="
|
147
148
|
- !ruby/object:Gem::Version
|
148
149
|
version: '0'
|
149
150
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
151
|
requirements:
|
151
|
-
- -
|
152
|
+
- - ">="
|
152
153
|
- !ruby/object:Gem::Version
|
153
154
|
version: '0'
|
154
155
|
requirements: []
|
@@ -158,3 +159,4 @@ signing_key:
|
|
158
159
|
specification_version: 4
|
159
160
|
summary: evernote operation.
|
160
161
|
test_files: []
|
162
|
+
has_rdoc:
|
data/lib/en_oauth.rb
DELETED
@@ -1,314 +0,0 @@
|
|
1
|
-
##
|
2
|
-
# Copyright 2012 Evernote Corporation. All rights reserved.
|
3
|
-
##
|
4
|
-
|
5
|
-
require 'sinatra'
|
6
|
-
require 'sinatra/reloader'
|
7
|
-
enable :sessions
|
8
|
-
|
9
|
-
# Load our dependencies and configuration settings
|
10
|
-
$LOAD_PATH.push(File.expand_path(File.dirname(__FILE__)))
|
11
|
-
|
12
|
-
#set :port, 4569
|
13
|
-
set :port, 4570
|
14
|
-
|
15
|
-
require "evernote_config.rb"
|
16
|
-
|
17
|
-
##
|
18
|
-
# Verify that you have obtained an Evernote API key
|
19
|
-
##
|
20
|
-
before do
|
21
|
-
if OAUTH_CONSUMER_KEY.empty? || OAUTH_CONSUMER_SECRET.empty?
|
22
|
-
halt '<span style="color:red">Before using this sample code you must edit evernote_config.rb and replace OAUTH_CONSUMER_KEY and OAUTH_CONSUMER_SECRET with the values that you received from Evernote. If you do not have an API key, you can request one from <a href="http://dev.evernote.com/documentation/cloud/">dev.evernote.com/documentation/cloud/</a>.</span>'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
helpers do
|
27
|
-
def auth_token
|
28
|
-
session[:access_token].token if session[:access_token]
|
29
|
-
end
|
30
|
-
|
31
|
-
def client
|
32
|
-
@client ||= EvernoteOAuth::Client.new(token: auth_token, consumer_key:OAUTH_CONSUMER_KEY, consumer_secret:OAUTH_CONSUMER_SECRET, sandbox: SANDBOX)
|
33
|
-
end
|
34
|
-
|
35
|
-
def user_store
|
36
|
-
@user_store ||= client.user_store
|
37
|
-
end
|
38
|
-
|
39
|
-
def note_store
|
40
|
-
@note_store ||= client.note_store
|
41
|
-
end
|
42
|
-
|
43
|
-
def en_user
|
44
|
-
user_store.getUser(auth_token)
|
45
|
-
end
|
46
|
-
|
47
|
-
def notebooks
|
48
|
-
@notebooks ||= note_store.listNotebooks(auth_token)
|
49
|
-
end
|
50
|
-
|
51
|
-
def total_note_count
|
52
|
-
filter = Evernote::EDAM::NoteStore::NoteFilter.new
|
53
|
-
counts = note_store.findNoteCounts(auth_token, filter, false)
|
54
|
-
notebooks.inject(0) do |total_count, notebook|
|
55
|
-
total_count + (counts.notebookCounts[notebook.guid] || 0)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def notebooks_hash
|
60
|
-
@notebooks_hash ||= {}
|
61
|
-
if @notebooks_hash.size != notebooks.size
|
62
|
-
notebooks.each do |x|
|
63
|
-
@notebooks_hash[x.name] = x
|
64
|
-
end
|
65
|
-
end
|
66
|
-
@notebooks_hash
|
67
|
-
end
|
68
|
-
|
69
|
-
def notes(guid)
|
70
|
-
filter = Evernote::EDAM::NoteStore::NoteFilter.new
|
71
|
-
# filter.notebookGuid = @notebook.guid
|
72
|
-
filter.notebookGuid = guid
|
73
|
-
@found_n = note_store.findNotes(auth_token, filter, 0 , 100 )
|
74
|
-
# @found_notes = @found_n.notes
|
75
|
-
@found_n.notes
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
##
|
80
|
-
# Index page
|
81
|
-
##
|
82
|
-
get '/' do
|
83
|
-
erb :index
|
84
|
-
end
|
85
|
-
|
86
|
-
##
|
87
|
-
# Reset the session
|
88
|
-
##
|
89
|
-
get '/reset' do
|
90
|
-
session.clear
|
91
|
-
redirect '/'
|
92
|
-
end
|
93
|
-
|
94
|
-
##
|
95
|
-
# Obtain temporary credentials
|
96
|
-
##
|
97
|
-
get '/requesttoken' do
|
98
|
-
callback_url = request.url.chomp("requesttoken").concat("callback")
|
99
|
-
begin
|
100
|
-
session[:request_token] = client.request_token(:oauth_callback => callback_url)
|
101
|
-
redirect '/authorize'
|
102
|
-
rescue => e
|
103
|
-
@last_error = "3 Error obtaining temporary credentials: #{e.message}"
|
104
|
-
erb :error
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
##
|
109
|
-
# Redirect the user to Evernote for authoriation
|
110
|
-
##
|
111
|
-
get '/authorize' do
|
112
|
-
if session[:request_token]
|
113
|
-
redirect session[:request_token].authorize_url
|
114
|
-
else
|
115
|
-
# You shouldn't be invoking this if you don't have a request token
|
116
|
-
@last_error = "Request token not set."
|
117
|
-
erb :error
|
118
|
-
end
|
119
|
-
end
|
120
|
-
|
121
|
-
##
|
122
|
-
# Receive callback from the Evernote authorization page
|
123
|
-
##
|
124
|
-
get '/callback' do
|
125
|
-
unless params['oauth_verifier'] || session['request_token']
|
126
|
-
@last_error = "Content owner did not authorize the temporary credentials"
|
127
|
-
halt erb :error
|
128
|
-
end
|
129
|
-
session[:oauth_verifier] = params['oauth_verifier']
|
130
|
-
begin
|
131
|
-
session[:access_token] = session[:request_token].get_access_token(:oauth_verifier => session[:oauth_verifier])
|
132
|
-
redirect '/list'
|
133
|
-
rescue => e
|
134
|
-
@last_error = '2 Error extracting access token'
|
135
|
-
erb :error
|
136
|
-
end
|
137
|
-
end
|
138
|
-
|
139
|
-
|
140
|
-
##
|
141
|
-
# Access the user's Evernote account and display account data
|
142
|
-
##
|
143
|
-
get '/list' do
|
144
|
-
begin
|
145
|
-
# Get notebooks
|
146
|
-
session[:notebooks] = notebooks.collect{ |notebook|
|
147
|
-
[ notebook.name , notebook.guid ]
|
148
|
-
}
|
149
|
-
# session[:notebooks] = notebooks.map(&:name)
|
150
|
-
# Get username
|
151
|
-
session[:username] = en_user.username
|
152
|
-
# Get total note count
|
153
|
-
session[:total_notes] = total_note_count
|
154
|
-
erb :index
|
155
|
-
rescue => e
|
156
|
-
# @last_error = "Error listing notebooks: #{e.message}"
|
157
|
-
@last_error = "1 Error listing notebooks: #{e}"
|
158
|
-
erb :error
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
##
|
163
|
-
#
|
164
|
-
##
|
165
|
-
get '/notebook/:name/:guid' do
|
166
|
-
begin
|
167
|
-
session[:notebook_name] = params[:name]
|
168
|
-
session[:notebook_guid] = params[:guid]
|
169
|
-
|
170
|
-
# @notebook = notebooks_hash[ params[:name] ]
|
171
|
-
@found_notes = notes( params[:guid] )
|
172
|
-
|
173
|
-
erb :notes
|
174
|
-
rescue => e
|
175
|
-
@last_error = "0 Error listing notebook: #{e.message}"
|
176
|
-
erb :error
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
get '/create_note/:name/:guid' do
|
181
|
-
begin
|
182
|
-
ENML_HEADER = <<HEADER
|
183
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
184
|
-
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
|
185
|
-
HEADER
|
186
|
-
|
187
|
-
note_content = <<CONTENT
|
188
|
-
#{ENML_HEADER}
|
189
|
-
<en-note>Hello, my Evernote (from Ruby)!</en-note>
|
190
|
-
CONTENT
|
191
|
-
|
192
|
-
note = Evernote::EDAM::Type::Note.new
|
193
|
-
note.title = "Note Title"
|
194
|
-
note.notebookGuid = params[:guid]
|
195
|
-
note.content = note_content
|
196
|
-
note_store.createNote( auth_token , note)
|
197
|
-
@found_notes = notes(session[:notebook_guid])
|
198
|
-
|
199
|
-
erb :notes
|
200
|
-
rescue => e
|
201
|
-
@last_error = "0 Error listing notebook: #{e.message}"
|
202
|
-
erb :error
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
|
207
|
-
__END__
|
208
|
-
|
209
|
-
@@ index
|
210
|
-
<html>
|
211
|
-
<head>
|
212
|
-
<title>Evernote Ruby Example App</title>
|
213
|
-
</head>
|
214
|
-
<body>
|
215
|
-
<a href="/requesttoken">Click here</a> to authenticate this application using OAuth.
|
216
|
-
<% if session[:notebooks] %>
|
217
|
-
<hr />
|
218
|
-
<h3>The current user is <%= session[:username] %> and there are <%= session[:total_notes] %> notes in their account</h3>
|
219
|
-
<br />
|
220
|
-
<h3>Here are the notebooks in this account:</h3>
|
221
|
-
<ul>
|
222
|
-
<% session[:notebooks].each do |notebook| %>
|
223
|
-
<% p session[:notebooks] %>
|
224
|
-
<li><a href="/notebook/<%= notebook[0] %>/<%= notebook[1] %>"><%= notebook[0] %></a></li>
|
225
|
-
<% end %>
|
226
|
-
</ul>
|
227
|
-
<% end %>
|
228
|
-
</body>
|
229
|
-
</html>
|
230
|
-
|
231
|
-
@@ error
|
232
|
-
<html>
|
233
|
-
<head>
|
234
|
-
<title>Evernote Ruby Example App — Error</title>
|
235
|
-
</head>
|
236
|
-
<body>
|
237
|
-
<p>An error occurred: <%= @last_error %></p>
|
238
|
-
<p>Please <a href="/reset">start over</a>.</p>
|
239
|
-
</body>
|
240
|
-
</html>
|
241
|
-
|
242
|
-
@@ notebook
|
243
|
-
<html>
|
244
|
-
<head>
|
245
|
-
</head>
|
246
|
-
<body>
|
247
|
-
<table>
|
248
|
-
<% @found_notes.collect do |x| %>
|
249
|
-
<tr>
|
250
|
-
<td>
|
251
|
-
<%= x.guid %>
|
252
|
-
</td>
|
253
|
-
<td>
|
254
|
-
<%= x.title %>
|
255
|
-
</td>
|
256
|
-
</tr>
|
257
|
-
<% end %>
|
258
|
-
</table>
|
259
|
-
<form action="/create_note" method="get">
|
260
|
-
<input type="text" name="val" value="1">
|
261
|
-
<input type="submit" value="Create Note">
|
262
|
-
</form>
|
263
|
-
</body>
|
264
|
-
</html>
|
265
|
-
|
266
|
-
@@ notes
|
267
|
-
<html>
|
268
|
-
<head>
|
269
|
-
</head>
|
270
|
-
<body>
|
271
|
-
<table>
|
272
|
-
<% @found_notes.collect do |x| %>
|
273
|
-
<tr>
|
274
|
-
<td>
|
275
|
-
<%= x.guid %>
|
276
|
-
</td>
|
277
|
-
<td>
|
278
|
-
<%= x.title %>
|
279
|
-
</td>
|
280
|
-
</tr>
|
281
|
-
<% end %>
|
282
|
-
</table>
|
283
|
-
<form action="/create_note/<%= session[:notebook_name] %>/<%= session[:notebook_guid] %>" method="get">
|
284
|
-
<input type="text" name="val" value="1">
|
285
|
-
<input type="submit" value="Create Note">
|
286
|
-
</form>
|
287
|
-
</body>
|
288
|
-
</html>
|
289
|
-
|
290
|
-
@@ notebook1
|
291
|
-
<html>
|
292
|
-
<head>
|
293
|
-
</head>
|
294
|
-
<body>
|
295
|
-
Notebook<p>
|
296
|
-
<%= p @notebook.class %><p>
|
297
|
-
<%= p @found_n.class %><p>
|
298
|
-
<%= p @found_notes.class %><p>
|
299
|
-
<ul>
|
300
|
-
<% p @found_notes; @found_notes.each do |note| %>
|
301
|
-
<li><a href="/note/<%= note.name %>/<%= note.guid %>"><%= note.name %></li>
|
302
|
-
<% end %>
|
303
|
-
</ul>
|
304
|
-
</body>
|
305
|
-
</html>
|
306
|
-
|
307
|
-
@@ note
|
308
|
-
<html>
|
309
|
-
<head>
|
310
|
-
</head>
|
311
|
-
<body>
|
312
|
-
|
313
|
-
</body>
|
314
|
-
</html>
|
data/lib/ennb.rb
DELETED
@@ -1,149 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
require 'evernote-thrift'
|
4
|
-
require 'csv'
|
5
|
-
require 'pp'
|
6
|
-
|
7
|
-
require 'forwardable'
|
8
|
-
require 'dbutil_base'
|
9
|
-
require 'dbutil_ennblist'
|
10
|
-
|
11
|
-
class Ennb
|
12
|
-
extend Forwardable
|
13
|
-
|
14
|
-
def_delegator( :@dbmgr , :add , :db_add)
|
15
|
-
|
16
|
-
def initialize
|
17
|
-
@sqlite3yaml = 'config/sqlite3.yaml'
|
18
|
-
@databaselog = 'db/database.log'
|
19
|
-
|
20
|
-
@stack_hs = {}
|
21
|
-
@nbinfos = {}
|
22
|
-
@notebookinfo = Struct.new("NotebookInfo", :name, :stack, :defaultNotebook, :count , :tags )
|
23
|
-
|
24
|
-
@authToken = "S=s18:U=1f38cb:E=15110796cd9:C=149b8c83d38:P=1cd:A=en-devtoken:V=2:H=970049a2b990ad5e0f58252a626539b0"
|
25
|
-
|
26
|
-
evernoteHost = "www.evernote.com"
|
27
|
-
userStoreUrl = "https://#{evernoteHost}/edam/user"
|
28
|
-
userStoreTransport = Thrift::HTTPClientTransport.new(userStoreUrl)
|
29
|
-
userStoreProtocol = Thrift::BinaryProtocol.new(userStoreTransport)
|
30
|
-
@userStore = Evernote::EDAM::UserStore::UserStore::Client.new(userStoreProtocol)
|
31
|
-
|
32
|
-
versionOK = @userStore.checkVersion("Evernote EDAMTest (Ruby)",
|
33
|
-
Evernote::EDAM::UserStore::EDAM_VERSION_MAJOR,
|
34
|
-
Evernote::EDAM::UserStore::EDAM_VERSION_MINOR)
|
35
|
-
puts "Is my Evernote API version up to date? #{versionOK}"
|
36
|
-
puts
|
37
|
-
exit(1) unless versionOK
|
38
|
-
|
39
|
-
set_output_dest( get_output_filename_base )
|
40
|
-
|
41
|
-
dbx
|
42
|
-
end
|
43
|
-
|
44
|
-
def dbx
|
45
|
-
@dbmgr = Dbutil::DbMgr.init( @sqlite3yaml , @databaselog )
|
46
|
-
end
|
47
|
-
|
48
|
-
def set_output_dest( fname )
|
49
|
-
if fname
|
50
|
-
fname_txt = fname + ".txt"
|
51
|
-
fname_csv = fname + ".csv"
|
52
|
-
@output = File.open( fname_txt , "w" , { :encoding => 'UTF-8' } )
|
53
|
-
@output_csv = CSV.open( fname_csv , "w" , { :encoding => 'UTF-8' } )
|
54
|
-
else
|
55
|
-
@output = STDOUT
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def get_output_filename_base
|
60
|
-
Time.now.strftime("ennblist-%Y-%m-%d-%H-%M-%S")
|
61
|
-
end
|
62
|
-
|
63
|
-
def putsx( str )
|
64
|
-
@output.puts( str )
|
65
|
-
end
|
66
|
-
|
67
|
-
def connect
|
68
|
-
# Get the URL used to interact with the contents of the user's account
|
69
|
-
# When your application authenticates using OAuth, the NoteStore URL will
|
70
|
-
# be returned along with the auth token in the final OAuth request.
|
71
|
-
# In that case, you don't need to make this call.
|
72
|
-
#noteStoreUrl = userStore.getNoteStoreUrl(authToken)
|
73
|
-
noteStoreUrl = "https://www.evernote.com/shard/s18/notestore"
|
74
|
-
|
75
|
-
noteStoreTransport = Thrift::HTTPClientTransport.new(noteStoreUrl)
|
76
|
-
noteStoreProtocol = Thrift::BinaryProtocol.new(noteStoreTransport)
|
77
|
-
@noteStore = Evernote::EDAM::NoteStore::NoteStore::Client.new(noteStoreProtocol)
|
78
|
-
end
|
79
|
-
|
80
|
-
def list_notebooks
|
81
|
-
# List all of the notebooks in the user's account
|
82
|
-
filter = Evernote::EDAM::NoteStore::NoteFilter.new
|
83
|
-
|
84
|
-
begin
|
85
|
-
notebooks = @noteStore.listNotebooks(@authToken)
|
86
|
-
rescue => ex
|
87
|
-
puts "Can't call listNotebooks"
|
88
|
-
exit
|
89
|
-
end
|
90
|
-
|
91
|
-
puts "Found #{notebooks.size} notebooks:"
|
92
|
-
memo = notebooks.inject({:defaultNotebook => nil , :nbinfo => []}) do |memo , notebook|
|
93
|
-
notebook_name = ( notebook.name == nil ? "" : notebook.name )
|
94
|
-
stack_name = ( notebook.stack == nil ? "" : notebook.stack )
|
95
|
-
|
96
|
-
filter.notebookGuid = notebook.guid
|
97
|
-
|
98
|
-
ret = nil
|
99
|
-
begin
|
100
|
-
ret = @noteStore.findNoteCounts(@authToken , filter , false )
|
101
|
-
rescue => ex
|
102
|
-
puts "Can't call findNoteCounts with #{notebook_name}"
|
103
|
-
end
|
104
|
-
|
105
|
-
if ret
|
106
|
-
if ret.notebookCounts
|
107
|
-
notebookCounts = ret.notebookCounts[notebook.guid]
|
108
|
-
else
|
109
|
-
notebookCounts = 0
|
110
|
-
end
|
111
|
-
tagcount = 0
|
112
|
-
if ret.tagCounts
|
113
|
-
tagcount = ret.tagCounts.size
|
114
|
-
end
|
115
|
-
nbinfo = @notebookinfo.new( notebook_name , stack_name , notebook.defaultNotebook , notebookCounts , tagcount )
|
116
|
-
# CSVファイルへ追加(自動的に出力)
|
117
|
-
register_notebook( nbinfo.stack , nbinfo )
|
118
|
-
# dbへの登録
|
119
|
-
db_add( nbinfo.stack , nbinfo.name , nbinfo.count , nbinfo.tags.size )
|
120
|
-
|
121
|
-
# p notebook
|
122
|
-
memo[:defaultNotebook] = nbinfo if nbinfo.defaultNotebook
|
123
|
-
memo[:nbinfo] << nbinfo
|
124
|
-
end
|
125
|
-
|
126
|
-
memo
|
127
|
-
end
|
128
|
-
|
129
|
-
@stack_hs.keys.sort.each do |k|
|
130
|
-
# TXTファイルに出力
|
131
|
-
putsx "#{k},#{@stack_hs[k]}"
|
132
|
-
end
|
133
|
-
|
134
|
-
pp memo[:defaultNotebook]
|
135
|
-
end
|
136
|
-
|
137
|
-
def register_notebook( stack , nbinfo )
|
138
|
-
@stack_hs[stack] ||= []
|
139
|
-
@stack_hs[stack] << nbinfo
|
140
|
-
@nbinfos[nbinfo.name] = nbinfo
|
141
|
-
|
142
|
-
@output_csv << [ stack , nbinfo.name , nbinfo.count ]
|
143
|
-
end
|
144
|
-
end
|
145
|
-
|
146
|
-
ennb = Ennb.new
|
147
|
-
ennb.connect
|
148
|
-
ennb.list_notebooks
|
149
|
-
|