mdex_client 0.0.1

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.
@@ -0,0 +1,59 @@
1
+ require 'mdex_client/mdata/node'
2
+
3
+ module MDEXClient
4
+ module MData
5
+ class Record < Node
6
+ class Attributes < Hash
7
+ def initialize(*args)
8
+ super(*args)
9
+
10
+ @dimension_value_ids = {}
11
+ @dimension_ids = {}
12
+ end
13
+
14
+ def dimension_value_id(key)
15
+ @dimension_value_ids[key]
16
+ end
17
+
18
+ def dimension_id(key)
19
+ @dimension_ids[key]
20
+ end
21
+
22
+ def dimension_keys
23
+ @dimension_ids.keys
24
+ end
25
+
26
+ def property_keys
27
+ keys - dimension_keys
28
+ end
29
+
30
+ def <<(node)
31
+ key = node["Key"]
32
+ self[key] = node.text
33
+
34
+ if node.name == "AssignedDimensionValue"
35
+ @dimension_value_ids[key] = node["Id"]
36
+ @dimension_ids[key] = node["DimensionId"]
37
+ end
38
+ end
39
+ end
40
+
41
+ attr_accessor :id, :attributes, :snippets
42
+
43
+ def initialize(element_or_hash=nil)
44
+ @attributes = Attributes.new
45
+ super(element_or_hash)
46
+ end
47
+
48
+ def initialize_from_element!
49
+ @id = @element["Id"]
50
+
51
+ xpath("mdata:Attributes/mdata:AssignedDimensionValue | mdata:Attributes/mdata:Property").each do |attribute|
52
+ @attributes << attribute
53
+ end
54
+
55
+ @snippets = property_list("mdata:Snippets/mdata:Snippet")
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,44 @@
1
+ require 'mdex_client/mdata/node'
2
+
3
+ module MDEXClient
4
+ module MData
5
+ class RefinementConfig < Node
6
+ attr_accessor :dimension_value_id, :maximum_dimension_value_count
7
+ attr_writer :expose, :limit_dimension_values, :order_by_record_count
8
+
9
+ def initialize_from_element!
10
+ @dimension_value_id = @element["DimensionValueId"].to_i
11
+ @expose = (@element["Expose"] == "true")
12
+ @limit_dimension_values = (@element["LimitDimensionValues"] == "true")
13
+ @order_by_record_count = (@element["OrderByRecordCount"] == "true")
14
+
15
+ if element["MaximumDimensionValueCount"]
16
+ @maximum_dimension_value_count = @element["MaximumDimensionValueCount"].to_i
17
+ end
18
+ end
19
+
20
+ def expose?
21
+ @expose
22
+ end
23
+
24
+ def limit_dimension_values?
25
+ @limit_dimension_values
26
+ end
27
+
28
+ def order_by_record_count?
29
+ @order_by_record_count
30
+ end
31
+
32
+ def write_xml!(xml)
33
+ attrs = { "DimensionValueId" => dimension_value_id }
34
+ %w(Expose LimitDimensionValues OrderByRecordCount).each do |attribute|
35
+ value = self.send("#{attribute.underscore}?")
36
+ attrs[attribute] = value.to_s unless value.nil?
37
+ end
38
+ attrs["MaximumDimensionValueCount"] = maximum_dimension_value_count unless maximum_dimension_value_count.nil?
39
+
40
+ xml.mdata :RefinementConfig, attrs
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,36 @@
1
+ require 'mdex_client/mdata/node'
2
+
3
+ module MDEXClient
4
+ module MData
5
+ class Search < Node
6
+ MODES = %w(All AllAny AllPartial Any Boolean Partial PartialMax Unknown)
7
+
8
+ attr_accessor :key, :query, :relevance_ranking_strategy, :mode, :snippet_length,
9
+ :enable_snippeting
10
+
11
+ def write_xml!(xml)
12
+ attributes = { "Key" => key }
13
+ %w(RelevanceRankingStrategy Mode SnippetLength EnableSnippeting).each do |attribute|
14
+ value = send(attribute.underscore)
15
+ attributes[attribute] = value.to_s if value
16
+ end
17
+
18
+ xml.mdata :Search, attributes, query
19
+ end
20
+
21
+ def mode=(new_mode)
22
+ if new_mode.nil?
23
+ @mode = nil
24
+ else
25
+ new_mode_normalized = new_mode.to_s.classify
26
+
27
+ if MODES.include?(new_mode_normalized)
28
+ @mode = new_mode_normalized
29
+ else
30
+ raise "#{new_mode} is not a valid mode. Valid modes are: #{MODES.join(", ")}"
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,26 @@
1
+ require 'mdex_client/mdata/node'
2
+
3
+ module MDEXClient
4
+ module MData
5
+ class Sort < Node
6
+ attr_accessor :key, :direction, :reference_geocode
7
+
8
+ def initialize_from_element!
9
+ @key = element["Key"]
10
+ @direction = element["Direction"]
11
+
12
+ rgc = element.xpath("mdata:ReferenceGeocode").first
13
+ @reference_geocode = Geocode.new(rgc) if rgc
14
+ end
15
+
16
+ def write_xml!(xml)
17
+ xml.mdata :Sort, "Key" => key, "Direction" => direction do |xml|
18
+ if reference_geocode
19
+ xml.mdata :ReferenceGeocode, "Latitude" => reference_geocode.latitude,
20
+ "Longitude" => reference_geocode.longitude
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module MDEXClient
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/mdex_client/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Nat Budin"]
6
+ gem.email = ["natbudin@gmail.com"]
7
+ gem.description = %q{A Rubyish API client for Endeca's MDEX search engine, using the XQuery API}
8
+ gem.summary = %q{Search client for Endeca MDEX engine}
9
+ gem.homepage = ""
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "mdex_client"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = MDEXClient::VERSION
17
+
18
+ gem.add_dependency "savon"
19
+ gem.add_dependency "nokogiri"
20
+ gem.add_development_dependency "rspec", "~> 2.6.0"
21
+ gem.add_development_dependency "rack", "~> 1.3.0"
22
+ gem.add_development_dependency "simplecov"
23
+ gem.add_development_dependency "simplecov-rcov"
24
+ gem.add_development_dependency "webmock", "~> 1.7.0"
25
+ end
@@ -0,0 +1,21 @@
1
+ # SimpleCov needs to be started first
2
+ require 'simplecov'
3
+ require 'simplecov-rcov'
4
+ SimpleCov.formatter = SimpleCov::Formatter::RcovFormatter
5
+ SimpleCov.start do
6
+ add_filter '.bundle/'
7
+ end
8
+
9
+ # Set up webmock
10
+ require 'webmock/rspec'
11
+
12
+ RSpec.configure do |config|
13
+ # == Mock Framework
14
+ #
15
+ # If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
16
+ #
17
+ # config.mock_with :mocha
18
+ # config.mock_with :flexmock
19
+ # config.mock_with :rr
20
+ config.mock_with :rspec
21
+ end
metadata ADDED
@@ -0,0 +1,151 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mdex_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Nat Budin
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-05-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: savon
16
+ requirement: &70271123124680 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70271123124680
25
+ - !ruby/object:Gem::Dependency
26
+ name: nokogiri
27
+ requirement: &70271123124260 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70271123124260
36
+ - !ruby/object:Gem::Dependency
37
+ name: rspec
38
+ requirement: &70271123123720 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 2.6.0
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70271123123720
47
+ - !ruby/object:Gem::Dependency
48
+ name: rack
49
+ requirement: &70271123123040 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.3.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70271123123040
58
+ - !ruby/object:Gem::Dependency
59
+ name: simplecov
60
+ requirement: &70271123122520 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70271123122520
69
+ - !ruby/object:Gem::Dependency
70
+ name: simplecov-rcov
71
+ requirement: &70271123121840 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70271123121840
80
+ - !ruby/object:Gem::Dependency
81
+ name: webmock
82
+ requirement: &70271123121100 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ~>
86
+ - !ruby/object:Gem::Version
87
+ version: 1.7.0
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70271123121100
91
+ description: A Rubyish API client for Endeca's MDEX search engine, using the XQuery
92
+ API
93
+ email:
94
+ - natbudin@gmail.com
95
+ executables: []
96
+ extensions: []
97
+ extra_rdoc_files: []
98
+ files:
99
+ - .gitignore
100
+ - Gemfile
101
+ - Rakefile
102
+ - lib/mdex_client.rb
103
+ - lib/mdex_client/active_record/extensions.rb
104
+ - lib/mdex_client/client.rb
105
+ - lib/mdex_client/fake_mdex.rb
106
+ - lib/mdex_client/fake_mdex/fake_mdex.rb
107
+ - lib/mdex_client/fake_mdex/mdex.wsdl
108
+ - lib/mdex_client/fake_mdex/mdex_response.xml
109
+ - lib/mdex_client/mdata/aggregate_record.rb
110
+ - lib/mdex_client/mdata/aggregation_key.rb
111
+ - lib/mdex_client/mdata/dimension.rb
112
+ - lib/mdex_client/mdata/dimension_value.rb
113
+ - lib/mdex_client/mdata/geocode.rb
114
+ - lib/mdex_client/mdata/navigation_query.rb
115
+ - lib/mdex_client/mdata/navigation_result.rb
116
+ - lib/mdex_client/mdata/node.rb
117
+ - lib/mdex_client/mdata/range_filter.rb
118
+ - lib/mdex_client/mdata/record.rb
119
+ - lib/mdex_client/mdata/refinement_config.rb
120
+ - lib/mdex_client/mdata/search.rb
121
+ - lib/mdex_client/mdata/sort.rb
122
+ - lib/mdex_client/version.rb
123
+ - mdex_client.gemspec
124
+ - spec/spec_helper.rb
125
+ homepage: ''
126
+ licenses: []
127
+ post_install_message:
128
+ rdoc_options: []
129
+ require_paths:
130
+ - lib
131
+ required_ruby_version: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ required_rubygems_version: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 1.8.10
146
+ signing_key:
147
+ specification_version: 3
148
+ summary: Search client for Endeca MDEX engine
149
+ test_files:
150
+ - spec/spec_helper.rb
151
+ has_rdoc: