set_builder 2.0.0.beta2 → 2.0.0.beta3

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -6
  3. data/Rakefile +2 -2
  4. data/init.rb +1 -1
  5. data/lib/assets/javascripts/set_builder.js +122 -125
  6. data/lib/set_builder/constraint.rb +66 -50
  7. data/lib/set_builder/errors/trait_not_found.rb +3 -0
  8. data/lib/set_builder/modifier/adverb.rb +4 -4
  9. data/lib/set_builder/modifier/base.rb +74 -67
  10. data/lib/set_builder/modifier/verb.rb +1 -16
  11. data/lib/set_builder/modifier.rb +49 -49
  12. data/lib/set_builder/modifier_collection.rb +16 -16
  13. data/lib/set_builder/modifiers/date_preposition.rb +6 -48
  14. data/lib/set_builder/modifiers/number_preposition.rb +4 -25
  15. data/lib/set_builder/modifiers/string_preposition.rb +9 -43
  16. data/lib/set_builder/modifiers.rb +3 -3
  17. data/lib/set_builder/set.rb +48 -8
  18. data/lib/set_builder/trait.rb +75 -49
  19. data/lib/set_builder/traits.rb +13 -4
  20. data/lib/set_builder/value_map.rb +30 -30
  21. data/lib/set_builder/version.rb +1 -1
  22. data/lib/set_builder.rb +8 -7
  23. data/set_builder.gemspec +4 -2
  24. data/spec/commands/example_command.rb +2 -2
  25. data/spec/lib/jspec.css +4 -4
  26. data/spec/lib/jspec.growl.js +11 -11
  27. data/spec/lib/jspec.jquery.js +14 -14
  28. data/spec/lib/jspec.js +210 -210
  29. data/spec/lib/jspec.nodejs.js +2 -2
  30. data/spec/lib/jspec.shell.js +11 -11
  31. data/spec/lib/jspec.timers.js +23 -23
  32. data/spec/rhino.js +1 -1
  33. data/spec/server.rb +1 -1
  34. data/spec/unit/array.spec.js +9 -9
  35. data/spec/unit/set_builder.spec.js +71 -82
  36. data/spec/unit/spec.helper.js +1 -0
  37. data/test/constraint_test.rb +84 -0
  38. data/test/date_preposition_test.rb +17 -7
  39. data/test/modifier_test.rb +26 -1
  40. data/test/set_test.rb +51 -28
  41. data/test/string_preposition_test.rb +10 -9
  42. data/test/test_helper.rb +17 -15
  43. data/test/trait_test.rb +49 -30
  44. data/test/traits_test.rb +35 -30
  45. data/test/value_map_test.rb +1 -1
  46. metadata +37 -15
  47. data/lib/set_builder/query_builders/string.rb +0 -0
  48. data/test/inflector_test.rb +0 -27
@@ -1,9 +1,34 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  class ModifierTest < ActiveSupport::TestCase
4
4
  include SetBuilder::Modifiers
5
5
 
6
6
 
7
+
8
+ test "should be valid if `values` is omitted for an operator that expects no arguments" do
9
+ preposition = SetBuilder::Modifiers::DatePreposition.new(operator: "ever", values: [])
10
+ assert_equal [], preposition.values
11
+ assert preposition.valid?
12
+
13
+ preposition = SetBuilder::Modifiers::DatePreposition.new(operator: "ever")
14
+ assert_equal [], preposition.values
15
+ assert preposition.valid?
16
+ end
17
+
18
+ test "should not flatten double-wrapped `values`" do
19
+ preposition = SetBuilder::Modifiers::DatePreposition.new(operator: "on", values: [["2015-01-01"]])
20
+ assert_equal [["2015-01-01"]], preposition.values
21
+ assert preposition.valid?
22
+ end
23
+
24
+ test "should be valid if `values` is not wrapped in an array" do
25
+ preposition = SetBuilder::Modifiers::DatePreposition.new(operator: "on", values: "2015-01-01")
26
+ assert_equal ["2015-01-01"], preposition.values
27
+ assert preposition.valid?
28
+ end
29
+
30
+
31
+
7
32
  test "get type with string" do
8
33
  assert_equal StringPreposition, SetBuilder::Modifier["StringPreposition"]
9
34
  end
data/test/set_test.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  class SetTest < ActiveSupport::TestCase
4
4
 
@@ -6,49 +6,79 @@ class SetTest < ActiveSupport::TestCase
6
6
 
7
7
  test "set data struture" do
8
8
  set = to_set [
9
- [:awesome],
10
- [:attended, 2],
11
- [:died],
12
- [:name, {:is => "Jerome"}]]
9
+ { trait: :awesome, enums: ["are"] },
10
+ { trait: :attended, enums: ["have"], school: 2 },
11
+ { trait: :died, enums: ["have"] },
12
+ { trait: :name, modifiers: [{ operator: :is, values: ["Jerome"] }] }]
13
13
  assert set.valid?
14
- assert_equal "who are awesome, who have attended McKendree, who died, and whose name is Jerome", set.to_s
14
+ assert_equal "who are awesome, who have attended McKendree, who have died, and whose name is Jerome", set.to_s
15
+ end
16
+
17
+ test "parsing sets that come from HTML" do
18
+ set = to_set({
19
+ "0" => { "trait" => "awesome", "enums" => {"0" => "are"} },
20
+ "1" => { "trait" => "attended", "enums" => {"0" => "have"}, "school" => 2 },
21
+ "2" => { "trait" => "died", "enums" => {"0" => "have"} },
22
+ "3" => { "trait" => "name", "modifiers" => {"0" => { "operator" => "is", "values" => {"0" => "Jerome"} }} } })
23
+ assert set.valid?
24
+ assert_equal "who are awesome, who have attended McKendree, who have died, and whose name is Jerome", set.to_s
25
+ end
26
+
27
+ test "normalizing sets" do
28
+ expected_constraints = [
29
+ { trait: "awesome", enums: ["are"] },
30
+ { trait: "attended", enums: ["have"], school: 2 },
31
+ { trait: "died", enums: ["have"] },
32
+ { trait: "name", modifiers: [{ operator: "is", values: ["Jerome"] }] }]
33
+ set = to_set({
34
+ "0" => { "trait" => "awesome", "enums" => {"0" => "are"} },
35
+ "1" => { "trait" => "attended", "enums" => {"0" => "have"}, "school" => 2 },
36
+ "2" => { "trait" => "died", "enums" => {"0" => "have"} },
37
+ "3" => { "trait" => "name", "modifiers" => {"0" => { "operator" => "is", "values" => {"0" => "Jerome"} }} } })
38
+ assert_equal expected_constraints, set.to_a
39
+ end
40
+
41
+ test "normalize should handle nil" do
42
+ assert_equal [], SetBuilder::Set.normalize(nil)
15
43
  end
16
44
 
17
45
  test "sets with invalid modifiers should be invalid" do
18
- set = to_set [[:born, {:after => ["wrong"]}]]
46
+ set = to_set [{ trait: :born, modifiers: [{ operator: :after, values: ["wrong"] }] }]
19
47
  assert_equal false, set.valid?
20
48
  end
21
49
 
22
50
  test "sets should not allow non-numbers in a number modifiers" do
23
- set = to_set [[:age, {:is => ["12a"]}]]
51
+ set = to_set [{ trait: :age, modifiers: [{ operator: :is, values: ["12a"] }] }]
24
52
  refute set.valid?
53
+ assert_match /"12a" is not a valid number/, set.errors.values.join(", ")
25
54
  end
26
55
 
27
56
  test "sets should not allow empty string in a number modifiers" do
28
- set = to_set [[:age, {:is => [""]}]]
57
+ set = to_set [{ trait: :age, modifiers: [{ operator: :is, values: [""] }] }]
29
58
  refute set.valid?
59
+ assert_match /number is blank/, set.errors.values.join(", ")
30
60
  end
31
61
 
32
62
  test "sets lacking expected modifiers should be invalid" do
33
- set = to_set [[:born, {:ever => []}]]
63
+ set = to_set [{ trait: :born, modifiers: [{ operator: :ever, values: [] }] }]
34
64
  assert_equal true, set.valid?
35
65
 
36
- set = to_set [[:born]]
66
+ set = to_set [{ trait: :born }]
37
67
  assert_equal false, set.valid?
38
68
  end
39
69
 
40
70
  test "set structure with negations (nouns are ignored)" do
41
71
  set = to_set [
42
- ["!awesome"],
43
- ["!attended", 2],
44
- ["!died"],
45
- ["!name", {:is => "Jerome"}]]
72
+ { trait: "awesome", enums: ["are not"] },
73
+ { trait: "attended", enums: ["have not"], school: 2 },
74
+ { trait: "died", enums: ["have not"] },
75
+ { trait: "name", modifiers: [{ operator: :is, values: ["Jerome"] }] }]
46
76
  assert set.valid?
47
77
  assert_equal "who are not awesome, who have not attended McKendree, who have not died, and whose name is Jerome", set.to_s
48
78
  end
49
79
 
50
80
  test "simple perform" do
51
- set = to_set [[:awesome]]
81
+ set = to_set [{ trait: "awesome", enums: ["are"] }]
52
82
 
53
83
  expected_results = [{:conditions => {:awesome => true}}]
54
84
  assert_equal expected_results, set.perform
@@ -56,27 +86,20 @@ class SetTest < ActiveSupport::TestCase
56
86
 
57
87
  test "complex perform" do
58
88
  set = to_set [
59
- [:awesome],
60
- [:attended, 1],
61
- [:died],
62
- [:name, {:begins_with => "Jerome"}]]
89
+ { trait: "awesome", enums: ["are"] },
90
+ { trait: "attended", enums: ["have"], school: 1 },
91
+ { trait: "died", enums: ["have"] },
92
+ { trait: "name", modifiers: [{ operator: :begins_with, values: ["Jer"] }] }]
63
93
 
64
94
  expected_results = [
65
95
  {:conditions => {:awesome => true}},
66
96
  {:joins => "INNER JOIN schools ON friends.school_id=schools.id", :conditions => {"schools.id" => 1}},
67
97
  {:conditions => {:alive => false}},
68
- {:conditions => ["friends.name LIKE ?", "Jerome%"]}
98
+ {:conditions => "\"friends\".\"name\" LIKE 'Jer%'"}
69
99
  ]
70
100
  assert_equal expected_results, set.perform
71
101
  end
72
102
 
73
- test "invalid set" do
74
- set = to_set [[:name, {:starts_with => "Jerome"}]] # starts_with is not a valid operator
75
-
76
- # !todo: what to do?
77
- skip "TODO: test invalid sets"
78
- end
79
-
80
103
 
81
104
  private
82
105
 
@@ -1,19 +1,20 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  class StringPrepositionTest < ActiveSupport::TestCase
4
4
  include SetBuilder::Modifiers
5
-
5
+
6
6
  attr_reader :table
7
-
7
+
8
8
  setup do
9
9
  @table = Arel::Table.new(:fruits)
10
10
  end
11
-
12
-
11
+
12
+
13
13
  test "#build_arel_for should generate the correct SQL" do
14
- modifier = StringPreposition.new({:does_not_contain => ["banana"]})
15
- assert_equal "\"fruits\".\"name\" NOT LIKE '%banana%'", modifier.build_arel_for(table[:name]).to_sql
14
+ modifier = StringPreposition.new(operator: :does_not_contain, values: ["banana"])
15
+ assert_equal "(\"fruits\".\"name\" IS NULL OR \"fruits\".\"name\" NOT LIKE '%banana%')",
16
+ modifier.build_arel_for(table[:name]).to_sql
16
17
  end
17
-
18
-
18
+
19
+
19
20
  end
data/test/test_helper.rb CHANGED
@@ -3,8 +3,10 @@ require "rails"
3
3
  require "rails/test_help"
4
4
  require "active_support/core_ext"
5
5
  require "set_builder"
6
+ require "shoulda/context"
6
7
  require "pry"
7
8
  require "support/fake_connection"
9
+ require "timecop"
8
10
 
9
11
  require "minitest/reporters"
10
12
  Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
@@ -13,25 +15,27 @@ Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
13
15
 
14
16
  SetBuilder::ValueMap.register(:school, [[1, "Concordia"], [2, "McKendree"]])
15
17
 
18
+ friends = Arel::Table.new(:friends)
19
+
16
20
  $friend_traits = SetBuilder::Traits.new do
17
21
 
18
- trait('who are [not] "awesome"') do |query, scope|
22
+ trait('who [are|are not] "awesome"') do |query, scope|
19
23
  scope << {:conditions => {:awesome => true}}
20
24
  end
21
25
 
22
- trait('who [have not] "died"') do |query, scope|
26
+ trait('who [have|have not] "died"') do |query, scope|
23
27
  scope << {:conditions => {:alive => false}}
24
28
  end
25
29
 
26
30
  trait('who were "born" <date>') do |query, scope|
27
- scope << {:conditions => query.modifiers[0].build_conditions_for("friends.birthday")}
31
+ scope << {:conditions => query.modifiers[0].build_arel_for(friends[:birthday]).to_sql}
28
32
  end
29
33
 
30
34
  trait('whose "age" <number>') do |query, scope|
31
- scope << {:conditions => query.modifiers[0].build_conditions_for("friends.age")}
35
+ scope << {:conditions => query.modifiers[0].build_arel_for(friends[:age]).to_sql}
32
36
  end
33
37
 
34
- trait('who have [not] "attended" :school') do |query, scope|
38
+ trait('who [have|have not] "attended" :school') do |query, scope|
35
39
  scope << {
36
40
  :joins => "INNER JOIN schools ON friends.school_id=schools.id",
37
41
  :conditions => {"schools.id" => query.direct_object}
@@ -39,7 +43,7 @@ $friend_traits = SetBuilder::Traits.new do
39
43
  end
40
44
 
41
45
  trait('whose "name" <string>') do |query, scope|
42
- scope << {:conditions => query.modifiers[0].build_conditions_for("friends.name")}
46
+ scope << {:conditions => query.modifiers[0].build_arel_for(friends[:name]).to_sql}
43
47
  end
44
48
  end
45
49
 
@@ -53,17 +57,15 @@ class Friend
53
57
 
54
58
 
55
59
  # Stubs so that Arel can SQL
60
+ class << self
61
+ attr_accessor :connection_pool
56
62
 
57
- attr_accessor :connection_pool
58
-
59
- def initialize
60
- @connection_pool = Fake::ConnectionPool.new
61
- end
62
-
63
- def connection
64
- connection_pool.connection
63
+ def connection
64
+ connection_pool.connection
65
+ end
65
66
  end
67
+ @connection_pool = Fake::ConnectionPool.new
66
68
 
67
69
  end
68
70
 
69
- Arel::Table.engine = Arel::Sql::Engine.new(Friend.new)
71
+ Arel::Table.engine = Friend
data/test/trait_test.rb CHANGED
@@ -1,42 +1,61 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  class TraitTest < ActiveSupport::TestCase
4
- include SetBuilder::Modifiers
4
+ include SetBuilder
5
5
 
6
6
 
7
- test "constraints find correct modifiers" do
8
- trait = $friend_traits[:name]
9
- assert_equal 1, trait.modifiers.length
7
+ context "When defining a trait, it" do
8
+ should "strip any leading or trailing whitespace" do
9
+ assert_equal 'who "died"', Trait.new(' who "died" ').to_s
10
+ end
10
11
 
11
- constraint = trait.apply({:is => "Jerome"})
12
- assert_equal 1, constraint.modifiers.length
13
- assert_kind_of StringPreposition, constraint.modifiers.first
14
- end
12
+ should "take the quoted part of the string as the trait name" do
13
+ assert_equal "died", Trait.new('who "died"').name
14
+ end
15
15
 
16
- test "modifiers should find correct values" do
17
- trait = $friend_traits[:name]
18
- modifier = trait.apply({:is => "Jerome"}).modifiers.first
19
- assert_equal :is, modifier.operator
20
- assert_equal ["Jerome"], modifier.values
21
- end
16
+ should "not allow you to define more than one trait name" do
17
+ assert_raise(ArgumentError) { Trait.new('who "died" "allegedly"') }
18
+ end
22
19
 
23
- test "traits correctly expect direct objects" do
24
- trait_requires_direct_object = {
25
- :awesome => false,
26
- :born => false,
27
- :attended => true,
28
- :died => false,
29
- :name => false
30
- }
31
- trait_requires_direct_object.each do |trait, expected_value|
32
- assert_equal expected_value, $friend_traits[trait].requires_direct_object?
20
+ should "not required you to define a trait name" do
21
+ assert_raise(ArgumentError) { Trait.new('who died') }
33
22
  end
34
- end
35
23
 
36
- test "constraint should be valid" do
37
- trait = $friend_traits[:name]
38
- constraint = trait.apply({:is => "Jerome"})
39
- assert constraint.valid?
24
+ should "assume that it doesn't expect a direct object" do
25
+ refute Trait.new('who "attended"').requires_direct_object?
26
+ end
27
+
28
+ should "take a word prefixed with ':' as the type of the direct object" do
29
+ trait = Trait.new('who "attended" :school')
30
+ assert_equal :school, trait.direct_object_type
31
+ assert trait.requires_direct_object?
32
+ end
33
+
34
+ should "not allow you to define more than one direct object" do
35
+ assert_raise(ArgumentError) { Trait.new('who "attended" :school :university') }
36
+ end
37
+
38
+ should "have no enums unless defined" do
39
+ assert_equal 0, Trait.new('who "died"').enums.length
40
+ end
41
+
42
+ should "take bracketed text as a built-in set of alternatives" do
43
+ trait = Trait.new('who [have|have not] "died"')
44
+ assert_equal [["have", "have not"]], trait.enums
45
+ end
46
+
47
+ should "require you to define at least two alternatives" do
48
+ assert_raise(ArgumentError) { Trait.new('who [have not] "died"') }
49
+ end
50
+
51
+ should "take words wrapped in angle brackets as modifiers" do
52
+ trait = Trait.new('who were "born" <date>')
53
+ assert_equal [Modifiers::DatePreposition], trait.modifiers
54
+ end
55
+
56
+ should "raise an exception if a modifier isn't defined" do
57
+ assert_raise(ArgumentError) { Trait.new('who were "born" <nope>') }
58
+ end
40
59
  end
41
60
 
42
61
 
data/test/traits_test.rb CHANGED
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  class TraitsTest < ActiveSupport::TestCase
4
4
  include SetBuilder::Modifiers
@@ -27,53 +27,58 @@ class TraitsTest < ActiveSupport::TestCase
27
27
  assert_equal expected_modifiers, $friend_traits.modifiers.collect(&:name).sort
28
28
  end
29
29
 
30
- test "two collections of traits can be concatenated with `+`" do
31
- traits1 = SetBuilder::Traits.new do
32
- trait('who are [not] "awesome"') { |query, scope| }
33
- end
34
-
35
- traits2 = SetBuilder::Traits.new do
36
- trait('who are [not] "living"') { |query, scope| }
37
- end
38
30
 
39
- combined_traits = traits1 + traits2
40
- assert_kind_of SetBuilder::Traits, combined_traits
41
- assert_equal %w{awesome living}, combined_traits.map(&:name)
42
- end
31
+ context "two collections of traits" do
32
+ setup do
33
+ @traits1 = SetBuilder::Traits.new do
34
+ trait('who are "awesome"') { |query, scope| }
35
+ end
43
36
 
44
- test "two collections of traits can be concatenated with `concat`" do
45
- traits1 = SetBuilder::Traits.new do
46
- trait('who are [not] "awesome"') { |query, scope| }
37
+ @traits2 = SetBuilder::Traits.new do
38
+ trait('who are "living"') { |query, scope| }
39
+ end
47
40
  end
48
41
 
49
- traits2 = SetBuilder::Traits.new do
50
- trait('who are [not] "living"') { |query, scope| }
42
+ should "be concatenatable with `+`" do
43
+ combined_traits = @traits1 + @traits2
44
+ assert_kind_of SetBuilder::Traits, combined_traits
45
+ assert_equal %w{awesome living}, combined_traits.map(&:name)
51
46
  end
52
47
 
53
- combined_traits = traits1.concat traits2
54
- assert_kind_of SetBuilder::Traits, combined_traits
55
- assert_equal %w{awesome living}, combined_traits.map(&:name)
48
+ should "be concatenatable with `concat`" do
49
+ combined_traits = @traits1.concat @traits2
50
+ assert_kind_of SetBuilder::Traits, combined_traits
51
+ assert_equal %w{awesome living}, combined_traits.map(&:name)
52
+ end
56
53
  end
57
54
 
55
+
58
56
  test "to_json" do
59
- expected_json = [[["string","who are"],
60
- ["negative","not"],
57
+ expected_json = [[["string","who "],
58
+ ["enum",["are","are not"]],
59
+ ["string", " "],
61
60
  ["name","awesome"]],
62
- [["string","who"],
63
- ["negative","have not"],
61
+ [["string","who "],
62
+ ["enum",["have","have not"]],
63
+ ["string", " "],
64
64
  ["name","died"]],
65
- [["string","who were"],
65
+ [["string","who were "],
66
66
  ["name","born"],
67
+ ["string", " "],
67
68
  ["modifier","date"]],
68
- [["string","whose"],
69
+ [["string","whose "],
69
70
  ["name","age"],
71
+ ["string", " "],
70
72
  ["modifier","number"]],
71
- [["string","who have"],
72
- ["negative","not"],
73
+ [["string","who "],
74
+ ["enum",["have","have not"]],
75
+ ["string", " "],
73
76
  ["name","attended"],
77
+ ["string", " "],
74
78
  ["direct_object_type","school"]],
75
- [["string","whose"],
79
+ [["string","whose "],
76
80
  ["name","name"],
81
+ ["string", " "],
77
82
  ["modifier","string"]]].to_json
78
83
  assert_equal expected_json, $friend_traits.to_json
79
84
  end
@@ -1,4 +1,4 @@
1
- require 'test_helper'
1
+ require "test_helper"
2
2
 
3
3
  class ValueMapTest < ActiveSupport::TestCase
4
4
 
metadata CHANGED
@@ -1,35 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: set_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.beta2
4
+ version: 2.0.0.beta3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Lail
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-25 00:00:00.000000000 Z
11
+ date: 2016-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '3.1'
20
- - - "<"
17
+ - - "~>"
21
18
  - !ruby/object:Gem::Version
22
- version: '4.2'
19
+ version: 4.2.0
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: '3.1'
30
- - - "<"
24
+ - - "~>"
31
25
  - !ruby/object:Gem::Version
32
- version: '4.2'
26
+ version: 4.2.0
33
27
  - !ruby/object:Gem::Dependency
34
28
  name: arel
35
29
  requirement: !ruby/object:Gem::Requirement
@@ -100,6 +94,20 @@ dependencies:
100
94
  - - ">="
101
95
  - !ruby/object:Gem::Version
102
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: shoulda-context
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'
103
111
  - !ruby/object:Gem::Dependency
104
112
  name: minitest-reporters
105
113
  requirement: !ruby/object:Gem::Requirement
@@ -114,6 +122,20 @@ dependencies:
114
122
  - - ">="
115
123
  - !ruby/object:Gem::Version
116
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: timecop
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'
117
139
  description: A gem for describing constraints on data sets
118
140
  email:
119
141
  - bob.lailfamily@gmail.com
@@ -133,6 +155,7 @@ files:
133
155
  - lib/set_builder.rb
134
156
  - lib/set_builder/constraint.rb
135
157
  - lib/set_builder/engine.rb
158
+ - lib/set_builder/errors/trait_not_found.rb
136
159
  - lib/set_builder/modifier.rb
137
160
  - lib/set_builder/modifier/adverb.rb
138
161
  - lib/set_builder/modifier/base.rb
@@ -142,7 +165,6 @@ files:
142
165
  - lib/set_builder/modifiers/date_preposition.rb
143
166
  - lib/set_builder/modifiers/number_preposition.rb
144
167
  - lib/set_builder/modifiers/string_preposition.rb
145
- - lib/set_builder/query_builders/string.rb
146
168
  - lib/set_builder/set.rb
147
169
  - lib/set_builder/trait.rb
148
170
  - lib/set_builder/trait_builder.rb
@@ -173,8 +195,8 @@ files:
173
195
  - spec/unit/array.spec.js
174
196
  - spec/unit/set_builder.spec.js
175
197
  - spec/unit/spec.helper.js
198
+ - test/constraint_test.rb
176
199
  - test/date_preposition_test.rb
177
- - test/inflector_test.rb
178
200
  - test/modifier_test.rb
179
201
  - test/set_test.rb
180
202
  - test/string_preposition_test.rb
@@ -233,8 +255,8 @@ test_files:
233
255
  - spec/unit/array.spec.js
234
256
  - spec/unit/set_builder.spec.js
235
257
  - spec/unit/spec.helper.js
258
+ - test/constraint_test.rb
236
259
  - test/date_preposition_test.rb
237
- - test/inflector_test.rb
238
260
  - test/modifier_test.rb
239
261
  - test/set_test.rb
240
262
  - test/string_preposition_test.rb
File without changes
@@ -1,27 +0,0 @@
1
- require 'test_helper'
2
-
3
- class InflectorTest < ActiveSupport::TestCase
4
-
5
-
6
- test "active" do
7
- assert_equal "who died", SetBuilder::Trait.new('who "died"').to_s
8
- end
9
-
10
- test "perfect" do
11
- assert_equal "who have attended", SetBuilder::Trait.new('who have "attended"').to_s
12
- end
13
-
14
- test "passive" do
15
- assert_equal "who were born", SetBuilder::Trait.new('who were "born"').to_s
16
- end
17
-
18
- test "reflexive" do
19
- assert_equal "who are awesome", SetBuilder::Trait.new('who are "awesome"').to_s
20
- end
21
-
22
- test "noun" do
23
- assert_equal "whose name", SetBuilder::Trait.new('whose "name"').to_s
24
- end
25
-
26
-
27
- end