avm-reddit_base0 0.1.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.
Files changed (34) hide show
  1. checksums.yaml +7 -0
  2. data/lib/avm/reddit_base0/api/access_token.rb +39 -0
  3. data/lib/avm/reddit_base0/api/entity.rb +27 -0
  4. data/lib/avm/reddit_base0/api/me.rb +26 -0
  5. data/lib/avm/reddit_base0/api/root.rb +24 -0
  6. data/lib/avm/reddit_base0/api/sub.rb +36 -0
  7. data/lib/avm/reddit_base0/api/wiki.rb +36 -0
  8. data/lib/avm/reddit_base0/api.rb +23 -0
  9. data/lib/avm/reddit_base0/automoderator/age_gender_regex.rb +35 -0
  10. data/lib/avm/reddit_base0/automoderator/regex.rb +40 -0
  11. data/lib/avm/reddit_base0/automoderator/year_gender_regex.rb +25 -0
  12. data/lib/avm/reddit_base0/instances/base.rb +38 -0
  13. data/lib/avm/reddit_base0/instances.rb +11 -0
  14. data/lib/avm/reddit_base0/manager.rb +28 -0
  15. data/lib/avm/reddit_base0/runners/base/generic.rb +33 -0
  16. data/lib/avm/reddit_base0/runners/base/me/identity.rb +26 -0
  17. data/lib/avm/reddit_base0/runners/base/me.rb +19 -0
  18. data/lib/avm/reddit_base0/runners/base/sub/about.rb +26 -0
  19. data/lib/avm/reddit_base0/runners/base/sub/wiki/read.rb +27 -0
  20. data/lib/avm/reddit_base0/runners/base/sub/wiki/write.rb +23 -0
  21. data/lib/avm/reddit_base0/runners/base/sub/wiki.rb +29 -0
  22. data/lib/avm/reddit_base0/runners/base/sub/wikis.rb +29 -0
  23. data/lib/avm/reddit_base0/runners/base/sub.rb +27 -0
  24. data/lib/avm/reddit_base0/runners/base.rb +25 -0
  25. data/lib/avm/reddit_base0/runners.rb +11 -0
  26. data/lib/avm/reddit_base0/sources/base.rb +14 -0
  27. data/lib/avm/reddit_base0/sources/download/download_wiki.rb +39 -0
  28. data/lib/avm/reddit_base0/sources/download.rb +41 -0
  29. data/lib/avm/reddit_base0/sources/runners/download.rb +35 -0
  30. data/lib/avm/reddit_base0/sources/runners.rb +13 -0
  31. data/lib/avm/reddit_base0/sources.rb +11 -0
  32. data/lib/avm/reddit_base0/version.rb +7 -0
  33. data/lib/avm/reddit_base0.rb +9 -0
  34. metadata +135 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 767b77844b069adbb7b1f108351fd2d8da02392fce1048981be07674a058ce44
4
+ data.tar.gz: 75cf45b8aaac6a87fce17a64e99e10fbc9415742941524990fb6b8d3df8986e0
5
+ SHA512:
6
+ metadata.gz: 7b5529004e039324921b007673a74a6435443ac407dbd743262e8955e46a23c57228087c314988a547e37bb55ffca662456cc16eb70b30a6fc3bfd13ac25155e
7
+ data.tar.gz: 73f42ae92d183c82adfb12538928dbd184443bfeb9dd0059bfc02307ac67250cef3bd25f56f2416a788a4a69409fed16abf5ea890937226bc0cac3491410c84b
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_rest/api'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'eac_envs/http/request'
6
+
7
+ module Avm
8
+ module RedditBase0
9
+ class Api < ::EacRest::Api
10
+ class AccessToken
11
+ acts_as_instance_method
12
+ common_constructor :api
13
+
14
+ URL = 'https://www.reddit.com/api/v1/access_token'
15
+
16
+ # @return [String]
17
+ def fresh_result
18
+ http_request.response.body_data_or_raise.fetch('access_token')
19
+ end
20
+
21
+ def fs_object_id
22
+ [api.username, api.user_username]
23
+ end
24
+
25
+ # @return [String]
26
+ def result
27
+ fs_cache.read_or_store { fresh_result }
28
+ end
29
+
30
+ # @return [EacEnvs::Http::Request]
31
+ def http_request
32
+ ::EacEnvs::Http::Request.new.url(URL).verb(:post).body_data(
33
+ grant_type: 'password', username: api.user_username, password: api.user_password
34
+ ).basic_auth(api.client_id, api.secret)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_rest/api'
4
+ require 'eac_rest/entity'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module RedditBase0
9
+ class Api < ::EacRest::Api
10
+ class Entity < ::EacRest::Entity
11
+ # @param url_suffix [Addressable::URI, nil]
12
+ # @return [Object]
13
+ def request_data(url_suffix = nil)
14
+ request(url_suffix).response.body_data_or_raise
15
+ end
16
+
17
+ # @param child_class [Class]
18
+ # @param url_suffix [Addressable::URI, nil]
19
+ # @return [Array]
20
+ def request_children(child_class, url_suffix = nil)
21
+ request_data(url_suffix).fetch('data')
22
+ .map { |child_data| child_entity(child_class, child_data) }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/reddit_base0/api/entity'
4
+ require 'eac_rest/api'
5
+ require 'eac_rest/entity'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module Avm
9
+ module RedditBase0
10
+ class Api < ::EacRest::Api
11
+ class Me < ::Avm::RedditBase0::Api::Entity
12
+ ENTITY_ROOT_URL_SUFFIX = '/api/v1/me'
13
+
14
+ # @return [Hash]
15
+ def identity
16
+ request_data
17
+ end
18
+
19
+ # @return [Addressable::URI]
20
+ def entity_root_url_suffix
21
+ ENTITY_ROOT_URL_SUFFIX.to_uri
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/reddit_base0/api/entity'
4
+ require 'eac_rest/api'
5
+ require 'eac_rest/entity'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module Avm
9
+ module RedditBase0
10
+ class Api < ::EacRest::Api
11
+ class Root < ::Avm::RedditBase0::Api::Entity
12
+ # @return [Avm::RedditBase0::Api::Me]
13
+ def me
14
+ api.entity(::Avm::RedditBase0::Api::Me, nil)
15
+ end
16
+
17
+ # @return [Avm::RedditBase0::Api::Sub]
18
+ def sub(name)
19
+ api.entity(::Avm::RedditBase0::Api::Sub, name)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/reddit_base0/api/entity'
4
+ require 'avm/reddit_base0/api/wiki'
5
+ require 'eac_rest/api'
6
+ require 'eac_rest/entity'
7
+ require 'eac_ruby_utils/core_ext'
8
+
9
+ module Avm
10
+ module RedditBase0
11
+ class Api < ::EacRest::Api
12
+ class Sub < ::Avm::RedditBase0::Api::Entity
13
+ # @return [Hash]
14
+ def about
15
+ request_data('/about').fetch('data')
16
+ end
17
+
18
+ # @return [Addressable::URI]
19
+ def entity_root_url_suffix
20
+ "#{super}/r/#{id}".to_uri
21
+ end
22
+
23
+ # @param wiki_id [String]
24
+ # @return [::Avm::RedditBase0::Api::Wiki]
25
+ def wiki(wiki_id)
26
+ child_entity(::Avm::RedditBase0::Api::Wiki, wiki_id)
27
+ end
28
+
29
+ # @return [Array<Avm::RedditBase0::Api::Wiki>]
30
+ def wikis
31
+ request_children(::Avm::RedditBase0::Api::Wiki, '/wiki/pages')
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/reddit_base0/api/entity'
4
+ require 'eac_rest/api'
5
+ require 'eac_rest/entity'
6
+ require 'eac_ruby_utils/core_ext'
7
+
8
+ module Avm
9
+ module RedditBase0
10
+ class Api < ::EacRest::Api
11
+ class Wiki < ::Avm::RedditBase0::Api::Entity
12
+ # @return [Addressable::URI]
13
+ def entity_root_url_suffix
14
+ "#{super}/wiki/#{id}".to_uri
15
+ end
16
+
17
+ # @return [String]
18
+ def read
19
+ request_data.fetch('data').fetch('content_md')
20
+ end
21
+
22
+ # @return [Pathname]
23
+ def subpath
24
+ id.to_pathname
25
+ end
26
+
27
+ # @param content [String]
28
+ # @return [Hash]
29
+ def write(content)
30
+ parent_entity.request('/api/wiki/edit').verb(:post).body_data(page: id, content: content)
31
+ .response.body_data_or_raise
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_rest/api'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module RedditBase0
8
+ class Api < ::EacRest::Api
9
+ ROOT_URL = 'https://oauth.reddit.com'
10
+
11
+ common_constructor :client_id, :secret, :user_username, :user_password,
12
+ super_args: -> { [ROOT_URL] }
13
+
14
+ # @return [EacRest::Request]
15
+ def request(service_url_suffix, headers = {}, &body_data_proc)
16
+ super(service_url_suffix, headers, &body_data_proc)
17
+ .header('Authorization', "Bearer #{access_token}")
18
+ end
19
+
20
+ require_sub __FILE__
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/reddit_base0/automoderator/regex'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module RedditBase0
8
+ module Automoderator
9
+ class AgeGenderRegex
10
+ common_constructor :age_pattern
11
+
12
+ AFTER_PATTERN = '\\)\\s*\\S+.*'
13
+ BEFORE_PATTERN = '\\s*\\('
14
+
15
+ # @return [String]
16
+ def after_pattern
17
+ AFTER_PATTERN
18
+ end
19
+
20
+ # @return [String]
21
+ def before_pattern
22
+ BEFORE_PATTERN
23
+ end
24
+
25
+ def match?(string)
26
+ ::Avm::RedditBase0::Automoderator::Regex.new(pattern).match?(string)
27
+ end
28
+
29
+ def pattern
30
+ "^#{before_pattern}(?:#{age_pattern})[HMhm]?#{after_pattern}$"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_rest/api'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'eac_ruby_utils/envs'
6
+
7
+ module Avm
8
+ module RedditBase0
9
+ module Automoderator
10
+ class Regex
11
+ common_constructor :pattern
12
+
13
+ def match?(string)
14
+ python_command(string).system
15
+ end
16
+
17
+ private
18
+
19
+ # @return [Array<String>]
20
+ def python_args(string)
21
+ ['-c', python_code(string)]
22
+ end
23
+
24
+ def python_command(string)
25
+ ::EacRubyUtils::Envs.local.executable('python3', '--version')
26
+ .command(*python_args(string))
27
+ end
28
+
29
+ def python_code(string)
30
+ <<~CODE
31
+ import re
32
+ pattern = re.compile('#{pattern}')
33
+ if not pattern.match('#{string}'):
34
+ exit(1)
35
+ CODE
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/reddit_base0/automoderator/age_gender_regex'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module RedditBase0
8
+ module Automoderator
9
+ class YearGenderRegex < ::Avm::RedditBase0::Automoderator::AgeGenderRegex
10
+ AFTER_PATTERN = ''
11
+ BEFORE_PATTERN = ''
12
+
13
+ # @return [String]
14
+ def after_pattern
15
+ AFTER_PATTERN
16
+ end
17
+
18
+ # @return [String]
19
+ def before_pattern
20
+ BEFORE_PATTERN
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_generic_base0/instances/base'
4
+ require 'avm/reddit_base0/api'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module RedditBase0
9
+ module Instances
10
+ class Base < ::Avm::EacGenericBase0::Instances::Base
11
+ uri_components_entries_values 'install', %w[client_id secret sub_name]
12
+
13
+ # @return [String]
14
+ def auto_install_sub_name
15
+ suffix
16
+ end
17
+
18
+ # @return [String]
19
+ def sub_name
20
+ install_sub_name
21
+ end
22
+
23
+ protected
24
+
25
+ # @return [Avm::RedditBase0::Api]
26
+ def api_uncached
27
+ ::Avm::RedditBase0::Api.new(install_client_id, install_secret, install_username,
28
+ install_password)
29
+ end
30
+
31
+ # @return [Avm::RedditBase0::Api::Sub]
32
+ def sub_uncached
33
+ api.root_entity.sub(sub_name)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Instances
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/reddit_base0/api'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avm
7
+ module RedditBase0
8
+ class Manager
9
+ include ::Singleton
10
+
11
+ # @param field [String]
12
+ # @return [String]
13
+ def envvar_name(field)
14
+ ['reddit', field].map(&:underscore).join('_').upcase
15
+ end
16
+
17
+ %w[client_id username password secret].each do |field|
18
+ define_method field.to_s do
19
+ ::ENV.fetch(envvar_name(field))
20
+ end
21
+ end
22
+
23
+ def api
24
+ ::Avm::RedditBase0::Api.new(client_id, secret, username, password)
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Runners
8
+ class Base < ::Avm::Runners::Base
9
+ class Generic
10
+ runner_with :help, :output_item do
11
+ pos_arg :url_suffix
12
+ end
13
+
14
+ def run
15
+ infov 'URL suffix', parsed.url_suffix
16
+ infov 'URL', request.url
17
+ run_output
18
+ end
19
+
20
+ def item_hash
21
+ request.response.body_data_or_raise
22
+ end
23
+
24
+ private
25
+
26
+ def request_uncached
27
+ api.request(parsed.url_suffix)
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Runners
8
+ class Base < ::Avm::Runners::Base
9
+ class Me
10
+ class Identity
11
+ runner_with :help, :output_item
12
+
13
+ def run
14
+ run_output
15
+ end
16
+
17
+ # @return [Hash]
18
+ def item_hash
19
+ api.root_entity.me.identity
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Runners
8
+ class Base < ::Avm::Runners::Base
9
+ class Me
10
+ runner_with :help, :subcommands do
11
+ subcommands
12
+ end
13
+
14
+ require_sub __FILE__
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Runners
8
+ class Base < ::Avm::Runners::Base
9
+ class Sub
10
+ class About
11
+ runner_with :help, :output_item
12
+
13
+ def run
14
+ run_output
15
+ end
16
+
17
+ # @return [Hash]
18
+ def item_hash
19
+ sub.about
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Runners
8
+ class Base < ::Avm::Runners::Base
9
+ class Sub
10
+ class Wiki
11
+ class Read
12
+ runner_with :help, :output
13
+
14
+ def run
15
+ run_output
16
+ end
17
+
18
+ def output_content
19
+ wiki.read
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Runners
8
+ class Base < ::Avm::Runners::Base
9
+ class Sub
10
+ class Wiki
11
+ class Write
12
+ runner_with :help, :input
13
+
14
+ def run
15
+ infov 'Result', wiki.write(input_content).pretty_inspect
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Runners
8
+ class Base < ::Avm::Runners::Base
9
+ class Sub
10
+ class Wiki
11
+ runner_with :help, :subcommands do
12
+ pos_arg :wiki_id
13
+ subcommands
14
+ end
15
+ for_context :wiki
16
+
17
+ private
18
+
19
+ def wiki_uncached
20
+ sub.wiki(parsed.wiki_id)
21
+ end
22
+
23
+ require_sub __FILE__
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Runners
8
+ class Base < ::Avm::Runners::Base
9
+ class Sub
10
+ class Wikis
11
+ runner_with :help, :output_list
12
+
13
+ def run
14
+ run_output
15
+ end
16
+
17
+ def list_columns
18
+ [:id]
19
+ end
20
+
21
+ def list_rows
22
+ sub.wikis
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_cli/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Runners
8
+ class Base < ::Avm::Runners::Base
9
+ class Sub
10
+ runner_with :help, :subcommands do
11
+ pos_arg :sub_name
12
+ subcommands
13
+ end
14
+ for_context :sub
15
+
16
+ private
17
+
18
+ def sub_uncached
19
+ api.root_entity.sub(parsed.sub_name)
20
+ end
21
+
22
+ require_sub __FILE__
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/reddit_base0/manager'
4
+ require 'eac_cli/core_ext'
5
+
6
+ module Avm
7
+ module RedditBase0
8
+ module Runners
9
+ class Base < ::Avm::Runners::Base
10
+ runner_with :help, :subcommands do
11
+ subcommands
12
+ end
13
+ for_context :api
14
+
15
+ private
16
+
17
+ def api_uncached
18
+ ::Avm::RedditBase0::Manager.instance.api
19
+ end
20
+
21
+ require_sub __FILE__
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Sources
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_generic_base0/sources/base'
4
+ require 'avm/reddit_base0/sources/runners'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module RedditBase0
9
+ module Sources
10
+ class Base < ::Avm::EacGenericBase0::Sources::Base
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Sources
8
+ class Download
9
+ class DownloadWiki
10
+ acts_as_instance_method
11
+ common_constructor :download, :wiki
12
+ delegate :source, to: :download
13
+
14
+ DEFAULT_EXTENSION = '.md'
15
+ AUTOMODERATOR_EXTENSION = '.yml'
16
+ AUTOMODERATOR_SUBPATH = 'config/automoderator'
17
+
18
+ def result
19
+ target_path.assert_parent.write(wiki.read)
20
+ end
21
+
22
+ def target_path
23
+ source.path.join('wiki').join(wiki.subpath)
24
+ .basename_sub { |b| "#{b}#{target_extension}" }
25
+ end
26
+
27
+ # @return [String]
28
+ def target_extension
29
+ if wiki.subpath.to_pathname == AUTOMODERATOR_SUBPATH.to_pathname
30
+ AUTOMODERATOR_EXTENSION
31
+ else
32
+ DEFAULT_EXTENSION
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/eac_generic_base0/sources/base'
4
+ require 'avm/reddit_base0/sources/runners'
5
+ require 'eac_ruby_utils/core_ext'
6
+
7
+ module Avm
8
+ module RedditBase0
9
+ module Sources
10
+ class Download
11
+ common_constructor :source, :instance
12
+
13
+ def perform
14
+ source.scm.commit_if_change(commit_message) do
15
+ internal_perform
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ # @return [String]
22
+ def commit_message
23
+ source.i18n_translate(:download_commit_message, sub_name: instance.sub_name,
24
+ date_time: ::DateTime.now)
25
+ end
26
+
27
+ def download_wikis
28
+ instance.sub.wikis.each do |wiki|
29
+ download_wiki(wiki)
30
+ end
31
+ end
32
+
33
+ def internal_perform
34
+ download_wikis
35
+ end
36
+
37
+ require_sub __FILE__, require_mode: :kernel
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/reddit_base0/sources/download'
4
+ require 'avm/registry'
5
+ require 'eac_cli/core_ext'
6
+
7
+ module Avm
8
+ module RedditBase0
9
+ module Sources
10
+ module Runners
11
+ class Download
12
+ runner_with :help do
13
+ pos_arg :instance_id
14
+ end
15
+
16
+ def run
17
+ runner_context.call(:source_banner)
18
+ infov 'Instance', instance
19
+ download.perform
20
+ end
21
+
22
+ private
23
+
24
+ def download_uncached
25
+ ::Avm::RedditBase0::Sources::Download.new(source, instance)
26
+ end
27
+
28
+ def instance_uncached
29
+ ::Avm::Registry.instances.detect(parsed.instance_id)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Sources
8
+ module Runners
9
+ require_sub __FILE__
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ module Sources
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avm
4
+ module RedditBase0
5
+ VERSION = '0.1.1'
6
+ end
7
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avm
6
+ module RedditBase0
7
+ require_sub __FILE__
8
+ end
9
+ end
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: avm-reddit_base0
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Put here the authors
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2023-09-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: avm-eac_generic_base0
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.12'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: eac_rest
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '0.10'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '0.10'
41
+ - !ruby/object:Gem::Dependency
42
+ name: eac_ruby_utils
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.119'
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: 0.119.1
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '0.119'
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: 0.119.1
61
+ - !ruby/object:Gem::Dependency
62
+ name: eac_ruby_gem_support
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '0.6'
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0.6'
75
+ description:
76
+ email:
77
+ executables: []
78
+ extensions: []
79
+ extra_rdoc_files: []
80
+ files:
81
+ - lib/avm/reddit_base0.rb
82
+ - lib/avm/reddit_base0/api.rb
83
+ - lib/avm/reddit_base0/api/access_token.rb
84
+ - lib/avm/reddit_base0/api/entity.rb
85
+ - lib/avm/reddit_base0/api/me.rb
86
+ - lib/avm/reddit_base0/api/root.rb
87
+ - lib/avm/reddit_base0/api/sub.rb
88
+ - lib/avm/reddit_base0/api/wiki.rb
89
+ - lib/avm/reddit_base0/automoderator/age_gender_regex.rb
90
+ - lib/avm/reddit_base0/automoderator/regex.rb
91
+ - lib/avm/reddit_base0/automoderator/year_gender_regex.rb
92
+ - lib/avm/reddit_base0/instances.rb
93
+ - lib/avm/reddit_base0/instances/base.rb
94
+ - lib/avm/reddit_base0/manager.rb
95
+ - lib/avm/reddit_base0/runners.rb
96
+ - lib/avm/reddit_base0/runners/base.rb
97
+ - lib/avm/reddit_base0/runners/base/generic.rb
98
+ - lib/avm/reddit_base0/runners/base/me.rb
99
+ - lib/avm/reddit_base0/runners/base/me/identity.rb
100
+ - lib/avm/reddit_base0/runners/base/sub.rb
101
+ - lib/avm/reddit_base0/runners/base/sub/about.rb
102
+ - lib/avm/reddit_base0/runners/base/sub/wiki.rb
103
+ - lib/avm/reddit_base0/runners/base/sub/wiki/read.rb
104
+ - lib/avm/reddit_base0/runners/base/sub/wiki/write.rb
105
+ - lib/avm/reddit_base0/runners/base/sub/wikis.rb
106
+ - lib/avm/reddit_base0/sources.rb
107
+ - lib/avm/reddit_base0/sources/base.rb
108
+ - lib/avm/reddit_base0/sources/download.rb
109
+ - lib/avm/reddit_base0/sources/download/download_wiki.rb
110
+ - lib/avm/reddit_base0/sources/runners.rb
111
+ - lib/avm/reddit_base0/sources/runners/download.rb
112
+ - lib/avm/reddit_base0/version.rb
113
+ homepage:
114
+ licenses: []
115
+ metadata: {}
116
+ post_install_message:
117
+ rdoc_options: []
118
+ require_paths:
119
+ - lib
120
+ required_ruby_version: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '2.7'
125
+ required_rubygems_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ requirements: []
131
+ rubygems_version: 3.1.6
132
+ signing_key:
133
+ specification_version: 4
134
+ summary: Put here de description.
135
+ test_files: []