datastax_rails 1.0.15 → 1.0.16.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.
@@ -108,26 +108,53 @@ module DatastaxRails
108
108
 
109
109
  solr_url = "#{DatastaxRails::Base.solr_base_url}/resource/#{DatastaxRails::Base.config[:keyspace]}.#{model.column_family}"
110
110
  uri = URI.parse(solr_url)
111
- Net::HTTP.start(uri.host, uri.port) do |http|
112
- http.read_timeout(300)
113
- if force || solrconfig_digest != sm_digests['solrconfig']
111
+ http = Net::HTTP.new(uri.host, uri.port)
112
+ if uri.scheme == 'https'
113
+ http.use_ssl = true
114
+ http.cert = OpenSSL::X509::Certificate.new(Rails.root.join("config","pow.crt").read)
115
+ http.key = OpenSSL::PKey::RSA.new(Rails.root.join("config","pow.key").read)
116
+ http.ca_path = Rails.root.join("config","sade_ca.crt").to_s
117
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
118
+ end
119
+ http.read_timeout = 300
120
+ if force || solrconfig_digest != sm_digests['solrconfig']
121
+ loop do
114
122
  puts "Posting Solr Config file to '#{solr_url}/solrconfig.xml'"
115
123
  http.post(uri.path+"/solrconfig.xml", solrconfig)
116
- sleep(5) if Rails.env.production?
117
- DatastaxRails::Cql::Update.new(SchemaMigration, model.column_family).columns(:solrconfig => solrconfig_digest).execute
124
+ if Rails.env.production?
125
+ sleep(5)
126
+ resp = http.get(uri.path+"/solrconfig.xml")
127
+ continue unless resp.message == 'OK'
128
+ end
129
+ break
118
130
  end
119
- if force || stopwords_digest != sm_digests['stopwords']
131
+ DatastaxRails::Cql::Update.new(SchemaMigration, model.column_family).columns(:solrconfig => solrconfig_digest).execute
132
+ end
133
+ if force || stopwords_digest != sm_digests['stopwords']
134
+ loop do
120
135
  puts "Posting Solr Stopwords file to '#{solr_url}/stopwords.txt'"
121
136
  http.post(uri.path+"/stopwords.txt", stopwords)
122
- sleep(5) if Rails.env.production?
123
- DatastaxRails::Cql::Update.new(SchemaMigration, model.column_family).columns(:stopwords => stopwords_digest).execute
137
+ if Rails.env.production?
138
+ sleep(5)
139
+ resp = http.get(uri.path+"/stopwords.txt")
140
+ continue unless resp.message == 'OK'
141
+ end
142
+ break
124
143
  end
125
- if force || schema_digest != sm_digests['digest']
144
+ DatastaxRails::Cql::Update.new(SchemaMigration, model.column_family).columns(:stopwords => stopwords_digest).execute
145
+ end
146
+ if force || schema_digest != sm_digests['digest']
147
+ loop do
126
148
  puts "Posting Solr Schema file to '#{solr_url}/schema.xml'"
127
149
  http.post(uri.path+"/schema.xml", schema)
128
- sleep(5) if Rails.env.production?
129
- DatastaxRails::Cql::Update.new(SchemaMigration, model.column_family).columns(:digest => schema_digest).execute
150
+ if Rails.env.production?
151
+ sleep(5)
152
+ resp = http.get(uri.path+"/schema.xml")
153
+ continue unless resp.message == 'OK'
154
+ end
155
+ break
130
156
  end
157
+ DatastaxRails::Cql::Update.new(SchemaMigration, model.column_family).columns(:digest => schema_digest).execute
131
158
  end
132
159
  end
133
160
  end
@@ -8,7 +8,7 @@ module DatastaxRails
8
8
 
9
9
  def create(name, options = {})
10
10
  opts = { :name => name.to_s,
11
- :strategy_class => 'org.apache.cassandra.locator.NetworkTopologyStrategy'}.merge(options)
11
+ :strategy_class => 'org.apache.cassandra.locator.NetworkTopologyStrategy'}.with_indifferent_access.merge(options)
12
12
 
13
13
  if(exists?(name.to_s))
14
14
  puts "Keyspace #{name.to_s} already exists"
@@ -5,6 +5,7 @@ module DatastaxRails
5
5
  def encode(str)
6
6
  raise ArgumentError.new("#{self} requires a String") unless str.kind_of?(String)
7
7
  io = StringIO.new(Base64.encode64(str))
8
+ #io = StringIO.new(str)
8
9
  chunks = []
9
10
  while chunk = io.read(1.megabyte)
10
11
  chunks << chunk
@@ -20,6 +21,7 @@ module DatastaxRails
20
21
  end
21
22
  io.rewind
22
23
  Base64.decode64(io.read)
24
+ #io.read
23
25
  else
24
26
  arr
25
27
  end
@@ -5,6 +5,7 @@ module DatastaxRails
5
5
  FORMAT = '%Y-%m-%dT%H:%M:%SZ'
6
6
 
7
7
  def encode(value)
8
+ return unless value
8
9
  raise ArgumentError.new("#{self} requires a Date") unless value.kind_of?(Date) || value.kind_of?(Time)
9
10
  value.to_date.strftime(FORMAT)
10
11
  end
@@ -4,8 +4,7 @@ module DatastaxRails
4
4
  DEFAULTS = {:solr_type => 'string', :indexed => true, :stored => true, :multi_valued => false, :sortable => true, :tokenized => false, :fulltext => true}
5
5
  def encode(str)
6
6
  str = "" unless str
7
- raise ArgumentError.new("#{self} requires a String") unless str.kind_of?(String)
8
- str.dup
7
+ str.to_s
9
8
  end
10
9
 
11
10
  def wrap(record, name, value)
@@ -5,6 +5,7 @@ module DatastaxRails
5
5
  FORMAT = "%Y-%m-%dT%H:%M:%SZ"
6
6
 
7
7
  def encode(time)
8
+ return unless time
8
9
  raise ArgumentError.new("#{self} requires a Time") unless time.kind_of?(Time)
9
10
  time.strftime(FORMAT)
10
11
  end
@@ -1,4 +1,4 @@
1
1
  module DatastaxRails
2
2
  # The current version of the gem
3
- VERSION = "1.0.15"
3
+ VERSION = "1.0.16.3"
4
4
  end
@@ -1,5 +1,5 @@
1
1
  require 'active_support/all'
2
- require 'cassandra-cql/1.0'
2
+ require 'cassandra-cql/1.1'
3
3
  require 'blankslate'
4
4
  require 'schema_migration'
5
5
 
@@ -79,12 +79,24 @@ describe DatastaxRails::Relation do
79
79
  @relation.where(:complexity).greater_than(1.0).should_not be_empty
80
80
  end
81
81
 
82
+ it "should allow :greater_than to be specified in a single call" do
83
+ Hobby.create(:name => 'Swimming', :complexity => 1.1)
84
+ @relation.commit_solr
85
+ @relation.where(:complexity => {:greater_than => 1.0}).should_not be_empty
86
+ end
87
+
82
88
  it "should return documents where a value is less than the given value" do
83
89
  Hobby.create(:name => 'Swimming', :complexity => 1.1)
84
90
  @relation.commit_solr
85
91
  @relation.where(:complexity).less_than(2.0).should_not be_empty
86
92
  end
87
93
 
94
+ it "should allow :less_than to be specified in a single call" do
95
+ Hobby.create(:name => 'Swimming', :complexity => 1.1)
96
+ @relation.commit_solr
97
+ @relation.where(:complexity => {:less_than => 2.0}).should_not be_empty
98
+ end
99
+
88
100
  it "should allow arrays to be passed as OR queries" do
89
101
  %w[fishing hiking boating jogging swimming chess].each do |word|
90
102
  Hobby.create(:name => word)
@@ -114,7 +126,7 @@ describe DatastaxRails::Relation do
114
126
  end
115
127
 
116
128
  it "should search for values within a range" do
117
- Hobby.create(:name => 'jobbing', :complexity => 1.2)
129
+ Hobby.create(:name => 'jogging', :complexity => 1.2)
118
130
  @relation.commit_solr
119
131
  @relation.where(:complexity => 1..2).should_not be_empty
120
132
  @relation.where(:complexity => 2..3).should be_empty
@@ -134,6 +146,37 @@ describe DatastaxRails::Relation do
134
146
  @relation.commit_solr
135
147
  @relation.where_not(:name => ['Swimming','Biking']).should be_empty
136
148
  end
149
+
150
+ it "should return documents where a value is not greater than the given value" do
151
+ Hobby.create(:name => 'Swimming', :complexity => 1.1)
152
+ @relation.commit_solr
153
+ @relation.where_not(:complexity).greater_than(2.0).should_not be_empty
154
+ end
155
+
156
+ it "should allow :greater_than to be specified in a single call" do
157
+ Hobby.create(:name => 'Swimming', :complexity => 1.1)
158
+ @relation.commit_solr
159
+ @relation.where_not(:complexity => {:greater_than => 2.0}).should_not be_empty
160
+ end
161
+
162
+ it "should return documents where a value is not less than the given value" do
163
+ Hobby.create(:name => 'Swimming', :complexity => 1.1)
164
+ @relation.commit_solr
165
+ @relation.where_not(:complexity).less_than(1.0).should_not be_empty
166
+ end
167
+
168
+ it "should allow :less_than to be specified in a single call" do
169
+ Hobby.create(:name => 'Swimming', :complexity => 1.1)
170
+ @relation.commit_solr
171
+ @relation.where_not(:complexity => {:less_than => 1.0}).should_not be_empty
172
+ end
173
+
174
+ it "should search for values outside a range" do
175
+ Hobby.create(:name => 'jogging', :complexity => 1.2)
176
+ @relation.commit_solr
177
+ @relation.where_not(:complexity => 1..2).should be_empty
178
+ @relation.where_not(:complexity => 2..3).should_not be_empty
179
+ end
137
180
  end
138
181
 
139
182
  describe "#fulltext" do
@@ -13,9 +13,9 @@ describe DatastaxRails::Base do
13
13
  end
14
14
 
15
15
  it "should allow an update to a model without triggering a uniqueness error" do
16
- p=Person.create!(:name => "Jason", :birthdate => Date.parse("10/19/1985"))
16
+ p=Person.create!(:name => "Jason", :birthdate => Date.strptime("10/19/1985", '%m/%d/%Y'))
17
17
  Person.commit_solr
18
- p.birthdate = Date.parse("10/19/1980")
18
+ p.birthdate = Date.strptime("10/19/1980", '%m/%d/%Y')
19
19
  p.save!
20
20
  end
21
21
 
@@ -1,22 +1,29 @@
1
- development:
2
- servers: ["localhost:9160"]
3
- keyspace: "datastax_rails_development"
4
- strategy_class: "org.apache.cassandra.locator.SimpleStrategy"
5
- strategy_options: {"DC1": "1"}
6
- connection_options:
7
- timeout: 10
8
- solr:
9
- port: 8983
10
- path: /solr
11
-
12
- test:
13
- servers: ["localhost:9160"]
14
- keyspace: "datastax_rails_test"
15
- strategy_class: "org.apache.cassandra.locator.SimpleStrategy"
16
- strategy_options: {"DC1": "1"}
17
- connection_options:
18
- timeout: 10
19
- solr:
20
- port: 8983
21
- path: /solr
22
-
1
+ development:
2
+ servers: ["127.0.0.1:9160"]
3
+ keyspace: "datastax_rails_development"
4
+ strategy_class: "org.apache.cassandra.locator.SimpleStrategy"
5
+ strategy_options: {"replication_factor": "1"}
6
+ connection_options:
7
+ timeout: 10
8
+ solr:
9
+ port: 8984
10
+ path: /solr
11
+ ssl:
12
+ use_ssl: true
13
+ cert: config/datastax_rails.crt
14
+ key: config/datastax_rails.key
15
+
16
+ test:
17
+ servers: ["127.0.0.1:9160"]
18
+ keyspace: "datastax_rails_test"
19
+ strategy_class: "org.apache.cassandra.locator.SimpleStrategy"
20
+ strategy_options: {"replication_factor": "1"}
21
+ connection_options:
22
+ timeout: 10
23
+ solr:
24
+ port: 8984
25
+ path: /solr
26
+ ssl:
27
+ use_ssl: true
28
+ cert: config/datastax_rails.crt
29
+ key: config/datastax_rails.key
@@ -0,0 +1,18 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIC6DCCAlGgAwIBAgIBKTANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQGEwJVUzER
3
+ MA8GA1UECBMIVmlyZ2luaWExDzANBgNVBAcTBlJlc3RvbjEbMBkGA1UEChMST3Bl
4
+ biBTb3VyY2UgQ2VudGVyMQ0wCwYDVQQLEwRTQURFMQ0wCwYDVQQDEwRTQURFMB4X
5
+ DTEyMTAxMjA5MjQ1OVoXDTIyMTAxMjA5MjQ1OVowdjELMAkGA1UEBhMCVVMxETAP
6
+ BgNVBAgMCFZpcmdpbmlhMQ8wDQYDVQQHDAZSZXN0b24xGzAZBgNVBAoMEk9wZW4g
7
+ U291cmNlIENlbnRlcjENMAsGA1UECwwEU0FERTEXMBUGA1UEAwwOREFUQVNUQVhf
8
+ UkFJTFMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKjMV5VJP2smXnkmD3pr
9
+ u/Cv2VIQu947C0vIlZ0adE2mTTO4QhsMYXl/WdWy7oXkKBmDlEHquM/I9EbaxSCD
10
+ 4jx0lCOi/qc4M+PLTABQLtfsMyxDWs17uCqSU8DgkeTi6GuRLlQKHJDm5vw359GC
11
+ gr8mMZw1n6lSaiTZ4/R2GPdBAgMBAAGjgY8wgYwwDAYDVR0TAQH/BAIwADAxBglg
12
+ hkgBhvhCAQ0EJBYiUnVieS9PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAd
13
+ BgNVHQ4EFgQUHrQU6mRIT/g4W3z4gLnA145MwN4wCwYDVR0PBAQDAgXgMB0GA1Ud
14
+ JQQWMBQGCCsGAQUFBwMCBggrBgEFBQcDBDANBgkqhkiG9w0BAQUFAAOBgQAuNmNo
15
+ OjpJx8idSVDQsQi7USpqvES5G9pLoa6OIkH8Ktx6TezI5zpYUrRSwzHE8qIGUKD3
16
+ ylPku7qbFJw2+n1K4TKbfrn+ad5+zdRez/uGidEfRtOR7rfkyFVfYaU5htO6PXO5
17
+ Rj9pMTgEXIjMsKLAHBm6Cit3HQTZTJXdSYTmdw==
18
+ -----END CERTIFICATE-----
@@ -0,0 +1,15 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIICXgIBAAKBgQCozFeVST9rJl55Jg96a7vwr9lSELveOwtLyJWdGnRNpk0zuEIb
3
+ DGF5f1nVsu6F5CgZg5RB6rjPyPRG2sUgg+I8dJQjov6nODPjy0wAUC7X7DMsQ1rN
4
+ e7gqklPA4JHk4uhrkS5UChyQ5ub8N+fRgoK/JjGcNZ+pUmok2eP0dhj3QQIDAQAB
5
+ AoGAM7KiAG72pXKS7LfjdbMZVJYHEUNexql+xC8i44L+q+mLK5P7ax1XnUaL1Q+A
6
+ TjGatnW+KpIhGEKLzkeiqFq8JxiBgp1l25lri4V1aTF8YuloekzroebUmz5sOVXO
7
+ GZxBkLl73t7m3xMWrMlR6o5tXgzeap5a2gMFLVBgJR/nIAECQQDXuINWtZKStza6
8
+ ZoPy0ofF3BVzXwP9ybt8rCA9NTTmH/06cOhIHibj8cDnEq29y8m9nJY122HKkdPP
9
+ 77J/yxBhAkEAyFDsh8O2EkPH40ajWvFTpaI9aforaXEcgGNEyGg5f1ghrGOGjpkf
10
+ GDWdrOHyRzcoFxpi/fZfbvWYfjOm3zDS4QJBAJd45jBCetMudu1YAprEnbWfHijO
11
+ tPzFZDLcoh6Yd7aHC8a3dUL+eQxhurQGd5zntZbAlvDmRLp6vyIpC0uUiMECQQC8
12
+ d0bTRVOcQ6FhOCihe8RTZh2aBAGsJvvF35/rXgQax/SGmO0UZQRYZrl+2uZ0EnTp
13
+ p63Te2W2o+NheX9bJjiBAkEAhlnGxWHEPZfW6R+rFfbVKLW2NZe9wPVJb35XLRxf
14
+ G1W41KMP267frVpEXC8Kd/HOFLD9cM3tvFaN6B8GqRMj4g==
15
+ -----END RSA PRIVATE KEY-----
@@ -64,3 +64,6 @@ update hobbies using consistency QUORUM SET name = 'j', schema_version = '0' WHE
64
64
  hobbies insert (8.7ms) 7332d7f8-0758-11e2-93a6-c8fd85e4fc7d {"name"=>"j", "schema_version"=>"0"}
65
65
  update hobbies using consistency QUORUM SET created_at = '2012-09-25T21:35:31Z', updated_at = '2012-09-25T21:35:31Z', schema_version = '0' WHERE KEY IN ('ee85bbfa-0758-11e2-9b96-52afb52cd9cd')
66
66
  hobbies insert (8.2ms) ee85bbfa-0758-11e2-9b96-52afb52cd9cd {"created_at"=>"2012-09-25T21:35:31Z", "updated_at"=>"2012-09-25T21:35:31Z", "schema_version"=>"0"}
67
+ update people using consistency QUORUM SET name = 'Jason', created_at = '2012-10-05T18:57:18Z', updated_at = '2012-10-05T18:57:18Z', nickname = 'Jason', schema_version = '0' WHERE KEY IN ('7c3fa8f8-0f1e-11e2-88cb-3b5bb170a231')
68
+ people insert (37.1ms) 7c3fa8f8-0f1e-11e2-88cb-3b5bb170a231 {"name"=>"Jason", "created_at"=>"2012-10-05T18:57:18Z", "updated_at"=>"2012-10-05T18:57:18Z", "nickname"=>"Jason", "schema_version"=>"0"}
69
+ SELECT updated_at,birthdate,nickname,created_at,name FROM people USING CONSISTENCY QUORUM WHERE key = '12345'