rollout-ui 0.5.3 → 0.7.4

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: 430208ab6c2c78a3dfefae45356c79cc7abbc5f17e40a40e7cd323600f047a34
4
- data.tar.gz: 689a020b5bd39bc5c36c354c246fdced50256e1a6a2a36e7af5321914dbe69b8
3
+ metadata.gz: 1b77d43c42fd6d0bf55f0c82f2b657be128cdc4f659ce9ba3ca8aec362b3d518
4
+ data.tar.gz: f13d17d8f94679acc00aaf68fad4e80bb58f2da8d2f3680374c5b5c231497f4d
5
5
  SHA512:
6
- metadata.gz: ab080e881109763570dcc17ce0d057dd7701a46881e98e71d64b67d5e04a867719e5356731f462b6929b888feb2d74870d7dbe4121f0de44cc4999af44c0c594
7
- data.tar.gz: 41503d04961b90420098b6da4d5cfcc9f8ad5691cf931e4b0f7e957ab95c914bbaa743a56224f03abe3fa86dd3c70e2ad4d7292ac4d5a195ec46864ab483ed57
6
+ metadata.gz: 6c91539ecf6b82d09ae256ca0e3882ea2bd5c247be8b540607c9dd07786ea0349892b58f029967a9d2b3954231524fd361410e3a0c568f846ede38c96f9e1552
7
+ data.tar.gz: 027723401f76cf51ad03fd5544d58450527c35e53ea0130ae6f8ff9948634724531940c0dc39db52accb7535d18f5ccd2f9c3dd08d218b30c704694ce722b8b7
@@ -0,0 +1,46 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - 'v*'
7
+
8
+ jobs:
9
+ release:
10
+ runs-on: ubuntu-latest
11
+ services:
12
+ redis:
13
+ image: redis:7-alpine
14
+ ports:
15
+ - 6379:6379
16
+ options: >-
17
+ --health-cmd "redis-cli ping"
18
+ --health-interval 10s
19
+ --health-timeout 5s
20
+ --health-retries 5
21
+ steps:
22
+ - name: Checkout code
23
+ uses: actions/checkout@v4
24
+ - name: Setup Ruby
25
+ uses: ruby/setup-ruby@v1
26
+ with:
27
+ bundler-cache: true
28
+ - name: Run tests
29
+ run: bundle exec rspec
30
+ - name: Create GitHub Release
31
+ uses: softprops/action-gh-release@v2
32
+ with:
33
+ tag_name: ${{ github.ref }}
34
+ name: ${{ github.ref_name }}
35
+ generate_release_notes: true
36
+ draft: false
37
+ prerelease: false
38
+ - name: Set up RubyGems credentials
39
+ env:
40
+ RUBYGEMS_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
41
+ run: |
42
+ mkdir -p ~/.gem
43
+ echo ":rubygems_api_key: $RUBYGEMS_API_KEY" > ~/.gem/credentials
44
+ chmod 0600 ~/.gem/credentials
45
+ - name: Release to RubyGems
46
+ run: bundle exec rake release
@@ -0,0 +1,32 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - master
7
+ pull_request:
8
+ branches:
9
+ - master
10
+
11
+ jobs:
12
+ test:
13
+ runs-on: ubuntu-latest
14
+ services:
15
+ redis:
16
+ image: redis:7-alpine
17
+ ports:
18
+ - 6379:6379
19
+ options: >-
20
+ --health-cmd "redis-cli ping"
21
+ --health-interval 10s
22
+ --health-timeout 5s
23
+ --health-retries 5
24
+ steps:
25
+ - name: Checkout code
26
+ uses: actions/checkout@v4
27
+ - name: Setup Ruby
28
+ uses: ruby/setup-ruby@v1
29
+ with:
30
+ bundler-cache: true
31
+ - name: Run tests
32
+ run: bundle exec rspec
data/.gitignore CHANGED
@@ -6,6 +6,7 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ /vendor/
9
10
 
10
11
  # rspec failure tracking
11
12
  .rspec_status
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 3.1.0
1
+ 3.3.0
data/README.md CHANGED
@@ -92,6 +92,8 @@ end
92
92
 
93
93
  Bug reports and pull requests are welcome on GitHub at https://github.com/fetlife/rollout-ui.
94
94
 
95
+ ### Development
96
+
95
97
  To run this project for development in isolation:
96
98
 
97
99
  ```sh
@@ -104,9 +106,17 @@ And visit [http://localhost:9292/](http://localhost:9292/).
104
106
  Alternatively you can also configure which Redis with:
105
107
 
106
108
  ```sh
107
- REDIS_HOST=localhost REDIS_PORT=6379 REDIS_DB=10 be rerun rackup
109
+ REDIS_HOST=localhost REDIS_PORT=6379 REDIS_DB=10 bundle exec rerun rackup
108
110
  ```
109
111
 
112
+ ### Releasing
113
+
114
+ 1. Bump version: `rake version:patch` (or `minor`/`major`)
115
+ 2. Commit and tag: `git commit -am "Bump version" && git tag v0.7.3`
116
+ 3. Push: `git push origin master --tags`
117
+
118
+ The GitHub Actions workflow will automatically publish to RubyGems when tags are pushed.
119
+
110
120
  ## License
111
121
 
112
122
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -4,3 +4,45 @@ require "rspec/core/rake_task"
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
6
  task :default => :spec
7
+
8
+ namespace :version do
9
+ desc "Bump patch version"
10
+ task :patch do
11
+ bump_version(:patch)
12
+ end
13
+
14
+ desc "Bump minor version"
15
+ task :minor do
16
+ bump_version(:minor)
17
+ end
18
+
19
+ desc "Bump major version"
20
+ task :major do
21
+ bump_version(:major)
22
+ end
23
+ end
24
+
25
+ def bump_version(type)
26
+ require 'rollout/ui/version'
27
+ current_version = Rollout::UI::VERSION
28
+ major, minor, patch = current_version.split('.').map(&:to_i)
29
+
30
+ new_version = case type
31
+ when :major
32
+ "#{major + 1}.0.0"
33
+ when :minor
34
+ "#{major}.#{minor + 1}.0"
35
+ when :patch
36
+ "#{major}.#{minor}.#{patch + 1}"
37
+ end
38
+
39
+ puts "Bumping version from #{current_version} to #{new_version}"
40
+
41
+ # Update version file
42
+ version_file = 'lib/rollout/ui/version.rb'
43
+ content = File.read(version_file)
44
+ updated_content = content.gsub(/VERSION\s*=\s*"[^"]+"/, "VERSION = \"#{new_version}\"")
45
+ File.write(version_file, updated_content)
46
+
47
+ puts "Version bumped to #{new_version}"
48
+ end
@@ -9,14 +9,21 @@ module Rollout::UI
9
9
  instance
10
10
  actor
11
11
  actor_url
12
+ timestamp_format
12
13
  ].freeze
13
14
 
15
+ DEFAULT_VALUES = {
16
+ timestamp_format: '%Y-%m-%d %H:%M %Z'
17
+ }.freeze
18
+
14
19
  KEYS.each do |key|
15
20
  define_method(key) do |&block|
16
21
  @blocks ||= {}
17
22
 
18
23
  if block
19
24
  @blocks[key] = block
25
+ elsif DEFAULT_VALUES.key?(key)
26
+ DEFAULT_VALUES[key]
20
27
  else
21
28
  raise ArgumentError, "#{key}: block is required"
22
29
  end
@@ -29,7 +36,10 @@ module Rollout::UI
29
36
  @blocks ||= {}
30
37
  block = @blocks[key]
31
38
 
32
- return if block.nil?
39
+ if block.nil?
40
+ return DEFAULT_VALUES[key] if DEFAULT_VALUES.key?(key)
41
+ return nil
42
+ end
33
43
 
34
44
  if scope
35
45
  scope.instance_eval(&block)
@@ -39,7 +49,7 @@ module Rollout::UI
39
49
  end
40
50
 
41
51
  def defined?(key)
42
- !@blocks.nil? && @blocks.key?(key)
52
+ (@blocks&.key?(key)) || DEFAULT_VALUES.key?(key)
43
53
  end
44
54
  end
45
55
  end
@@ -1,5 +1,5 @@
1
1
  class Rollout
2
2
  module UI
3
- VERSION = "0.5.3"
3
+ VERSION = "0.7.4"
4
4
  end
5
5
  end
@@ -42,7 +42,11 @@ h2.font-semibold.text-xl.text-gray-500.pt-12.flex.items-center
42
42
  = feature.users.count
43
43
  - if @rollout.respond_to?(:logging)
44
44
  td.py-2.whitespace-no-wrap
45
- = time_ago(@rollout.logging.updated_at(feature_name))
45
+ - updated_at = @rollout.logging.updated_at(feature_name)
46
+ - if updated_at.nil?
47
+ span.text-gray-400 Never
48
+ - else
49
+ span title=updated_at.strftime(Rollout::UI.config.timestamp_format) = time_ago(updated_at)
46
50
  td.flex.items-center.py-2.justify-end.whitespace-no-wrap.pl-3
47
51
  form action=activate_percentage_feature_path(feature_name, 100) method='POST'
48
52
  button.p-3.bg-gray-100.ml-1.rounded-sm.font-bold.leading-none.transition-colors.duration-150(class='hover:bg-gray-200' type='submit' onclick="return confirm('Are you sure you want activate #{sanitized_name(feature_name)} to 100%?')")
@@ -11,18 +11,18 @@
11
11
  - if show_header
12
12
  thead.font-semibold.text-gray-600.border-b.border-gray-200
13
13
  - if show_feature
14
- th.pb-2.pr-3 Feature
15
- th.pb-2.pr-3 Action
16
- th.pl-2
14
+ th.pb-2.pr-3.whitespace-nowrap Feature
15
+ th.pb-2.pr-3.w-full Action
16
+ th.pl-2.whitespace-nowrap style="min-width: 160px;"
17
17
 
18
18
  tbody.text-gray-600.border-t.border-gray-200
19
19
  - events.each do |event|
20
20
  tr.border-b.border-gray-200
21
21
  - if show_feature
22
- td.py-2.whitespace-no-wrap
22
+ td.py-2.pr-3.whitespace-nowrap
23
23
  a.text-blue-600(href=feature_path(event.feature) class='hover:text-blue-700 hover:underline')
24
24
  = event.feature
25
- td.py-2.pr-3.whitespace-no-wrap
25
+ td.py-2.pr-3.break-words.w-full
26
26
  - if event.name == "update"
27
27
  - if event.context && event.context[:actor]
28
28
  - if config.defined?(:actor_url)
@@ -32,15 +32,18 @@
32
32
  ' #{event.context[:actor]}
33
33
  - else
34
34
  ' unidentified user
35
- - changes = event.data.fetch(:before).keys.map do |key|
35
+ - changes = event.data.fetch(:before).keys.reject { |key| key.to_s == 'data.updated_at' }.map do |key|
36
36
  - before = format_change_value(event.data.fetch(:before).fetch(key))
37
37
  - after = format_change_value(event.data.fetch(:after).fetch(key))
38
38
  - "#{format_change_key(key)} from #{before} to #{after}"
39
39
 
40
40
  ' changed
41
- = changes.join(', ')
41
+ - unless changes.empty?
42
+ = changes.join(', ')
43
+ - else
44
+ ' nothing!
42
45
  - else
43
46
  = event.data
44
47
 
45
- td.flex.items-center.py-2.justify-end.whitespace-no-wrap.pl-3
46
- = time_ago(event.created_at)
48
+ td.py-2.text-right.whitespace-nowrap.pl-3 style="min-width: 160px;"
49
+ span title=event.created_at.strftime(Rollout::UI.config.timestamp_format) = time_ago(event.created_at)
data/rollout-ui.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['FetLife']
9
9
  spec.email = ['dev@fetlife.com']
10
10
 
11
- spec.summary = %q{}
12
- spec.description = %q{}
11
+ spec.summary = %q{Minimalist web ui for the rollout gem}
12
+ spec.description = %q{Rack-mountable app to use and configure feature flags via the rollout gem}
13
13
  spec.homepage = 'https://github.com/fetlife/rollout-ui'
14
14
  spec.license = 'MIT'
15
15
 
@@ -22,16 +22,17 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ['lib']
24
24
 
25
- spec.add_dependency 'rollout', '~> 2.5'
26
- spec.add_dependency 'sinatra', '~> 2.0'
27
- spec.add_dependency 'sinatra-contrib', '~> 2.1'
28
- spec.add_dependency 'slim', ['>= 3.0', '< 5.0']
25
+ spec.add_dependency 'rollout', '~> 2.6'
26
+ spec.add_dependency 'sinatra', ['>= 2.0', '< 5.0']
27
+ spec.add_dependency 'sinatra-contrib', ['>= 2.0', '< 5.0']
28
+ spec.add_dependency 'slim', ['>= 3.0', '< 6.0']
29
29
 
30
30
  spec.add_development_dependency 'bundler', '>= 1.17'
31
- spec.add_development_dependency 'rake', '~> 10.0'
32
- spec.add_development_dependency 'rspec', '~> 3.0'
33
- spec.add_development_dependency 'rerun', '~> 0.13'
31
+ spec.add_development_dependency 'rake'
32
+ spec.add_development_dependency 'rspec', '~> 3.13'
33
+ spec.add_development_dependency 'rerun', '~> 0.14'
34
34
  spec.add_development_dependency 'rack-test'
35
+ spec.add_development_dependency 'rackup'
35
36
  spec.add_development_dependency 'puma'
36
37
  spec.add_development_dependency 'pry'
37
38
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rollout-ui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.3
4
+ version: 0.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - FetLife
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-22 00:00:00.000000000 Z
11
+ date: 2025-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rollout
@@ -16,42 +16,54 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '2.5'
19
+ version: '2.6'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '2.5'
26
+ version: '2.6'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: sinatra
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '2.0'
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: '5.0'
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
- - - "~>"
41
+ - - ">="
39
42
  - !ruby/object:Gem::Version
40
43
  version: '2.0'
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: '5.0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: sinatra-contrib
43
49
  requirement: !ruby/object:Gem::Requirement
44
50
  requirements:
45
- - - "~>"
51
+ - - ">="
46
52
  - !ruby/object:Gem::Version
47
- version: '2.1'
53
+ version: '2.0'
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '5.0'
48
57
  type: :runtime
49
58
  prerelease: false
50
59
  version_requirements: !ruby/object:Gem::Requirement
51
60
  requirements:
52
- - - "~>"
61
+ - - ">="
53
62
  - !ruby/object:Gem::Version
54
- version: '2.1'
63
+ version: '2.0'
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '5.0'
55
67
  - !ruby/object:Gem::Dependency
56
68
  name: slim
57
69
  requirement: !ruby/object:Gem::Requirement
@@ -61,7 +73,7 @@ dependencies:
61
73
  version: '3.0'
62
74
  - - "<"
63
75
  - !ruby/object:Gem::Version
64
- version: '5.0'
76
+ version: '6.0'
65
77
  type: :runtime
66
78
  prerelease: false
67
79
  version_requirements: !ruby/object:Gem::Requirement
@@ -71,7 +83,7 @@ dependencies:
71
83
  version: '3.0'
72
84
  - - "<"
73
85
  - !ruby/object:Gem::Version
74
- version: '5.0'
86
+ version: '6.0'
75
87
  - !ruby/object:Gem::Dependency
76
88
  name: bundler
77
89
  requirement: !ruby/object:Gem::Requirement
@@ -90,44 +102,44 @@ dependencies:
90
102
  name: rake
91
103
  requirement: !ruby/object:Gem::Requirement
92
104
  requirements:
93
- - - "~>"
105
+ - - ">="
94
106
  - !ruby/object:Gem::Version
95
- version: '10.0'
107
+ version: '0'
96
108
  type: :development
97
109
  prerelease: false
98
110
  version_requirements: !ruby/object:Gem::Requirement
99
111
  requirements:
100
- - - "~>"
112
+ - - ">="
101
113
  - !ruby/object:Gem::Version
102
- version: '10.0'
114
+ version: '0'
103
115
  - !ruby/object:Gem::Dependency
104
116
  name: rspec
105
117
  requirement: !ruby/object:Gem::Requirement
106
118
  requirements:
107
119
  - - "~>"
108
120
  - !ruby/object:Gem::Version
109
- version: '3.0'
121
+ version: '3.13'
110
122
  type: :development
111
123
  prerelease: false
112
124
  version_requirements: !ruby/object:Gem::Requirement
113
125
  requirements:
114
126
  - - "~>"
115
127
  - !ruby/object:Gem::Version
116
- version: '3.0'
128
+ version: '3.13'
117
129
  - !ruby/object:Gem::Dependency
118
130
  name: rerun
119
131
  requirement: !ruby/object:Gem::Requirement
120
132
  requirements:
121
133
  - - "~>"
122
134
  - !ruby/object:Gem::Version
123
- version: '0.13'
135
+ version: '0.14'
124
136
  type: :development
125
137
  prerelease: false
126
138
  version_requirements: !ruby/object:Gem::Requirement
127
139
  requirements:
128
140
  - - "~>"
129
141
  - !ruby/object:Gem::Version
130
- version: '0.13'
142
+ version: '0.14'
131
143
  - !ruby/object:Gem::Dependency
132
144
  name: rack-test
133
145
  requirement: !ruby/object:Gem::Requirement
@@ -142,6 +154,20 @@ dependencies:
142
154
  - - ">="
143
155
  - !ruby/object:Gem::Version
144
156
  version: '0'
157
+ - !ruby/object:Gem::Dependency
158
+ name: rackup
159
+ requirement: !ruby/object:Gem::Requirement
160
+ requirements:
161
+ - - ">="
162
+ - !ruby/object:Gem::Version
163
+ version: '0'
164
+ type: :development
165
+ prerelease: false
166
+ version_requirements: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
145
171
  - !ruby/object:Gem::Dependency
146
172
  name: puma
147
173
  requirement: !ruby/object:Gem::Requirement
@@ -170,13 +196,16 @@ dependencies:
170
196
  - - ">="
171
197
  - !ruby/object:Gem::Version
172
198
  version: '0'
173
- description: ''
199
+ description: Rack-mountable app to use and configure feature flags via the rollout
200
+ gem
174
201
  email:
175
202
  - dev@fetlife.com
176
203
  executables: []
177
204
  extensions: []
178
205
  extra_rdoc_files: []
179
206
  files:
207
+ - ".github/workflows/release.yml"
208
+ - ".github/workflows/test.yml"
180
209
  - ".gitignore"
181
210
  - ".rspec"
182
211
  - ".ruby-version"
@@ -220,8 +249,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
220
249
  - !ruby/object:Gem::Version
221
250
  version: '0'
222
251
  requirements: []
223
- rubygems_version: 3.4.6
252
+ rubygems_version: 3.5.3
224
253
  signing_key:
225
254
  specification_version: 4
226
- summary: ''
255
+ summary: Minimalist web ui for the rollout gem
227
256
  test_files: []