sunstone 0.1.0 → 1.0.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 +4 -4
- data/lib/active_record/connection_adapters/sunstone/column.rb +19 -0
- data/lib/active_record/connection_adapters/sunstone/database_statements.rb +40 -0
- data/lib/active_record/connection_adapters/sunstone/schema_statements.rb +95 -0
- data/lib/active_record/connection_adapters/sunstone/type/date_time.rb +22 -0
- data/lib/active_record/connection_adapters/sunstone_adapter.rb +177 -0
- data/lib/arel/collectors/sunstone.rb +75 -0
- data/lib/arel/visitors/sunstone.rb +769 -0
- data/lib/ext/active_record/associations/builder/has_and_belongs_to_many.rb +48 -0
- data/lib/ext/active_record/relation.rb +26 -0
- data/lib/ext/active_record/statement_cache.rb +24 -0
- data/lib/sunstone.rb +37 -347
- data/lib/sunstone/connection.rb +337 -0
- data/sunstone.gemspec +3 -2
- data/test/sunstone/connection_test.rb +319 -0
- data/test/sunstone/parser_test.rb +21 -21
- metadata +30 -36
- data/lib/sunstone/model.rb +0 -23
- data/lib/sunstone/model/attributes.rb +0 -99
- data/lib/sunstone/model/persistence.rb +0 -168
- data/lib/sunstone/schema.rb +0 -38
- data/lib/sunstone/type/boolean.rb +0 -19
- data/lib/sunstone/type/date_time.rb +0 -20
- data/lib/sunstone/type/decimal.rb +0 -19
- data/lib/sunstone/type/integer.rb +0 -17
- data/lib/sunstone/type/mutable.rb +0 -16
- data/lib/sunstone/type/string.rb +0 -18
- data/lib/sunstone/type/value.rb +0 -97
- data/test/sunstone/model/associations_test.rb +0 -55
- data/test/sunstone/model/attributes_test.rb +0 -60
- data/test/sunstone/model/persistence_test.rb +0 -173
- data/test/sunstone/model_test.rb +0 -11
- data/test/sunstone/schema_test.rb +0 -25
- data/test/sunstone/type/boolean_test.rb +0 -24
- data/test/sunstone/type/date_time_test.rb +0 -31
- data/test/sunstone/type/decimal_test.rb +0 -27
- data/test/sunstone/type/integer_test.rb +0 -29
- data/test/sunstone/type/string_test.rb +0 -54
- data/test/sunstone/type/value_test.rb +0 -27
data/test/sunstone/model_test.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Sunstone::SchemaTest < Minitest::Test
|
4
|
-
|
5
|
-
test "type methods" do
|
6
|
-
schema = Sunstone::Schema.new
|
7
|
-
|
8
|
-
schema.boolean(:boolean)
|
9
|
-
schema.datetime(:datetime)
|
10
|
-
schema.decimal(:decimal)
|
11
|
-
schema.integer(:integer)
|
12
|
-
schema.string(:string)
|
13
|
-
|
14
|
-
{
|
15
|
-
:boolean => Sunstone::Type::Boolean,
|
16
|
-
:datetime => Sunstone::Type::DateTime,
|
17
|
-
:decimal => Sunstone::Type::Decimal,
|
18
|
-
:integer => Sunstone::Type::Integer,
|
19
|
-
:string => Sunstone::Type::String
|
20
|
-
}.each do |name, klass|
|
21
|
-
assert_kind_of klass, schema[name]
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Sunstone::Type::BooleanTest < Minitest::Test
|
4
|
-
|
5
|
-
test "type casting" do
|
6
|
-
type = Sunstone::Type::Boolean.new
|
7
|
-
|
8
|
-
assert_equal true, type.type_cast_from_user(true)
|
9
|
-
assert_equal true, type.type_cast_from_user('true')
|
10
|
-
assert_equal true, type.type_cast_from_user('TRUE')
|
11
|
-
|
12
|
-
assert_equal false, type.type_cast_from_user(false)
|
13
|
-
assert_equal false, type.type_cast_from_user('false')
|
14
|
-
assert_equal false, type.type_cast_from_user('FALSE')
|
15
|
-
end
|
16
|
-
|
17
|
-
test "#type_cast_for_json" do
|
18
|
-
type = Sunstone::Type::Boolean.new
|
19
|
-
|
20
|
-
assert_equal true, type.type_cast_for_json(true)
|
21
|
-
assert_equal false, type.type_cast_for_json(false)
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Sunstone::Type::DateTimeTest < Minitest::Test
|
4
|
-
|
5
|
-
test "#type_cast_from_user" do
|
6
|
-
type = Sunstone::Type::DateTime.new
|
7
|
-
|
8
|
-
assert_equal DateTime.new(2001, 2, 3, 4, 5, 6, '+7'), type.type_cast_from_user('2001-02-03T04:05:06+07:00')
|
9
|
-
assert_equal DateTime.new(2001, 2, 3, 4, 5, 6, '+7'), type.type_cast_from_user('20010203T040506+0700')
|
10
|
-
assert_equal DateTime.new(2001, 2, 3, 4, 5, 6, '+7'), type.type_cast_from_user('2001-W05-6T04:05:06+07:00')
|
11
|
-
assert_equal DateTime.new(2014, 7, 14, 16, 44, 15, '-7'), type.type_cast_from_user("2014-07-14T16:44:15-07:00")
|
12
|
-
assert_equal Rational(123,1000), type.type_cast_from_user('2001-02-03T04:05:06.123+07:00').sec_fraction
|
13
|
-
end
|
14
|
-
|
15
|
-
test "#type_cast_from_json" do
|
16
|
-
type = Sunstone::Type::DateTime.new
|
17
|
-
|
18
|
-
assert_equal DateTime.new(2001, 2, 3, 4, 5, 6, '+7'), type.type_cast_from_json('2001-02-03T04:05:06+07:00')
|
19
|
-
assert_equal DateTime.new(2001, 2, 3, 4, 5, 6, '+7'), type.type_cast_from_json('20010203T040506+0700')
|
20
|
-
assert_equal DateTime.new(2001, 2, 3, 4, 5, 6, '+7'), type.type_cast_from_json('2001-W05-6T04:05:06+07:00')
|
21
|
-
assert_equal DateTime.new(2014, 7, 14, 16, 44, 15, '-7'), type.type_cast_from_json("2014-07-14T16:44:15-07:00")
|
22
|
-
assert_equal Rational(123,1000), type.type_cast_from_json('2001-02-03T04:05:06.123+07:00').sec_fraction
|
23
|
-
end
|
24
|
-
|
25
|
-
test "#type_cast_for_json" do
|
26
|
-
type = Sunstone::Type::DateTime.new
|
27
|
-
|
28
|
-
assert_equal '2001-02-03T04:05:06.000+07:00', type.type_cast_for_json(DateTime.new(2001, 2, 3, 4, 5, 6, '+7'))
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Sunstone::Type::DecimalTest < Minitest::Test
|
4
|
-
|
5
|
-
test "#type_cast_from_user" do
|
6
|
-
type = Sunstone::Type::Decimal.new
|
7
|
-
|
8
|
-
assert_equal BigDecimal.new("10.50"), type.type_cast_from_user(BigDecimal.new("10.50"))
|
9
|
-
assert_equal BigDecimal.new("10.50"), type.type_cast_from_user(10.50)
|
10
|
-
assert_equal BigDecimal.new("10.50"), type.type_cast_from_user("10.50")
|
11
|
-
end
|
12
|
-
|
13
|
-
test "#type_cast_from_json" do
|
14
|
-
type = Sunstone::Type::Decimal.new
|
15
|
-
|
16
|
-
assert_equal BigDecimal.new("10.50"), type.type_cast_from_json(BigDecimal.new("10.50"))
|
17
|
-
assert_equal BigDecimal.new("10.50"), type.type_cast_from_json(10.50)
|
18
|
-
assert_equal BigDecimal.new("10.50"), type.type_cast_from_json("10.50")
|
19
|
-
end
|
20
|
-
|
21
|
-
test "#type_cast_for_json" do
|
22
|
-
type = Sunstone::Type::Decimal.new
|
23
|
-
|
24
|
-
assert_equal BigDecimal.new("10.50"), type.type_cast_for_json(BigDecimal.new("10.50"))
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Sunstone::Type::IntegerTest < Minitest::Test
|
4
|
-
|
5
|
-
test "#type_cast_from_user" do
|
6
|
-
type = Sunstone::Type::Integer.new
|
7
|
-
|
8
|
-
assert_equal 10, type.type_cast_from_user(10)
|
9
|
-
assert_equal 10, type.type_cast_from_user("10")
|
10
|
-
assert_equal 1, type.type_cast_from_user(true)
|
11
|
-
assert_equal 0, type.type_cast_from_user(false)
|
12
|
-
end
|
13
|
-
|
14
|
-
test "#type_cast_from_json" do
|
15
|
-
type = Sunstone::Type::Integer.new
|
16
|
-
|
17
|
-
assert_equal 10, type.type_cast_from_json(10)
|
18
|
-
assert_equal 10, type.type_cast_from_json("10")
|
19
|
-
assert_equal 1, type.type_cast_from_json(true)
|
20
|
-
assert_equal 0, type.type_cast_from_json(false)
|
21
|
-
end
|
22
|
-
|
23
|
-
test "#type_cast_for_json" do
|
24
|
-
type = Sunstone::Type::Integer.new
|
25
|
-
|
26
|
-
assert_equal 10, type.type_cast_for_json(10)
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Sunstone::Type::StringTest < Minitest::Test
|
4
|
-
|
5
|
-
test "#type_cast_from_user" do
|
6
|
-
type = Sunstone::Type::String.new
|
7
|
-
|
8
|
-
assert_equal "1", type.type_cast_from_user(true)
|
9
|
-
assert_equal "0", type.type_cast_from_user(false)
|
10
|
-
assert_equal "123", type.type_cast_from_user(123)
|
11
|
-
assert_equal "string", type.type_cast_from_user("string")
|
12
|
-
end
|
13
|
-
|
14
|
-
test "#type_cast_from_json" do
|
15
|
-
type = Sunstone::Type::String.new
|
16
|
-
|
17
|
-
assert_equal "1", type.type_cast_from_json(true)
|
18
|
-
assert_equal "0", type.type_cast_from_json(false)
|
19
|
-
assert_equal "123", type.type_cast_from_json(123)
|
20
|
-
assert_equal "string", type.type_cast_from_json("string")
|
21
|
-
end
|
22
|
-
|
23
|
-
test "#type_cast_for_json" do
|
24
|
-
type = Sunstone::Type::String.new
|
25
|
-
|
26
|
-
assert_equal "10", type.type_cast_for_json("10")
|
27
|
-
end
|
28
|
-
|
29
|
-
test "values are duped coming out" do
|
30
|
-
s = "foo"
|
31
|
-
type = Sunstone::Type::String.new
|
32
|
-
|
33
|
-
assert_not_same s, type.type_cast_from_user(s)
|
34
|
-
assert_not_same s, type.type_cast_from_json(s)
|
35
|
-
end
|
36
|
-
|
37
|
-
test "string mutations are detected" # do
|
38
|
-
# klass = Class.new(Model)
|
39
|
-
# klass.table_name = 'authors'
|
40
|
-
#
|
41
|
-
# author = klass.create!(name: 'Sean')
|
42
|
-
# assert_not author.changed?
|
43
|
-
#
|
44
|
-
# author.name << ' Griffin'
|
45
|
-
# assert author.name_changed?
|
46
|
-
#
|
47
|
-
# author.save!
|
48
|
-
# author.reload
|
49
|
-
#
|
50
|
-
# assert_equal 'Sean Griffin', author.name
|
51
|
-
# assert_not author.changed?
|
52
|
-
# end
|
53
|
-
|
54
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class Sunstone::Type::ValueTest < Minitest::Test
|
4
|
-
|
5
|
-
test "#readonly?" do
|
6
|
-
type = Sunstone::Type::Value.new(:readonly => true)
|
7
|
-
assert_equal true, type.readonly?
|
8
|
-
end
|
9
|
-
|
10
|
-
test "array support" do
|
11
|
-
type = Sunstone::Type::Value.new(:array => true)
|
12
|
-
|
13
|
-
type.expects(:_type_cast).with(1).returns(1).twice
|
14
|
-
type.expects(:_type_cast).with('2').returns('2').twice
|
15
|
-
type.expects(:_type_cast).with(:a).returns(:a).twice
|
16
|
-
|
17
|
-
assert_equal([1, '2', :a], type.type_cast_from_user([1, '2', :a]))
|
18
|
-
assert_equal([1, '2', :a], type.type_cast_from_json([1, '2', :a]))
|
19
|
-
end
|
20
|
-
|
21
|
-
test "#type_cast_for_json" do
|
22
|
-
type = Sunstone::Type::Value.new(:array => true)
|
23
|
-
|
24
|
-
assert_equal [1, '2', :a], type.type_cast_for_json([1, '2', :a])
|
25
|
-
end
|
26
|
-
|
27
|
-
end
|