avm-reddit_base0 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
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: []