steem_data 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 54a8817b8b713d4e9f368e8f5891d2a56aed97d0
4
- data.tar.gz: 7c9fbbe579f0296062e13974ec5b1f978ef01485
3
+ metadata.gz: 383d3caf1946151a0883aff248e59827fb7eb293
4
+ data.tar.gz: b113840863bfdca933e48bf93f6e23ace9188c05
5
5
  SHA512:
6
- metadata.gz: a620cee25ef9c56e358356529d5888aafe2c16209ce7fe4330fca317d0db3729738e36f9a06e50efe418e41ccfc3daaa091f04b649bd96559a5231caabb96949
7
- data.tar.gz: 51ebb98915d2e9dc61bb6219dc7be0a34cee5c948d8f4a292ac9a5c0c3dff777023023fe1c4d91ff496eab975b2b9f30ef22a758ece7a2fa2ffb8884263ea343
6
+ metadata.gz: d72bf693f2ef41ccd3dad13284c3ab3b8d5f5237372f8868154921db354e780146521f80a11bdfc554708fbd2b3bcd9ccc01913ea235b761646c4fefe3faf81d
7
+ data.tar.gz: 6212288bd85141aa03fc6ed0307e27019e96d43a781ae36ae149306f6edf404203b962384bfd4821be8889f32f288d692fec8325e9819eb06d267d78ebef3c19
@@ -0,0 +1,50 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /spec/examples.txt
9
+ /test/tmp/
10
+ /test/version_tmp/
11
+ /tmp/
12
+
13
+ # Used by dotenv library to load environment variables.
14
+ # .env
15
+
16
+ ## Specific to RubyMotion:
17
+ .dat*
18
+ .repl_history
19
+ build/
20
+ *.bridgesupport
21
+ build-iPhoneOS/
22
+ build-iPhoneSimulator/
23
+
24
+ ## Specific to RubyMotion (use of CocoaPods):
25
+ #
26
+ # We recommend against adding the Pods directory to your .gitignore. However
27
+ # you should judge for yourself, the pros and cons are mentioned at:
28
+ # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
29
+ #
30
+ # vendor/Pods/
31
+
32
+ ## Documentation cache and generated files:
33
+ /.yardoc/
34
+ /_yardoc/
35
+ /doc/
36
+ /rdoc/
37
+
38
+ ## Environment normalization:
39
+ /.bundle/
40
+ /vendor/bundle
41
+ /lib/bundler/man/
42
+
43
+ # for a library or gem, you might want to ignore these files since the code is
44
+ # intended to run in multiple environments; otherwise, check them in:
45
+ # Gemfile.lock
46
+ # .ruby-version
47
+ # .ruby-gemset
48
+
49
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
50
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
@@ -0,0 +1,62 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ steem_data (0.0.3)
5
+ mongoid (~> 6.1, >= 6.1.0)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ activemodel (5.1.4)
11
+ activesupport (= 5.1.4)
12
+ activesupport (5.1.4)
13
+ concurrent-ruby (~> 1.0, >= 1.0.2)
14
+ i18n (~> 0.7)
15
+ minitest (~> 5.1)
16
+ tzinfo (~> 1.1)
17
+ awesome_print (1.8.0)
18
+ bson (4.2.2)
19
+ coderay (1.1.2)
20
+ concurrent-ruby (1.0.5)
21
+ docile (1.1.5)
22
+ i18n (0.8.6)
23
+ json (2.1.0)
24
+ method_source (0.9.0)
25
+ minitest (5.10.3)
26
+ minitest-line (0.6.4)
27
+ minitest (~> 5.0)
28
+ mongo (2.4.3)
29
+ bson (>= 4.2.1, < 5.0.0)
30
+ mongoid (6.2.1)
31
+ activemodel (~> 5.1)
32
+ mongo (>= 2.4.1, < 3.0.0)
33
+ pry (0.11.1)
34
+ coderay (~> 1.1.0)
35
+ method_source (~> 0.9.0)
36
+ rake (12.1.0)
37
+ simplecov (0.15.1)
38
+ docile (~> 1.1.0)
39
+ json (>= 1.8, < 3)
40
+ simplecov-html (~> 0.10.0)
41
+ simplecov-html (0.10.2)
42
+ thread_safe (0.3.6)
43
+ tzinfo (1.2.3)
44
+ thread_safe (~> 0.1)
45
+ yard (0.9.9)
46
+
47
+ PLATFORMS
48
+ ruby
49
+
50
+ DEPENDENCIES
51
+ awesome_print (~> 1.8, >= 1.8.0)
52
+ bundler (~> 1.15, >= 1.15.4)
53
+ minitest (~> 5.10, >= 5.10.3)
54
+ minitest-line (~> 0.6, >= 0.6.4)
55
+ pry (~> 0.11, >= 0.11.1)
56
+ rake (~> 12.1, >= 12.1.0)
57
+ simplecov (~> 0.15, >= 0.15.1)
58
+ steem_data!
59
+ yard (~> 0.9, >= 0.9.9)
60
+
61
+ BUNDLED WITH
62
+ 1.15.4
data/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ This is free and unencumbered software released into the public domain.
2
+
3
+ Anyone is free to copy, modify, publish, use, compile, sell, or
4
+ distribute this software, either in source code form or as a compiled
5
+ binary, for any purpose, commercial or non-commercial, and by any
6
+ means.
7
+
8
+ In jurisdictions that recognize copyright laws, the author or authors
9
+ of this software dedicate any and all copyright interest in the
10
+ software to the public domain. We make this dedication for the benefit
11
+ of the public at large and to the detriment of our heirs and
12
+ successors. We intend this dedication to be an overt act of
13
+ relinquishment in perpetuity of all present and future rights to this
14
+ software under copyright law.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
19
+ IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
23
+
24
+ For more information, please refer to <http://unlicense.org>
@@ -0,0 +1,112 @@
1
+ [steem_data](https://github.com/steem-third-party/steem_data)
2
+ ============
3
+
4
+ Wrapper for accessing [steemdata.com](https://steemdata.com/) in a ruby application. It uses MongoID and ActiveModel to leverage all of the tools provided by those libraries.
5
+
6
+ <center>
7
+ [![](https://cl.ly/0l3G3g1V4618/Image%202017-03-02%20at%2010.32.13%20AM.png)](https://github.com/steem-third-party/steem_data)
8
+ </center>
9
+
10
+ > SteemData helps developers and researchers build better STEEM applications. We parse the STEEM blockchain for you, and provide the data as a fast and convenient MongoDB service.
11
+
12
+ **Note: This wrapper gem is built by @inertia. SteemData is built by @furion. Any questions about using this gem should be directed to @inertia.**
13
+
14
+ ### Quick Start
15
+
16
+ Add the gem to your Gemfile:
17
+
18
+ ```ruby
19
+ gem 'steem_data'
20
+ ```
21
+
22
+ Then:
23
+
24
+ ```bash
25
+ $ bundle install
26
+ ```
27
+
28
+ ## Usage
29
+
30
+ Look for a specific post using `author` and `permlink`.
31
+
32
+ ```ruby
33
+ require 'steem_data'
34
+
35
+ SteemData.load
36
+
37
+ post = SteemData::Post.find_by(author: 'inertia', permlink: 'macintosh-plus')
38
+
39
+ puts post.to_json
40
+ ```
41
+
42
+ Which returns:
43
+
44
+ ```json
45
+ {
46
+ "_id":{
47
+ "$oid":"58992d230fbc46e3066fa9b1"
48
+ },
49
+ "abs_rshares":0,
50
+ "active":"2017-01-24T21:28:27.000Z",
51
+ "active_votes":[
52
+
53
+ ],
54
+ "allow_curation_rewards":true,
55
+ "allow_replies":true,
56
+ "allow_votes":true,
57
+ "author":"inertia",
58
+ "author_reputation":"66832013171970",
59
+ "author_rewards":41294,
60
+ "body": ...
61
+ }
62
+ ```
63
+
64
+ You can find posts with a high number of `active_votes`.
65
+
66
+ ```ruby
67
+ post = SteemData::Post.where('active_votes.1700' => {'$exists' => true}).last
68
+
69
+ puts "https://steemit.com/#{post.parent_permlink}/@#{post.author}/#{post.permlink}"
70
+ ```
71
+
72
+ Which returns:
73
+
74
+ ```
75
+ https://steemit.com/votu/@sirlunchthehost/take-the-vote-negation-poll-now-brought-to-you-by-sirlunchthehost-aka-the-saru-pirate-king
76
+ ```
77
+
78
+ Or do the same with `net_votes`.
79
+
80
+ ```ruby
81
+ post = SteemData::Post.where(:net_votes.gte => 1700).last
82
+
83
+ puts "https://steemit.com/#{post.parent_permlink}/@#{post.author}/#{post.permlink}"
84
+ ```
85
+
86
+ Which returns:
87
+
88
+ ```
89
+ https://steemit.com/votu/@sirlunchthehost/take-the-vote-negation-poll-now-brought-to-you-by-sirlunchthehost-aka-the-saru-pirate-king
90
+ ```
91
+
92
+ You can count the number of posts created in the last 24 hours.
93
+
94
+ ```ruby
95
+ > SteemData::Post.where(:created.gte => 24.hours.ago.utc).count
96
+ => 1366
97
+ ```
98
+
99
+ Or do the same for a particular topic.
100
+
101
+ ```ruby
102
+ > SteemData::Post.where(parent_permlink: 'life', :created.gte => 24.hours.ago.utc).count
103
+ => 86
104
+ ```
105
+
106
+ ## Get in touch!
107
+
108
+ If you're using steem_data, I'd love to hear from you. Drop me a line and tell me what you think! I'm @inertia on STEEM.
109
+
110
+ ## License
111
+
112
+ I don't believe in intellectual "property". If you do, consider Radiator as licensed under a Creative Commons [![CC0](http://i.creativecommons.org/p/zero/1.0/80x15.png)](http://creativecommons.org/publicdomain/zero/1.0/) License.
@@ -0,0 +1,39 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+ # require 'yard'
4
+
5
+ Rake::TestTask.new(:test) do |t|
6
+ t.libs << 'test'
7
+ t.libs << 'lib'
8
+ t.test_files = FileList['test/**/*_test.rb']
9
+ t.ruby_opts << if ENV['HELL_ENABLED']
10
+ '-W2'
11
+ else
12
+ '-W1'
13
+ end
14
+ end
15
+
16
+ # YARD::Rake::YardocTask.new do |t|
17
+ # t.files = ['lib/**/*.rb']
18
+ # end
19
+
20
+ task default: :test
21
+
22
+ task :console do
23
+ exec "irb -r steem_data -I ./lib"
24
+ end
25
+
26
+ task :build do
27
+ exec 'gem build steem_data.gemspec'
28
+ end
29
+
30
+ task :push do
31
+ exec "gem push steem_data-#{SteemData::VERSION}.gem"
32
+ end
33
+
34
+ # We're not going to yank on a regular basis, but this is how it's done if you
35
+ # really want a task for that for some reason.
36
+
37
+ # task :yank do
38
+ # exec "gem yank steem_data -v #{SteemData::VERSION}"
39
+ # end
@@ -0,0 +1,143 @@
1
+ production:
2
+ # Configure available database clients. (required)
3
+ clients:
4
+ # Defines the default client. (required)
5
+ default:
6
+ # Defines the name of the default database that Mongoid can connect to.
7
+ # (required).
8
+ database: SteemData
9
+ # Provides the hosts the default client can connect to. Must be an array
10
+ # of host:port pairs. (required)
11
+ hosts:
12
+ - mongo1.steemdata.com:27017
13
+ options:
14
+ # Change the default write concern. (default = { w: 1 })
15
+ # write:
16
+ # w: 1
17
+
18
+ # Change the default read preference. Valid options for mode are: :secondary,
19
+ # :secondary_preferred, :primary, :primary_preferred, :nearest
20
+ # (default: primary)
21
+ # read:
22
+ # mode: :secondary_preferred
23
+ # tag_sets:
24
+ # - use: web
25
+
26
+ # The name of the user for authentication.
27
+ user: 'steemit'
28
+
29
+ # The password of the user for authentication.
30
+ password: 'steemit'
31
+
32
+ # The user's database roles.
33
+ # roles:
34
+ # - 'dbOwner'
35
+
36
+ # Change the default authentication mechanism. Valid options are: :scram,
37
+ # :mongodb_cr, :mongodb_x509, and :plain. (default on 3.0 is :scram, default
38
+ # on 2.4 and 2.6 is :plain)
39
+ # auth_mech: :scram
40
+
41
+ # The database or source to authenticate the user against.
42
+ # (default: the database specified above or admin)
43
+ # auth_source: admin
44
+
45
+ # Force a the driver cluster to behave in a certain manner instead of auto-
46
+ # discovering. Can be one of: :direct, :replica_set, :sharded. Set to :direct
47
+ # when connecting to hidden members of a replica set.
48
+ # connect: :direct
49
+
50
+ # Changes the default time in seconds the server monitors refresh their status
51
+ # via ismaster commands. (default: 10)
52
+ # heartbeat_frequency: 10
53
+
54
+ # The time in seconds for selecting servers for a near read preference. (default: 5)
55
+ # local_threshold: 5
56
+
57
+ # The timeout in seconds for selecting a server for an operation. (default: 30)
58
+ # server_selection_timeout: 30
59
+
60
+ # The maximum number of connections in the connection pool. (default: 5)
61
+ # max_pool_size: 5
62
+
63
+ # The minimum number of connections in the connection pool. (default: 1)
64
+ # min_pool_size: 1
65
+
66
+ # The time to wait, in seconds, in the connection pool for a connection
67
+ # to be checked in before timing out. (default: 5)
68
+ # wait_queue_timeout: 5
69
+
70
+ # The time to wait to establish a connection before timing out, in seconds.
71
+ # (default: 5)
72
+ # connect_timeout: 5
73
+
74
+ # The timeout to wait to execute operations on a socket before raising an error.
75
+ # (default: 5)
76
+ # socket_timeout: 5
77
+
78
+ # The name of the replica set to connect to. Servers provided as seeds that do
79
+ # not belong to this replica set will be ignored.
80
+ # replica_set: name
81
+
82
+ # Whether to connect to the servers via ssl. (default: false)
83
+ # ssl: true
84
+
85
+ # The certificate file used to identify the connection against MongoDB.
86
+ # ssl_cert: /path/to/my.cert
87
+
88
+ # The private keyfile used to identify the connection against MongoDB.
89
+ # Note that even if the key is stored in the same file as the certificate,
90
+ # both need to be explicitly specified.
91
+ # ssl_key: /path/to/my.key
92
+
93
+ # A passphrase for the private key.
94
+ # ssl_key_pass_phrase: password
95
+
96
+ # Whether or not to do peer certification validation. (default: true)
97
+ # ssl_verify: true
98
+
99
+ # The file containing a set of concatenated certification authority certifications
100
+ # used to validate certs passed from the other end of the connection.
101
+ # ssl_ca_cert: /path/to/ca.cert
102
+
103
+
104
+ # Configure Mongoid specific options. (optional)
105
+ options:
106
+ # Includes the root model name in json serialization. (default: false)
107
+ # include_root_in_json: false
108
+
109
+ # Include the _type field in serialization. (default: false)
110
+ # include_type_for_serialization: false
111
+
112
+ # Preload all models in development, needed when models use
113
+ # inheritance. (default: false)
114
+ # preload_models: false
115
+
116
+ # Raise an error when performing a #find and the document is not found.
117
+ # (default: true)
118
+ # raise_not_found_error: true
119
+
120
+ # Raise an error when defining a scope with the same name as an
121
+ # existing method. (default: false)
122
+ # scope_overwrite_exception: false
123
+
124
+ # Use Active Support's time zone in conversions. (default: true)
125
+ # use_activesupport_time_zone: true
126
+
127
+ # Ensure all times are UTC in the app side. (default: false)
128
+ # use_utc: false
129
+
130
+ # Set the Mongoid and Ruby driver log levels when not in a Rails
131
+ # environment. The Mongoid logger will be set to the Rails logger
132
+ # otherwise.(default: :info)
133
+ # log_level: :info
134
+ test:
135
+ clients:
136
+ default:
137
+ database: steemdata_test
138
+ hosts:
139
+ - localhost:27017
140
+ options:
141
+ read:
142
+ mode: :primary
143
+ max_pool_size: 1
@@ -0,0 +1,21 @@
1
+ require 'mongoid'
2
+
3
+ module SteemData
4
+ require 'steem_data/acts_as_mathematical'
5
+ require 'steem_data/acts_as_operation'
6
+ require 'steem_data/acts_as_temporal'
7
+ require 'steem_data/account_operation'
8
+ require 'steem_data/account'
9
+ require 'steem_data/operation'
10
+ require 'steem_data/post'
11
+ require 'steem_data/price_history'
12
+ require 'steem_data/setting'
13
+ require 'steem_data/stat'
14
+ require 'steem_data/virtual_operation'
15
+ require 'steem_data/version'
16
+ extend self
17
+
18
+ def load(path = "#{File.dirname(__FILE__)}/../config/mongoid.yml", run_level = :production)
19
+ Mongoid.load!(path, run_level)
20
+ end
21
+ end
@@ -0,0 +1,78 @@
1
+ module SteemData
2
+ class Account
3
+ include Mongoid::Document
4
+ include Mongoid::Attributes::Dynamic
5
+ include ActsAsMathematical
6
+ include ActsAsTemporal
7
+ store_in collection: 'Accounts'
8
+
9
+ scope :mined, lambda { |mined = true| where(mined: mined) }
10
+ scope :search, lambda { |search|
11
+ case search
12
+ when Regexp then where(name: search)
13
+ else; where(name: {'$regex' => ".*#{search.to_s.downcase}.*"})
14
+ end
15
+ }
16
+
17
+ def following_accounts; Account.where(:name.in => following); end
18
+ def follower_accounts; Account.where(:name.in => followers); end
19
+ def posts; Post.where(author: name); end
20
+ def proxied_accounts; Account.where(:name.in => proxied); end
21
+ def routed_accounts; Account.where(:name.in => routed); end
22
+
23
+ def proxied
24
+ proxied = []
25
+
26
+ # List of accounts that have used this account as a proxy.
27
+ accounts = AccountOperation.type('account_witness_proxy').where(proxy: name).
28
+ distinct(:account) - [name]
29
+
30
+ # Related operations (either voting for this account or resetting).
31
+ account_witness_proxies = AccountOperation.type('account_witness_proxy').
32
+ where(:account.in => accounts, :proxy.in => ['', name]).
33
+ order_by(timestamp: :asc)
34
+
35
+ # Replay the proxy selection related to this account. Note, this
36
+ # iteration will even work if the full proxy history is replayed, because
37
+ # we are only looking for "this account" or "not this account" in the
38
+ # order that those operations appear on the blockchain.
39
+ account_witness_proxies.each do |b|
40
+ if b.proxy == name
41
+ proxied += [b.account]
42
+ else
43
+ proxied -= [b.account]
44
+ end
45
+
46
+ proxied = proxied.uniq
47
+ end
48
+
49
+ proxied
50
+ end
51
+
52
+ def routed
53
+ routed = []
54
+
55
+ # List of accounts that have used this account to route withrdrawn vests.
56
+ accounts = AccountOperation.type('set_withdraw_vesting_route').where(to_account: name).
57
+ distinct(:account) - [name]
58
+
59
+ # Related operations (either setting this account or resetting).
60
+ routes = AccountOperation.type('set_withdraw_vesting_route').
61
+ where(:account.in => accounts, to_account: name).
62
+ order_by(timestamp: :asc)
63
+
64
+ # Like proxied, we replay the proxy selection related to this account.
65
+ routes.each do |b|
66
+ if b.to_account == name && b.percent > 0
67
+ routed += [b.account]
68
+ else
69
+ routed -= [b.account]
70
+ end
71
+
72
+ routed = routed.uniq
73
+ end
74
+
75
+ routed
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,12 @@
1
+ module SteemData
2
+ class AccountOperation
3
+ include Mongoid::Document
4
+ include Mongoid::Attributes::Dynamic
5
+ include ActsAsOperation
6
+ include ActsAsMathematical
7
+ include ActsAsTemporal
8
+ store_in collection: 'AccountOperations'
9
+
10
+ scope :account, lambda { |account| where(account: account) }
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ module SteemData
2
+ module ActsAsMathematical
3
+ def self.included(base)
4
+ def base.average(key)
5
+ sum(key) / count
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,25 @@
1
+ module SteemData
2
+ module ActsAsOperation
3
+ def self.included(base)
4
+ base.scope :type, lambda { |type, invert = false|
5
+ where((invert ? :type.nin : :type.in) => [type].flatten)
6
+ }
7
+ base.scope :block_num, lambda { |block_num| where(block_num: block_num) }
8
+ base.scope :author, lambda { |author| where(author: author) }
9
+
10
+ base.scope :vote, -> { type 'vote' }
11
+ base.scope :upvote, lambda { |min_vote = 0| vote.where(:weight.gt => min_vote) }
12
+ base.scope :downvote, lambda { |max_vote = 0| vote.where(:weight.lt => max_vote) }
13
+ base.scope :unvote, lambda { vote.where(weight: 0) }
14
+ base.scope :voter, lambda { |voter| vote.where(voter: voter) }
15
+
16
+ # base.scope :comment, -> { type 'comment' }
17
+ base.scope :parent_permlink, lambda { |parent_permlink| where(parent_permlink: parent_permlink) }
18
+ base.scope :parent_author, lambda { |parent_author| where(parent_author: parent_author) }
19
+ base.scope :permlink, lambda { |permlink| where(permlink: permlink) }
20
+ base.scope :tag, lambda { |tag| where('json_metadata.tags' => tag) }
21
+
22
+ base.scope :transfer, -> { type 'transfer' }
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,31 @@
1
+ module SteemData
2
+ module ActsAsTemporal
3
+ def self.included(base)
4
+ base.scope :starting, lambda { |with, field = :timestamp, not_inverted = true|
5
+ r = where(field.gt => with, field.lt => Time.now.utc)
6
+
7
+ not_inverted ? r : where(:_id.nin => r.distinct(:_id))
8
+ }
9
+
10
+ base.scope :ending, lambda { |with, field = :timestamp, not_inverted = true|
11
+ r = where(field.gt => Time.at(0), field.lt => with)
12
+
13
+ not_inverted ? r : where(:_id.nin => r.distinct(:_id))
14
+ }
15
+
16
+ base.scope :betwixt, lambda { |starting, ending, field = :timestamp, not_inverted = true|
17
+ r = where(field.gt => starting, field.lt => ending)
18
+
19
+ not_inverted ? r : where(:_id.nin => r.distinct(:_id))
20
+ }
21
+
22
+ base.scope :today, lambda { |field = :timestamp|
23
+ starting(1.day.ago.utc, field)
24
+ }
25
+
26
+ base.scope :yesterday, lambda { |field = :timestamp|
27
+ betwixt(2.days.ago.utc, 1.day.ago.utc, field)
28
+ }
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,10 @@
1
+ module SteemData
2
+ class Operation
3
+ include Mongoid::Document
4
+ include Mongoid::Attributes::Dynamic
5
+ include ActsAsOperation
6
+ include ActsAsMathematical
7
+ include ActsAsTemporal
8
+ store_in collection: 'Operations'
9
+ end
10
+ end
@@ -0,0 +1,62 @@
1
+ module SteemData
2
+ class Post
3
+ include Mongoid::Document
4
+ include Mongoid::Attributes::Dynamic
5
+ include ActsAsMathematical
6
+ include ActsAsTemporal
7
+ store_in collection: 'Posts'
8
+
9
+ scope :root_posts, -> { where(depth: 0) }
10
+ scope :comments, -> { where(:depth.ne => 0) }
11
+ scope :mode, lambda { |mode| where(mode: mode) }
12
+ scope :first_payout, -> { mode 'first_payout' }
13
+ scope :second_payout, -> { mode 'second_payout' }
14
+ scope :pending_payout, lambda { |pending_payout|
15
+ if pending_payout
16
+ where(:cashout_time.gt => Time.now.utc)
17
+ else
18
+ where(:cashout_time.lt => Time.now.utc)
19
+ end
20
+ }
21
+ scope :archived, -> { mode 'archived '}
22
+ scope :has_zero_pending_payout, -> { where('pending_payout_value.amount' => 0) }
23
+ scope :has_non_zero_pending_payout, -> { where('pending_payout_value.amount' => {'$ne' => 0 }) }
24
+ scope :has_active_votes, -> { where(:"active_votes.0".exists => true) }
25
+ scope :has_upvotes, lambda { |min_percent = 1| where('active_votes.percent' => {'$gte' => [min_percent, 10000].max}) }
26
+ scope :has_downvotes, lambda { |max_percent = -1| where('active_votes.percent' => {'$lte' => [max_percent, -1].min}) }
27
+ scope :has_unvotes, lambda { where('active_votes.percent' => 0) }
28
+ scope :has_children, -> { where(:children.ne => 0) }
29
+ scope :permlink, lambda { |permlink| where(permlink: permlink) }
30
+ scope :tag, lambda { |tag| where('json_metadata.tags' => tag) }
31
+ scope :payout_declined, -> { where('max_accepted_payout.amount' => 0)}
32
+ scope :not_payout_declined, -> { where('max_accepted_payout.amount' => {'$ne' => 0}) }
33
+ scope :author, lambda { |author| where(author: author) }
34
+
35
+ scope :by_cashout, -> {
36
+ order(cashout_time: :desc)
37
+ }
38
+
39
+ def self.find_flag_war
40
+ end
41
+
42
+ def self.voters(options = {})
43
+ options[:author.in] ||= distinct(:author)
44
+ options[:permlink.in] ||= distinct(:permlink)
45
+ options[:voter.in] ||= distinct('active_votes.voter')
46
+
47
+ AccountOperation.type('vote').where(options).distinct(:voter)
48
+ end
49
+
50
+ def commented_on?(name, options = {})
51
+ replies.map do |reply|
52
+ false if !!options[:min_reputation] && reply['author_reputation'].to_i < options[:min_reputation]
53
+
54
+ reply['author'] == name
55
+ end.uniq.include? true
56
+ end
57
+
58
+ def pending_payout?
59
+ cashout_time > Time.now.utc
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,9 @@
1
+ module SteemData
2
+ class PriceHistory
3
+ include Mongoid::Document
4
+ include Mongoid::Attributes::Dynamic
5
+ include ActsAsMathematical
6
+ include ActsAsTemporal
7
+ store_in collection: 'PriceHistory'
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module SteemData
2
+ class Setting
3
+ include Mongoid::Document
4
+ include Mongoid::Attributes::Dynamic
5
+ include ActsAsMathematical
6
+ include ActsAsTemporal
7
+ store_in collection: 'settings'
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module SteemData
2
+ class Stat
3
+ include Mongoid::Document
4
+ include Mongoid::Attributes::Dynamic
5
+ include ActsAsMathematical
6
+ include ActsAsTemporal
7
+ store_in collection: 'stats'
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module SteemData
2
+ VERSION = '0.0.3'
3
+ end
@@ -0,0 +1,9 @@
1
+ module SteemData
2
+ class VirtualOperation
3
+ include Mongoid::Document
4
+ include Mongoid::Attributes::Dynamic
5
+ include ActsAsMathematical
6
+ include ActsAsTemporal
7
+ store_in collection: 'VirtualOperations'
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'steem_data/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'steem_data'
8
+ spec.version = SteemData::VERSION
9
+ spec.authors = ['Anthony Martin']
10
+ spec.email = ['steemdata@martin-studio.com']
11
+
12
+ spec.summary = %q{SteemData Ruby}
13
+ spec.description = %q{Wrapper for accessing steemdata.com in a ruby application.}
14
+ spec.homepage = 'https://github.com/steem-third-party/steem_data'
15
+ spec.license = 'CC0 1.0'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test)/}) }
18
+ spec.require_paths = ['lib']
19
+
20
+ spec.add_development_dependency 'bundler', '~> 1.15', '>= 1.15.4'
21
+ spec.add_development_dependency 'rake', '~> 12.1', '>= 12.1.0'
22
+ spec.add_development_dependency 'minitest', '~> 5.10', '>= 5.10.3'
23
+ spec.add_development_dependency 'minitest-line', '~> 0.6', '>= 0.6.4'
24
+ spec.add_development_dependency 'simplecov', '~> 0.15', '>= 0.15.1'
25
+ spec.add_development_dependency 'yard', '~> 0.9', '>= 0.9.9'
26
+ spec.add_development_dependency 'pry', '~> 0.11', '>= 0.11.1'
27
+ spec.add_development_dependency 'awesome_print', '~> 1.8', '>= 1.8.0'
28
+
29
+ spec.add_dependency 'mongoid', '~> 6.1', '>= 6.1.0'
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: steem_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Anthony Martin
@@ -196,7 +196,28 @@ email:
196
196
  executables: []
197
197
  extensions: []
198
198
  extra_rdoc_files: []
199
- files: []
199
+ files:
200
+ - ".gitignore"
201
+ - Gemfile
202
+ - Gemfile.lock
203
+ - LICENSE
204
+ - README.md
205
+ - Rakefile
206
+ - config/mongoid.yml
207
+ - lib/steem_data.rb
208
+ - lib/steem_data/account.rb
209
+ - lib/steem_data/account_operation.rb
210
+ - lib/steem_data/acts_as_mathematical.rb
211
+ - lib/steem_data/acts_as_operation.rb
212
+ - lib/steem_data/acts_as_temporal.rb
213
+ - lib/steem_data/operation.rb
214
+ - lib/steem_data/post.rb
215
+ - lib/steem_data/price_history.rb
216
+ - lib/steem_data/setting.rb
217
+ - lib/steem_data/stat.rb
218
+ - lib/steem_data/version.rb
219
+ - lib/steem_data/virtual_operation.rb
220
+ - steem_data.gemspec
200
221
  homepage: https://github.com/steem-third-party/steem_data
201
222
  licenses:
202
223
  - CC0 1.0