Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
197 commits
Select commit Hold shift + click to select a range
606444d
Make single rules work for memory adapter
jnunemaker Aug 31, 2021
ec27cb7
Make any and all work
jnunemaker Aug 31, 2021
1e68ed5
Get pstore_spec's passing
jnunemaker Sep 1, 2021
a8d7f63
Get rollout specs passing
jnunemaker Sep 1, 2021
d2e1b0f
Remove errant focus
jnunemaker Sep 1, 2021
8a29181
Minor whitespace
jnunemaker Sep 1, 2021
0c2fb58
Get pstore and redis adapters really working with new json stuff
jnunemaker Sep 1, 2021
2a94b20
Get memory adapter working for json
jnunemaker Sep 1, 2021
bd03b52
Get read only working with rules
jnunemaker Sep 1, 2021
b4dc0da
Get mongo working for rules
jnunemaker Sep 1, 2021
6d9ab6e
Get moneta working with rules
jnunemaker Sep 1, 2021
e293462
Get active record working with rules
bkeepers Sep 1, 2021
c816331
Get sequel working with rules
bkeepers Sep 1, 2021
ae07e50
Refactor AR to use serialize and query methods
bkeepers Sep 1, 2021
8abc228
Update Sequel migration
bkeepers Sep 1, 2021
bd23ddd
Move rules into a namespace
bkeepers Sep 1, 2021
783538c
Rename #open? to #matches? for rules
bkeepers Sep 1, 2021
371854a
Replace case statement with lookup of operations
bkeepers Sep 1, 2021
597efde
Remove duplication in case statement
bkeepers Sep 1, 2021
98ff6a3
Remove redis focus
bkeepers Sep 1, 2021
e70d7c3
Get http adapter passing for rules
jnunemaker Sep 2, 2021
2a66db8
Merge remote-tracking branch 'origin/learn-the-rules-namespace' into …
jnunemaker Sep 2, 2021
80620a4
Updates to get things passing again after merging learn the rules nam…
jnunemaker Sep 2, 2021
2eea0d6
Get cloud specs passing again
jnunemaker Sep 2, 2021
6b90259
Add more leniance to the random test
jnunemaker Sep 2, 2021
b09ea7d
Add a handy superclass
jnunemaker Sep 2, 2021
cc6724c
Fix incorrect require
jnunemaker Sep 2, 2021
818944e
Allow passing rule or hash to enable_rule/disable_rule
jnunemaker Sep 2, 2021
cdf6cad
Update dsl to work with instance or hash
jnunemaker Sep 2, 2021
7606965
Minor whitespace
jnunemaker Sep 3, 2021
1c5e0d5
Add equality and specs for any/all/condition
jnunemaker Sep 3, 2021
861cdd7
Add super basic rules example
jnunemaker Sep 5, 2021
f539c3a
Added some shortcuts to see how it felt
jnunemaker Sep 5, 2021
d711954
Add more complex examples of rules
jnunemaker Sep 5, 2021
23af908
Add boolean and set of actors examples
jnunemaker Sep 5, 2021
5ed009f
Add % of actors example
jnunemaker Sep 5, 2021
a95bfb4
Show enabling per org in same rule as per user
jnunemaker Sep 5, 2021
a54e547
Add percentage of time example using rules
jnunemaker Sep 6, 2021
5864ca1
Merge branch 'learn-the-rules' into learn-the-rules-shortcuts
jnunemaker Sep 6, 2021
20b3e6f
Add property specs and some type stuff
jnunemaker Sep 6, 2021
27079d6
Add equality for property
jnunemaker Sep 6, 2021
5564e0d
Match signatures to classes for the shortcuts
jnunemaker Sep 6, 2021
cc20d80
Add specs for top level flipper methods
jnunemaker Sep 6, 2021
55a54bb
Use shortcuts in examples
jnunemaker Sep 6, 2021
993c421
Remove some of the comment lines and stuff
jnunemaker Sep 6, 2021
8fb6c6e
Add Flipper::Rules::Object to start organizing the objects used in rules
jnunemaker Sep 7, 2021
be97645
Minor formatting
jnunemaker Sep 7, 2021
1aea677
Add new operator class and add operator/object to top level
jnunemaker Sep 7, 2021
a745a41
Add support for properties as object in operator shortcuts
jnunemaker Sep 7, 2021
b5da92e
Cleanup rules example to make it easier to see if something doesn't r…
jnunemaker Sep 7, 2021
46494eb
Add random type and allow any flipper object (not just properties) to…
jnunemaker Sep 7, 2021
3edcf0c
Switch to capitalized type names everywhere
jnunemaker Sep 7, 2021
0cf9a60
Port shared spec to shared tests
jnunemaker Sep 7, 2021
23786a8
Add synchronization of rules
jnunemaker Sep 7, 2021
d3adb00
Ignore spec in code climate
jnunemaker Sep 7, 2021
34ada94
Consistent newlines for api markdown
jnunemaker Sep 7, 2021
6b28363
Fix whitespace formatting in spec
jnunemaker Sep 7, 2021
72520fa
Add enable/disable rule to api markdown
jnunemaker Sep 7, 2021
3648154
Add rules to responses in api markdown
jnunemaker Sep 7, 2021
8bd1991
Reorder gates
jnunemaker Sep 7, 2021
6f4ac7a
Update gates markdown
jnunemaker Sep 7, 2021
e528751
Make operator an object in condition instead of hash
jnunemaker Sep 8, 2021
0a4bdbf
Ensure that operator can be found and raise if not
jnunemaker Sep 8, 2021
e030518
Move call from Condition to Operator
jnunemaker Sep 8, 2021
d989dd5
Make condition checking of actors more resilient
jnunemaker Sep 8, 2021
84b5abb
Change condition left/right to objects from hashes
jnunemaker Sep 8, 2021
5c86713
Make creating object easier
jnunemaker Sep 8, 2021
b51d126
Add #flipper_properties to ActiveRecord::Base
bkeepers Sep 8, 2021
55073d1
Add #flipper_properties to Sequel::Model
bkeepers Sep 8, 2021
250dd48
Add subclasses for each operator
jnunemaker Sep 9, 2021
bf22e68
Merge branch 'learn-the-rules' of https://github.com/jnunemaker/flipp…
jnunemaker Sep 9, 2021
78b8e10
Move operators to plural namespace
jnunemaker Sep 9, 2021
03e4268
Rename wrap to build
jnunemaker Sep 9, 2021
41157f1
Get sequel model and adapter specs to get along
jnunemaker Sep 9, 2021
8bcb12c
Warn if value column is not text
bkeepers Sep 9, 2021
0d522ea
Initialize adapter after creating tables in tests
bkeepers Sep 9, 2021
73fc82e
Silence warnings when re-requiring adapter
bkeepers Sep 9, 2021
33ff1c4
Remove arrays
jnunemaker Sep 23, 2021
fa4ba59
Switch to single rule per feature instead of set of rules per feature
jnunemaker Sep 24, 2021
159717b
Add test for updating rule to shared specs/tests
jnunemaker Sep 24, 2021
10bdf5a
Allow wrapping condition with multi-condition
jnunemaker Sep 24, 2021
dd03f5e
Fix typo
jnunemaker Sep 24, 2021
35efe2f
Add any and all to Any/All
jnunemaker Sep 24, 2021
8c52999
Add add/remove to Condition, Any and All
jnunemaker Sep 24, 2021
b7b843f
Add top level rule method to get rule for feature
jnunemaker Sep 24, 2021
84591ed
Add some examples that show how to go from simple condition to more c…
jnunemaker Sep 24, 2021
e80cca1
Increase range for random spec
jnunemaker Sep 24, 2021
c9ad11a
Merge branch 'master' into learn-the-rules
jnunemaker Sep 24, 2021
d0ddb1b
Remove parameter from disable_rule to make it more clear what this does
jnunemaker Oct 1, 2021
cc7094d
Change rules gate to rule gate
jnunemaker Oct 1, 2021
49119d4
Fix failing spec due to parameter removal
jnunemaker Oct 1, 2021
5f43d2d
Add add_rule/remove_rule
jnunemaker Oct 6, 2021
8cffb72
Merge branch 'master' into learn-the-rules
jnunemaker Oct 6, 2021
db69968
Merge branch 'master' into learn-the-rules
jnunemaker Nov 7, 2021
b5ca1b8
Add example of scheduling a feature to release at a particular point …
jnunemaker Nov 7, 2021
aab0224
Add spec that demonstrates the failure
jnunemaker Nov 10, 2021
ac58c43
Fix the json serialize issue
jnunemaker Nov 10, 2021
6854b2d
Switch to more simple, consistent and flexible data structure for rules
jnunemaker Nov 17, 2021
c64f020
Ensure value is correct
jnunemaker Nov 18, 2021
41e86f2
Add automatic typing of some primitives
jnunemaker Nov 18, 2021
4c2e110
Get specs passing
jnunemaker Nov 18, 2021
17954ff
Tweak rules
jnunemaker Nov 18, 2021
e37d27b
Remove errant puts
jnunemaker Nov 18, 2021
bc868c5
Rename object to value and auto require expressions
jnunemaker Nov 18, 2021
0dc1c01
Use constant for primitives
jnunemaker Nov 18, 2021
44fb8a8
Rename lte and gte to be shorter
jnunemaker Nov 18, 2021
63ea0ea
Get rid of String, Number, and Boolean in favor of just Value
jnunemaker Nov 18, 2021
3e528e8
Remove line to run all specs for every change
jnunemaker Nov 20, 2021
b86bfb5
Add expression equality specs
jnunemaker Nov 20, 2021
06177e7
Change expression specs to use expression instead of subclass
jnunemaker Nov 20, 2021
6e3754f
Make expressions always take an array for args
jnunemaker Nov 20, 2021
4df6f08
Ensure expression always has array args
jnunemaker Nov 20, 2021
67d6ab0
Add conversion specs of expressions to other expressions
jnunemaker Nov 20, 2021
399f7fb
Add any and all specs
jnunemaker Nov 21, 2021
6255252
Add #value specs to expressions
jnunemaker Nov 21, 2021
ea499ee
Add property evaluation specs to equal
jnunemaker Nov 21, 2021
0979df2
Minor spec re-arrangement
jnunemaker Nov 21, 2021
a53a30b
Add some specs to equal and not equal
jnunemaker Nov 21, 2021
8db412a
Change kwargs to just be a context hash
jnunemaker Nov 21, 2021
e88b4c6
Allow evaluation for property arg
jnunemaker Nov 21, 2021
f5c8e9a
Add a primitive spec for equal
jnunemaker Nov 22, 2021
538b636
Rename rule to expression
jnunemaker Nov 22, 2021
804309e
Add early return to the number comparisons
jnunemaker Nov 22, 2021
94c4824
Support evaluations for rand
jnunemaker Nov 22, 2021
637a58e
Use arg evaluation everywhere
jnunemaker Nov 22, 2021
c53a32d
Add some equal specs for wrong number of arguments
jnunemaker Nov 22, 2021
344df5f
Suffix greater/less than or equal with "to"
jnunemaker Nov 22, 2021
3ba6c0f
Change equal spec to only evaluate first two
jnunemaker Nov 22, 2021
3a74bc4
Add not equal extra arg spec
jnunemaker Nov 22, 2021
22a5632
A bunch of spec tweaks
jnunemaker Nov 22, 2021
141be3c
Add specs for expression gate
jnunemaker Nov 22, 2021
cc48d98
Merge branch 'master' into learn-the-rules
jnunemaker Jan 24, 2022
1570520
Remove helper require
jnunemaker Jan 24, 2022
eb4e68e
Remove all helper requires in specs
jnunemaker Jan 24, 2022
bb26dc8
Use example instead of test in examples.yml github action
jnunemaker Jan 24, 2022
c6b57a4
Get flipper properties loading from railtie
jnunemaker Jan 24, 2022
1562674
Try using environment per matrix
jnunemaker Jan 24, 2022
9f46a7d
Export all matrix envs
jnunemaker Jan 24, 2022
379943c
Merge branch 'master' into learn-the-rules
jnunemaker Feb 7, 2022
2562e60
Rename percentage expression to percentage of actors
jnunemaker Feb 7, 2022
7b5a2dd
Add boolean, number, percentage and string to expressions
jnunemaker Feb 8, 2022
6447d4e
Get rid of already defined constant warnings
jnunemaker Feb 9, 2022
a377f98
Remove shortcuts for types from dsl also
jnunemaker Feb 9, 2022
7885a5a
Add breaking changes to changelog
jnunemaker Feb 9, 2022
73c7835
Add upgrade path for shortcut removal
jnunemaker Feb 9, 2022
0ea98e9
Remove the concept of value in favor of specific types
jnunemaker Feb 9, 2022
b3f49d1
Fix search/replace error in shared adapter tests
jnunemaker Feb 9, 2022
ac4bf97
Merge remote-tracking branch 'origin/main' into learn-the-rules
bkeepers Jan 3, 2023
ba0d962
Update Changelog
bkeepers Jan 3, 2023
76b17cb
Update link to PR
bkeepers Jan 3, 2023
449757f
Ignore case for db type
bkeepers Jan 3, 2023
56db6a2
Rename api/expression_gate_spec
bkeepers Jan 5, 2023
d3d766d
Handle empty/blank value in expression gate API
bkeepers Jan 5, 2023
9d70f97
Merge remote-tracking branch 'origin/main' into learn-the-rules
bkeepers Mar 16, 2023
d8a8b3d
Flipper::Identifier is already included in Flipper::Model
bkeepers Mar 16, 2023
83731d7
Merge branch 'main' into learn-the-rules
jnunemaker Mar 18, 2023
97f6aa4
Get specs passing again
jnunemaker Mar 18, 2023
9ffff3c
Add rule to export spec
jnunemaker Mar 18, 2023
4f30541
Ensure that expressions will import
jnunemaker Mar 18, 2023
7d1c406
Ensure that expressions work with import and export stuff
jnunemaker Mar 18, 2023
7481c71
Merge branch 'main' into learn-the-rules
jnunemaker Mar 20, 2023
c402905
Merge branch 'main' into learn-the-rules
jnunemaker Mar 24, 2023
4d6d1fd
a bit of formatting
jnunemaker Mar 24, 2023
7dbb5fd
Add some actor specs
jnunemaker Mar 24, 2023
98f303b
Fix expression gate for no actor
jnunemaker Mar 25, 2023
4994c3f
Make expressions work with nil or empty array of actors
jnunemaker Mar 25, 2023
9da3f8c
Simplify boolean enabled
jnunemaker Mar 25, 2023
973fe0c
Add Time, Now, and Duration expression types
bkeepers Mar 25, 2023
3a24614
Merge branch 'main' into learn-the-rules
jnunemaker Mar 25, 2023
b285c4d
Refactor expressions
bkeepers Mar 25, 2023
c35a488
Remove unused context arg
bkeepers Mar 27, 2023
6929351
Remove unused #evaluate_arg
bkeepers Mar 27, 2023
bb9d342
Refactor Expressions to be simple proc with no base class
bkeepers Mar 27, 2023
c6f2e01
Restore String, Boolean, Number expressions for casting
bkeepers Mar 27, 2023
4d9a5c9
Remove unnecessary class reference
bkeepers Mar 27, 2023
c690bc4
Remove unnecessary require
bkeepers Mar 27, 2023
311b040
Use Flipper.constant shortcut
bkeepers Mar 27, 2023
ba869a1
Add to_number to typecast_ips
bkeepers Mar 27, 2023
734399e
Avoid Hash allocation in Constant
bkeepers Mar 27, 2023
fcef13b
Fix number formatting
bkeepers Mar 27, 2023
522e8d0
Remove outdated comment
bkeepers Mar 27, 2023
30db276
Merge remote-tracking branch 'origin/learn-the-rules' into expression…
bkeepers Mar 27, 2023
c1397ad
Merge latest learn-the-rules, fix failing spec
bkeepers Mar 27, 2023
b1cd631
Fix import/export specs
bkeepers Mar 27, 2023
e6f8041
Fix adapter spec
bkeepers Mar 27, 2023
64f95b8
Fix issue with Ruby 2.6 and kwargs
bkeepers Mar 27, 2023
d86e9f3
Ensure Now expression returns in utc
bkeepers Mar 27, 2023
56cbdaa
Allow time to be flexible
bkeepers Mar 29, 2023
c5bbfdb
Merge pull request #714 from jnunemaker/time-expressions
bkeepers Mar 30, 2023
041dd34
Merge remote-tracking branch 'origin/main' into expressions-experiment
bkeepers Mar 30, 2023
10dd775
Merge remote-tracking branch 'origin/learn-the-rules' into expression…
bkeepers Mar 30, 2023
b237c8c
Merge pull request #715 from jnunemaker/expressions-experiment
bkeepers Mar 30, 2023
8bb5ee8
Merge remote-tracking branch 'origin/main' into learn-the-rules
bkeepers Jul 17, 2023
3755d8d
Restore json support to Redis adapter after bad merge
bkeepers Jul 17, 2023
16831bc
change_column :flipper_gates, :text
bkeepers Jul 17, 2023
82fa9de
Merge branch 'main' into learn-the-rules
bkeepers Jul 17, 2023
189df7f
Update changelog
bkeepers Jul 17, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Remove the concept of value in favor of specific types
  • Loading branch information
jnunemaker committed Feb 9, 2022
commit 0ea98e928e3483ab6f70f49aeb5f6c18e2dae09a
2 changes: 1 addition & 1 deletion examples/expressions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ class Org < Struct.new(:id, :flipper_properties)
refute Flipper.enabled?(:something, other_user)

puts "\n\nBoolean Expression"
boolean_expression = Flipper.value(true).eq(true)
boolean_expression = Flipper.boolean(true).eq(true)
Flipper.enable :something, boolean_expression
assert Flipper.enabled?(:something)
assert Flipper.enabled?(:something, user)
Expand Down
18 changes: 7 additions & 11 deletions lib/flipper/expression.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
module Flipper
class Expression
SUPPORTED_TYPE_CLASSES = [
String,
Numeric,
NilClass,
TrueClass,
FalseClass,
].freeze

def self.build(object, convert_to_values: false)
return object if object.is_a?(Flipper::Expression)

Expand All @@ -18,10 +10,14 @@ def self.build(object, convert_to_values: false)
type = object.keys.first
args = object.values.first
Expressions.const_get(type).new(args)
when *SUPPORTED_TYPE_CLASSES
convert_to_values ? Expressions::Value.new(object) : object
when String
convert_to_values ? Expressions::String.new(object.to_s) : object
when Symbol
convert_to_values ? Expressions::Value.new(object.to_s) : object.to_s
convert_to_values ? Expressions::String.new(object.to_s) : object.to_s
when Numeric
convert_to_values ? Expressions::Number.new(object.to_f) : object
when TrueClass, FalseClass
convert_to_values ? Expressions::Boolean.new(object) : object
else
raise ArgumentError, "#{object.inspect} cannot be converted into an expression"
end
Expand Down
2 changes: 1 addition & 1 deletion lib/flipper/expressions/percentage.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ def initialize(args)
end

def evaluate(context = {})
value = evaluate_arg(0, context)
value = super

value = 0 if value < 0
value = 100 if value > 100
Expand Down
15 changes: 0 additions & 15 deletions lib/flipper/expressions/value.rb

This file was deleted.

83 changes: 37 additions & 46 deletions spec/flipper/expression_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,102 +5,93 @@
it "can build Equal" do
expression = Flipper::Expression.build({
"Equal" => [
{"Value" => ["basic"]},
{"Value" => ["basic"]},
{"String" => ["basic"]},
{"String" => ["basic"]},
]
})

expect(expression).to be_instance_of(Flipper::Expressions::Equal)
expect(expression.args).to eq([
Flipper.value("basic"),
Flipper.value("basic"),
Flipper.string("basic"),
Flipper.string("basic"),
])
end

it "can build GreaterThanOrEqualTo" do
expression = Flipper::Expression.build({
"GreaterThanOrEqualTo" => [
{"Value" => [2]},
{"Value" => [1]},
{"Number" => [2]},
{"Number" => [1]},
]
})

expect(expression).to be_instance_of(Flipper::Expressions::GreaterThanOrEqualTo)
expect(expression.args).to eq([
Flipper.value(2),
Flipper.value(1),
Flipper.number(2),
Flipper.number(1),
])
end

it "can build GreaterThan" do
expression = Flipper::Expression.build({
"GreaterThan" => [
{"Value" => [2]},
{"Value" => [1]},
{"Number" => [2]},
{"Number" => [1]},
]
})

expect(expression).to be_instance_of(Flipper::Expressions::GreaterThan)
expect(expression.args).to eq([
Flipper.value(2),
Flipper.value(1),
Flipper.number(2),
Flipper.number(1),
])
end

it "can build LessThanOrEqualTo" do
expression = Flipper::Expression.build({
"LessThanOrEqualTo" => [
{"Value" => [2]},
{"Value" => [1]},
{"Number" => [2]},
{"Number" => [1]},
]
})

expect(expression).to be_instance_of(Flipper::Expressions::LessThanOrEqualTo)
expect(expression.args).to eq([
Flipper.value(2),
Flipper.value(1),
Flipper.number(2),
Flipper.number(1),
])
end

it "can build LessThan" do
expression = Flipper::Expression.build({
"LessThan" => [
{"Value" => [2]},
{"Value" => [1]},
{"Number" => [2]},
{"Number" => [1]},
]
})

expect(expression).to be_instance_of(Flipper::Expressions::LessThan)
expect(expression.args).to eq([
Flipper.value(2),
Flipper.value(1),
Flipper.number(2),
Flipper.number(1),
])
end

it "can build NotEqual" do
expression = Flipper::Expression.build({
"NotEqual" => [
{"Value" => ["basic"]},
{"Value" => ["plus"]},
{"String" => ["basic"]},
{"String" => ["plus"]},
]
})

expect(expression).to be_instance_of(Flipper::Expressions::NotEqual)
expect(expression.args).to eq([
Flipper.value("basic"),
Flipper.value("plus"),
Flipper.string("basic"),
Flipper.string("plus"),
])
end

it "can build Value" do
expression = Flipper::Expression.build({
"Value" => [1]
})

expect(expression).to be_instance_of(Flipper::Expressions::Value)
expect(expression.args).to eq([1])
end

it "can build Number" do
expression = Flipper::Expression.build({
"Number" => [1]
Expand All @@ -122,24 +113,24 @@
it "can build PercentageOfActors" do
expression = Flipper::Expression.build({
"PercentageOfActors" => [
{"Value" => ["User;1"]},
{"Value" => [40]},
{"String" => ["User;1"]},
{"Number" => [40]},
]
})

expect(expression).to be_instance_of(Flipper::Expressions::PercentageOfActors)
expect(expression.args).to eq([
Flipper.value("User;1"),
Flipper.value(40),
Flipper.string("User;1"),
Flipper.number(40),
])
end

it "can build Value" do
it "can build String" do
expression = Flipper::Expression.build({
"Value" => ["basic"]
"String" => ["basic"]
})

expect(expression).to be_instance_of(Flipper::Expressions::Value)
expect(expression).to be_instance_of(Flipper::Expressions::String)
expect(expression.args).to eq(["basic"])
end

Expand Down Expand Up @@ -214,8 +205,8 @@
describe "#add" do
it "converts to Any and adds new expressions" do
expression = described_class.new(["something"])
first = Flipper.value(true).eq(true)
second = Flipper.value(false).eq(false)
first = Flipper.boolean(true).eq(true)
second = Flipper.boolean(false).eq(false)
new_expression = expression.add(first, second)
expect(new_expression).to be_instance_of(Flipper::Expressions::Any)
expect(new_expression.args).to eq([
Expand All @@ -229,8 +220,8 @@
describe "#remove" do
it "converts to Any and removes any expressions that match" do
expression = described_class.new(["something"])
first = Flipper.value(true).eq(true)
second = Flipper.value(false).eq(false)
first = Flipper.boolean(true).eq(true)
second = Flipper.boolean(false).eq(false)
new_expression = expression.remove(described_class.new(["something"]), first, second)
expect(new_expression).to be_instance_of(Flipper::Expressions::Any)
expect(new_expression.args).to eq([])
Expand Down Expand Up @@ -295,9 +286,9 @@
end

it "can convert to PercentageOfActors" do
expression = Flipper.value("User;1")
expression = Flipper.string("User;1")
converted = expression.percentage_of_actors(40)
expect(converted).to be_instance_of(Flipper::Expressions::PercentageOfActors)
expect(converted.args).to eq([expression, Flipper.value(40)])
expect(converted.args).to eq([expression, Flipper.number(40)])
end
end
62 changes: 31 additions & 31 deletions spec/flipper/expressions/all_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,16 @@
describe "#evaluate" do
it "returns true if all args evaluate as true" do
expression = described_class.new([
Flipper.value(true),
Flipper.value("yep").eq("yep"),
Flipper.boolean(true),
Flipper.string("yep").eq("yep"),
])
expect(expression.evaluate).to be(true)
end

it "returns false if any args evaluate as false" do
expression = described_class.new([
Flipper.value(false),
Flipper.value("yep").eq("yep"),
Flipper.boolean(false),
Flipper.string("yep").eq("yep"),
])
expect(expression.evaluate).to be(false)
end
Expand All @@ -20,57 +20,57 @@
describe "#all" do
it "returns self" do
expression = described_class.new([
Flipper.value(true),
Flipper.value("yep").eq("yep"),
Flipper.boolean(true),
Flipper.string("yep").eq("yep"),
])
expect(expression.all).to be(expression)
end
end

describe "#add" do
it "returns new instance with expression added" do
expression = described_class.new([Flipper.value(true)])
other = Flipper.value("yep").eq("yep")
expression = described_class.new([Flipper.boolean(true)])
other = Flipper.string("yep").eq("yep")

result = expression.add(other)
expect(result.args).to eq([
Flipper.value(true),
Flipper.value("yep").eq("yep"),
Flipper.boolean(true),
Flipper.string("yep").eq("yep"),
])
end

it "returns new instance with many expressions added" do
expression = described_class.new([Flipper.value(true)])
second = Flipper.value("yep").eq("yep")
third = Flipper.value(1).lte(20)
expression = described_class.new([Flipper.boolean(true)])
second = Flipper.string("yep").eq("yep")
third = Flipper.number(1).lte(20)

result = expression.add(second, third)
expect(result.args).to eq([
Flipper.value(true),
Flipper.value("yep").eq("yep"),
Flipper.value(1).lte(20),
Flipper.boolean(true),
Flipper.string("yep").eq("yep"),
Flipper.number(1).lte(20),
])
end

it "returns new instance with array of expressions added" do
expression = described_class.new([Flipper.value(true)])
second = Flipper.value("yep").eq("yep")
third = Flipper.value(1).lte(20)
expression = described_class.new([Flipper.boolean(true)])
second = Flipper.string("yep").eq("yep")
third = Flipper.number(1).lte(20)

result = expression.add([second, third])
expect(result.args).to eq([
Flipper.value(true),
Flipper.value("yep").eq("yep"),
Flipper.value(1).lte(20),
Flipper.boolean(true),
Flipper.string("yep").eq("yep"),
Flipper.number(1).lte(20),
])
end
end

describe "#remove" do
it "returns new instance with expression removed" do
first = Flipper.value(true)
second = Flipper.value("yep").eq("yep")
third = Flipper.value(1).lte(20)
first = Flipper.boolean(true)
second = Flipper.string("yep").eq("yep")
third = Flipper.number(1).lte(20)
expression = described_class.new([first, second, third])

result = expression.remove(second)
Expand All @@ -79,9 +79,9 @@
end

it "returns new instance with many expressions removed" do
first = Flipper.value(true)
second = Flipper.value("yep").eq("yep")
third = Flipper.value(1).lte(20)
first = Flipper.boolean(true)
second = Flipper.string("yep").eq("yep")
third = Flipper.number(1).lte(20)
expression = described_class.new([first, second, third])

result = expression.remove(second, third)
Expand All @@ -90,9 +90,9 @@
end

it "returns new instance with array of expressions removed" do
first = Flipper.value(true)
second = Flipper.value("yep").eq("yep")
third = Flipper.value(1).lte(20)
first = Flipper.boolean(true)
second = Flipper.string("yep").eq("yep")
third = Flipper.number(1).lte(20)
expression = described_class.new([first, second, third])

result = expression.remove([second, third])
Expand Down
Loading