akane 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.
@@ -0,0 +1,16 @@
1
+ require 'simplecov'
2
+ SimpleCov.start
3
+
4
+ RSpec.configure do |config|
5
+ config.treat_symbols_as_metadata_keys_with_true_values = true
6
+ config.run_all_when_everything_filtered = true
7
+ config.filter_run :focus
8
+
9
+ # Run specs in random order to surface order dependencies. If you find an
10
+ # order dependency and want to debug it, you can fix the order by providing
11
+ # the seed, which is printed after each run.
12
+ # --seed 1234
13
+ config.order = 'random'
14
+ end
15
+
16
+ require_relative './support/mock_tweetstream'
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+ require 'logger'
3
+ require 'akane/storages/abstract_storage'
4
+
5
+ describe Akane::Storages::AbstractStorage do
6
+ let(:config) { {} }
7
+ subject { described_class.new(config: config, logger: Logger.new(nil)) }
8
+
9
+ describe "#record_tweet" do
10
+ end
11
+
12
+ describe "#mark_as_deleted" do
13
+ end
14
+
15
+ describe "#record_event" do
16
+ end
17
+
18
+ describe "#record_message" do
19
+ end
20
+ end
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+ require 'akane/storages/mock'
3
+
4
+ describe Akane::Storages::Mock do
5
+ let(:config) { {} }
6
+ subject { described_class.new(config: config, logger: Logger.new(nil)) }
7
+
8
+ describe "#record_tweet" do
9
+ it "records in memory" do
10
+ described_class.recorded_tweets.clear
11
+ expect { subject.record_tweet('a', "id" => 42) } \
12
+ .to change { described_class.recorded_tweets.last } \
13
+ .from(nil).to(['a', "id" => 42])
14
+ end
15
+ end
16
+
17
+ describe "#mark_as_deleted" do
18
+ it "records in memory" do
19
+ described_class.deletion_marks.clear
20
+ expect { subject.mark_as_deleted('a', 1, 42) } \
21
+ .to change { described_class.deletion_marks.last } \
22
+ .from(nil).to(['a', 1, 42])
23
+ end
24
+ end
25
+
26
+ describe "#record_event" do
27
+ it "records in memory" do
28
+ described_class.recorded_events.clear
29
+ expect { subject.record_event('a', 'event' => 'some') } \
30
+ .to change { described_class.recorded_events.last } \
31
+ .from(nil).to(['a', 'event' => 'some'])
32
+ end
33
+ end
34
+
35
+ describe "#record_message" do
36
+ it "records in memory" do
37
+ described_class.recorded_messages.clear
38
+ expect { subject.record_message('a', 'id' => 10) } \
39
+ .to change { described_class.recorded_messages.last } \
40
+ .from(nil).to(['a', 'id' => 10])
41
+ end
42
+ end
43
+
44
+ describe ".reset!" do
45
+ it "flushes all recorded" do
46
+ described_class.recorded_tweets << 1
47
+ described_class.recorded_events << 1
48
+ described_class.recorded_messages << 1
49
+ described_class.deletion_marks << 1
50
+
51
+ expect { described_class.reset! } \
52
+ .to change { [described_class.recorded_tweets,
53
+ described_class.recorded_messages,
54
+ described_class.recorded_events,
55
+ described_class.deletion_marks].map(&:empty?) } \
56
+ .from([false,false,false,false]).to([true,true,true,true])
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,86 @@
1
+ require 'tweetstream'
2
+
3
+
4
+ class TweetStream::MockClient
5
+ Original = TweetStream::Client
6
+
7
+ class << self
8
+ def clients
9
+ @clients ||= []
10
+ end
11
+
12
+ def invoke(event, *args)
13
+ @clients.each do |client|
14
+ client.invoke(event, *args)
15
+ end
16
+
17
+ self
18
+ end
19
+
20
+ def enable!
21
+ klass = self
22
+ TweetStream.instance_eval {
23
+ remove_const :Client
24
+ const_set :Client, klass
25
+ }
26
+ end
27
+
28
+ def disable!
29
+ klass = Original
30
+ TweetStream.instance_eval {
31
+ remove_const :Client
32
+ const_set :Client, klass
33
+ }
34
+ end
35
+ end
36
+
37
+ def initialize(options={})
38
+ @options = options
39
+ @hooks = {}
40
+ end
41
+
42
+ attr_accessor :options, :hooks
43
+
44
+ def on_anything(&block) on('anything', &block) end
45
+
46
+ def on_event(event, &block) on(event, &block) end
47
+
48
+ def on_timeline_status(&block) on('timeline_status', &block) end
49
+ def on_delete(&block) on('delete', &block) end
50
+
51
+ def on_direct_message(&block) on('direct_message', &block) end
52
+
53
+ def on_limit(&block) on('limit', &block) end
54
+ def on_error(&block) on('error', &block) end
55
+ def on_unauthorized(&block) on('unauthorized', &block) end
56
+
57
+ def on_inited(&block) on('inited', &block) end
58
+ def on_reconnect(&block) on('reconnect', &block) end
59
+
60
+ def on(event, &block)
61
+ @hooks[event.to_s] = block
62
+ self
63
+ end
64
+
65
+ def invoke(event, *args)
66
+ @hooks[event.to_s].call *args
67
+ end
68
+
69
+ def connected?
70
+ @connected
71
+ end
72
+
73
+ def userstream
74
+ @connected = true
75
+ self.class.clients << self
76
+ self
77
+ end
78
+
79
+ def stop_stream
80
+ self.class.clients.delete(self)
81
+ @connected = false
82
+ self
83
+ end
84
+ end
85
+
86
+ TweetStream::MockClient.enable!
metadata ADDED
@@ -0,0 +1,169 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: akane
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Shota Fukumori (sora_h)
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-01-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: tweetstream
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.6.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.6.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: elasticsearch
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.4.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.4.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 2.14.1
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 2.14.1
83
+ - !ruby/object:Gem::Dependency
84
+ name: simplecov
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: Log the timeline
98
+ email:
99
+ - her@sorah.jp
100
+ executables:
101
+ - akane
102
+ extensions: []
103
+ extra_rdoc_files: []
104
+ files:
105
+ - ".gitignore"
106
+ - ".rspec"
107
+ - Gemfile
108
+ - LICENSE.txt
109
+ - README.md
110
+ - Rakefile
111
+ - akane.gemspec
112
+ - bin/akane
113
+ - lib/akane.rb
114
+ - lib/akane/cli.rb
115
+ - lib/akane/config.rb
116
+ - lib/akane/manager.rb
117
+ - lib/akane/receivers/abstract_receiver.rb
118
+ - lib/akane/receivers/stream.rb
119
+ - lib/akane/recorder.rb
120
+ - lib/akane/storages/abstract_storage.rb
121
+ - lib/akane/storages/elasticsearch.rb
122
+ - lib/akane/storages/file.rb
123
+ - lib/akane/storages/mock.rb
124
+ - lib/akane/storages/stdout.rb
125
+ - lib/akane/version.rb
126
+ - spec/config_spec.rb
127
+ - spec/manager_spec.rb
128
+ - spec/receivers/abstract_receiver_spec.rb
129
+ - spec/receivers/stream_spec.rb
130
+ - spec/recorder_spec.rb
131
+ - spec/spec_helper.rb
132
+ - spec/storages/abstract_storage_spec.rb
133
+ - spec/storages/mock_spec.rb
134
+ - spec/support/mock_tweetstream.rb
135
+ homepage: https://github.com/sorah/akane
136
+ licenses:
137
+ - MIT
138
+ metadata: {}
139
+ post_install_message:
140
+ rdoc_options: []
141
+ require_paths:
142
+ - lib
143
+ required_ruby_version: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - ">="
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirements: []
154
+ rubyforge_project:
155
+ rubygems_version: 2.2.0
156
+ signing_key:
157
+ specification_version: 4
158
+ summary: Log your timeline to something
159
+ test_files:
160
+ - spec/config_spec.rb
161
+ - spec/manager_spec.rb
162
+ - spec/receivers/abstract_receiver_spec.rb
163
+ - spec/receivers/stream_spec.rb
164
+ - spec/recorder_spec.rb
165
+ - spec/spec_helper.rb
166
+ - spec/storages/abstract_storage_spec.rb
167
+ - spec/storages/mock_spec.rb
168
+ - spec/support/mock_tweetstream.rb
169
+ has_rdoc: