activeadmin-menu_tree 0.1.0 → 0.2.0

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