release_feature 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.
- checksums.yaml +7 -0
- data/.github/workflows/main.yml +23 -0
- data/.gitignore +12 -0
- data/.rspec +3 -0
- data/.rubocop.yml +17 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +15 -0
- data/Gemfile.lock +151 -0
- data/LICENSE.txt +21 -0
- data/README.md +264 -0
- data/Rakefile +12 -0
- data/Steepfile +9 -0
- data/bin/console +15 -0
- data/bin/setup +9 -0
- data/lib/release_feature/client.rb +83 -0
- data/lib/release_feature/example/config.yml +20 -0
- data/lib/release_feature/feature.rb +117 -0
- data/lib/release_feature/feature_collection.rb +51 -0
- data/lib/release_feature/repository/active_record_repository.rb +46 -0
- data/lib/release_feature/repository/hash_repository.rb +45 -0
- data/lib/release_feature/repository/yaml_repository.rb +90 -0
- data/lib/release_feature/version.rb +5 -0
- data/lib/release_feature.rb +15 -0
- data/rbs_collection.lock.yaml +104 -0
- data/rbs_collection.yaml +18 -0
- data/release_feature.gemspec +40 -0
- data/sig/lib/release_feature/client.rbs +31 -0
- data/sig/lib/release_feature/feature.rbs +47 -0
- data/sig/lib/release_feature/feature_collection.rbs +15 -0
- data/sig/lib/release_feature/repository/active_record_repository.rbs +17 -0
- data/sig/lib/release_feature/repository/hash_repository.rbs +18 -0
- data/sig/lib/release_feature/repository/yaml_repository.rbs +33 -0
- data/sig/lib/release_feature/version.rbs +3 -0
- data/sig/lib/release_feature.rbs +4 -0
- metadata +249 -0
@@ -0,0 +1,47 @@
|
|
1
|
+
module ReleaseFeature
|
2
|
+
class Feature
|
3
|
+
attr_reader name: Symbol
|
4
|
+
attr_reader environment: Symbol
|
5
|
+
attr_reader open_at: String | Time
|
6
|
+
attr_reader close_at: String | Time
|
7
|
+
attr_reader errors: Array[String]
|
8
|
+
|
9
|
+
def initialize: (name: String | Symbol, environment: String | Symbol, open_at: String | Time, close_at: String | Time) -> void
|
10
|
+
|
11
|
+
def permitted?: (Time current_time) -> bool
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def valid?: -> bool
|
16
|
+
|
17
|
+
def validate_all: -> Array[String]?
|
18
|
+
|
19
|
+
def errors_full_message: -> String
|
20
|
+
|
21
|
+
def initialize_errors: -> Array[untyped]
|
22
|
+
|
23
|
+
def add_error: (String attr_name, String | Time | Symbol val, String message) -> Array[String]
|
24
|
+
|
25
|
+
def validate_name: -> Array[String]?
|
26
|
+
|
27
|
+
def validate_environment: -> Array[String]?
|
28
|
+
|
29
|
+
def validate_open_at: -> Array[String]?
|
30
|
+
|
31
|
+
def validate_close_at: -> Array[String]?
|
32
|
+
|
33
|
+
def validate_range: -> Array[String]?
|
34
|
+
|
35
|
+
def str_present?: (String attr) -> bool
|
36
|
+
|
37
|
+
def time_present?: (String | Time attr) -> bool
|
38
|
+
|
39
|
+
def cast_to_sym: (Symbol key, Symbol | String str) -> Symbol
|
40
|
+
|
41
|
+
def validate_present: (Hash[Symbol, untyped] attr) -> void
|
42
|
+
|
43
|
+
def cast_to_time: (String | Time val) -> (String | Time)
|
44
|
+
|
45
|
+
def name_error_message: (Symbol name) -> String?
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module ReleaseFeature
|
2
|
+
class FeatureCollection < Hash[Symbol, Hash[Symbol, Feature]]
|
3
|
+
def combine_features: (FeatureCollection features) -> FeatureCollection
|
4
|
+
|
5
|
+
def names: -> Array[Symbol]
|
6
|
+
|
7
|
+
def environments: -> Array[Symbol]
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def build_environments: (Symbol name, Array[Symbol] environments, FeatureCollection features) -> Hash[untyped, untyped]
|
12
|
+
|
13
|
+
def build_feature: (Symbol name, Symbol environment, FeatureCollection features) -> Feature
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module ReleaseFeature
|
2
|
+
module Repository
|
3
|
+
class ActiveRecordRepository
|
4
|
+
@model: untyped
|
5
|
+
|
6
|
+
def initialize: (model: ActiveRecord) -> void
|
7
|
+
|
8
|
+
def features: -> FeatureCollection
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def convert_to_feature_collection: (untyped data) -> FeatureCollection
|
13
|
+
|
14
|
+
def build_feature: (untyped record) -> Feature
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module ReleaseFeature
|
2
|
+
module Repository
|
3
|
+
class HashRepository
|
4
|
+
|
5
|
+
@hash: { timezone: String, features: Hash[Symbol, Hash[Symbol, untyped]] }
|
6
|
+
|
7
|
+
def initialize: (hash: { timezone: String, features: Hash[Symbol, Hash[Symbol, untyped]] }) -> void
|
8
|
+
|
9
|
+
def features: -> FeatureCollection
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def convert_to_feature_collection: (untyped data) -> untyped
|
14
|
+
|
15
|
+
def build_feature: (untyped name, untyped environment, untyped open_at, untyped close_at) -> untyped
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module ReleaseFeature
|
2
|
+
module Repository
|
3
|
+
class YamlRepository
|
4
|
+
|
5
|
+
@path: untyped
|
6
|
+
|
7
|
+
def initialize: (path: String) -> void
|
8
|
+
|
9
|
+
def features: -> ReleaseFeature::FeatureCollection
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def convert_to_feature_collection: (untyped data) -> untyped
|
14
|
+
|
15
|
+
def symbolize_features: (untyped features, untyped timezone) -> ReleaseFeature::FeatureCollection
|
16
|
+
|
17
|
+
def build_feature: (untyped name, untyped environment, untyped range, untyped timezone) -> Feature
|
18
|
+
|
19
|
+
def to_range_struct: (untyped range, untyped timezone) -> AccessibleRange
|
20
|
+
|
21
|
+
def cast_to_time: (String str, String timezone) -> Time
|
22
|
+
|
23
|
+
class AccessibleRange
|
24
|
+
attr_reader open_at: Time
|
25
|
+
|
26
|
+
attr_reader close_at: Time
|
27
|
+
|
28
|
+
def initialize: (open_at: Time, close_at: Time) -> void
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
metadata
ADDED
@@ -0,0 +1,249 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: release_feature
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- junara
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2022-02-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activerecord
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: factory_bot
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec-parameterized
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-performance
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: rubocop-rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: sqlite3
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: timecop
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: time
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: yaml
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
description: Release feature in custom date range.
|
182
|
+
email:
|
183
|
+
- jun5araki@gmail.com
|
184
|
+
executables: []
|
185
|
+
extensions: []
|
186
|
+
extra_rdoc_files: []
|
187
|
+
files:
|
188
|
+
- ".github/workflows/main.yml"
|
189
|
+
- ".gitignore"
|
190
|
+
- ".rspec"
|
191
|
+
- ".rubocop.yml"
|
192
|
+
- CHANGELOG.md
|
193
|
+
- CODE_OF_CONDUCT.md
|
194
|
+
- Gemfile
|
195
|
+
- Gemfile.lock
|
196
|
+
- LICENSE.txt
|
197
|
+
- README.md
|
198
|
+
- Rakefile
|
199
|
+
- Steepfile
|
200
|
+
- bin/console
|
201
|
+
- bin/setup
|
202
|
+
- lib/release_feature.rb
|
203
|
+
- lib/release_feature/client.rb
|
204
|
+
- lib/release_feature/example/config.yml
|
205
|
+
- lib/release_feature/feature.rb
|
206
|
+
- lib/release_feature/feature_collection.rb
|
207
|
+
- lib/release_feature/repository/active_record_repository.rb
|
208
|
+
- lib/release_feature/repository/hash_repository.rb
|
209
|
+
- lib/release_feature/repository/yaml_repository.rb
|
210
|
+
- lib/release_feature/version.rb
|
211
|
+
- rbs_collection.lock.yaml
|
212
|
+
- rbs_collection.yaml
|
213
|
+
- release_feature.gemspec
|
214
|
+
- sig/lib/release_feature.rbs
|
215
|
+
- sig/lib/release_feature/client.rbs
|
216
|
+
- sig/lib/release_feature/feature.rbs
|
217
|
+
- sig/lib/release_feature/feature_collection.rbs
|
218
|
+
- sig/lib/release_feature/repository/active_record_repository.rbs
|
219
|
+
- sig/lib/release_feature/repository/hash_repository.rbs
|
220
|
+
- sig/lib/release_feature/repository/yaml_repository.rbs
|
221
|
+
- sig/lib/release_feature/version.rbs
|
222
|
+
homepage: https://github.com/junara/release_feature
|
223
|
+
licenses:
|
224
|
+
- MIT
|
225
|
+
metadata:
|
226
|
+
homepage_uri: https://github.com/junara/release_feature
|
227
|
+
source_code_uri: https://github.com/junara/release_feature
|
228
|
+
changelog_uri: https://github.com/junara/release_feature/blob/main/CHANGELOG.md
|
229
|
+
rubygems_mfa_required: 'true'
|
230
|
+
post_install_message:
|
231
|
+
rdoc_options: []
|
232
|
+
require_paths:
|
233
|
+
- lib
|
234
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
235
|
+
requirements:
|
236
|
+
- - ">="
|
237
|
+
- !ruby/object:Gem::Version
|
238
|
+
version: 2.7.0
|
239
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ">="
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '0'
|
244
|
+
requirements: []
|
245
|
+
rubygems_version: 3.2.32
|
246
|
+
signing_key:
|
247
|
+
specification_version: 4
|
248
|
+
summary: Release feature in custom date range.
|
249
|
+
test_files: []
|