activeadmin-menu_tree 0.1.0 → 0.2.0

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: 888200f43639792b0e3399f615e2581daf617b961e08977d766148ea3e177e3f
4
- data.tar.gz: 45520ffd081b84074e51f259ea0c7be3baf4290d7e84e9d4cc333c18a566dafe
3
+ metadata.gz: 0caee8014a99e9c19b47e24c1fe5f9c3950a6707f00389d7a6572dc1c4671024
4
+ data.tar.gz: 48b3919992e7df05e26103655f8301ab405210b4f7b114fd097bd0aae2850c26
5
5
  SHA512:
6
- metadata.gz: 2f23ca691fb6f429385118558455ded147c6460289e10c749b596acfd1327cca98ab3def345f6be0b7a48b5ddf0419eef7501e796b33daba2849f5b1e136498f
7
- data.tar.gz: 4a2832c6baaf35ab2c394d60588e1c39cebc4590993d66af565964799204618abd148729e0fa7dd3e769eec18d780116becabb85af625b2747719cf3cc1b9c53
6
+ metadata.gz: 17618bae45e7f27646ad1aa1b65f0f8ab8dd221cdb5c949edb960e8e3d5ff01a837a7091ab7d772a149f9ce739c017bc56906fe939f30488794b6c4b731ba76b
7
+ data.tar.gz: 5345872721f7072db40551286347bdd2a6d072ddfccf08e0fc1bf02f626d471960d5c9efd7bfea1887a64418fdaa060026104dd48552ce5f683ab27c19fc8260
@@ -1,47 +1,61 @@
1
1
  name: Ruby
2
2
 
3
- on: [push, pull_request]
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ pull_request:
8
+ types:
9
+ - opened
10
+ - synchronize
11
+ - reopened
4
12
 
5
13
  jobs:
6
14
  rubocop:
7
15
  runs-on: ubuntu-latest
8
16
  steps:
9
- - uses: actions/checkout@v2
10
- - name: Set up Ruby
11
- uses: ruby/setup-ruby@v1
12
- with:
13
- ruby-version: 3.0.0
14
- - name: Install bundler
15
- run: gem install bundler
16
- - name: Setup
17
- run: bin/setup
18
- - name: Rubocop
19
- run: bundle exec rake rubocop
17
+ - uses: actions/checkout@v2
18
+ - name: Set up Ruby
19
+ uses: ruby/setup-ruby@v1
20
+ with:
21
+ ruby-version: 3.1
22
+ - name: Install bundler
23
+ run: gem install bundler
24
+ - name: Setup
25
+ run: bin/setup
26
+ - name: Rubocop
27
+ run: bundle exec rake rubocop
28
+ # steep:
29
+ # runs-on: ubuntu-latest
30
+ # steps:
31
+ # - uses: actions/checkout@v2
32
+ # - name: Set up Ruby
33
+ # uses: ruby/setup-ruby@v1
34
+ # with:
35
+ # ruby-version: 3.1
36
+ # - name: Install bundler
37
+ # run: gem install bundler
38
+ # - name: Setup
39
+ # run: bin/setup
40
+ # - name: Steep
41
+ # run: bundle exec steep check
20
42
  rspec:
21
43
  runs-on: ubuntu-latest
44
+ strategy:
45
+ matrix:
46
+ ruby:
47
+ - 2.7
48
+ - 3.0
49
+ - 3.1
22
50
  steps:
23
- - uses: actions/checkout@v2
24
- - name: Set up Ruby
25
- uses: ruby/setup-ruby@v1
26
- with:
27
- ruby-version: 3.0.0
28
- - name: Install bundler
29
- run: gem install bundler
30
- - name: Setup
31
- run: bin/setup
32
- - name: RSpec
33
- run: bundle exec rake spec
34
- steep:
35
- runs-on: ubuntu-latest
36
- steps:
37
- - uses: actions/checkout@v2
38
- - name: Set up Ruby
39
- uses: ruby/setup-ruby@v1
40
- with:
41
- ruby-version: 3.0.0
42
- - name: Install bundler
43
- run: gem install bundler
44
- - name: Setup
45
- run: bin/setup
46
- - name: Steep
47
- run: bundle exec steep check
51
+ - uses: actions/checkout@v2
52
+ - name: Set up Ruby
53
+ uses: ruby/setup-ruby@v1
54
+ with:
55
+ ruby-version: ${{ matrix.ruby }}
56
+ - name: Install bundler
57
+ run: gem install bundler
58
+ - name: Setup
59
+ run: bin/setup
60
+ - name: RSpec
61
+ run: bundle exec rake spec
data/.rubocop.yml CHANGED
@@ -1,3 +1,8 @@
1
+ require:
2
+ - rubocop-rake
3
+ - rubocop-rspec
4
+ - rubocop-rubycw
5
+
1
6
  AllCops:
2
7
  TargetRubyVersion: 2.7
3
8
  NewCops: enable
@@ -6,6 +11,7 @@ AllCops:
6
11
  ExtraDetails: true
7
12
  Exclude:
8
13
  - 'spec/dummy/**/*'
14
+ - 'vendor/bundle/**/*'
9
15
 
10
16
  Style/ClassAndModuleChildren:
11
17
  Enabled: false
@@ -38,3 +44,13 @@ Metrics/BlockLength:
38
44
 
39
45
  Metrics/MethodLength:
40
46
  Max: 15
47
+
48
+ RSpec:
49
+ # DisabledByDefault
50
+ Enabled: false
51
+
52
+ RSpec/ContextWording:
53
+ Enabled: true
54
+
55
+ RSpec/VerifiedDoubles:
56
+ Enabled: true
data/Gemfile CHANGED
@@ -8,5 +8,8 @@ gemspec
8
8
  gem "rake", "~> 13.0"
9
9
  gem "rbs"
10
10
  gem "rspec", "~> 3.0"
11
- gem "rubocop", "~> 0.80"
12
- gem "steep"
11
+ gem "rubocop", "~> 1.0", require: false
12
+ gem "rubocop-rake", require: false
13
+ gem "rubocop-rspec", require: false
14
+ gem "rubocop-rubycw", require: false
15
+ gem "steep", ">= 0.47.0"
data/Makefile CHANGED
@@ -1,7 +1,7 @@
1
1
  .PHONY: rake/* rbs/* typeprof/* steep/*
2
2
 
3
3
  rake/tasks:
4
- rake --tasks
4
+ bundle exec rake --tasks
5
5
 
6
6
  rbs/prototype: rbs/prototype/lib
7
7
 
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # ActiveAdmin::MenuTree
2
2
 
3
- <!-- TODO: badge -->
3
+ [![Gem Version](https://badge.fury.io/rb/activeadmin-menu_tree.svg)](https://badge.fury.io/rb/activeadmin-menu_tree)
4
+ [![Ruby](https://github.com/shuuuuun/activeadmin-menu_tree/actions/workflows/main.yml/badge.svg)](https://github.com/shuuuuun/activeadmin-menu_tree/actions/workflows/main.yml)
4
5
 
5
6
  Allows [ActiveAdmin](https://github.com/activeadmin/activeadmin) menus to be managed in tree format.
6
7
 
@@ -45,12 +46,12 @@ Write the configuration in a yaml file.
45
46
  # config/activeadmin-menu_tree.yml or anywhere you like
46
47
  activeadmin:
47
48
  menu_tree:
48
- - name: Dashboard
49
+ - id: Dashboard
49
50
  - label: Admin
50
51
  children:
51
- - name: AdminUser
52
+ - id: AdminUser
52
53
  label: Admin Users
53
- - name: Comment
54
+ - id: Comment
54
55
  label: Admin Comments
55
56
  ```
56
57
 
@@ -85,19 +86,22 @@ end
85
86
 
86
87
  ### Other ways to load configuration
87
88
 
88
- It is also possible to simply use hash instead of yaml.
89
+ It is also possible to simply use hash instead of yaml.
90
+ If you want to use dynamic specification using `proc` in menu_tree (instead of in ActiveAdmin Resource), you may want to use this one.
91
+
89
92
  ```ruby
90
93
  ActiveAdmin::MenuTree.setup do |config|
91
- config.menu_tree = [{
92
- name: "Dashboard"
93
- }, {
94
- label: "Foo",
95
- children: [{
96
- name: "Bar"
97
- }, {
98
- name: "Baz"
99
- }]
100
- }]
94
+ config.menu_tree = [
95
+ { id: "Dashboard", label: proc { I18n.t("active_admin.dashboard") } },
96
+ {
97
+ label: "Foo",
98
+ if: proc { "Something dynamic" },
99
+ children: [
100
+ { id: "Bar" },
101
+ { id: "Baz" }
102
+ ]
103
+ }
104
+ ]
101
105
  end
102
106
  ```
103
107
 
@@ -117,36 +121,53 @@ activeadmin:
117
121
  Or you can use other configuration gems like [global gem](https://github.com/railsware/global) by converting them to hash as well.
118
122
 
119
123
  ### Full configuration example
124
+
120
125
  ```yaml
121
126
  activeadmin:
122
127
  menu_tree:
123
- # Specify the resource name with `name`.
124
- - name: Dashboard
125
- - name: Product
128
+ # Specify the resource with `id`.
129
+ - id: Dashboard
130
+ - id: Product
126
131
  # Specify a menu label with `label`.
127
132
  - label: User Info
128
133
  # Specify child elements with `children`.
129
134
  children:
130
- - name: User
131
- - name: Profile
135
+ - id: User
136
+ - id: Profile
132
137
  - label: Admin
133
138
  children:
134
- - name: AdminUser
139
+ - id: AdminUser
135
140
  label: Admin Users
136
141
  # Comment resource will be handled specially.
137
- - name: Comment
142
+ - id: Comment
138
143
  label: Admin Comments
139
144
  - label: Others
140
145
  children:
141
- - name: Foo
142
- - name: Bar
146
+ - id: Foo
147
+ - id: Bar
143
148
  - label: Example Site
144
149
  # You can pass the other options available for `menu` DSL, like `url`, `html_options`.
145
150
  url: 'https://example.com'
146
151
  html_options:
147
152
  target: blank
153
+ # Nesting of children is also available.
154
+ - label: Lorem
155
+ children:
156
+ - label: ipsum
157
+ children:
158
+ - label: dolor
159
+ children:
160
+ - label: sit
161
+ children:
162
+ - label: amet
163
+ url: 'https://wikipedia.org/wiki/Lorem_ipsum'
164
+ html_options:
165
+ target: blank
148
166
  ```
149
167
 
168
+ <img width="1573" alt="screenshot" src="https://user-images.githubusercontent.com/7542105/153759374-fd516cb8-8022-4e44-aad9-c97f77afc4e7.png">
169
+
170
+
150
171
  ## Development
151
172
 
152
173
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
17
17
  spec.metadata["homepage_uri"] = spec.homepage
18
18
  spec.metadata["source_code_uri"] = "https://github.com/shuuuuun/activeadmin-menu_tree"
19
19
  # spec.metadata["changelog_uri"] = "TODO: Put your gem's CHANGELOG.md URL here."
20
+ spec.metadata["rubygems_mfa_required"] = "true"
20
21
 
21
22
  # Specify which files should be added to the gem when it is released.
22
23
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -14,33 +14,30 @@ module ActiveAdmin::MenuTree
14
14
  raise ActiveAdmin::MenuTree::Error, "Invalid config" unless new_value.is_a? Array
15
15
 
16
16
  @menu_tree = new_value.map(&:deep_symbolize_keys)
17
- @menu_options = flatten_menu_tree
17
+ @menu_options = flatten_options(@menu_tree)
18
18
  end
19
19
 
20
- def find_menu_option(name:)
21
- menu_options.find { |item| item[:name] == name }
20
+ def find_menu_option(id:)
21
+ menu_options.find { |item| item[:id] == id }
22
22
  end
23
23
 
24
24
  private
25
25
 
26
- def flatten_menu_tree
27
- menu_tree.map.with_index(1) do |item, index|
28
- options = format_options(item, index: index)
26
+ def flatten_options(items, parent: nil)
27
+ items.map.with_index(1) do |item, index|
28
+ options = format_options(item, index: index, parent: parent)
29
29
  next options unless item[:children].is_a? Array
30
30
 
31
- children =
32
- item[:children].map.with_index(1) do |child, child_index|
33
- format_options(child, index: child_index, parent: item[:label])
34
- end
35
-
31
+ next_parent = parent ? [parent, item[:label]].flatten.compact : item[:label]
32
+ children = flatten_options(item[:children], parent: next_parent)
36
33
  [options] + children
37
34
  end.flatten.compact
38
35
  end
39
36
 
40
37
  def format_options(item, index:, parent: nil)
38
+ # TODO: validate option
41
39
  options = item.except(:children)
42
40
  options[:priority] = index * 10
43
- options[:label] ||= item[:name]&.pluralize&.titleize || ""
44
41
  options[:parent] = parent if parent.present?
45
42
  options
46
43
  end
@@ -4,8 +4,7 @@ module ActiveAdmin::MenuTree
4
4
  # ActiveAdmin::MenuTree::DSL class
5
5
  module DSL
6
6
  def menu_tree(**args)
7
- options = menu_tree_config.find_menu_option(name: config.resource_name.name) || {}
8
- options = options.except(:name)
7
+ options = menu_tree_config.find_menu_option(id: config.resource_name.name) || {}
9
8
  options = options.merge(args)
10
9
  menu(**options)
11
10
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module ActiveAdmin
4
4
  module MenuTree
5
- VERSION = "0.1.0"
5
+ VERSION = "0.2.0"
6
6
  end
7
7
  end
@@ -32,12 +32,11 @@ module ActiveAdmin
32
32
  private
33
33
 
34
34
  def setup_menu_options(aa_config)
35
- comments_menu = config.find_menu_option(name: "Comment")
35
+ comments_menu = config.find_menu_option(id: "Comment")
36
36
  aa_config.comments_menu = comments_menu if comments_menu.present?
37
37
 
38
38
  menu_options = config.menu_options
39
- .reject{ |item| item[:name] == "Comment" }
40
- .map{ |item| item.except(:name) }
39
+ .reject{ |item| item[:id] == "Comment" }
41
40
 
42
41
  aa_config.namespace :admin do |admin|
43
42
  admin.build_menu do |menu|
@@ -11,7 +11,7 @@ gems:
11
11
  source:
12
12
  type: git
13
13
  name: ruby/gem_rbs_collection
14
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
14
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
15
15
  remote: https://github.com/ruby/gem_rbs_collection.git
16
16
  repo_dir: gems
17
17
  - name: actionview
@@ -19,7 +19,7 @@ gems:
19
19
  source:
20
20
  type: git
21
21
  name: ruby/gem_rbs_collection
22
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
22
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
23
23
  remote: https://github.com/ruby/gem_rbs_collection.git
24
24
  repo_dir: gems
25
25
  - name: activemodel
@@ -27,7 +27,7 @@ gems:
27
27
  source:
28
28
  type: git
29
29
  name: ruby/gem_rbs_collection
30
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
30
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
31
31
  remote: https://github.com/ruby/gem_rbs_collection.git
32
32
  repo_dir: gems
33
33
  - name: activerecord
@@ -35,7 +35,7 @@ gems:
35
35
  source:
36
36
  type: git
37
37
  name: ruby/gem_rbs_collection
38
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
38
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
39
39
  remote: https://github.com/ruby/gem_rbs_collection.git
40
40
  repo_dir: gems
41
41
  - name: activesupport
@@ -43,7 +43,7 @@ gems:
43
43
  source:
44
44
  type: git
45
45
  name: ruby/gem_rbs_collection
46
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
46
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
47
47
  remote: https://github.com/ruby/gem_rbs_collection.git
48
48
  repo_dir: gems
49
49
  - name: ast
@@ -51,7 +51,15 @@ gems:
51
51
  source:
52
52
  type: git
53
53
  name: ruby/gem_rbs_collection
54
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
54
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
55
+ remote: https://github.com/ruby/gem_rbs_collection.git
56
+ repo_dir: gems
57
+ - name: listen
58
+ version: '3.2'
59
+ source:
60
+ type: git
61
+ name: ruby/gem_rbs_collection
62
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
55
63
  remote: https://github.com/ruby/gem_rbs_collection.git
56
64
  repo_dir: gems
57
65
  - name: nokogiri
@@ -59,7 +67,7 @@ gems:
59
67
  source:
60
68
  type: git
61
69
  name: ruby/gem_rbs_collection
62
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
70
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
63
71
  remote: https://github.com/ruby/gem_rbs_collection.git
64
72
  repo_dir: gems
65
73
  - name: parallel
@@ -67,7 +75,7 @@ gems:
67
75
  source:
68
76
  type: git
69
77
  name: ruby/gem_rbs_collection
70
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
78
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
71
79
  remote: https://github.com/ruby/gem_rbs_collection.git
72
80
  repo_dir: gems
73
81
  - name: rack
@@ -75,7 +83,7 @@ gems:
75
83
  source:
76
84
  type: git
77
85
  name: ruby/gem_rbs_collection
78
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
86
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
79
87
  remote: https://github.com/ruby/gem_rbs_collection.git
80
88
  repo_dir: gems
81
89
  - name: railties
@@ -83,7 +91,7 @@ gems:
83
91
  source:
84
92
  type: git
85
93
  name: ruby/gem_rbs_collection
86
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
94
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
87
95
  remote: https://github.com/ruby/gem_rbs_collection.git
88
96
  repo_dir: gems
89
97
  - name: rainbow
@@ -91,6 +99,6 @@ gems:
91
99
  source:
92
100
  type: git
93
101
  name: ruby/gem_rbs_collection
94
- revision: 2f3c0db60f184a09b3b195ad729a9aa1e2945d1b
102
+ revision: 81ace2c598ec871572beee5792e2a2781b35e762
95
103
  remote: https://github.com/ruby/gem_rbs_collection.git
96
104
  repo_dir: gems
@@ -1,18 +1,22 @@
1
1
  module ActiveAdmin::MenuTree
2
2
  class Config
3
- attr_reader menu_tree: Array[untyped]
4
- attr_reader menu_options: Array[untyped]
3
+ type menu_tree_item = Hash[Symbol, untyped]
4
+ type menu_option = Hash[Symbol, untyped]
5
+
6
+ attr_reader menu_tree: Array[menu_tree_item]
7
+ attr_reader menu_options: Array[menu_option]
5
8
 
6
9
  def initialize: () -> void
7
10
 
8
- def menu_tree=: (untyped new_value) -> untyped
11
+ # def menu_tree=: (Array[Hash[untyped, untyped]] new_value) -> void
12
+ def menu_tree=: (Array[untyped] new_value) -> void
9
13
 
10
- def find_menu_option: (name: String) -> untyped
14
+ def find_menu_option: (name: String) -> (menu_option | nil)
11
15
 
12
16
  private
13
17
 
14
- def flatten_menu_tree: () -> untyped
18
+ def flatten_menu_tree: () -> Array[menu_option]
15
19
 
16
- def format_options: (untyped item, index: untyped index, ?parent: untyped? parent) -> untyped
20
+ def format_options: (Hash[Symbol, untyped] item, index: Integer index, ?parent: String? parent) -> menu_option
17
21
  end
18
22
  end
@@ -3,12 +3,12 @@ module ActiveAdmin
3
3
  class Error < StandardError
4
4
  end
5
5
 
6
- def self.setup: () { (untyped) -> untyped } -> untyped
6
+ def self.setup: () { (Config) -> void } -> void
7
7
 
8
8
  def self.config: () -> Config
9
9
 
10
10
  private
11
11
 
12
- def self.setup_menu_options: (untyped aa_config) -> untyped
12
+ def self.setup_menu_options: (ActiveAdmin::Application) -> void
13
13
  end
14
14
  end
@@ -1,3 +1,8 @@
1
1
  module ActiveAdmin
2
- def self.before_load: () { (untyped) -> void } -> void
2
+ def self.before_load: () { (ActiveAdmin::Application) -> void } -> void
3
+
4
+ class Application
5
+ def comments_menu=: (Hash[Symbol, untyped] | nil) -> void
6
+ def namespace: (Symbol) { (untyped) -> void } -> void
7
+ end
3
8
  end
@@ -0,0 +1,4 @@
1
+ # Tentative deal, it doesn't seem to be loaded from gem_rbs_collection for some reason.
2
+ class Object
3
+ def present?: () -> bool
4
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activeadmin-menu_tree
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - shuuuuuny
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-28 00:00:00.000000000 Z
11
+ date: 2022-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activeadmin
@@ -70,12 +70,14 @@ files:
70
70
  - sig/lib/activeadmin/menu_tree/config.rbs
71
71
  - sig/lib/activeadmin/menu_tree/dsl.rbs
72
72
  - sig/lib/activeadmin/menu_tree/version.rbs
73
+ - sig/lib/activesupport.rbs
73
74
  homepage: https://github.com/shuuuuun/activeadmin-menu_tree
74
75
  licenses:
75
76
  - MIT
76
77
  metadata:
77
78
  homepage_uri: https://github.com/shuuuuun/activeadmin-menu_tree
78
79
  source_code_uri: https://github.com/shuuuuun/activeadmin-menu_tree
80
+ rubygems_mfa_required: 'true'
79
81
  post_install_message:
80
82
  rdoc_options: []
81
83
  require_paths:
@@ -91,7 +93,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
93
  - !ruby/object:Gem::Version
92
94
  version: '0'
93
95
  requirements: []
94
- rubygems_version: 3.2.28
96
+ rubygems_version: 3.3.3
95
97
  signing_key:
96
98
  specification_version: 4
97
99
  summary: Allows ActiveAdmin menus to be managed in tree format.