datastax_rails 1.2.3 → 2.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.rdoc +20 -8
  4. data/config/schema.xml.erb +22 -19
  5. data/config/solrconfig.xml.erb +1 -1
  6. data/lib/cql-rb_extensions.rb +27 -0
  7. data/lib/datastax_rails.rb +13 -17
  8. data/lib/datastax_rails/associations/association.rb +1 -4
  9. data/lib/datastax_rails/associations/collection_proxy.rb +0 -13
  10. data/lib/datastax_rails/attribute_assignment.rb +28 -91
  11. data/lib/datastax_rails/attribute_methods.rb +109 -44
  12. data/lib/datastax_rails/attribute_methods/before_type_cast.rb +71 -0
  13. data/lib/datastax_rails/attribute_methods/dirty.rb +52 -11
  14. data/lib/datastax_rails/attribute_methods/primary_key.rb +87 -0
  15. data/lib/datastax_rails/attribute_methods/read.rb +120 -0
  16. data/lib/datastax_rails/attribute_methods/typecasting.rb +52 -21
  17. data/lib/datastax_rails/attribute_methods/write.rb +59 -0
  18. data/lib/datastax_rails/base.rb +227 -236
  19. data/lib/datastax_rails/cassandra_only_model.rb +25 -19
  20. data/lib/datastax_rails/column.rb +384 -0
  21. data/lib/datastax_rails/connection.rb +12 -13
  22. data/lib/datastax_rails/cql/alter_column_family.rb +0 -1
  23. data/lib/datastax_rails/cql/base.rb +15 -3
  24. data/lib/datastax_rails/cql/column_family.rb +2 -2
  25. data/lib/datastax_rails/cql/create_column_family.rb +7 -18
  26. data/lib/datastax_rails/cql/delete.rb +4 -9
  27. data/lib/datastax_rails/cql/insert.rb +2 -8
  28. data/lib/datastax_rails/cql/select.rb +4 -4
  29. data/lib/datastax_rails/cql/update.rb +8 -17
  30. data/lib/datastax_rails/dynamic_model.rb +98 -0
  31. data/lib/datastax_rails/payload_model.rb +19 -31
  32. data/lib/datastax_rails/persistence.rb +39 -54
  33. data/lib/datastax_rails/railtie.rb +1 -0
  34. data/lib/datastax_rails/reflection.rb +1 -1
  35. data/lib/datastax_rails/relation.rb +20 -20
  36. data/lib/datastax_rails/relation/batches.rb +18 -16
  37. data/lib/datastax_rails/relation/facet_methods.rb +1 -1
  38. data/lib/datastax_rails/relation/finder_methods.rb +6 -10
  39. data/lib/datastax_rails/relation/search_methods.rb +62 -48
  40. data/lib/datastax_rails/rsolr_client_wrapper.rb +1 -1
  41. data/lib/datastax_rails/schema/cassandra.rb +34 -62
  42. data/lib/datastax_rails/schema/migrator.rb +9 -24
  43. data/lib/datastax_rails/schema/solr.rb +13 -30
  44. data/lib/datastax_rails/schema_cache.rb +67 -0
  45. data/lib/datastax_rails/timestamps.rb +84 -11
  46. data/lib/datastax_rails/types/dirty_collection.rb +88 -0
  47. data/lib/datastax_rails/types/dynamic_list.rb +14 -0
  48. data/lib/datastax_rails/types/dynamic_map.rb +32 -0
  49. data/lib/datastax_rails/types/dynamic_set.rb +10 -0
  50. data/lib/datastax_rails/util/solr_repair.rb +4 -5
  51. data/lib/datastax_rails/validations.rb +6 -12
  52. data/lib/datastax_rails/validations/uniqueness.rb +0 -4
  53. data/lib/datastax_rails/version.rb +1 -1
  54. data/lib/datastax_rails/wide_storage_model.rb +13 -29
  55. data/lib/schema_migration.rb +4 -0
  56. data/spec/datastax_rails/associations_spec.rb +0 -1
  57. data/spec/datastax_rails/attribute_methods_spec.rb +9 -6
  58. data/spec/datastax_rails/base_spec.rb +26 -0
  59. data/spec/datastax_rails/column_spec.rb +238 -0
  60. data/spec/datastax_rails/cql/select_spec.rb +1 -1
  61. data/spec/datastax_rails/cql/update_spec.rb +2 -2
  62. data/spec/datastax_rails/persistence_spec.rb +29 -15
  63. data/spec/datastax_rails/relation/batches_spec.rb +5 -5
  64. data/spec/datastax_rails/relation/finder_methods_spec.rb +0 -20
  65. data/spec/datastax_rails/relation/search_methods_spec.rb +8 -0
  66. data/spec/datastax_rails/relation_spec.rb +7 -0
  67. data/spec/datastax_rails/schema/migrator_spec.rb +5 -10
  68. data/spec/datastax_rails/schema/solr_spec.rb +1 -1
  69. data/spec/datastax_rails/types/dynamic_list_spec.rb +20 -0
  70. data/spec/datastax_rails/types/dynamic_map_spec.rb +22 -0
  71. data/spec/datastax_rails/types/dynamic_set_spec.rb +16 -0
  72. data/spec/dummy/config/application.rb +2 -1
  73. data/spec/dummy/config/datastax.yml +6 -3
  74. data/spec/dummy/config/environments/development.rb +4 -5
  75. data/spec/dummy/config/environments/test.rb +0 -5
  76. data/spec/dummy/log/development.log +18 -0
  77. data/spec/dummy/log/test.log +36 -0
  78. data/spec/feature/dynamic_fields_spec.rb +9 -0
  79. data/spec/feature/overloaded_tables_spec.rb +24 -0
  80. data/spec/spec_helper.rb +1 -1
  81. data/spec/support/default_consistency_shared_examples.rb +2 -2
  82. data/spec/support/models.rb +28 -14
  83. metadata +212 -188
  84. data/lib/datastax_rails/identity.rb +0 -64
  85. data/lib/datastax_rails/identity/abstract_key_factory.rb +0 -29
  86. data/lib/datastax_rails/identity/custom_key_factory.rb +0 -37
  87. data/lib/datastax_rails/identity/hashed_natural_key_factory.rb +0 -10
  88. data/lib/datastax_rails/identity/natural_key_factory.rb +0 -39
  89. data/lib/datastax_rails/identity/uuid_key_factory.rb +0 -27
  90. data/lib/datastax_rails/type.rb +0 -16
  91. data/lib/datastax_rails/types.rb +0 -9
  92. data/lib/datastax_rails/types/array_type.rb +0 -86
  93. data/lib/datastax_rails/types/base_type.rb +0 -42
  94. data/lib/datastax_rails/types/binary_type.rb +0 -19
  95. data/lib/datastax_rails/types/boolean_type.rb +0 -22
  96. data/lib/datastax_rails/types/date_type.rb +0 -23
  97. data/lib/datastax_rails/types/float_type.rb +0 -18
  98. data/lib/datastax_rails/types/integer_type.rb +0 -18
  99. data/lib/datastax_rails/types/string_type.rb +0 -16
  100. data/lib/datastax_rails/types/text_type.rb +0 -15
  101. data/lib/datastax_rails/types/time_type.rb +0 -23
  102. data/spec/datastax_rails/types/float_type_spec.rb +0 -31
  103. data/spec/datastax_rails/types/integer_type_spec.rb +0 -31
  104. data/spec/datastax_rails/types/time_type_spec.rb +0 -28
@@ -1,18 +0,0 @@
1
- module DatastaxRails
2
- module Types
3
- class FloatType < BaseType
4
- DEFAULTS = {:solr_type => 'float', :indexed => :solr, :stored => true, :multi_valued => false, :sortable => true, :tokenized => false, :fulltext => false, :cassandra_type => 'float'}
5
- REGEX = /\A[-+]?(\d+(\.\d+)?|\.\d+)\Z/
6
- def encode(float)
7
- return "-10191980.0" if float.blank?
8
- raise ArgumentError.new("#{self} requires a Float. You passed #{float.to_s}") unless float.kind_of?(Float) || (float.kind_of?(String) && float.match(REGEX)) || float.kind_of?(Fixnum)
9
- float.to_f.to_s
10
- end
11
-
12
- def decode(float)
13
- return nil if float.blank? || float.to_s == '-10191980.0'
14
- float.to_f
15
- end
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- module DatastaxRails
2
- module Types
3
- class IntegerType < BaseType
4
- DEFAULTS = {:solr_type => 'int', :indexed => :solr, :stored => true, :multi_valued => false, :sortable => true, :tokenized => false, :fulltext => false, :cassandra_type => 'int'}
5
- REGEX = /\A[-+]?\d+\Z/
6
- def encode(int)
7
- return "-10191980" if int.blank?
8
- raise ArgumentError.new("#{self} requires an Integer. You passed #{int.to_s}") unless int.kind_of?(Integer) || (int.kind_of?(String) && int.match(REGEX))
9
- int.to_i.to_s
10
- end
11
-
12
- def decode(int)
13
- return nil if int.blank? || int.to_i == -10191980
14
- int.to_i
15
- end
16
- end
17
- end
18
- end
@@ -1,16 +0,0 @@
1
- module DatastaxRails
2
- module Types
3
- class StringType < BaseType
4
- DEFAULTS = {:solr_type => 'string', :indexed => :solr, :stored => true, :multi_valued => false, :sortable => true, :tokenized => false, :fulltext => true, :cassandra_type => 'text'}
5
- def encode(str)
6
- str = "" unless str
7
- str.to_s
8
- end
9
-
10
- def wrap(record, name, value)
11
- txt = (value.frozen? ? value.to_s.dup : value)
12
- txt.respond_to?(:force_encoding) ? txt.force_encoding('UTF-8') : txt
13
- end
14
- end
15
- end
16
- end
@@ -1,15 +0,0 @@
1
- module DatastaxRails
2
- module Types
3
- class TextType < BaseType
4
- DEFAULTS = {:solr_type => 'text', :indexed => :solr, :stored => true, :multi_valued => false, :sortable => false, :tokenized => true, :fulltext => true, :cassandra_type => 'text'}
5
- def encode(str)
6
- str.to_s.dup
7
- end
8
-
9
- def wrap(record, name, value)
10
- txt = (value.frozen? ? value.dup : value)
11
- txt.respond_to?(:force_encoding) ? txt.force_encoding('UTF-8') : txt
12
- end
13
- end
14
- end
15
- end
@@ -1,23 +0,0 @@
1
- module DatastaxRails
2
- module Types
3
- class TimeType < BaseType
4
- DEFAULTS = {:solr_type => 'date', :indexed => :solr, :stored => true, :multi_valued => false, :sortable => true, :tokenized => false, :fulltext => false, :cassandra_type => 'timestamp'}
5
- FORMAT = "%Y-%m-%dT%H:%M:%SZ"
6
-
7
- def encode(time)
8
- return unless time
9
- raise ArgumentError.new("#{self} requires a Time") unless time.kind_of?(Time)
10
- time.utc.strftime(FORMAT)
11
- end
12
-
13
- def decode(str)
14
- return str if str.kind_of?(Time)
15
- Time.zone.parse(str) rescue nil
16
- end
17
-
18
- def full_solr_range
19
- '[* TO *]'
20
- end
21
- end
22
- end
23
- end
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe DatastaxRails::Types::FloatType do
4
- before(:each) do
5
- @coder = DatastaxRails::Types::FloatType.new
6
- end
7
-
8
- describe "#encode" do
9
- it "should store decimals as strings" do
10
- @coder.encode(12.0).should eq("12.0")
11
- end
12
-
13
- it "should raise an exception on improperly formatted strings" do
14
- lambda { @coder.encode("foo") }.should raise_exception(ArgumentError)
15
- end
16
-
17
- it "should store a sentinel value for nils" do
18
- @coder.encode(nil).should eq('-10191980.0')
19
- end
20
- end
21
-
22
- describe "#decode" do
23
- it "should return floats" do
24
- @coder.decode("12.0").should be_within(0.1).of(12.0)
25
- end
26
-
27
- it "should return nil if the sentinel value is found" do
28
- @coder.decode("-10191980.0").should be_nil
29
- end
30
- end
31
- end
@@ -1,31 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe DatastaxRails::Types::IntegerType do
4
- before(:each) do
5
- @coder = DatastaxRails::Types::IntegerType.new
6
- end
7
-
8
- describe "#encode" do
9
- it "should store integers as strings" do
10
- @coder.encode(12).should eq("12")
11
- end
12
-
13
- it "should raise an exception on improperly formatted strings" do
14
- lambda { @coder.encode("foo") }.should raise_exception(ArgumentError)
15
- end
16
-
17
- it "should store a sentinel value for nils" do
18
- @coder.encode(nil).should eq("-10191980")
19
- end
20
- end
21
-
22
- describe "#decode" do
23
- it "should return integers" do
24
- @coder.decode("12").should eq(12)
25
- end
26
-
27
- it "should return nil if the sentinel value is found" do
28
- @coder.decode("-10191980").should be_nil
29
- end
30
- end
31
- end
@@ -1,28 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe DatastaxRails::Types::TimeType do
4
- let(:coder) { DatastaxRails::Types::TimeType.new }
5
- let(:utc_time) { Time.utc(2013, 12, 11, 10, 9, 8) }
6
-
7
- describe "#encode" do
8
- let(:local_time) { Time.new(2011, 10, 9, 8, 7, 6, "-05:00") }
9
-
10
- it { expect(coder.encode(nil)).to be_nil }
11
- it { expect{coder.encode("bad time")}.to raise_error(ArgumentError) }
12
- it { expect(coder.encode(utc_time)).to eq "2013-12-11T10:09:08Z" }
13
- it { expect(coder.encode(local_time)).to eq "2011-10-09T13:07:06Z" }
14
- end
15
-
16
- describe "#decode" do
17
- let(:time) { "2013-12-11T10:09:08Z" }
18
-
19
- it { expect(coder.decode(time)).to eq utc_time }
20
- it { expect(coder.decode(utc_time)).to eq utc_time }
21
-
22
- context "when timezone is not UTC" do
23
- before(:each) { Time.zone = "Eastern Time (US & Canada)" }
24
-
25
- it { expect(coder.decode(time)).to eq Time.new(2013, 12, 11, 5, 9, 8, '-05:00') }
26
- end
27
- end
28
- end