datastax_rails 1.2.3 → 2.0.3

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 (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