ansr 0.0.1 → 0.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 (83) hide show
  1. checksums.yaml +15 -0
  2. data/README.md +35 -0
  3. data/ansr.gemspec +2 -1
  4. data/ansr_blacklight/Gemfile +3 -0
  5. data/ansr_blacklight/README.md +37 -0
  6. data/ansr_blacklight/ansr_blacklight.gemspec +28 -0
  7. data/ansr_blacklight/lib/ansr_blacklight.rb +57 -0
  8. data/ansr_blacklight/lib/ansr_blacklight/arel.rb +6 -0
  9. data/ansr_blacklight/lib/ansr_blacklight/arel/big_table.rb +57 -0
  10. data/ansr_blacklight/lib/ansr_blacklight/arel/visitors.rb +6 -0
  11. data/ansr_blacklight/lib/ansr_blacklight/arel/visitors/query_builder.rb +217 -0
  12. data/ansr_blacklight/lib/ansr_blacklight/arel/visitors/to_no_sql.rb +14 -0
  13. data/ansr_blacklight/lib/ansr_blacklight/base.rb +21 -0
  14. data/ansr_blacklight/lib/ansr_blacklight/connection_adapters/no_sql_adapter.rb +38 -0
  15. data/ansr_blacklight/lib/ansr_blacklight/model/querying.rb +29 -0
  16. data/ansr_blacklight/lib/ansr_blacklight/relation.rb +50 -0
  17. data/ansr_blacklight/lib/ansr_blacklight/relation/solr_projection_methods.rb +55 -0
  18. data/ansr_blacklight/lib/ansr_blacklight/request_builders.rb +141 -0
  19. data/ansr_blacklight/lib/ansr_blacklight/solr.rb +4 -0
  20. data/ansr_blacklight/lib/ansr_blacklight/solr/request.rb +46 -0
  21. data/ansr_blacklight/lib/ansr_blacklight/solr/response.rb +94 -0
  22. data/ansr_blacklight/lib/ansr_blacklight/solr/response/group.rb +32 -0
  23. data/ansr_blacklight/lib/ansr_blacklight/solr/response/group_response.rb +50 -0
  24. data/ansr_blacklight/lib/ansr_blacklight/solr/response/more_like_this.rb +14 -0
  25. data/ansr_blacklight/lib/ansr_blacklight/solr/response/pagination_methods.rb +35 -0
  26. data/ansr_blacklight/lib/ansr_blacklight/solr/response/spelling.rb +92 -0
  27. data/ansr_blacklight/spec/fixtures/config.yml +0 -0
  28. data/ansr_blacklight/spec/lib/loaded_relation_spec.rb +223 -0
  29. data/ansr_blacklight/spec/lib/queryable_relation_spec.rb +133 -0
  30. data/ansr_blacklight/spec/lib/relation/faceting_spec.rb +475 -0
  31. data/ansr_blacklight/spec/lib/relation/grouping_spec.rb +159 -0
  32. data/ansr_blacklight/spec/spec_helper.rb +72 -0
  33. data/ansr_dpla/Gemfile +3 -0
  34. data/ansr_dpla/Gemfile.lock +138 -0
  35. data/ansr_dpla/README.md +2 -2
  36. data/ansr_dpla/ansr_dpla.gemspec +2 -2
  37. data/ansr_dpla/lib/ansr_dpla.rb +3 -0
  38. data/ansr_dpla/lib/ansr_dpla/api.rb +3 -3
  39. data/ansr_dpla/lib/ansr_dpla/arel.rb +1 -2
  40. data/ansr_dpla/lib/ansr_dpla/arel/big_table.rb +4 -0
  41. data/ansr_dpla/lib/ansr_dpla/arel/visitors.rb +6 -0
  42. data/ansr_dpla/lib/ansr_dpla/arel/visitors/query_builder.rb +188 -0
  43. data/ansr_dpla/lib/ansr_dpla/arel/visitors/to_no_sql.rb +9 -0
  44. data/ansr_dpla/lib/ansr_dpla/connection_adapters/no_sql_adapter.rb +58 -0
  45. data/ansr_dpla/lib/ansr_dpla/model/base.rb +7 -0
  46. data/ansr_dpla/lib/ansr_dpla/model/querying.rb +6 -10
  47. data/ansr_dpla/lib/ansr_dpla/relation.rb +61 -0
  48. data/ansr_dpla/lib/ansr_dpla/request.rb +5 -0
  49. data/ansr_dpla/spec/lib/api_spec.rb +8 -5
  50. data/ansr_dpla/spec/lib/item_spec.rb +2 -2
  51. data/ansr_dpla/spec/lib/relation/facet_spec.rb +27 -19
  52. data/ansr_dpla/spec/lib/relation/select_spec.rb +10 -8
  53. data/ansr_dpla/spec/lib/relation/where_spec.rb +1 -1
  54. data/ansr_dpla/spec/lib/relation_spec.rb +31 -29
  55. data/ansr_dpla/test/system.rb +4 -2
  56. data/lib/ansr.rb +7 -0
  57. data/lib/ansr/arel.rb +3 -0
  58. data/lib/ansr/arel/big_table.rb +43 -3
  59. data/lib/ansr/arel/configured_field.rb +19 -0
  60. data/lib/ansr/arel/nodes.rb +41 -0
  61. data/lib/ansr/arel/visitors.rb +7 -0
  62. data/lib/ansr/arel/visitors/context.rb +13 -0
  63. data/lib/ansr/arel/visitors/query_builder.rb +47 -0
  64. data/lib/ansr/arel/visitors/to_no_sql.rb +41 -0
  65. data/lib/ansr/base.rb +29 -1
  66. data/lib/ansr/configurable.rb +6 -12
  67. data/lib/ansr/connection_adapters.rb +5 -0
  68. data/lib/ansr/connection_adapters/no_sql_adapter.rb +80 -0
  69. data/lib/ansr/dummy_associations.rb +105 -0
  70. data/lib/ansr/facets.rb +103 -0
  71. data/lib/ansr/model.rb +17 -107
  72. data/lib/ansr/model/connection_handler.rb +6 -0
  73. data/lib/ansr/relation.rb +40 -23
  74. data/lib/ansr/relation/group.rb +31 -0
  75. data/lib/ansr/relation/predicate_builder.rb +106 -0
  76. data/lib/ansr/relation/query_methods.rb +192 -45
  77. data/lib/ansr/sanitization.rb +5 -18
  78. data/lib/ansr/utils.rb +89 -0
  79. data/lib/ansr/version.rb +1 -1
  80. metadata +73 -25
  81. data/ansr_dpla/lib/ansr_dpla/arel/connection.rb +0 -81
  82. data/ansr_dpla/lib/ansr_dpla/arel/query_builder.rb +0 -131
  83. data/lib/ansr/model/connection.rb +0 -103
@@ -2,11 +2,8 @@ module Ansr
2
2
  module Sanitization
3
3
  extend ActiveSupport::Concern
4
4
  module ClassMethods
5
- def reflect_on_association(column_sym)
6
- DummyReflection.new(column_sym)
7
- end
8
-
9
5
  def expand_hash_conditions_for_sql_aggregates(conditions)
6
+ conditions.reduce({}) {|memo, k, v| }
10
7
  conditions
11
8
  end
12
9
 
@@ -14,22 +11,12 @@ module Ansr
14
11
  condition
15
12
  end
16
13
 
17
- def sanitize_sql(condition, table_name = table_name())
18
- sanitize_sql_for_conditions(condition, table_name)
14
+ def sanitize_sql_hash_for_conditions(attrs, default_table_name = self.table_name)
15
+ attrs
19
16
  end
20
17
 
21
- end
22
- class DummyReflection
23
- def initialize(symbol)
24
- @symbol = symbol
25
- end
26
-
27
- def polymorphic?
28
- false
29
- end
30
-
31
- def foreign_key
32
- @symbol
18
+ def sanitize_sql(condition, table_name = table_name())
19
+ sanitize_sql_for_conditions(condition, table_name)
33
20
  end
34
21
  end
35
22
  end
@@ -0,0 +1,89 @@
1
+ require 'ostruct'
2
+ module Ansr
3
+ class OpenStructWithHashAccess < OpenStruct
4
+ delegate :keys, :each, :map, :has_key?, :empty?, :delete, :length, :reject!, :select!, :include, :fetch, :to_json, :as_json, :to => :to_h
5
+
6
+ def []=(key, value)
7
+ send "#{key}=", value
8
+ end
9
+
10
+ def [](key)
11
+ send key
12
+ end
13
+
14
+ def to_h
15
+ @table
16
+ end
17
+
18
+ def merge other_hash
19
+ self.class.new to_h.merge((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
20
+ end
21
+
22
+ def merge! other_hash
23
+ @table.merge!((other_hash if other_hash.is_a? Hash) || other_hash.to_h)
24
+ end
25
+ end
26
+
27
+ class NestedOpenStructWithHashAccess < OpenStructWithHashAccess
28
+ attr_reader :nested_class
29
+ delegate :default_proc=, :to => :to_h
30
+
31
+ def initialize klass, *args
32
+ @nested_class = klass
33
+ hash = {}
34
+
35
+ hashes_and_keys = args.flatten
36
+ lazy_configs = hashes_and_keys.extract_options!
37
+
38
+ args.each do |v|
39
+ if v.is_a? Hash
40
+ key = v.first
41
+ value = v[key]
42
+
43
+ hash[key] = nested_class.new value
44
+ else
45
+ hash[v] = nested_class.new
46
+ end
47
+ end
48
+
49
+ lazy_configs.each do |k,v|
50
+ hash[k] = nested_class.new v
51
+ end
52
+
53
+ super hash
54
+ set_default_proc!
55
+ end
56
+
57
+ def << key
58
+ @table[key]
59
+ end
60
+
61
+ def []=(key, value)
62
+ if value.is_a? Hash
63
+ send "#{key}=", nested_class.new(value)
64
+ else
65
+ send "#{key}=", value
66
+ end
67
+ end
68
+
69
+ def marshal_dump
70
+ h = to_h.dup
71
+ h.default = nil
72
+
73
+ [nested_class, h]
74
+ end
75
+
76
+ def marshal_load x
77
+ @nested_class = x.first
78
+ super x.last
79
+ set_default_proc!
80
+ end
81
+
82
+ private
83
+ def set_default_proc!
84
+ self.default_proc = lambda do |hash, key|
85
+ hash[key] = self.nested_class.new
86
+ end
87
+ end
88
+ end
89
+ end
@@ -1,5 +1,5 @@
1
1
  module Ansr
2
- VERSION = '0.0.1'
2
+ VERSION = '0.0.3'
3
3
  def self.version
4
4
  VERSION
5
5
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ansr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
5
- prerelease:
4
+ version: 0.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - Benjamin Armintor
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-03-13 00:00:00.000000000 Z
11
+ date: 2014-04-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: loggable
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,31 +20,41 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
- name: blacklight
28
+ name: arel
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
37
- version: 5.1.0
33
+ version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
45
- version: 5.1.0
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activerecord
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
46
55
  - !ruby/object:Gem::Dependency
47
56
  name: rake
48
57
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
58
  requirements:
51
59
  - - ! '>='
52
60
  - !ruby/object:Gem::Version
@@ -54,7 +62,6 @@ dependencies:
54
62
  type: :development
55
63
  prerelease: false
56
64
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
65
  requirements:
59
66
  - - ! '>='
60
67
  - !ruby/object:Gem::Version
@@ -62,7 +69,6 @@ dependencies:
62
69
  - !ruby/object:Gem::Dependency
63
70
  name: bundler
64
71
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
72
  requirements:
67
73
  - - ! '>='
68
74
  - !ruby/object:Gem::Version
@@ -70,7 +76,6 @@ dependencies:
70
76
  type: :development
71
77
  prerelease: false
72
78
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
79
  requirements:
75
80
  - - ! '>='
76
81
  - !ruby/object:Gem::Version
@@ -78,7 +83,6 @@ dependencies:
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: rspec
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
87
  - - ! '>='
84
88
  - !ruby/object:Gem::Version
@@ -86,7 +90,6 @@ dependencies:
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
94
  - - ! '>='
92
95
  - !ruby/object:Gem::Version
@@ -94,7 +97,6 @@ dependencies:
94
97
  - !ruby/object:Gem::Dependency
95
98
  name: yard
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
101
  - - ! '>='
100
102
  - !ruby/object:Gem::Version
@@ -102,7 +104,6 @@ dependencies:
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
108
  - - ! '>='
108
109
  - !ruby/object:Gem::Version
@@ -117,7 +118,39 @@ files:
117
118
  - .gitignore
118
119
  - Gemfile
119
120
  - Gemfile.lock
121
+ - README.md
120
122
  - ansr.gemspec
123
+ - ansr_blacklight/Gemfile
124
+ - ansr_blacklight/README.md
125
+ - ansr_blacklight/ansr_blacklight.gemspec
126
+ - ansr_blacklight/lib/ansr_blacklight.rb
127
+ - ansr_blacklight/lib/ansr_blacklight/arel.rb
128
+ - ansr_blacklight/lib/ansr_blacklight/arel/big_table.rb
129
+ - ansr_blacklight/lib/ansr_blacklight/arel/visitors.rb
130
+ - ansr_blacklight/lib/ansr_blacklight/arel/visitors/query_builder.rb
131
+ - ansr_blacklight/lib/ansr_blacklight/arel/visitors/to_no_sql.rb
132
+ - ansr_blacklight/lib/ansr_blacklight/base.rb
133
+ - ansr_blacklight/lib/ansr_blacklight/connection_adapters/no_sql_adapter.rb
134
+ - ansr_blacklight/lib/ansr_blacklight/model/querying.rb
135
+ - ansr_blacklight/lib/ansr_blacklight/relation.rb
136
+ - ansr_blacklight/lib/ansr_blacklight/relation/solr_projection_methods.rb
137
+ - ansr_blacklight/lib/ansr_blacklight/request_builders.rb
138
+ - ansr_blacklight/lib/ansr_blacklight/solr.rb
139
+ - ansr_blacklight/lib/ansr_blacklight/solr/request.rb
140
+ - ansr_blacklight/lib/ansr_blacklight/solr/response.rb
141
+ - ansr_blacklight/lib/ansr_blacklight/solr/response/group.rb
142
+ - ansr_blacklight/lib/ansr_blacklight/solr/response/group_response.rb
143
+ - ansr_blacklight/lib/ansr_blacklight/solr/response/more_like_this.rb
144
+ - ansr_blacklight/lib/ansr_blacklight/solr/response/pagination_methods.rb
145
+ - ansr_blacklight/lib/ansr_blacklight/solr/response/spelling.rb
146
+ - ansr_blacklight/spec/fixtures/config.yml
147
+ - ansr_blacklight/spec/lib/loaded_relation_spec.rb
148
+ - ansr_blacklight/spec/lib/queryable_relation_spec.rb
149
+ - ansr_blacklight/spec/lib/relation/faceting_spec.rb
150
+ - ansr_blacklight/spec/lib/relation/grouping_spec.rb
151
+ - ansr_blacklight/spec/spec_helper.rb
152
+ - ansr_dpla/Gemfile
153
+ - ansr_dpla/Gemfile.lock
121
154
  - ansr_dpla/README.md
122
155
  - ansr_dpla/ansr_dpla.gemspec
123
156
  - ansr_dpla/app/models/collection.rb
@@ -138,12 +171,16 @@ files:
138
171
  - ansr_dpla/lib/ansr_dpla/api.rb
139
172
  - ansr_dpla/lib/ansr_dpla/arel.rb
140
173
  - ansr_dpla/lib/ansr_dpla/arel/big_table.rb
141
- - ansr_dpla/lib/ansr_dpla/arel/connection.rb
142
- - ansr_dpla/lib/ansr_dpla/arel/query_builder.rb
174
+ - ansr_dpla/lib/ansr_dpla/arel/visitors.rb
175
+ - ansr_dpla/lib/ansr_dpla/arel/visitors/query_builder.rb
176
+ - ansr_dpla/lib/ansr_dpla/arel/visitors/to_no_sql.rb
177
+ - ansr_dpla/lib/ansr_dpla/connection_adapters/no_sql_adapter.rb
143
178
  - ansr_dpla/lib/ansr_dpla/model.rb
144
179
  - ansr_dpla/lib/ansr_dpla/model/base.rb
145
180
  - ansr_dpla/lib/ansr_dpla/model/pseudo_associate.rb
146
181
  - ansr_dpla/lib/ansr_dpla/model/querying.rb
182
+ - ansr_dpla/lib/ansr_dpla/relation.rb
183
+ - ansr_dpla/lib/ansr_dpla/request.rb
147
184
  - ansr_dpla/spec/adpla_test_api.rb
148
185
  - ansr_dpla/spec/lib/api_spec.rb
149
186
  - ansr_dpla/spec/lib/item_spec.rb
@@ -158,39 +195,50 @@ files:
158
195
  - lib/ansr/.DS_Store
159
196
  - lib/ansr/arel.rb
160
197
  - lib/ansr/arel/big_table.rb
198
+ - lib/ansr/arel/configured_field.rb
199
+ - lib/ansr/arel/nodes.rb
200
+ - lib/ansr/arel/visitors.rb
201
+ - lib/ansr/arel/visitors/context.rb
202
+ - lib/ansr/arel/visitors/query_builder.rb
203
+ - lib/ansr/arel/visitors/to_no_sql.rb
161
204
  - lib/ansr/base.rb
162
205
  - lib/ansr/configurable.rb
206
+ - lib/ansr/connection_adapters.rb
207
+ - lib/ansr/connection_adapters/no_sql_adapter.rb
208
+ - lib/ansr/dummy_associations.rb
209
+ - lib/ansr/facets.rb
163
210
  - lib/ansr/model.rb
164
- - lib/ansr/model/connection.rb
165
211
  - lib/ansr/model/connection_handler.rb
166
212
  - lib/ansr/relation.rb
167
213
  - lib/ansr/relation/arel_methods.rb
214
+ - lib/ansr/relation/group.rb
215
+ - lib/ansr/relation/predicate_builder.rb
168
216
  - lib/ansr/relation/query_methods.rb
169
217
  - lib/ansr/sanitization.rb
218
+ - lib/ansr/utils.rb
170
219
  - lib/ansr/version.rb
171
220
  homepage: http://github.com/barmintor/ansr
172
221
  licenses: []
222
+ metadata: {}
173
223
  post_install_message:
174
224
  rdoc_options: []
175
225
  require_paths:
176
226
  - lib
177
227
  required_ruby_version: !ruby/object:Gem::Requirement
178
- none: false
179
228
  requirements:
180
229
  - - ! '>='
181
230
  - !ruby/object:Gem::Version
182
231
  version: '0'
183
232
  required_rubygems_version: !ruby/object:Gem::Requirement
184
- none: false
185
233
  requirements:
186
234
  - - ! '>='
187
235
  - !ruby/object:Gem::Version
188
236
  version: '0'
189
237
  requirements: []
190
238
  rubyforge_project:
191
- rubygems_version: 1.8.24
239
+ rubygems_version: 2.2.2
192
240
  signing_key:
193
- specification_version: 3
241
+ specification_version: 4
194
242
  summary: ActiveRecord-style relations for no-sql data sources
195
243
  test_files: []
196
244
  has_rdoc:
@@ -1,81 +0,0 @@
1
- module Ansr::Dpla
2
- module Arel
3
- class Connection < Ansr::Model::Connection
4
- def initialize(klass)
5
- super(klass)
6
- @method = klass.name.downcase.pluralize.to_sym
7
- @api = @table.engine.api
8
- end
9
-
10
- def to_sql(*args)
11
- to_nosql(*args)
12
- end
13
-
14
- # the object generated by this method will be passed to the self#execute
15
- def to_nosql(select_manager, bind_values)
16
- qb = Ansr::Dpla::Arel::QueryBuilder.new(@table)
17
- if ::Arel::Nodes::Intersect === select_manager
18
- filter_context = select_manager.right
19
- select_manager = select_manager.left
20
- constraints(filter_context).each {|c| qb.where(c)}
21
- projections(filter_context).each {|c| qb.add_facet(c)}
22
- end
23
- constraints(select_manager).each {|c| qb.where(c)}
24
- orders(select_manager).each {|c| qb.order(c)}
25
- projections(select_manager).each {|c| qb.select(c)}
26
- if (limit = limit(select_manager))
27
- qb.take(limit)
28
- end
29
- if (offset = offset(select_manager))
30
- qb.skip(offset)
31
- end
32
- qb.query_opts
33
- end
34
-
35
-
36
- def to_aliases(select_manager, bind_values)
37
- qb = Ansr::Dpla::Arel::QueryBuilder.new(@table)
38
- if ::Arel::Nodes::Intersect === select_manager
39
- select_manager = select_manager.left
40
- end
41
- projections(select_manager).each {|c| qb.select(c)}
42
- qb.aliases
43
- end
44
-
45
- def execute(query, aliases = {})
46
- json = @api.send(@method, query)
47
- json = json.length > 0 ? JSON.load(json) : {}
48
- if json['docs'] and aliases
49
- json['docs'].each do |doc|
50
- aliases.each do |k,v|
51
- if doc[k]
52
- old = doc.delete(k)
53
- if old and doc[v]
54
- doc[v] = Array(doc[v]) if doc[v]
55
- Array(old).each {|ov| doc[v] << ov}
56
- else
57
- doc[v] = old
58
- end
59
- end
60
- end
61
- end
62
- end
63
- json
64
- end
65
-
66
- def table_exists?(table_name)
67
- ['Collection', 'Item'].include? table_name
68
- end
69
-
70
- def sanitize_limit(limit_value)
71
- if (0..500) === limit_value.to_s.to_i
72
- limit_value
73
- else
74
- Ansr::Relation::DEFAULT_PAGE_SIZE
75
- end
76
- end
77
-
78
- end
79
- end
80
-
81
- end