sunstone 2.0.1 → 2.0.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e7571ad32bf7197a480c1f59c5a5158ce0f1d492
4
- data.tar.gz: d10ec4207fc78c2e6ec8d3dee815469a7b4b868a
3
+ metadata.gz: 9d7b7cb926a0045ee4a771a87ce5f3f3096fb035
4
+ data.tar.gz: 0edf0869c5ac58e901579d47b8979ed4ecf98c39
5
5
  SHA512:
6
- metadata.gz: 121532495ba520b5e66de7cc054e9fc1958076c6953c2dc10e710816d9944fc76e940a4dd6018cea3a5599aa43faecdee9c81259fd7d569ea659abcbc6ccb4d9
7
- data.tar.gz: 815d5f4f6a5c89a1552b8dc8cde45ac8cf508608b5403c75f4516569fd834f2f3becf1fa3af3cf25c622cba2d3ade471dca215029d4aa2230a9b46fc916e730b
6
+ metadata.gz: 2bf1d1921cf1cad5967be3398b0a49de76cac94b65bc268952c549b994b1e48487913b062a29e33f4968c84fecb90aec0691f24cce06261c61f0a7cf2bce5ddb
7
+ data.tar.gz: 8bce1e614955c036c7d46df1c109b2650dec40ad5d0b3168d9c33963005c94f91a80a6737d1b00b045ffafea006efc43faaef28f66053f811975e0efa33e2f46
@@ -1,52 +1,48 @@
1
- # module ActiveRecord::Associations::Builder
2
- # class HasAndBelongsToMany # :nodoc:
3
- #
4
- # def through_model
5
- # habtm = JoinTableResolver.build lhs_model, association_name, options
6
- #
7
- # join_model = Class.new(lhs_model.base_class.superclass) { # Don't use ActiveRecord::Base here because that might not be the abstract class that we need and the connection may be different
8
- # class << self;
9
- # attr_accessor :left_model
10
- # attr_accessor :name
11
- # attr_accessor :table_name_resolver
12
- # attr_accessor :left_reflection
13
- # attr_accessor :right_reflection
14
- # end
15
- #
16
- # def self.table_name
17
- # table_name_resolver.join_table
18
- # end
19
- #
20
- # def self.compute_type(class_name)
21
- # left_model.compute_type class_name
22
- # end
23
- #
24
- # def self.add_left_association(name, options)
25
- # belongs_to name, options
26
- # self.left_reflection = _reflect_on_association(name)
27
- # end
28
- #
29
- # def self.add_right_association(name, options)
30
- # rhs_name = name.to_s.singularize.to_sym
31
- # belongs_to rhs_name, options
32
- # self.right_reflection = _reflect_on_association(rhs_name)
33
- # end
34
- #
35
- # def self.retrieve_connection
36
- # left_model.retrieve_connection
37
- # end
38
- #
39
- # }
40
- #
41
- # join_model.name = "HABTM_#{association_name.to_s.camelize}"
42
- # join_model.table_name_resolver = habtm
43
- # join_model.class_resolver = lhs_model
44
- # join_model.primary_key = nil
45
- #
46
- # join_model.add_left_association :left_side, anonymous_class: lhs_model
47
- # join_model.add_right_association association_name, belongs_to_options(options)
48
- # join_model
49
- # end
50
- #
51
- # end
52
- # end
1
+ module ActiveRecord::Associations::Builder
2
+ class HasAndBelongsToMany # :nodoc:
3
+
4
+ def through_model
5
+ habtm = JoinTableResolver.build lhs_model, association_name, options
6
+
7
+ join_model = Class.new(lhs_model.base_class.superclass) {
8
+ class << self;
9
+ attr_accessor :class_resolver
10
+ attr_accessor :name
11
+ attr_accessor :table_name_resolver
12
+ attr_accessor :left_reflection
13
+ attr_accessor :right_reflection
14
+ end
15
+
16
+ def self.table_name
17
+ table_name_resolver.join_table
18
+ end
19
+
20
+ def self.compute_type(class_name)
21
+ class_resolver.compute_type class_name
22
+ end
23
+
24
+ def self.add_left_association(name, options)
25
+ belongs_to name, options
26
+ self.left_reflection = _reflect_on_association(name)
27
+ end
28
+
29
+ def self.add_right_association(name, options)
30
+ rhs_name = name.to_s.singularize.to_sym
31
+ belongs_to rhs_name, options
32
+ self.right_reflection = _reflect_on_association(rhs_name)
33
+ end
34
+
35
+ }
36
+
37
+ join_model.name = "HABTM_#{association_name.to_s.camelize}"
38
+ join_model.table_name_resolver = habtm
39
+ join_model.class_resolver = lhs_model
40
+ join_model.primary_key = nil
41
+
42
+ join_model.add_left_association :left_side, anonymous_class: lhs_model
43
+ join_model.add_right_association association_name, belongs_to_options(options)
44
+ join_model
45
+ end
46
+
47
+ end
48
+ end
@@ -1,28 +1,28 @@
1
- # module ActiveRecord
2
- # module Calculations
3
- # def pluck(*column_names)
4
- #
5
- # # column_names.map! do |column_name|
6
- # # if column_name.is_a?(Symbol) && attribute_alias?(column_name)
7
- # # attribute_alias(column_name)
8
- # # else
9
- # # column_name.to_s
10
- # # end
11
- # # end
12
- #
13
- # if has_include?(column_names.first)
14
- # construct_relation_for_association_calculations.pluck(*column_names)
15
- # else
16
- # relation = spawn
17
- # relation.select_values = column_names.map { |cn|
18
- # columns_hash.key?(cn) ? arel_table[cn] : cn
19
- # }
20
- #
21
- # result = klass.connection.exec_query(relation.arel, nil, relation.arel.bind_values + bind_values)
22
- # result.cast_values(klass.column_types)
23
- # end
24
- # end
25
- #
26
- # end
27
- # end
28
- #
1
+ module ActiveRecord
2
+ module Calculations
3
+ def pluck(*column_names)
4
+
5
+ # column_names.map! do |column_name|
6
+ # if column_name.is_a?(Symbol) && attribute_alias?(column_name)
7
+ # attribute_alias(column_name)
8
+ # else
9
+ # column_name.to_s
10
+ # end
11
+ # end
12
+
13
+ if has_include?(column_names.first)
14
+ construct_relation_for_association_calculations.pluck(*column_names)
15
+ else
16
+ relation = spawn
17
+ relation.select_values = column_names.map { |cn|
18
+ columns_hash.key?(cn) ? arel_table[cn] : cn
19
+ }
20
+
21
+ result = klass.connection.exec_query(relation.arel, nil, relation.arel.bind_values + bind_values)
22
+ result.cast_values(klass.column_types)
23
+ end
24
+ end
25
+
26
+ end
27
+ end
28
+
@@ -1,29 +1,23 @@
1
- # module ActiveRecord
2
- # class PredicateBuilder # :nodoc:
3
- #
4
- # def self.expand(klass, table, column, value)
5
- # queries = []
6
- #
7
- # # In standard Rails where takes :table => { columns }, but in sunstone we
8
- # # can can do nested tables eg: where(:properties => { :regions => {:id => 1}})
9
- # if klass && reflection = klass._reflect_on_association(column)
10
- # base_class = polymorphic_base_class_from_value(value)
11
- #
12
- # if reflection.polymorphic? && base_class
13
- # queries << build(table[reflection.foreign_type], base_class)
14
- # end
15
- #
16
- # column = reflection.foreign_key
17
- #
18
- # if base_class
19
- # primary_key = reflection.association_primary_key(base_class)
20
- # value = convert_value_to_association_ids(value, primary_key)
21
- # end
22
- # end
23
- #
24
- # queries << build(table[column], value)
25
- # queries
26
- # end
27
- #
28
- # end
29
- # end
1
+ module ActiveRecord
2
+ class PredicateBuilder # :nodoc:
3
+
4
+ def self.expand(klass, table, column, value)
5
+ queries = []
6
+
7
+ # In standard Rails where takes :table => { columns }, but in sunstone we
8
+ # can can do nested tables eg: where(:properties => { :regions => {:id => 1}})
9
+ if klass && reflection = klass._reflect_on_association(column)
10
+ if reflection.polymorphic? && base_class = polymorphic_base_class_from_value(value)
11
+ queries << build(table[reflection.foreign_type], base_class)
12
+ end
13
+
14
+ # column = reflection.foreign_key
15
+ column # Don't need Rails to assume we are referencing a table
16
+ end
17
+
18
+ queries << build(table[column], value)
19
+ queries
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ class NilClass
2
+
3
+ def to_query(namespace)
4
+ namespace
5
+ end
6
+
7
+ end
@@ -0,0 +1,31 @@
1
+ require 'rgeo'
2
+
3
+ module ActiveRecord
4
+ module ConnectionAdapters
5
+ module Sunstone
6
+ module Type
7
+ class EWKB < ActiveRecord::Type::Value
8
+
9
+ def type
10
+ :ewkb
11
+ end
12
+
13
+ def type_cast_for_database(value)
14
+ if value
15
+ ::RGeo::WKRep::WKBGenerator.new(hex_format: true, type_format: :ewkb, emit_ewkb_srid: true).generate(value)
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def cast_value(string)
22
+ return string unless string.is_a?(::String)
23
+
24
+ ::RGeo::WKRep::WKBParser.new(RGeo::Geos.factory_generator, support_ewkb: true).parse(string)
25
+ end
26
+
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -8,11 +8,12 @@ require 'active_record/connection_adapters/sunstone/column'
8
8
 
9
9
  require 'active_record/connection_adapters/sunstone/type/date_time'
10
10
  require 'active_record/connection_adapters/sunstone/type/array'
11
+ require 'active_record/connection_adapters/sunstone/type/ewkb'
11
12
 
12
13
  module ActiveRecord
13
14
  module ConnectionHandling # :nodoc:
14
15
 
15
- VALID_SUNSTONE_CONN_PARAMS = [:site, :host, :port, :api_key, :use_ssl, :user_agent]
16
+ VALID_SUNSTONE_CONN_PARAMS = [:site, :host, :port, :api_key, :use_ssl, :user_agent, :ca_cert]
16
17
 
17
18
  # Establishes a connection to the database that's used by all Active Record
18
19
  # objects
@@ -158,6 +159,7 @@ module ActiveRecord
158
159
  m.register_type 'decimal', Type::Decimal.new
159
160
  m.register_type 'datetime', Sunstone::Type::DateTime.new
160
161
  m.register_type 'hash', Type::Value.new
162
+ m.register_type 'ewkb', Sunstone::Type::EWKB.new
161
163
  end
162
164
 
163
165
  def exec(arel, name='SAR', binds=[])
@@ -18,6 +18,8 @@ require File.expand_path(File.join(__FILE__, '../../ext/active_record/relation')
18
18
  require File.expand_path(File.join(__FILE__, '../../ext/active_record/query_methods'))
19
19
  # require File.expand_path(File.join(__FILE__, '../../ext/active_record/associations/builder/has_and_belongs_to_many'))
20
20
 
21
+ require File.expand_path(File.join(__FILE__, '../../ext/active_support/core_ext/object/to_query'))
22
+
21
23
  require File.expand_path(File.join(__FILE__, '../../ext/arel/select_manager'))
22
24
  require File.expand_path(File.join(__FILE__, '../../ext/arel/nodes/eager_load'))
23
25
  require File.expand_path(File.join(__FILE__, '../../ext/arel/nodes/select_statement'))
@@ -36,6 +36,12 @@ module Sunstone
36
36
 
37
37
  @connection = Net::HTTP.new(host, port)
38
38
  @connection.use_ssl = use_ssl
39
+ if use_ssl && config[:ca_cert]
40
+ @connection.cert_store = OpenSSL::X509::Store.new
41
+ @connection.cert_store.add_cert(OpenSSL::X509::Certificate.new(File.read(config[:ca_cert])))
42
+ end
43
+
44
+ true
39
45
  end
40
46
 
41
47
  # Ping the Sunstone. If everything is configured and operating correctly
@@ -1,3 +1,3 @@
1
1
  module Sunstone
2
- VERSION = '2.0.1'
2
+ VERSION = '2.0.4'
3
3
  end
@@ -58,6 +58,12 @@ class QueryTest < Minitest::Test
58
58
  assert_equal [], Ship.where(:id => 10).to_a
59
59
  end
60
60
 
61
+ test '::where column is nil' do
62
+ stub_request(:get, URI::escape('malomalo.io/ships?where[leased_at]')).to_return(body: [].to_json)
63
+
64
+ assert_equal [], Ship.where(:leased_at => nil).to_a
65
+ end
66
+
61
67
  test '::where on belongs_to relation' do
62
68
  stub_request(:get, URI::escape('malomalo.io/ships?where[fleet][id]=1')).to_return(body: [].to_json)
63
69
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sunstone
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jon Bracy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-31 00:00:00.000000000 Z
11
+ date: 2015-12-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -269,6 +269,7 @@ files:
269
269
  - ext/active_record/relation.rb
270
270
  - ext/active_record/relation/predicate_builder.rb
271
271
  - ext/active_record/statement_cache.rb
272
+ - ext/active_support/core_ext/object/to_query.rb
272
273
  - ext/arel/nodes/eager_load.rb
273
274
  - ext/arel/nodes/select_statement.rb
274
275
  - ext/arel/select_manager.rb
@@ -277,6 +278,7 @@ files:
277
278
  - lib/active_record/connection_adapters/sunstone/schema_statements.rb
278
279
  - lib/active_record/connection_adapters/sunstone/type/array.rb
279
280
  - lib/active_record/connection_adapters/sunstone/type/date_time.rb
281
+ - lib/active_record/connection_adapters/sunstone/type/ewkb.rb
280
282
  - lib/active_record/connection_adapters/sunstone_adapter.rb
281
283
  - lib/arel/collectors/sunstone.rb
282
284
  - lib/arel/visitors/sunstone.rb