lex-aha 0.1.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.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +16 -0
  3. data/.gitignore +12 -0
  4. data/.rspec +3 -0
  5. data/.rubocop.yml +66 -0
  6. data/CHANGELOG.md +12 -0
  7. data/CLAUDE.md +88 -0
  8. data/Dockerfile +6 -0
  9. data/Gemfile +12 -0
  10. data/LICENSE +21 -0
  11. data/README.md +62 -0
  12. data/lex-aha.gemspec +30 -0
  13. data/lib/legion/extensions/aha/base_client.rb +23 -0
  14. data/lib/legion/extensions/aha/core/client.rb +42 -0
  15. data/lib/legion/extensions/aha/core/runners/admin.rb +65 -0
  16. data/lib/legion/extensions/aha/core/runners/attachments.rb +39 -0
  17. data/lib/legion/extensions/aha/core/runners/audits.rb +37 -0
  18. data/lib/legion/extensions/aha/core/runners/comments.rb +66 -0
  19. data/lib/legion/extensions/aha/core/runners/custom_fields.rb +59 -0
  20. data/lib/legion/extensions/aha/core/runners/custom_table_records.rb +42 -0
  21. data/lib/legion/extensions/aha/core/runners/integrations.rb +49 -0
  22. data/lib/legion/extensions/aha/core/runners/me.rb +35 -0
  23. data/lib/legion/extensions/aha/core/runners/record_links.rb +42 -0
  24. data/lib/legion/extensions/aha/core/runners/teams.rb +71 -0
  25. data/lib/legion/extensions/aha/core/runners/todos.rb +59 -0
  26. data/lib/legion/extensions/aha/core/runners/users.rb +49 -0
  27. data/lib/legion/extensions/aha/core/runners/webhooks.rb +25 -0
  28. data/lib/legion/extensions/aha/core/runners/workflows.rb +30 -0
  29. data/lib/legion/extensions/aha/core.rb +26 -0
  30. data/lib/legion/extensions/aha/helpers/client.rb +23 -0
  31. data/lib/legion/extensions/aha/ideas/client.rb +30 -0
  32. data/lib/legion/extensions/aha/ideas/runners/idea_categories.rb +25 -0
  33. data/lib/legion/extensions/aha/ideas/runners/idea_comments.rb +40 -0
  34. data/lib/legion/extensions/aha/ideas/runners/idea_organizations.rb +45 -0
  35. data/lib/legion/extensions/aha/ideas/runners/idea_portals.rb +30 -0
  36. data/lib/legion/extensions/aha/ideas/runners/idea_subscriptions.rb +40 -0
  37. data/lib/legion/extensions/aha/ideas/runners/idea_users.rb +45 -0
  38. data/lib/legion/extensions/aha/ideas/runners/idea_votes.rb +50 -0
  39. data/lib/legion/extensions/aha/ideas/runners/ideas.rb +55 -0
  40. data/lib/legion/extensions/aha/ideas.rb +20 -0
  41. data/lib/legion/extensions/aha/knowledge/client.rb +20 -0
  42. data/lib/legion/extensions/aha/knowledge/runners/knowledge_bases.rb +29 -0
  43. data/lib/legion/extensions/aha/knowledge/runners/notes.rb +44 -0
  44. data/lib/legion/extensions/aha/knowledge/runners/pages.rb +44 -0
  45. data/lib/legion/extensions/aha/knowledge.rb +15 -0
  46. data/lib/legion/extensions/aha/roadmaps/client.rb +42 -0
  47. data/lib/legion/extensions/aha/roadmaps/runners/capacity.rb +54 -0
  48. data/lib/legion/extensions/aha/roadmaps/runners/competitors.rb +44 -0
  49. data/lib/legion/extensions/aha/roadmaps/runners/epics.rb +59 -0
  50. data/lib/legion/extensions/aha/roadmaps/runners/features.rb +59 -0
  51. data/lib/legion/extensions/aha/roadmaps/runners/goals.rb +54 -0
  52. data/lib/legion/extensions/aha/roadmaps/runners/initiatives.rb +54 -0
  53. data/lib/legion/extensions/aha/roadmaps/runners/key_results.rb +44 -0
  54. data/lib/legion/extensions/aha/roadmaps/runners/personas.rb +44 -0
  55. data/lib/legion/extensions/aha/roadmaps/runners/products.rb +34 -0
  56. data/lib/legion/extensions/aha/roadmaps/runners/release_phases.rb +49 -0
  57. data/lib/legion/extensions/aha/roadmaps/runners/releases.rb +49 -0
  58. data/lib/legion/extensions/aha/roadmaps/runners/requirements.rb +44 -0
  59. data/lib/legion/extensions/aha/roadmaps/runners/roll_up_releases.rb +39 -0
  60. data/lib/legion/extensions/aha/roadmaps/runners/strategy.rb +49 -0
  61. data/lib/legion/extensions/aha/roadmaps.rb +26 -0
  62. data/lib/legion/extensions/aha/version.rb +9 -0
  63. data/lib/legion/extensions/aha.rb +17 -0
  64. metadata +122 -0
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Ideas
9
+ module Runners
10
+ module IdeaPortals
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_idea_portals(**)
14
+ response = client(**).get('/idea_portals')
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def list_idea_portals_in_product(product_id:, **)
19
+ response = client(**).get("/products/#{product_id}/idea_portals")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
24
+ Legion::Extensions::Helpers.const_defined?(:Lex)
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Ideas
9
+ module Runners
10
+ module IdeaSubscriptions
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_subscriptions(idea_id:, **)
14
+ response = client(**).get("/ideas/#{idea_id}/subscriptions")
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def get_subscription(idea_id:, id:, **)
19
+ response = client(**).get("/ideas/#{idea_id}/subscriptions/#{id}")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ def create_subscription(idea_id:, subscription:, **)
24
+ response = client(**).post("/ideas/#{idea_id}/subscriptions", { subscription: subscription })
25
+ { result: response.body, status: response.status }
26
+ end
27
+
28
+ def delete_subscription(idea_id:, id:, **)
29
+ response = client(**).delete("/ideas/#{idea_id}/subscriptions/#{id}")
30
+ { result: response.body, status: response.status }
31
+ end
32
+
33
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
34
+ Legion::Extensions::Helpers.const_defined?(:Lex)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Ideas
9
+ module Runners
10
+ module IdeaUsers
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_idea_users(**)
14
+ response = client(**).get('/idea_users')
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def get_idea_user(id:, **)
19
+ response = client(**).get("/idea_users/#{id}")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ def create_idea_user(idea_user:, **)
24
+ response = client(**).post('/idea_users', { idea_user: idea_user })
25
+ { result: response.body, status: response.status }
26
+ end
27
+
28
+ def update_idea_user(id:, idea_user:, **)
29
+ response = client(**).put("/idea_users/#{id}", { idea_user: idea_user })
30
+ { result: response.body, status: response.status }
31
+ end
32
+
33
+ def delete_idea_user(id:, **)
34
+ response = client(**).delete("/idea_users/#{id}")
35
+ { result: response.body, status: response.status }
36
+ end
37
+
38
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
39
+ Legion::Extensions::Helpers.const_defined?(:Lex)
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Ideas
9
+ module Runners
10
+ module IdeaVotes
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_votes(idea_id:, **)
14
+ response = client(**).get("/ideas/#{idea_id}/endorsements")
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def list_account_votes(**)
19
+ response = client(**).get('/ideas/endorsements')
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ def get_vote(idea_id:, id:, **)
24
+ response = client(**).get("/ideas/#{idea_id}/endorsements/#{id}")
25
+ { result: response.body, status: response.status }
26
+ end
27
+
28
+ def create_vote(idea_id:, endorsement:, **)
29
+ response = client(**).post("/ideas/#{idea_id}/endorsements", { endorsement: endorsement })
30
+ { result: response.body, status: response.status }
31
+ end
32
+
33
+ def update_vote(idea_id:, id:, endorsement:, **)
34
+ response = client(**).put("/ideas/#{idea_id}/endorsements/#{id}", { endorsement: endorsement })
35
+ { result: response.body, status: response.status }
36
+ end
37
+
38
+ def delete_vote(idea_id:, id:, **)
39
+ response = client(**).delete("/ideas/#{idea_id}/endorsements/#{id}")
40
+ { result: response.body, status: response.status }
41
+ end
42
+
43
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
44
+ Legion::Extensions::Helpers.const_defined?(:Lex)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Ideas
9
+ module Runners
10
+ module Ideas
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_ideas(**)
14
+ response = client(**).get('/ideas')
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def list_ideas_in_product(product_id:, **)
19
+ response = client(**).get("/products/#{product_id}/ideas")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ def get_idea(id:, **)
24
+ response = client(**).get("/ideas/#{id}")
25
+ { result: response.body, status: response.status }
26
+ end
27
+
28
+ def create_idea(product_id:, idea:, **)
29
+ response = client(**).post("/products/#{product_id}/ideas", { idea: idea })
30
+ { result: response.body, status: response.status }
31
+ end
32
+
33
+ def delete_idea(id:, **)
34
+ response = client(**).delete("/ideas/#{id}")
35
+ { result: response.body, status: response.status }
36
+ end
37
+
38
+ def promote_idea(id:, **)
39
+ response = client(**).put("/ideas/#{id}/promote")
40
+ { result: response.body, status: response.status }
41
+ end
42
+
43
+ def list_related_ideas(term:, **)
44
+ response = client(**).get("/ideas/related?term=#{term}")
45
+ { result: response.body, status: response.status }
46
+ end
47
+
48
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) &&
49
+ Legion::Extensions::Helpers.const_defined?(:Lex)
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/ideas/runners/ideas'
4
+ require 'legion/extensions/aha/ideas/runners/idea_comments'
5
+ require 'legion/extensions/aha/ideas/runners/idea_portals'
6
+ require 'legion/extensions/aha/ideas/runners/idea_organizations'
7
+ require 'legion/extensions/aha/ideas/runners/idea_users'
8
+ require 'legion/extensions/aha/ideas/runners/idea_votes'
9
+ require 'legion/extensions/aha/ideas/runners/idea_subscriptions'
10
+ require 'legion/extensions/aha/ideas/runners/idea_categories'
11
+ require_relative 'ideas/client'
12
+
13
+ module Legion
14
+ module Extensions
15
+ module Aha
16
+ module Ideas
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../base_client'
4
+ require_relative 'runners/knowledge_bases'
5
+ require_relative 'runners/pages'
6
+ require_relative 'runners/notes'
7
+
8
+ module Legion
9
+ module Extensions
10
+ module Aha
11
+ module Knowledge
12
+ class Client < Legion::Extensions::Aha::BaseClient
13
+ include Runners::KnowledgeBases
14
+ include Runners::Pages
15
+ include Runners::Notes
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Knowledge
9
+ module Runners
10
+ module KnowledgeBases
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_knowledge_bases(product_id:, **)
14
+ response = client(**).get("/products/#{product_id}/knowledge_bases")
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def get_knowledge_base(id:, **)
19
+ response = client(**).get("/knowledge_bases/#{id}")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) && Legion::Extensions::Helpers.const_defined?(:Lex)
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Knowledge
9
+ module Runners
10
+ module Notes
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_notes(product_id:, **)
14
+ response = client(**).get("/products/#{product_id}/pages")
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def get_note(id:, **)
19
+ response = client(**).get("/pages/#{id}")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ def create_note(product_id:, page:, **)
24
+ response = client(**).post("/products/#{product_id}/pages", { page: page })
25
+ { result: response.body, status: response.status }
26
+ end
27
+
28
+ def update_note(id:, page:, **)
29
+ response = client(**).put("/pages/#{id}", { page: page })
30
+ { result: response.body, status: response.status }
31
+ end
32
+
33
+ def delete_note(id:, **)
34
+ response = client(**).delete("/pages/#{id}")
35
+ { result: response.body, status: response.status }
36
+ end
37
+
38
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) && Legion::Extensions::Helpers.const_defined?(:Lex)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Knowledge
9
+ module Runners
10
+ module Pages
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_pages(knowledge_base_id:, **)
14
+ response = client(**).get("/knowledge_bases/#{knowledge_base_id}/pages")
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def get_page(id:, **)
19
+ response = client(**).get("/pages/#{id}")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ def create_page(knowledge_base_id:, page:, **)
24
+ response = client(**).post("/knowledge_bases/#{knowledge_base_id}/pages", { page: page })
25
+ { result: response.body, status: response.status }
26
+ end
27
+
28
+ def update_page(id:, page:, **)
29
+ response = client(**).put("/pages/#{id}", { page: page })
30
+ { result: response.body, status: response.status }
31
+ end
32
+
33
+ def delete_page(id:, **)
34
+ response = client(**).delete("/pages/#{id}")
35
+ { result: response.body, status: response.status }
36
+ end
37
+
38
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) && Legion::Extensions::Helpers.const_defined?(:Lex)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/knowledge/runners/knowledge_bases'
4
+ require 'legion/extensions/aha/knowledge/runners/pages'
5
+ require 'legion/extensions/aha/knowledge/runners/notes'
6
+ require_relative 'knowledge/client'
7
+
8
+ module Legion
9
+ module Extensions
10
+ module Aha
11
+ module Knowledge
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../base_client'
4
+ require_relative 'runners/products'
5
+ require_relative 'runners/releases'
6
+ require_relative 'runners/release_phases'
7
+ require_relative 'runners/roll_up_releases'
8
+ require_relative 'runners/features'
9
+ require_relative 'runners/epics'
10
+ require_relative 'runners/requirements'
11
+ require_relative 'runners/initiatives'
12
+ require_relative 'runners/goals'
13
+ require_relative 'runners/key_results'
14
+ require_relative 'runners/strategy'
15
+ require_relative 'runners/competitors'
16
+ require_relative 'runners/personas'
17
+ require_relative 'runners/capacity'
18
+
19
+ module Legion
20
+ module Extensions
21
+ module Aha
22
+ module Roadmaps
23
+ class Client < Legion::Extensions::Aha::BaseClient
24
+ include Runners::Products
25
+ include Runners::Releases
26
+ include Runners::ReleasePhases
27
+ include Runners::RollUpReleases
28
+ include Runners::Features
29
+ include Runners::Epics
30
+ include Runners::Requirements
31
+ include Runners::Initiatives
32
+ include Runners::Goals
33
+ include Runners::KeyResults
34
+ include Runners::Strategy
35
+ include Runners::Competitors
36
+ include Runners::Personas
37
+ include Runners::Capacity
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Roadmaps
9
+ module Runners
10
+ module Capacity
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_capacity_scenarios(**)
14
+ response = client(**).get('/capacity_scenarios')
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def get_capacity_scenario(id:, **)
19
+ response = client(**).get("/capacity_scenarios/#{id}")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ def list_capacity_investments(product_id:, **)
24
+ response = client(**).get("/products/#{product_id}/capacity_investments")
25
+ { result: response.body, status: response.status }
26
+ end
27
+
28
+ def get_capacity_investment(id:, **)
29
+ response = client(**).get("/capacity_investments/#{id}")
30
+ { result: response.body, status: response.status }
31
+ end
32
+
33
+ def create_capacity_investment_on_feature(feature_id:, capacity_investment:, **)
34
+ response = client(**).post("/features/#{feature_id}/capacity_investments", { capacity_investment: capacity_investment })
35
+ { result: response.body, status: response.status }
36
+ end
37
+
38
+ def list_estimate_values(capacity_investment_id:, **)
39
+ response = client(**).get("/capacity_investments/#{capacity_investment_id}/estimate_values")
40
+ { result: response.body, status: response.status }
41
+ end
42
+
43
+ def create_estimate_values(capacity_investment_id:, estimate_values:, **)
44
+ response = client(**).post("/capacity_investments/#{capacity_investment_id}/estimate_values", { estimate_values: estimate_values })
45
+ { result: response.body, status: response.status }
46
+ end
47
+
48
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) && Legion::Extensions::Helpers.const_defined?(:Lex)
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Roadmaps
9
+ module Runners
10
+ module Competitors
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_competitors(product_id:, **)
14
+ response = client(**).get("/products/#{product_id}/competitors")
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def get_competitor(id:, **)
19
+ response = client(**).get("/competitors/#{id}")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ def create_competitor(product_id:, competitor:, **)
24
+ response = client(**).post("/products/#{product_id}/competitors", { competitor: competitor })
25
+ { result: response.body, status: response.status }
26
+ end
27
+
28
+ def update_competitor(product_id:, id:, competitor:, **)
29
+ response = client(**).put("/products/#{product_id}/competitors/#{id}", { competitor: competitor })
30
+ { result: response.body, status: response.status }
31
+ end
32
+
33
+ def delete_competitor(product_id:, id:, **)
34
+ response = client(**).delete("/products/#{product_id}/competitors/#{id}")
35
+ { result: response.body, status: response.status }
36
+ end
37
+
38
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) && Legion::Extensions::Helpers.const_defined?(:Lex)
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Roadmaps
9
+ module Runners
10
+ module Epics
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_epics(**)
14
+ response = client(**).get('/epics')
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def list_epics_in_release(release_id:, **)
19
+ response = client(**).get("/releases/#{release_id}/epics")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ def list_epics_in_product(product_id:, **)
24
+ response = client(**).get("/products/#{product_id}/epics")
25
+ { result: response.body, status: response.status }
26
+ end
27
+
28
+ def get_epic(id:, **)
29
+ response = client(**).get("/epics/#{id}")
30
+ { result: response.body, status: response.status }
31
+ end
32
+
33
+ def create_epic(release_id:, epic:, **)
34
+ response = client(**).post("/releases/#{release_id}/epics", { epic: epic })
35
+ { result: response.body, status: response.status }
36
+ end
37
+
38
+ def create_epic_in_product(product_id:, epic:, **)
39
+ response = client(**).post("/products/#{product_id}/epics", { epic: epic })
40
+ { result: response.body, status: response.status }
41
+ end
42
+
43
+ def update_epic(id:, epic:, **)
44
+ response = client(**).put("/epics/#{id}", { epic: epic })
45
+ { result: response.body, status: response.status }
46
+ end
47
+
48
+ def delete_epic(id:, **)
49
+ response = client(**).delete("/epics/#{id}")
50
+ { result: response.body, status: response.status }
51
+ end
52
+
53
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) && Legion::Extensions::Helpers.const_defined?(:Lex)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/aha/helpers/client'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Aha
8
+ module Roadmaps
9
+ module Runners
10
+ module Features
11
+ extend Legion::Extensions::Aha::Helpers::Client
12
+
13
+ def list_features(**)
14
+ response = client(**).get('/features')
15
+ { result: response.body, status: response.status }
16
+ end
17
+
18
+ def list_features_in_release(release_id:, **)
19
+ response = client(**).get("/releases/#{release_id}/features")
20
+ { result: response.body, status: response.status }
21
+ end
22
+
23
+ def list_features_in_product(product_id:, **)
24
+ response = client(**).get("/products/#{product_id}/features")
25
+ { result: response.body, status: response.status }
26
+ end
27
+
28
+ def list_features_in_epic(epic_id:, **)
29
+ response = client(**).get("/epics/#{epic_id}/features")
30
+ { result: response.body, status: response.status }
31
+ end
32
+
33
+ def get_feature(id:, **)
34
+ response = client(**).get("/features/#{id}")
35
+ { result: response.body, status: response.status }
36
+ end
37
+
38
+ def create_feature(release_id:, feature:, **)
39
+ response = client(**).post("/releases/#{release_id}/features", { feature: feature })
40
+ { result: response.body, status: response.status }
41
+ end
42
+
43
+ def delete_feature(id:, **)
44
+ response = client(**).delete("/features/#{id}")
45
+ { result: response.body, status: response.status }
46
+ end
47
+
48
+ def convert_to_epic(id:, **)
49
+ response = client(**).post("/features/#{id}/convert_to_epic")
50
+ { result: response.body, status: response.status }
51
+ end
52
+
53
+ include Legion::Extensions::Helpers::Lex if Legion::Extensions.const_defined?(:Helpers) && Legion::Extensions::Helpers.const_defined?(:Lex)
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end