discourse_dev 0.0.1 → 0.0.2

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
  SHA256:
3
- metadata.gz: a2aba4e03e170bb935d21b11561bad7ec4fa6863b1c93985cf341a8415a7b181
4
- data.tar.gz: dfb5e511e0564a2e2fec192834f0f21eb21e9c044f4132eb39edba489bc5b164
3
+ metadata.gz: 5f6b6919dea52805f8b6b7f561e77d3101e447c93dc307eeac4b8638580f065c
4
+ data.tar.gz: 9694e92b6004f660b7feac692523a7c5551d75e2bedb4ebe5b7b81a2ca9378a7
5
5
  SHA512:
6
- metadata.gz: 1ef8f8c750db41437f73e84e77a12e51360b4052b3be3e620222b7786c9e255bf81883c986dbb8be3a0cfc9c9e8d3dab5a5c5468e2afeb1e1c3657b0b2c25a36
7
- data.tar.gz: 7b40a195bd4df36c465d311dc71eee03bdc85f89192b5a937ec50a17fe842feadeec233e1328da3ca2be7386f44e334cef3756488fc01b9052ca3214fd933202
6
+ metadata.gz: 1e84c18461298fd93b39bb9af3950a09dc8c79cdcc44cbea8aba8bdac0f45c680d497e4468b35e8598cdee7d437e81e8b66b97b954f99a4cc5af4c29a91c2fc1
7
+ data.tar.gz: 5cd31e7f82f8cac62a7efa69626ea26da804b43b7e16e95e0c7aef0ce95c3c900914e6d2427209bc551a27bfa8ab8c1691dc21153d6b7d89290f973ef31eeb17
data/README.md CHANGED
@@ -1 +1,5 @@
1
1
  # Discourse Dev
2
+
3
+ ![Gem](https://img.shields.io/gem/v/discourse_dev)
4
+
5
+ Rake helper tasks for Discourse developers.
@@ -10,8 +10,8 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ["Vinoth Kannan"]
11
11
  spec.email = ["svkn.87@gmail.com"]
12
12
 
13
- spec.summary = %q{Rake helper for Discourse developers}
14
- spec.description = %q{Rake helper for Discourse developers}
13
+ spec.summary = %q{Rake helper tasks for Discourse developers}
14
+ spec.description = %q{Rake helper tasks for Discourse developers}
15
15
  spec.homepage = "https://github.com/discourse/discourse_dev"
16
16
  spec.license = "MIT"
17
17
 
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.add_runtime_dependency "faker", "~> 2.16"
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 2.0"
24
- spec.add_development_dependency "rake", "~> 10.0"
24
+ spec.add_development_dependency "rake", ">= 12.3.3"
25
25
 
26
26
  spec.required_ruby_version = '>= 2.6.0'
27
27
  end
@@ -9,21 +9,56 @@ module DiscourseDev
9
9
 
10
10
  def initialize(count = DEFAULT_COUNT)
11
11
  super(::Category, count)
12
+ @existing_names = ::Category.pluck(:name)
13
+ @parent_category_ids = ::Category.where(parent_category_id: nil).pluck(:id)
14
+ @group_count = ::Group.count
12
15
  end
13
16
 
14
17
  def data
15
- name = Faker::Name.name
16
- email = Faker::Internet.email(name: name)
17
- username = Faker::Internet.username(specifier: name)[0, SiteSetting.max_username_length]
18
- username_lower = username.downcase
18
+ name = Faker::Discourse.category
19
+ parent_category_id = nil
20
+
21
+ while @existing_names.include? name
22
+ name = Faker::Discourse.category
23
+ end
24
+
25
+ @existing_names << name
26
+
27
+ if Faker::Boolean.boolean(true_ratio: 0.6)
28
+ parent_category_id = @parent_category_ids.sample
29
+ @permissions = ::Category.find(parent_category_id).permissions_params.presence
30
+ else
31
+ @permissions = nil
32
+ end
19
33
 
20
34
  {
21
35
  name: name,
22
- email: email,
23
- username: username,
24
- username_lower: username_lower,
25
- trust_level: Faker::Number.between(from: 1, to: 4)
36
+ description: Faker::Lorem.paragraph,
37
+ user_id: ::Discourse::SYSTEM_USER_ID,
38
+ color: Faker::Color.hex_color.last(6),
39
+ parent_category_id: parent_category_id
26
40
  }
27
41
  end
42
+
43
+ def permissions
44
+ return @permissions if @permissions.present?
45
+ return { everyone: :full } if Faker::Boolean.boolean(true_ratio: 0.75)
46
+
47
+ permission = {}
48
+ offset = rand(@group_count)
49
+ group = ::Group.offset(offset).first
50
+ permission[group.id] = Faker::Number.between(from: 1, to: 3)
51
+
52
+ permission
53
+ end
54
+
55
+ def create!
56
+ super do |category|
57
+ category.set_permissions(permissions)
58
+ category.save!
59
+
60
+ @parent_category_ids << category.id if category.parent_category_id.blank?
61
+ end
62
+ end
28
63
  end
29
64
  end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails'
4
+
5
+ module DiscourseDev
6
+ class Config
7
+ attr_reader :config, :default_config
8
+
9
+ def initialize
10
+ @default_config = YAML.load_file(File.join(File.expand_path(__dir__), "config.yml"))
11
+ file_path = File.join(Rails.root, "config", "dev.yml")
12
+
13
+ if File.exists?(file_path)
14
+ @config = YAML.load_file(file_path)
15
+ else
16
+ @config = {}
17
+ end
18
+ end
19
+
20
+ def update!
21
+ update_site_settings
22
+ end
23
+
24
+ def update_site_settings
25
+ puts "Updating site settings..."
26
+
27
+ site_settings = config["site_settings"] || {}
28
+
29
+ site_settings.each do |key, value|
30
+ puts "#{key} = #{value}"
31
+ SiteSetting.set(key, value)
32
+ end
33
+
34
+ keys = site_settings.keys
35
+
36
+ default_config["site_settings"].each do |key, value|
37
+ next if keys.include?(key)
38
+
39
+ puts "#{key} = #{value}"
40
+ SiteSetting.set(key, value)
41
+ end
42
+
43
+ SiteSetting.refresh!
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ site_settings:
2
+ tagging_enabled: false
3
+ verbose_discourse_connect_logging: true
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'discourse_dev/record'
4
+ require 'rails'
5
+ require 'faker'
6
+
7
+ module DiscourseDev
8
+ class Group < Record
9
+
10
+ DEFAULT_COUNT = 15.freeze
11
+
12
+ def initialize(count = DEFAULT_COUNT)
13
+ super(::Group, count)
14
+ @existing_names = ::Group.where(automatic: false).pluck(:name)
15
+ end
16
+
17
+ def data
18
+ name = Faker::Discourse.group
19
+
20
+ while @existing_names.include? name
21
+ name = Faker::Company.profession.gsub(" ", "-")
22
+ end
23
+
24
+ @existing_names << name
25
+
26
+ {
27
+ name: name,
28
+ public_exit: Faker::Boolean.boolean,
29
+ public_admission: Faker::Boolean.boolean,
30
+ primary_group: Faker::Boolean.boolean
31
+ }
32
+ end
33
+
34
+ def create!
35
+ super do |group|
36
+ if Faker::Boolean.boolean
37
+ group.add_owner(::Discourse.system_user)
38
+ group.allow_membership_requests = true
39
+ group.save!
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -8,7 +8,7 @@ module DiscourseDev
8
8
  class Record
9
9
  DEFAULT_COUNT = 30.freeze
10
10
 
11
- attr_reader :model, :type
11
+ attr_reader :model, :type, :count
12
12
 
13
13
  def initialize(model, count = DEFAULT_COUNT)
14
14
  @model = model
@@ -17,20 +17,17 @@ module DiscourseDev
17
17
  end
18
18
 
19
19
  def create!
20
- model.create!(data)
20
+ record = model.create!(data)
21
+ yield(record)
21
22
  putc "."
22
23
  end
23
24
 
24
25
  def populate!
25
- puts "Creating #{count} sample #{type.downcase}s"
26
+ puts "Creating #{count} sample #{type.downcase} records"
26
27
  count.times { create! }
27
28
  puts
28
29
  end
29
30
 
30
- def count
31
- @count || DEFAULT_COUNT
32
- end
33
-
34
31
  def self.populate!
35
32
  self.new.populate!
36
33
  end
@@ -11,12 +11,20 @@ task 'dev:reset' => ['db:load_config'] do |_, args|
11
11
  check_environment!
12
12
 
13
13
  Rake::Task['db:migrate:reset'].invoke
14
+ Rake::Task['dev:config'].invoke
14
15
  Rake::Task['admin:create'].invoke
15
16
  Rake::Task['dev:populate'].invoke
16
17
  end
17
18
 
19
+ desc 'Initialize development environment'
20
+ task 'dev:config' => ['db:load_config'] do |_, args|
21
+ DiscourseDev::Config.new.update!
22
+ end
23
+
18
24
  desc 'Populate sample content for development environment'
19
25
  task 'dev:populate' => ['db:load_config'] do |_, args|
26
+ Rake::Task['groups:populate'].invoke
20
27
  Rake::Task['users:populate'].invoke
28
+ Rake::Task['categories:populate'].invoke
21
29
  Rake::Task['topics:populate'].invoke
22
30
  end
@@ -1,10 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ desc 'Creates sample categories'
4
+ task 'groups:populate' => ['db:load_config'] do |_, args|
5
+ DiscourseDev::Group.populate!
6
+ end
7
+
3
8
  desc 'Creates sample user accounts'
4
9
  task 'users:populate' => ['db:load_config'] do |_, args|
5
10
  DiscourseDev::User.populate!
6
11
  end
7
12
 
13
+ desc 'Creates sample categories'
14
+ task 'categories:populate' => ['db:load_config'] do |_, args|
15
+ DiscourseDev::Category.populate!
16
+ end
17
+
8
18
  desc 'Creates sample topics'
9
19
  task 'topics:populate' => ['db:load_config'] do |_, args|
10
20
  DiscourseDev::Topic.populate!
@@ -16,7 +16,7 @@ module DiscourseDev
16
16
  {
17
17
  title: Faker::Lorem.sentence(word_count: 3, supplemental: true, random_words_to_add: 4).chomp(".")[0, SiteSetting.max_topic_title_length],
18
18
  raw: Faker::Markdown.sandwich(sentences: 5),
19
- category_id: @category_ids.sample,
19
+ category: @category_ids.sample,
20
20
  topic_opts: { custom_fields: { dev_sample: true } },
21
21
  skip_validations: true
22
22
  }
@@ -9,6 +9,8 @@ module DiscourseDev
9
9
 
10
10
  def initialize(count = DEFAULT_COUNT)
11
11
  super(::User, count)
12
+ @groups = ::Group.where(automatic: false)
13
+ @group_count = @groups.count
12
14
  end
13
15
 
14
16
  def data
@@ -22,8 +24,20 @@ module DiscourseDev
22
24
  email: email,
23
25
  username: username,
24
26
  username_lower: username_lower,
27
+ moderator: Faker::Boolean.boolean(true_ratio: 0.1),
25
28
  trust_level: Faker::Number.between(from: 1, to: 4)
26
29
  }
27
30
  end
31
+
32
+ def create!
33
+ super do |user|
34
+ Faker::Number.between(from: 0, to: 2).times do
35
+ offset = rand(@group_count)
36
+ group = @groups.offset(offset).first
37
+
38
+ group.add(user)
39
+ end
40
+ end
41
+ end
28
42
  end
29
43
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DiscourseDev
4
- VERSION = "0.0.1"
4
+ VERSION = "0.0.2"
5
5
  end
@@ -7,6 +7,10 @@ module Faker
7
7
  def category
8
8
  fetch('discourse.categories')
9
9
  end
10
+
11
+ def group
12
+ fetch('discourse.groups')
13
+ end
10
14
  end
11
15
  end
12
16
  end
@@ -4,7 +4,6 @@ en:
4
4
  categories:
5
5
  - movies
6
6
  - tech
7
- - general
8
7
  - videos
9
8
  - gaming
10
9
  - sports
@@ -19,3 +18,47 @@ en:
19
18
  - announcements
20
19
  - bug
21
20
  - community
21
+ - Events
22
+ - Education
23
+ - General Discussion
24
+ - News
25
+ - Suggestions
26
+ - Introduce Yourself
27
+ - Frequently Asked Questions
28
+ - Off-Topic
29
+ - Expert Advice
30
+ - Home and Living
31
+ - Babies and Kids
32
+ - International
33
+ - Partners
34
+ - Getting Started
35
+ - Creator's Corner
36
+ - Feature Requests
37
+ - Other Languages
38
+ - Travelling
39
+ - Recipes
40
+ - Newbies
41
+ - Covid-19
42
+ - Resources
43
+ - Docs
44
+ - Publishing
45
+ - Marketplace
46
+ - Community Guidelines
47
+ - Archived
48
+ - Meta
49
+ - Software and Operating Systems
50
+ - Arts & Media
51
+ - Science and Engineering
52
+ - Quizzes and Challenges
53
+ - Politics
54
+ - Roadmap
55
+ - Share Tips and Tricks
56
+ groups:
57
+ - team
58
+ - designers
59
+ - authors
60
+ - contributors
61
+ - customers
62
+ - subscribers
63
+ - creators
64
+ - translators
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: discourse_dev
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vinoth Kannan
@@ -42,17 +42,17 @@ dependencies:
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '10.0'
47
+ version: 12.3.3
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '10.0'
55
- description: Rake helper for Discourse developers
54
+ version: 12.3.3
55
+ description: Rake helper tasks for Discourse developers
56
56
  email:
57
57
  - svkn.87@gmail.com
58
58
  executables: []
@@ -68,6 +68,9 @@ files:
68
68
  - discourse_dev.gemspec
69
69
  - lib/discourse_dev.rb
70
70
  - lib/discourse_dev/category.rb
71
+ - lib/discourse_dev/config.rb
72
+ - lib/discourse_dev/config.yml
73
+ - lib/discourse_dev/group.rb
71
74
  - lib/discourse_dev/railtie.rb
72
75
  - lib/discourse_dev/record.rb
73
76
  - lib/discourse_dev/tasks/dev.rake
@@ -99,5 +102,5 @@ requirements: []
99
102
  rubygems_version: 3.0.3
100
103
  signing_key:
101
104
  specification_version: 4
102
- summary: Rake helper for Discourse developers
105
+ summary: Rake helper tasks for Discourse developers
103
106
  test_files: []