cosgrove 0.0.2 → 0.0.3rc1

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.
@@ -2,6 +2,10 @@ module Cosgrove
2
2
  module Utils
3
3
  include Config
4
4
 
5
+ def cycle_api_at
6
+ @cycle_api_at if defined? @cycle_api_at
7
+ end
8
+
5
9
  def reset_api
6
10
  @steem_api = @golos_api = @test_api = nil
7
11
  @steem_folow_api = @golos_follow_api = @test_folow_api = nil
@@ -9,12 +13,9 @@ module Cosgrove
9
13
  end
10
14
 
11
15
  def ping_api(chain)
12
- response = api(chain).get_config
13
-
14
- reset_api if !!response.error
15
-
16
- result = response.result
17
- reset_api unless result.keys.any?
16
+ api(chain).get_config do |config, errors|
17
+ reset_api if !!errors || config.keys.none?
18
+ end
18
19
 
19
20
  true
20
21
  end
@@ -43,7 +44,7 @@ module Cosgrove
43
44
  end
44
45
 
45
46
  def api(chain)
46
- reset_api if @cycle_api_at.nil? || @cycle_api_at < 15.minutes.ago
47
+ reset_api if cycle_api_at.nil? || cycle_api_at < 15.minutes.ago
47
48
 
48
49
  @cycle_api_at ||= Time.now
49
50
 
@@ -55,7 +56,7 @@ module Cosgrove
55
56
  end
56
57
 
57
58
  def follow_api(chain)
58
- reset_api if @cycle_api_at.nil? || @cycle_api_at < 15.minutes.ago
59
+ reset_api if cycle_api_at.nil? || cycle_api_at < 15.minutes.ago
59
60
 
60
61
  @cycle_api_at ||= Time.now
61
62
 
@@ -66,6 +67,10 @@ module Cosgrove
66
67
  end
67
68
  end
68
69
 
70
+ def cycle_stream_at
71
+ @cycle_stream_at if defined? @cycle_stream_at
72
+ end
73
+
69
74
  def reset_stream
70
75
  @steem_stream = @golos_stream = @test_stream = nil
71
76
  @steem_folow_stream = @golos_follow_stream = @test_folow_stream = nil
@@ -73,7 +78,7 @@ module Cosgrove
73
78
  end
74
79
 
75
80
  def stream(chain)
76
- reset_stream if @cycle_stream_at.nil? || @cycle_stream_at < 15.minutes.ago
81
+ reset_stream if cycle_stream_at.nil? || cycle_stream_at < 15.minutes.ago
77
82
 
78
83
  @cycle_stream_at ||= Time.now
79
84
 
@@ -85,7 +90,11 @@ module Cosgrove
85
90
  end
86
91
 
87
92
  def steem_data_head_block_number
88
- SteemData::Setting.last.last_block
93
+ begin
94
+ SteemData::Setting.last.last_block
95
+ rescue
96
+ -1
97
+ end
89
98
  end
90
99
 
91
100
  def properties(chain)
@@ -154,29 +163,128 @@ module Cosgrove
154
163
  []
155
164
  end
156
165
 
157
- def find_comment(slug)
166
+ def find_comment_by_slug(slug)
158
167
  author_name, permlink = parse_slug slug
159
- comment = nil
168
+ find_comment(chain: :steem, author_name: author_name, permlink: permlink)
169
+ end
170
+
171
+ def find_comment(options)
172
+ chain = options[:chain]
173
+ author_name = options[:author_name]
174
+ permlink = options[:permlink]
175
+ parent_permlink = options[:parent_permlink]
160
176
 
161
- begin
162
- comment = SteemData::Post.where(author: author_name, permlink: permlink).first
163
- rescue => e
164
- ap e
177
+ post = if chain == :steem
178
+ posts = SteemData::Post.root_posts.where(author: author_name)
179
+ posts = posts.where(permlink: permlink) if !!permlink
180
+ posts = posts.where(parent_permlink: parent_permlink) if !!parent_permlink
181
+
182
+ posts.first
183
+ end
184
+
185
+ if post.nil?
186
+ post = case chain
187
+ when :steem
188
+ posts = SteemApi::Comment.where(author: author_name)
189
+ posts = posts.where(permlink: permlink) if !!permlink
190
+ posts = posts.where(parent_permlink: parent_permlink) if !!parent_permlink
191
+
192
+ posts.first
193
+ when :golos
194
+ posts = GolosCloud::Comment.where(author: author_name)
195
+ posts = posts.where(permlink: permlink) if !!permlink
196
+ posts = posts.where(parent_permlink: parent_permlink) if !!parent_permlink
197
+
198
+ posts.first
199
+ end
165
200
  end
166
201
 
167
- if comment.nil?
168
- begin
169
- # Fall back to RPC
170
- response = api(:steem).get_content(author_name, permlink)
171
- unless response.result.author.empty?
172
- comment = response.result
202
+ if post.nil? && !!author_name && !!permlink
203
+ # Fall back to RPC
204
+ api(chain).get_content(author_name, permlink) do |content, errors|
205
+ unless content.author.empty?
206
+ post = content
173
207
  end
208
+ end
209
+ end
210
+
211
+ post
212
+ end
213
+
214
+ def find_author(options)
215
+ chain = options[:chain]
216
+ author_name = options[:author_name]
217
+
218
+ author = SteemData::Account.where(name: author_name).last
219
+
220
+ if author.nil?
221
+ author = begin
222
+ SteemApi::Account.where(name: author_name).last
174
223
  rescue => e
175
- ap e
224
+ puts e
225
+ end
226
+ end
227
+
228
+ if author.nil?
229
+ author = api(chain).get_accounts([author_name]) do |accounts, errors|
230
+ accounts.last
231
+ end
232
+ end
233
+
234
+ author
235
+ end
236
+
237
+ def find_transfer(options)
238
+ chain = options[:chain]
239
+ from = options[:from]
240
+ to = options[:to]
241
+ memo_key = options[:memo].to_s.strip
242
+
243
+ op = case chain
244
+ when :steem
245
+ transfers = SteemData::AccountOperation.type('transfer').
246
+ where(account: steem_account, from: from, to: steem_account, memo: {'$regex' => ".*#{memo_key}.*"})
247
+
248
+ if transfers.any?
249
+ transfers.last
250
+ else
251
+ SteemApi::Tx::Transfer.
252
+ where(from: from).
253
+ where(to: to).
254
+ where("memo LIKE ?", "%#{memo_key}%").last
176
255
  end
256
+ when :golos
257
+ GolosCloud::Tx::Transfer.
258
+ where(from: from).
259
+ where(to: to).
260
+ where("memo LIKE ?", "%#{memo_key}%").last
177
261
  end
178
262
 
179
- comment
263
+ if op.nil?
264
+ # Fall back to RPC. The transaction is so new, SteemData hasn't seen it
265
+ # yet, SteemData is behind, or there is no such transfer.
266
+
267
+ api(chain).get_account_history(steem_account, -1, 10000) do |history, error|
268
+ if !!error
269
+ ap error
270
+ return "Try again later."
271
+ end
272
+
273
+ op = history.map do |trx|
274
+ e = trx.last.op
275
+ type = e.first
276
+ next unless type == 'transfer'
277
+ o = e.last
278
+ next unless o.from == from
279
+ next unless o.to == steem_account
280
+ next unless o.memo =~ /.*#{memo_key}.*/
281
+
282
+ o
283
+ end.compact.last
284
+ end
285
+ end
286
+
287
+ op
180
288
  end
181
289
 
182
290
  def core_asset(chain = :steem)
@@ -1,4 +1,4 @@
1
1
  module Cosgrove
2
- VERSION = '0.0.2'
2
+ VERSION = '0.0.3rc1'
3
3
  AGENT_ID = "cosgrove/#{VERSION}"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cosgrove
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Martin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-17 00:00:00.000000000 Z
11
+ date: 2018-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -190,26 +190,6 @@ dependencies:
190
190
  - - ">="
191
191
  - !ruby/object:Gem::Version
192
192
  version: 0.8.7.6
193
- - !ruby/object:Gem::Dependency
194
- name: pry
195
- requirement: !ruby/object:Gem::Requirement
196
- requirements:
197
- - - "~>"
198
- - !ruby/object:Gem::Version
199
- version: '0.10'
200
- - - ">="
201
- - !ruby/object:Gem::Version
202
- version: 0.10.3
203
- type: :development
204
- prerelease: false
205
- version_requirements: !ruby/object:Gem::Requirement
206
- requirements:
207
- - - "~>"
208
- - !ruby/object:Gem::Version
209
- version: '0.10'
210
- - - ">="
211
- - !ruby/object:Gem::Version
212
- version: 0.10.3
213
193
  - !ruby/object:Gem::Dependency
214
194
  name: radiator
215
195
  requirement: !ruby/object:Gem::Requirement
@@ -219,7 +199,7 @@ dependencies:
219
199
  version: '0.3'
220
200
  - - ">="
221
201
  - !ruby/object:Gem::Version
222
- version: 0.3.1
202
+ version: 0.3.15
223
203
  type: :runtime
224
204
  prerelease: false
225
205
  version_requirements: !ruby/object:Gem::Requirement
@@ -229,7 +209,7 @@ dependencies:
229
209
  version: '0.3'
230
210
  - - ">="
231
211
  - !ruby/object:Gem::Version
232
- version: 0.3.1
212
+ version: 0.3.15
233
213
  - !ruby/object:Gem::Dependency
234
214
  name: steem_data
235
215
  requirement: !ruby/object:Gem::Requirement
@@ -251,25 +231,25 @@ dependencies:
251
231
  - !ruby/object:Gem::Version
252
232
  version: 0.0.3
253
233
  - !ruby/object:Gem::Dependency
254
- name: steem_api
234
+ name: golos_cloud
255
235
  requirement: !ruby/object:Gem::Requirement
256
236
  requirements:
257
237
  - - "~>"
258
238
  - !ruby/object:Gem::Version
259
- version: '1.1'
239
+ version: '1.0'
260
240
  - - ">="
261
241
  - !ruby/object:Gem::Version
262
- version: 1.1.0
242
+ version: 1.0.0
263
243
  type: :runtime
264
244
  prerelease: false
265
245
  version_requirements: !ruby/object:Gem::Requirement
266
246
  requirements:
267
247
  - - "~>"
268
248
  - !ruby/object:Gem::Version
269
- version: '1.1'
249
+ version: '1.0'
270
250
  - - ">="
271
251
  - !ruby/object:Gem::Version
272
- version: 1.1.0
252
+ version: 1.0.0
273
253
  - !ruby/object:Gem::Dependency
274
254
  name: discordrb
275
255
  requirement: !ruby/object:Gem::Requirement
@@ -554,12 +534,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
554
534
  version: '0'
555
535
  required_rubygems_version: !ruby/object:Gem::Requirement
556
536
  requirements:
557
- - - ">="
537
+ - - ">"
558
538
  - !ruby/object:Gem::Version
559
- version: '0'
539
+ version: 1.3.1
560
540
  requirements: []
561
541
  rubyforge_project:
562
- rubygems_version: 2.6.12
542
+ rubygems_version: 2.6.14
563
543
  signing_key:
564
544
  specification_version: 4
565
545
  summary: Cosgrove Discord Bo t