motion-algolia-search 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA512:
3
+ data.tar.gz: 1a96438ce5383db590b627ce779a01660aece2e8237afee3df7fa0ec869a930d47f9e759fca1d27b3d2ec5ed9ac038aee1de2fadd4fcbbad50f4d98a2a3e9ee6
4
+ metadata.gz: 8610944362a42fc5e3bbde1ada0b2e9d624a6bd4668a88e97a9a110f43edeb6e475406014216d4e00d63f2c33e2a455a11ef4d8cbb76ae84284c1ca38aa76621
5
+ SHA1:
6
+ data.tar.gz: 3cdf7b614ef21d1654a503f4dc0053e81fac890b
7
+ metadata.gz: 13d23336fea5fc5c2262cf08077f612469f040ac
data/.gitignore ADDED
@@ -0,0 +1,16 @@
1
+ .repl_history
2
+ build
3
+ tags
4
+ app/pixate_code.rb
5
+ resources/*.nib
6
+ resources/*.momd
7
+ resources/*.storyboardc
8
+ .DS_Store
9
+ nbproject
10
+ .redcar
11
+ #*#
12
+ *~
13
+ *.sw[po]
14
+ .eprj
15
+ .sass-cache
16
+ .idea
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/motion-algolia-search/version', __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "motion-algolia-search"
6
+ s.version = MotionAlgoliaSearch::VERSION
7
+ s.authors = ["Joffrey Jaffeux"]
8
+ s.email = ["j.jaffeux@gmail.com"]
9
+ s.homepage = "https://github.com/algolia/rubymotion"
10
+ s.summary = "A RubyMotion gem for Algolia Offline Search SDK"
11
+ s.description = "A RubyMotion gem for Algolia Offline Search SDK"
12
+
13
+ s.files = `git ls-files`.split($\)
14
+ s.require_paths = ["lib"]
15
+
16
+ s.add_development_dependency 'rake'
17
+ end
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # Description
2
+
3
+ Simple integration of Algolia Offline Search SDK : http://www.algolia.com/ in your RubyMotion application.
4
+
5
+
6
+ # Installation
7
+
8
+ ```ruby
9
+ gem 'motion-algolia-search'
10
+ ```
11
+
12
+ Donwload the SDK (http://www.algolia.com/get-started/) and put in your vendor directory, then update your Rakefile :
13
+
14
+ ```ruby
15
+ app.algolia_search.license = "YOUR KEY"
16
+
17
+ app.vendor_project('vendor/AlgoliaSearch.framework',
18
+ :static,
19
+ :products => %w{AlgoliaSearch},
20
+ :headers_dir => 'Headers')
21
+ ```
22
+
23
+ # Example
24
+
25
+ See in app folder.
data/Rakefile ADDED
@@ -0,0 +1,17 @@
1
+ # -*- coding: utf-8 -*-
2
+ $:.unshift("/Library/RubyMotion/lib")
3
+ require 'motion/project'
4
+
5
+ $:.unshift("./lib/")
6
+ require './lib/motion/project/motion-algolia-search'
7
+
8
+ Motion::Project::App.setup do |app|
9
+ # Use `rake config' to see complete project settings.
10
+ app.name = 'motion-algolia-search'
11
+ app.algolia_search.license = "YOUR KEY"
12
+
13
+ app.vendor_project('vendor/AlgoliaSearch.framework',
14
+ :static,
15
+ :products => %w{AlgoliaSearch},
16
+ :headers_dir => 'Headers')
17
+ end
@@ -0,0 +1,3 @@
1
+ # AlgoliaSearch SDK launcher
2
+ # This file is automatically generated. Do not edit.
3
+ ASIndex.initLibWithLicenseKey("YOUR KEY")
@@ -0,0 +1,8 @@
1
+ class AppDelegate
2
+ def application(application, didFinishLaunchingWithOptions:launchOptions)
3
+ window = UIWindow.alloc.initWithFrame(UIScreen.mainScreen.bounds)
4
+ window.rootViewController = SearchViewController.alloc.init
5
+ window.makeKeyAndVisible
6
+ true
7
+ end
8
+ end
data/app/contact.rb ADDED
@@ -0,0 +1,29 @@
1
+ class Contact < NSObject
2
+ attr_accessor :name
3
+ attr_accessor :company
4
+
5
+ def initWithName(name, andCompany:company)
6
+ self.init
7
+ @name = name
8
+ @company = company
9
+ self
10
+ end
11
+
12
+ def serialize(writer)
13
+ writer.writeString(@name)
14
+ writer.writeString(@company)
15
+ end
16
+
17
+ def deserialize(reader, classVersion:version)
18
+ @name = reader.readString
19
+ @company = reader.readString
20
+ end
21
+
22
+ def getUID
23
+ @name
24
+ end
25
+
26
+ def textToIndex
27
+ [@name]
28
+ end
29
+ end
@@ -0,0 +1,19 @@
1
+ module SearchDisplay
2
+
3
+ def add_search_display
4
+ @search_bar = UISearchBar.alloc.initWithFrame([[0,0],[320,50]])
5
+ @search_bar.delegate = self
6
+ @search_bar.autocorrectionType = UITextAutocorrectionTypeNo
7
+ @search_bar.autocapitalizationType = UITextAutocapitalizationTypeNone
8
+ self.view.addSubview(@search_bar)
9
+
10
+ @search_display = UISearchDisplayController.alloc.initWithSearchBar(@search_bar, contentsController:self)
11
+ @search_display.delegate = self
12
+ @search_display.searchResultsDataSource = self
13
+ @search_display.searchResultsDelegate = self
14
+ @search_display.setActive(true, animated:true)
15
+
16
+ @search_bar.becomeFirstResponder
17
+ end
18
+
19
+ end
@@ -0,0 +1,76 @@
1
+ class SearchViewController < UIViewController
2
+ include SearchDisplay
3
+
4
+ # based on http://www.algolia.com/doc/ios2/#iOS_SearcObjectsAttributes
5
+ def viewDidLoad
6
+ super
7
+ self.view.backgroundColor = UIColor.whiteColor
8
+ self.add_search_display # boilerplate code, non related to algolia
9
+
10
+ # Index creation
11
+ @suggestions = nil
12
+ @as_index = ASIndex.alloc.initWithName("QuickStart", delegate:self, userDataClass:Contact)
13
+
14
+ # Indexation
15
+ # Each entry is a Cotact object defined in contact.rb
16
+ unless ASIndex.indexExists("QuickStart")
17
+ @as_index.setEntry(Contact.alloc.initWithName("Kate Bell", andCompany:"Creative Consulting"))
18
+ @as_index.setEntry(Contact.alloc.initWithName("Anna Haro", andCompany:"Apple Inc"))
19
+ @as_index.setEntry(Contact.alloc.initWithName("Anna Bell", andCompany:"Turba Corp"))
20
+ @as_index.publishChanges
21
+ end
22
+ end
23
+
24
+ def searchBar(search_bar, textDidChange:search_text)
25
+ # Search query in the index
26
+ @as_index.asyncSearch(ASSearchQuery.queryWithString(search_text))
27
+ end
28
+
29
+ def didSearch(index, result:result, query:query)
30
+ @suggestions = result
31
+ # Reload tableView based on results
32
+ @search_display.searchResultsTableView.reloadData
33
+ end
34
+
35
+ def tableView(tableView, cellForRowAtIndexPath:indexPath)
36
+ @reuseIdentifier ||= 'ALGOLIASEARCHCELL'
37
+
38
+ cell = tableView.dequeueReusableCellWithIdentifier(@reuseIdentifier)
39
+ if cell.nil?
40
+ cell = UITableViewCell.alloc.initWithStyle(UITableViewCellStyleDefault, reuseIdentifier:@reuseIdentifier)
41
+
42
+ name_label = ASUILabel.alloc.initWithFrame([[10, 5], [cell.frame.size.width - 20, cell.frame.size.height - 20]])
43
+ name_label.tag = 42
44
+ name_label.font = UIFont.fontWithName("Helvetica-Bold", size:20)
45
+ name_label.backgroundColor = UIColor.clearColor
46
+ name_label.textColor = UIColor.blackColor
47
+ cell.contentView.addSubview(name_label)
48
+
49
+ company_label = ASUILabel.alloc.initWithFrame([[10, cell.frame.size.height - 20],[cell.frame.size.width - 20, 20]])
50
+ company_label.tag = 43
51
+ company_label.font = UIFont.fontWithName("Helvetica", size:14)
52
+ company_label.backgroundColor = UIColor.clearColor
53
+ company_label.textColor = UIColor.blackColor
54
+ cell.contentView.addSubview(company_label)
55
+
56
+ cell.accessoryType = UITableViewCellAccessoryNone
57
+ end
58
+
59
+ hit = @suggestions.hits[indexPath.row]
60
+ contact = hit.userData
61
+ name_label = cell.viewWithTag(42)
62
+ company_label = cell.viewWithTag(43)
63
+
64
+ #highlight letters of the results
65
+ name_label.text = @as_index.highlight(contact.name, withHit:hit).highlightedText
66
+ company_label.text = contact.company
67
+
68
+ cell
69
+ end
70
+
71
+ # update number of rows when reloading tableView
72
+ def tableView(tableView, numberOfRowsInSection:section)
73
+ @suggestions.nil? ? 0 : @suggestions.hits.count
74
+ end
75
+
76
+ end
@@ -0,0 +1,5 @@
1
+ require 'motion-algolia-search/version'
2
+
3
+ unless defined?(Motion::Project::Config)
4
+ raise "This file must be required within a RubyMotion project Rakefile."
5
+ end
@@ -0,0 +1,3 @@
1
+ module MotionAlgoliaSearch
2
+ VERSION = "2.0.0"
3
+ end
@@ -0,0 +1,61 @@
1
+ unless defined?(Motion::Project::Config)
2
+ raise "This file must be required within a RubyMotion project Rakefile."
3
+ end
4
+
5
+ class AlgoliaSearchConfig
6
+ attr_accessor :license
7
+
8
+ def initialize(config)
9
+ @config = config
10
+ end
11
+
12
+ def license=(license)
13
+ @license = license
14
+ create_code
15
+ end
16
+
17
+ private
18
+
19
+ def create_code
20
+ unless @license
21
+ raise "Need to configure `app.algolia_search.license' variable"
22
+ end
23
+
24
+ code = <<EOF
25
+ # AlgoliaSearch SDK launcher
26
+ # This file is automatically generated. Do not edit.
27
+ ASIndex.initLibWithLicenseKey("#{@license}")
28
+ EOF
29
+
30
+ algolia_search_file = './app/algolia_search_config.rb'
31
+ create_stub(algolia_search_file, code)
32
+ add_file(algolia_search_file)
33
+ end
34
+
35
+ def create_stub(path, code)
36
+ if !File.exist?(path) or File.read(path) != code
37
+ File.open(path, 'w') { |io| io.write(code) }
38
+ end
39
+ end
40
+
41
+ def add_file(path)
42
+ files = @config.files.flatten
43
+ @config.files << path unless files.find { |x| File.expand_path(x) == File.expand_path(path) }
44
+ end
45
+ end
46
+
47
+ module Motion
48
+ module Project
49
+ class Config
50
+
51
+ variable :algolia_search
52
+
53
+ def algolia_search
54
+ @algolia_search ||= AlgoliaSearchConfig.new(self)
55
+ yield @algolia_search if block_given?
56
+ @algolia_search
57
+ end
58
+
59
+ end
60
+ end
61
+ end
Binary file
metadata ADDED
@@ -0,0 +1,72 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: motion-algolia-search
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Joffrey Jaffeux
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2013-04-16 00:00:00 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ prerelease: false
17
+ requirement: &id001 !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - &id002
20
+ - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: "0"
23
+ type: :development
24
+ version_requirements: *id001
25
+ description: A RubyMotion gem for Algolia Offline Search SDK
26
+ email:
27
+ - j.jaffeux@gmail.com
28
+ executables: []
29
+
30
+ extensions: []
31
+
32
+ extra_rdoc_files: []
33
+
34
+ files:
35
+ - .gitignore
36
+ - MotionAlgoliaSearch.gemspec
37
+ - README.md
38
+ - Rakefile
39
+ - app/algolia_search_config.rb
40
+ - app/app_delegate.rb
41
+ - app/contact.rb
42
+ - app/search_display.rb
43
+ - app/search_view_controller.rb
44
+ - lib/motion-algolia-search.rb
45
+ - lib/motion-algolia-search/version.rb
46
+ - lib/motion/project/motion-algolia-search.rb
47
+ - resources/Default-568h@2x.png
48
+ homepage: https://github.com/algolia/rubymotion
49
+ licenses: []
50
+
51
+ metadata: {}
52
+
53
+ post_install_message:
54
+ rdoc_options: []
55
+
56
+ require_paths:
57
+ - lib
58
+ required_ruby_version: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - *id002
61
+ required_rubygems_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - *id002
64
+ requirements: []
65
+
66
+ rubyforge_project:
67
+ rubygems_version: 2.0.3
68
+ signing_key:
69
+ specification_version: 4
70
+ summary: A RubyMotion gem for Algolia Offline Search SDK
71
+ test_files: []
72
+