lex-wled 0.1.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d6a69b3c11767dd1bc0f214b64a974b69049f2d0d9ce65f6a1367b32d71ea399
4
+ data.tar.gz: 16de9a8b3c2f3477627b091c09ee968b381d7ab9eead701ecb5d5d135e6f4751
5
+ SHA512:
6
+ metadata.gz: 95d2595231940542dbc9692132cf1c98a79390d16403cc14e19f99314c5321862e6d8b22f5230818a5cdcf73a1d774d7af9ec24c6d5786faf4426f8db574a084
7
+ data.tar.gz: 90b4587c6e701b7b52c5f6b927edc3922e57caf2852a1b52809597e510526e6feec0f9bd37b699005fe877fe1253e165f3a241abf5a7d655ba0a3f215f471728
@@ -0,0 +1,16 @@
1
+ name: CI
2
+ on:
3
+ push:
4
+ branches: [origin]
5
+ pull_request:
6
+
7
+ jobs:
8
+ ci:
9
+ uses: LegionIO/.github/.github/workflows/ci.yml@main
10
+
11
+ release:
12
+ needs: ci
13
+ if: github.event_name == 'push' && github.ref == 'refs/heads/origin'
14
+ uses: LegionIO/.github/.github/workflows/release.yml@main
15
+ secrets:
16
+ rubygems-api-key: ${{ secrets.RUBYGEMS_API_KEY }}
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+ Gemfile.lock
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/.rubocop.yml ADDED
@@ -0,0 +1,53 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.4
3
+ NewCops: enable
4
+ SuggestExtensions: false
5
+
6
+ Layout/LineLength:
7
+ Max: 160
8
+
9
+ Layout/SpaceAroundEqualsInParameterDefault:
10
+ EnforcedStyle: space
11
+
12
+ Layout/HashAlignment:
13
+ EnforcedHashRocketStyle: table
14
+ EnforcedColonStyle: table
15
+
16
+ Metrics/MethodLength:
17
+ Max: 50
18
+
19
+ Metrics/ClassLength:
20
+ Max: 1500
21
+
22
+ Metrics/ModuleLength:
23
+ Max: 1500
24
+
25
+ Metrics/BlockLength:
26
+ Max: 40
27
+ Exclude:
28
+ - 'spec/**/*'
29
+
30
+ Metrics/ParameterLists:
31
+ Max: 10
32
+
33
+ Metrics/AbcSize:
34
+ Max: 60
35
+
36
+ Metrics/CyclomaticComplexity:
37
+ Max: 15
38
+
39
+ Metrics/PerceivedComplexity:
40
+ Max: 17
41
+
42
+ Style/Documentation:
43
+ Enabled: false
44
+
45
+ Style/SymbolArray:
46
+ Enabled: true
47
+
48
+ Style/FrozenStringLiteralComment:
49
+ Enabled: true
50
+ EnforcedStyle: always
51
+
52
+ Naming/FileName:
53
+ Enabled: false
data/CHANGELOG.md ADDED
@@ -0,0 +1,10 @@
1
+ # Changelog
2
+
3
+ ## [0.1.0] - 2026-03-21
4
+
5
+ ### Added
6
+ - Initial release
7
+ - `Helpers::Client` — Faraday connection builder targeting WLED JSON API with JSON content type
8
+ - `Runners::State` — get_state, set_power, set_brightness, set_color
9
+ - `Runners::Effects` — list_effects, set_effect, list_palettes
10
+ - Standalone `Client` class for use outside the Legion framework
data/Gemfile ADDED
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gemspec
6
+
7
+ gem 'rake', '~> 12.0'
8
+ gem 'rspec', '~> 3.0'
9
+ gem 'rspec_junit_formatter'
10
+ gem 'rubocop'
11
+ gem 'rubocop-rspec'
12
+ gem 'webmock'
data/README.md ADDED
@@ -0,0 +1,74 @@
1
+ # lex-wled
2
+
3
+ A Legion Extension (LEX) for controlling [WLED](https://kno.wled.ge/) LED controllers via the WLED JSON API.
4
+
5
+ ## Installation
6
+
7
+ Add to your Gemfile:
8
+
9
+ ```ruby
10
+ gem 'lex-wled'
11
+ ```
12
+
13
+ ## Configuration
14
+
15
+ ```json
16
+ {
17
+ "lex-wled": {
18
+ "url": "http://wled-light.local"
19
+ }
20
+ }
21
+ ```
22
+
23
+ ## Standalone Usage
24
+
25
+ ```ruby
26
+ require 'legion/extensions/wled'
27
+
28
+ client = Legion::Extensions::Wled::Client.new(url: 'http://wled-light.local')
29
+
30
+ # Get current state
31
+ client.get_state
32
+
33
+ # Control power
34
+ client.set_power(on: true)
35
+ client.set_power(on: false)
36
+
37
+ # Set brightness (0-255)
38
+ client.set_brightness(bri: 128)
39
+
40
+ # Set RGB color
41
+ client.set_color(red: 255, green: 0, blue: 0)
42
+
43
+ # List available effects
44
+ client.list_effects
45
+
46
+ # Set effect by id
47
+ client.set_effect(id: 3)
48
+
49
+ # List available palettes
50
+ client.list_palettes
51
+ ```
52
+
53
+ ## Runners
54
+
55
+ ### State
56
+
57
+ | Method | Description |
58
+ |--------|-------------|
59
+ | `get_state` | GET /json/state — fetch current device state |
60
+ | `set_power(on:)` | POST /json/state — turn on or off |
61
+ | `set_brightness(bri:)` | POST /json/state — set brightness 0-255 |
62
+ | `set_color(red:, green:, blue:)` | POST /json/state — set RGB color on segment 0 |
63
+
64
+ ### Effects
65
+
66
+ | Method | Description |
67
+ |--------|-------------|
68
+ | `list_effects` | GET /json/effects — list all available effects |
69
+ | `set_effect(id:)` | POST /json/state — apply effect by integer id |
70
+ | `list_palettes` | GET /json/palettes — list all available palettes |
71
+
72
+ ## License
73
+
74
+ MIT
data/lex-wled.gemspec ADDED
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/legion/extensions/wled/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'lex-wled'
7
+ spec.version = Legion::Extensions::Wled::VERSION
8
+ spec.authors = ['Esity']
9
+ spec.email = ['matthewdiverson@gmail.com']
10
+
11
+ spec.summary = 'LEX::Wled'
12
+ spec.description = 'Used to connect Legion to WLED'
13
+ spec.homepage = 'https://github.com/LegionIO/lex-wled'
14
+ spec.license = 'MIT'
15
+ spec.required_ruby_version = '>= 3.4'
16
+
17
+ spec.metadata['homepage_uri'] = spec.homepage
18
+ spec.metadata['source_code_uri'] = 'https://github.com/LegionIO/lex-wled'
19
+ spec.metadata['changelog_uri'] = 'https://github.com/LegionIO/lex-wled/blob/main/CHANGELOG.md'
20
+ spec.metadata['rubygems_mfa_required'] = 'true'
21
+
22
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
24
+ end
25
+ spec.bindir = 'exe'
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ['lib']
28
+
29
+ spec.add_dependency 'faraday', '~> 2.0'
30
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helpers/client'
4
+ require_relative 'runners/state'
5
+ require_relative 'runners/effects'
6
+
7
+ module Legion
8
+ module Extensions
9
+ module Wled
10
+ class Client
11
+ include Helpers::Client
12
+ include Runners::State
13
+ include Runners::Effects
14
+
15
+ attr_reader :opts
16
+
17
+ def initialize(url: 'http://wled-light.local', **extra)
18
+ @opts = { url: url, **extra }
19
+ end
20
+
21
+ def settings
22
+ { options: @opts }
23
+ end
24
+
25
+ def connection(**override)
26
+ super(**@opts, **override)
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'faraday'
4
+
5
+ module Legion
6
+ module Extensions
7
+ module Wled
8
+ module Helpers
9
+ module Client
10
+ def connection(url: 'http://wled-light.local', **_opts)
11
+ Faraday.new(url: url) do |conn|
12
+ conn.request :json
13
+ conn.response :json, content_type: /\bjson$/
14
+ conn.adapter Faraday.default_adapter
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Wled
6
+ module Runners
7
+ module Effects
8
+ def list_effects(**)
9
+ resp = connection(**).get('/json/effects')
10
+ { effects: resp.body }
11
+ end
12
+
13
+ def set_effect(id:, **)
14
+ resp = connection(**).post('/json/state', { seg: [{ fx: id }] })
15
+ { state: resp.body }
16
+ end
17
+
18
+ def list_palettes(**)
19
+ resp = connection(**).get('/json/palettes')
20
+ { palettes: resp.body }
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Wled
6
+ module Runners
7
+ module State
8
+ def get_state(**)
9
+ resp = connection(**).get('/json/state')
10
+ { state: resp.body }
11
+ end
12
+
13
+ def set_power(on:, **)
14
+ resp = connection(**).post('/json/state', { on: on })
15
+ { state: resp.body }
16
+ end
17
+
18
+ def set_brightness(bri:, **)
19
+ resp = connection(**).post('/json/state', { bri: bri })
20
+ { state: resp.body }
21
+ end
22
+
23
+ def set_color(red:, green:, blue:, **)
24
+ resp = connection(**).post('/json/state', { seg: [{ col: [[red, green, blue]] }] })
25
+ { state: resp.body }
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Legion
4
+ module Extensions
5
+ module Wled
6
+ VERSION = '0.1.1'
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'legion/extensions/wled/version'
4
+ require 'legion/extensions/wled/helpers/client'
5
+ require 'legion/extensions/wled/runners/state'
6
+ require 'legion/extensions/wled/runners/effects'
7
+ require 'legion/extensions/wled/client'
8
+
9
+ module Legion
10
+ module Extensions
11
+ module Wled
12
+ extend Legion::Extensions::Core if Legion::Extensions.const_defined? :Core
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lex-wled
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Esity
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: faraday
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.0'
26
+ description: Used to connect Legion to WLED
27
+ email:
28
+ - matthewdiverson@gmail.com
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - ".github/workflows/ci.yml"
34
+ - ".gitignore"
35
+ - ".rspec"
36
+ - ".rubocop.yml"
37
+ - CHANGELOG.md
38
+ - Gemfile
39
+ - README.md
40
+ - lex-wled.gemspec
41
+ - lib/legion/extensions/wled.rb
42
+ - lib/legion/extensions/wled/client.rb
43
+ - lib/legion/extensions/wled/helpers/client.rb
44
+ - lib/legion/extensions/wled/runners/effects.rb
45
+ - lib/legion/extensions/wled/runners/state.rb
46
+ - lib/legion/extensions/wled/version.rb
47
+ homepage: https://github.com/LegionIO/lex-wled
48
+ licenses:
49
+ - MIT
50
+ metadata:
51
+ homepage_uri: https://github.com/LegionIO/lex-wled
52
+ source_code_uri: https://github.com/LegionIO/lex-wled
53
+ changelog_uri: https://github.com/LegionIO/lex-wled/blob/main/CHANGELOG.md
54
+ rubygems_mfa_required: 'true'
55
+ rdoc_options: []
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '3.4'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '0'
68
+ requirements: []
69
+ rubygems_version: 3.6.9
70
+ specification_version: 4
71
+ summary: LEX::Wled
72
+ test_files: []