ripplr 0.0.1.alpha → 0.0.2.beta

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -2,20 +2,12 @@ source :rubygems
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rails', '3.2.3'
5
+ gem 'ripple', "~> 0.9.5"
6
6
 
7
- gem 'ripple', :git => 'https://github.com/seancribbs/ripple.git', :ref => 'b6b37087'
8
- gem 'yajl-ruby'
9
- gem 'excon'
10
-
11
- group :development do
12
- gem 'pry'
13
- end
7
+ gem 'pry', :groups => [:development, :test]
14
8
 
15
9
  group :test do
16
- gem 'pry'
17
- gem 'rb-fsevent'
18
- gem 'guard-rspec'
19
- gem 'rspec-rails'
20
- gem 'rspec-given'
10
+ # gem 'rb-fsevent'
11
+ # gem 'guard-rspec'
12
+ gem 'rspec-given'
21
13
  end
data/Gemfile.lock ADDED
@@ -0,0 +1,54 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ripplr (0.0.1.alpha)
5
+ ripple (>= 0.9.5)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ activemodel (3.0.5)
11
+ activesupport (= 3.0.5)
12
+ builder (~> 2.1.2)
13
+ i18n (~> 0.4)
14
+ activesupport (3.0.5)
15
+ beefcake (0.3.2)
16
+ builder (2.1.2)
17
+ coderay (1.0.7)
18
+ diff-lcs (1.1.3)
19
+ i18n (0.6.1)
20
+ method_source (0.8)
21
+ pry (0.9.10)
22
+ coderay (~> 1.0.5)
23
+ method_source (~> 0.8)
24
+ slop (~> 3.3.1)
25
+ rake (0.9.2.2)
26
+ riak-client (0.9.8)
27
+ beefcake (= 0.3.2)
28
+ builder (~> 2.1.2)
29
+ i18n (>= 0.4.0)
30
+ ripple (0.9.5)
31
+ activemodel (~> 3.0.0)
32
+ activesupport (~> 3.0.0)
33
+ riak-client (~> 0.9.5)
34
+ rspec (2.11.0)
35
+ rspec-core (~> 2.11.0)
36
+ rspec-expectations (~> 2.11.0)
37
+ rspec-mocks (~> 2.11.0)
38
+ rspec-core (2.11.1)
39
+ rspec-expectations (2.11.3)
40
+ diff-lcs (~> 1.1.3)
41
+ rspec-given (1.6.0)
42
+ rspec (> 1.2.8)
43
+ rspec-mocks (2.11.2)
44
+ slop (3.3.3)
45
+
46
+ PLATFORMS
47
+ ruby
48
+
49
+ DEPENDENCIES
50
+ pry
51
+ rake
52
+ ripple (~> 0.9.5)
53
+ ripplr!
54
+ rspec-given
@@ -0,0 +1,9 @@
1
+ require 'ripplr/translation'
2
+
3
+ class Ripplr::KeyNotSpecifiedError
4
+ include Ripplr::Translation
5
+
6
+ def exception(message=t("key_not_specified"))
7
+ RuntimeError.new message
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ require File.join("ripplr", "errors", "key_not_specified_error")
@@ -0,0 +1,17 @@
1
+ module Ripplr
2
+ module Formatters
3
+ class Riak
4
+ def self.to_index(queryable_obj)
5
+ raise Ripplr::KeyNotSpecifiedError.new unless queryable_obj.respond_to?(:key)
6
+
7
+ # index_data = { :id => queryable_obj.key }
8
+
9
+ # queryable_obj.class.query_fields.each do |field|
10
+ # index_data.merge field.indexes_as(queryable_obj)
11
+ # end
12
+
13
+
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1 @@
1
+ require File.join("ripplr", "formatters", "riak")
@@ -0,0 +1,5 @@
1
+ require 'active_support/i18n'
2
+
3
+ Dir.glob(File.expand_path("../locale/*.yml", __FILE__)).each do |locale_file|
4
+ I18n.load_path << locale_file
5
+ end
@@ -0,0 +1,9 @@
1
+ module Ripplr
2
+ module Indexers
3
+ class Ripple
4
+ def self.index(queryable_obj)
5
+ ::Ripple.client.index queryable_obj.bucket_name, queryable_obj.indexes_as
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1 @@
1
+ require File.join("ripplr", "indexers", "ripple")
@@ -0,0 +1,3 @@
1
+ en:
2
+ ripplr:
3
+ key_not_specified: "Cannot index an object that does not specify a key."
@@ -0,0 +1,17 @@
1
+ module Ripplr
2
+ class QueryField
3
+ def initialize(type, property_name)
4
+ @type = type
5
+ @property = property_name
6
+ end
7
+
8
+ def indexes_as(queryable_object)
9
+ return { index_name(@type, @property) => queryable_object.send(@property) }
10
+ end
11
+
12
+ private
13
+ def index_name(type, property_name)
14
+ "#{property_name.to_s}_#{type.to_s}".to_sym
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,56 @@
1
+ module Ripplr
2
+ module Queryable
3
+ def index(indexer=Ripple.client)
4
+ indexer.index(self)
5
+ end
6
+
7
+ def remove_index(indexer=Ripple.client)
8
+ end
9
+
10
+ def bucket_name
11
+ self.class.bucket.name
12
+ end
13
+
14
+ def indexes_as
15
+ index_data = { :id => self.key }
16
+
17
+ self.class.query_fields.each do |field|
18
+ index_data.merge! field.indexes_as(self)
19
+ end
20
+ index_data
21
+ end
22
+
23
+ class << self
24
+ def included(base)
25
+ base.module_eval do
26
+ extend ActsAsMethods
27
+
28
+
29
+ end
30
+ end
31
+ end
32
+
33
+ module ActsAsMethods
34
+ def query_fields
35
+ @query_fields ||= Array.new
36
+ @query_fields
37
+ end
38
+
39
+ def queryable(&block)
40
+ block.call
41
+ end
42
+
43
+ def time(*names)
44
+ names.each do |name|
45
+ query_fields << Ripplr::QueryField.new(:dt, name)
46
+ end
47
+ end
48
+
49
+ def text(*names)
50
+ names.each do |name|
51
+ query_fields << Ripplr::QueryField.new(:text, name)
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,17 @@
1
+ require 'ripplr/i18n'
2
+ require 'riak/util/translation'
3
+
4
+ module Ripplr
5
+ module Translation
6
+ include Riak::Util::Translation
7
+
8
+ # The scope of i18n keys to search (:ripple).
9
+ def i18n_scope
10
+ :ripplr
11
+ end
12
+ end
13
+
14
+ # A dummy object so translations can be accessed without module
15
+ # inclusion.
16
+ Translator = Object.new.tap {|o| o.extend Translation }
17
+ end
@@ -1,3 +1,3 @@
1
1
  module Ripplr
2
- VERSION = "0.0.1.alpha"
2
+ VERSION = "0.0.2.beta"
3
3
  end
data/lib/ripplr.rb ADDED
@@ -0,0 +1,7 @@
1
+ require 'ripplr/queryable'
2
+ require 'ripplr/query_field'
3
+ require 'ripplr/indexers'
4
+ require 'ripplr/formatters'
5
+ require 'yaml'
6
+ require 'ripplr/translation'
7
+ require 'ripplr/errors'
data/ripplr.gemspec CHANGED
@@ -12,13 +12,9 @@ Gem::Specification.new do |gem|
12
12
  gem.authors = ["Matt Snyder"]
13
13
 
14
14
  # Deps
15
- gem.add_development_dependency "rspec", "~>2.11.0"
16
- gem.add_development_dependency 'rake'
17
- gem.add_dependency "riak-client", "~> 1.0.0"
18
- gem.add_dependency "ripple"
19
- # gem.add_dependency "activesupport", [">= 3.0.0", "< 3.3.0"]
20
- # gem.add_dependency "activemodel", [">= 3.0.0", "< 3.3.0"]
21
- gem.add_dependency "tzinfo"
15
+ gem.add_development_dependency "rspec-given", ">= 1.6.0"
16
+ gem.add_development_dependency "rake"
17
+ gem.add_dependency "ripple", ">= 0.9.5"
22
18
 
23
19
  # Files
24
20
  ignores = File.read(".gitignore").split(/\r?\n/).reject{ |f| f =~ /^(#.+|\s*)$/ }.map {|f| Dir[f] }.flatten
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ripplr::Indexers::Ripple do
4
+
5
+ describe "#index" do
6
+ Given (:model) { mock :bucket_name => 'my_bucket', :indexes_as => 'some json' }
7
+ Given { Ripple.client.should_receive(:index).with('my_bucket', 'some json').and_return true }
8
+ Then { Ripplr::Indexers::Ripple.index(model).should be_true }
9
+ end
10
+
11
+ end
@@ -0,0 +1,10 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ripplr::QueryField do
4
+ context "when text field and property is set" do
5
+ Given (:john) { Person.new :first_name => 'John' }
6
+ Given (:query_field) { Ripplr::QueryField.new :text, :first_name }
7
+ When (:result) { query_field.indexes_as john }
8
+ Then { result[:first_name_text].should == 'John' }
9
+ end
10
+ end
@@ -0,0 +1,51 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe Ripplr::Queryable do
5
+ context "when ripplr::queryable is included" do
6
+ Given (:a_class) { class AClass; include Ripplr::Queryable; end }
7
+ Then { a_class.included_modules.should include(Ripplr::Queryable) }
8
+ Then { a_class.new.should respond_to(:index) }
9
+ Then { a_class.new.should respond_to(:remove_index) }
10
+ Then { a_class.new.should respond_to(:bucket_name) }
11
+ end
12
+
13
+ describe "#bucket_name" do
14
+ Given { Person.bucket.should_receive(:name).and_return "people" }
15
+ Then { Person.new.bucket_name.should == "people" }
16
+ end
17
+
18
+ describe "#indexing" do
19
+ Given (:friend) { Person.new }
20
+ Given (:service) { mock :index => true }
21
+ Then { friend.index(service).should be_true }
22
+ end
23
+
24
+ describe "#indexes_as" do
25
+ context "when the object is queryable and has text fields" do
26
+ Given (:lawnmower) { Lift.new :title => "Lawnmower", :description => "It’s a variation of the classic dumbbell row so it trains the muscles of your back." }
27
+ Given { lawnmower.stub(:key).and_return "ABCDEF012345" }
28
+ When (:result) { lawnmower.indexes_as }
29
+ Then { result.should == {
30
+ :id => "ABCDEF012345",
31
+ :title_text => "Lawnmower",
32
+ :description_text => "It’s a variation of the classic dumbbell row so it trains the muscles of your back."
33
+ }
34
+ }
35
+ end
36
+
37
+ context "when the object is queryable and has text and date fields" do
38
+ Given (:entry) { LogEntry.new :description => "4x8 BB Power Clean @ 135lbs." }
39
+ Given (:time) { Time.now }
40
+ Given { entry.stub(:created_at).and_return time }
41
+ Given { entry.stub(:key).and_return "XYZ1020" }
42
+ When (:result) { entry.indexes_as }
43
+ Then { result.should == {
44
+ :id => "XYZ1020",
45
+ :description_text => "4x8 BB Power Clean @ 135lbs.",
46
+ :created_at_dt => time
47
+ }
48
+ }
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,5 @@
1
+ require 'rspec-given'
2
+ require 'ripplr'
3
+ require 'ripple'
4
+
5
+ require File.join("support", "models")
@@ -0,0 +1,10 @@
1
+ class Lift
2
+ include Ripple::Document
3
+ property :title, String
4
+ property :description, String
5
+
6
+ include Ripplr::Queryable
7
+ queryable do
8
+ text :title, :description
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class LogEntry
2
+ include Ripple::Document
3
+ property :created_at, Time
4
+ property :description, String
5
+
6
+ include Ripplr::Queryable
7
+ queryable do
8
+ text :description
9
+ time :created_at
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ class Person
2
+ include Ripple::Document
3
+ property :first_name, String
4
+ property :last_name, String
5
+
6
+ include Ripplr::Queryable
7
+ queryable do
8
+ text :first_name, :last_name
9
+ end
10
+ end
@@ -0,0 +1,3 @@
1
+ require File.join("support", "models", "person")
2
+ require File.join("support", "models", "lift")
3
+ require File.join("support", "models", "log_entry")
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ripplr
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.alpha
4
+ version: 0.0.2.beta
5
5
  prerelease: 6
6
6
  platform: ruby
7
7
  authors:
@@ -9,24 +9,24 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-05 00:00:00.000000000 Z
12
+ date: 2012-09-07 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rspec
15
+ name: rspec-given
16
16
  requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
- - - ~>
19
+ - - ! '>='
20
20
  - !ruby/object:Gem::Version
21
- version: 2.11.0
21
+ version: 1.6.0
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
- - - ~>
27
+ - - ! '>='
28
28
  - !ruby/object:Gem::Version
29
- version: 2.11.0
29
+ version: 1.6.0
30
30
  - !ruby/object:Gem::Dependency
31
31
  name: rake
32
32
  requirement: !ruby/object:Gem::Requirement
@@ -43,22 +43,6 @@ dependencies:
43
43
  - - ! '>='
44
44
  - !ruby/object:Gem::Version
45
45
  version: '0'
46
- - !ruby/object:Gem::Dependency
47
- name: riak-client
48
- requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ~>
52
- - !ruby/object:Gem::Version
53
- version: 1.0.0
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
- requirements:
59
- - - ~>
60
- - !ruby/object:Gem::Version
61
- version: 1.0.0
62
46
  - !ruby/object:Gem::Dependency
63
47
  name: ripple
64
48
  requirement: !ruby/object:Gem::Requirement
@@ -66,23 +50,7 @@ dependencies:
66
50
  requirements:
67
51
  - - ! '>='
68
52
  - !ruby/object:Gem::Version
69
- version: '0'
70
- type: :runtime
71
- prerelease: false
72
- version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: tzinfo
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
53
+ version: 0.9.5
86
54
  type: :runtime
87
55
  prerelease: false
88
56
  version_requirements: !ruby/object:Gem::Requirement
@@ -90,7 +58,7 @@ dependencies:
90
58
  requirements:
91
59
  - - ! '>='
92
60
  - !ruby/object:Gem::Version
93
- version: '0'
61
+ version: 0.9.5
94
62
  description: Ripplr provides a lower barrier to entry for developers wishing to migrate
95
63
  to Riak. Ripplr focuses on enhancing the use of the Ripple Gem by adding Riak Search
96
64
  functionality to your objects.
@@ -101,10 +69,31 @@ extensions: []
101
69
  extra_rdoc_files: []
102
70
  files:
103
71
  - Gemfile
72
+ - Gemfile.lock
73
+ - lib/ripplr/errors/key_not_specified_error.rb
74
+ - lib/ripplr/errors.rb
75
+ - lib/ripplr/formatters/riak.rb
76
+ - lib/ripplr/formatters.rb
77
+ - lib/ripplr/i18n.rb
78
+ - lib/ripplr/indexers/ripple.rb
79
+ - lib/ripplr/indexers.rb
80
+ - lib/ripplr/locale/en.yml
81
+ - lib/ripplr/query_field.rb
82
+ - lib/ripplr/queryable.rb
83
+ - lib/ripplr/translation.rb
104
84
  - lib/ripplr/version.rb
85
+ - lib/ripplr.rb
105
86
  - Rakefile
106
87
  - README.md
107
88
  - ripplr.gemspec
89
+ - spec/ripplr/indexers/ripple_spec.rb
90
+ - spec/ripplr/query_field_spec.rb
91
+ - spec/ripplr/queryable_spec.rb
92
+ - spec/spec_helper.rb
93
+ - spec/support/models/lift.rb
94
+ - spec/support/models/log_entry.rb
95
+ - spec/support/models/person.rb
96
+ - spec/support/models.rb
108
97
  - .gitignore
109
98
  homepage: https://github.com/validas/Ripplr
110
99
  licenses: []
@@ -132,4 +121,12 @@ specification_version: 3
132
121
  summary: Ripplr is a library to ease the use of Riak Search from within Rails when
133
122
  using Ripple and Riak Client.
134
123
  test_files:
124
+ - spec/ripplr/indexers/ripple_spec.rb
125
+ - spec/ripplr/query_field_spec.rb
126
+ - spec/ripplr/queryable_spec.rb
127
+ - spec/spec_helper.rb
128
+ - spec/support/models/lift.rb
129
+ - spec/support/models/log_entry.rb
130
+ - spec/support/models/person.rb
131
+ - spec/support/models.rb
135
132
  - .gitignore