tyrion 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,6 +1,9 @@
1
1
  module Tyrion
2
- module Attributes
3
- extend ActiveSupport::Concern
2
+ module Attributes
3
+ def self.included(receiver)
4
+ receiver.extend ClassMethods
5
+ receiver.send :include, InstanceMethods
6
+ end
4
7
 
5
8
  module ClassMethods
6
9
  def field(name, type = String)
@@ -14,11 +17,6 @@ module Tyrion
14
17
  module InstanceMethods
15
18
  attr_reader :attributes
16
19
 
17
- def initialize
18
- super
19
- @attributes = {}
20
- end
21
-
22
20
  def method_missing(name, *args)
23
21
  attr = name.to_s
24
22
  return super unless attributes.has_key? attr.gsub("=", "")
@@ -1,10 +1,13 @@
1
1
  module Tyrion
2
2
  module Components
3
- extend ActiveSupport::Concern
4
-
5
- include Tyrion::Attributes
6
- include Tyrion::Persistence
7
- include Tyrion::Querying
8
- include Tyrion::Storage
3
+ def self.included(receiver)
4
+ receiver.class_eval do
5
+ include Tyrion::Attributes
6
+ include Tyrion::Validations
7
+ include Tyrion::Persistence
8
+ include Tyrion::Querying
9
+ include Tyrion::Storage
10
+ end
11
+ end
9
12
  end
10
13
  end
@@ -2,8 +2,14 @@ module Tyrion
2
2
 
3
3
  # Base module to persist objects.
4
4
  module Document
5
- extend ActiveSupport::Concern
6
- include Tyrion::Components
5
+ def self.included(receiver)
6
+ receiver.extend ClassMethods
7
+
8
+ receiver.class_eval do
9
+ include Tyrion::Components
10
+ include InstanceMethods
11
+ end
12
+ end
7
13
 
8
14
  module ClassMethods
9
15
  protected
@@ -24,6 +30,11 @@ module Tyrion
24
30
  other.attributes == attributes
25
31
  end
26
32
 
33
+ def initialize(attrs = {})
34
+ @attributes = attrs.stringify_keys
35
+ @new_document = true
36
+ end
37
+
27
38
  private
28
39
 
29
40
  def klass_name
@@ -1,10 +1,13 @@
1
1
  module Tyrion
2
2
  module Persistence
3
- extend ActiveSupport::Concern
3
+ def self.included(receiver)
4
+ receiver.extend ClassMethods
5
+ receiver.send :include, InstanceMethods
6
+ end
4
7
 
5
8
  module ClassMethods
6
9
  def create attributes = {}
7
- new.tap do |n|
10
+ new(attributes).tap do |n|
8
11
  attributes.each_pair{ |k, v| n.send(:write_attribute, k.to_s, v) }
9
12
  end
10
13
  end
@@ -22,16 +25,27 @@ module Tyrion
22
25
  end
23
26
  end
24
27
 
25
- module InstanceMethods
28
+ module InstanceMethods
26
29
  def save
27
- self.class.storage[klass_name] << self
28
- self.class.save_storage klass_name
30
+ if valid?
31
+ self.class.storage[klass_name] << self
32
+ self.class.save_storage klass_name
33
+ @new_document = false
34
+
35
+ true
36
+ else
37
+ false
38
+ end
29
39
  end
30
40
 
31
41
  def delete
32
42
  self.class.storage[klass_name].delete_if{ |doc| self == doc }
33
43
  self.class.save_storage klass_name
34
44
  end
45
+
46
+ def new_document?
47
+ @new_document
48
+ end
35
49
  end
36
50
  end
37
51
  end
@@ -1,6 +1,8 @@
1
1
  module Tyrion
2
2
  module Querying
3
- extend ActiveSupport::Concern
3
+ def self.included(receiver)
4
+ receiver.extend ClassMethods
5
+ end
4
6
 
5
7
  module ClassMethods
6
8
  def all
@@ -44,8 +46,5 @@ module Tyrion
44
46
  end
45
47
  end
46
48
  end
47
-
48
- module InstanceMethods
49
- end
50
49
  end
51
50
  end
@@ -1,9 +1,9 @@
1
1
  module Tyrion
2
2
  module Storage
3
- extend ActiveSupport::Concern
4
-
5
- included do
6
- reload unless self == Tyrion::Components
3
+ def self.included(receiver)
4
+ receiver.extend ClassMethods
5
+
6
+ receiver.reload unless receiver == Tyrion::Components
7
7
  end
8
8
 
9
9
  module ClassMethods
@@ -29,8 +29,6 @@ module Tyrion
29
29
  File.open(path, 'w') do |f|
30
30
  f.puts MultiJson.encode(storage[klass_name].map &:attributes)
31
31
  end
32
-
33
- true
34
32
  end
35
33
 
36
34
  protected
@@ -39,8 +37,5 @@ module Tyrion
39
37
  File.join(Connection.path, klass_name + ".json")
40
38
  end
41
39
  end
42
-
43
- module InstanceMethods
44
- end
45
40
  end
46
41
  end
@@ -0,0 +1,10 @@
1
+ module Tyrion
2
+ module Validations
3
+ def self.included(receiver)
4
+ receiver.class_eval do
5
+ include ActiveModel::Validations
6
+ include ActiveModel::Conversion
7
+ end
8
+ end
9
+ end
10
+ end
@@ -1,3 +1,3 @@
1
1
  module Tyrion #:nodoc:
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/tyrion.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'multi_json'
2
- require 'active_support'
2
+ require 'active_model'
3
3
 
4
4
  require 'tyrion/version'
5
5
  require 'tyrion/connection'
@@ -9,5 +9,6 @@ require 'tyrion/persistence'
9
9
  require 'tyrion/querying'
10
10
  require 'tyrion/storage'
11
11
  require 'tyrion/components'
12
+ require 'tyrion/validations'
12
13
 
13
14
  require 'tyrion/document'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tyrion
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-09-22 00:00:00.000000000 +02:00
13
- default_executable:
12
+ date: 2011-12-29 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: multi_json
17
- requirement: &70236571329080 !ruby/object:Gem::Requirement
16
+ requirement: &70281257801860 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
19
  - - ! '>='
@@ -22,10 +21,10 @@ dependencies:
22
21
  version: '0'
23
22
  type: :runtime
24
23
  prerelease: false
25
- version_requirements: *70236571329080
24
+ version_requirements: *70281257801860
26
25
  - !ruby/object:Gem::Dependency
27
26
  name: json_pure
28
- requirement: &70236571328660 !ruby/object:Gem::Requirement
27
+ requirement: &70281257801040 !ruby/object:Gem::Requirement
29
28
  none: false
30
29
  requirements:
31
30
  - - ! '>='
@@ -33,21 +32,21 @@ dependencies:
33
32
  version: '0'
34
33
  type: :runtime
35
34
  prerelease: false
36
- version_requirements: *70236571328660
35
+ version_requirements: *70281257801040
37
36
  - !ruby/object:Gem::Dependency
38
- name: active_support
39
- requirement: &70236573373400 !ruby/object:Gem::Requirement
37
+ name: activemodel
38
+ requirement: &70281257816640 !ruby/object:Gem::Requirement
40
39
  none: false
41
40
  requirements:
42
- - - ! '>='
41
+ - - ~>
43
42
  - !ruby/object:Gem::Version
44
- version: '0'
43
+ version: 3.1.0
45
44
  type: :runtime
46
45
  prerelease: false
47
- version_requirements: *70236573373400
46
+ version_requirements: *70281257816640
48
47
  - !ruby/object:Gem::Dependency
49
48
  name: rspec
50
- requirement: &70236573372980 !ruby/object:Gem::Requirement
49
+ requirement: &70281257815820 !ruby/object:Gem::Requirement
51
50
  none: false
52
51
  requirements:
53
52
  - - ! '>='
@@ -55,10 +54,10 @@ dependencies:
55
54
  version: '0'
56
55
  type: :development
57
56
  prerelease: false
58
- version_requirements: *70236573372980
57
+ version_requirements: *70281257815820
59
58
  - !ruby/object:Gem::Dependency
60
59
  name: simplecov
61
- requirement: &70236573372560 !ruby/object:Gem::Requirement
60
+ requirement: &70281257814980 !ruby/object:Gem::Requirement
62
61
  none: false
63
62
  requirements:
64
63
  - - ! '>='
@@ -66,7 +65,7 @@ dependencies:
66
65
  version: '0'
67
66
  type: :development
68
67
  prerelease: false
69
- version_requirements: *70236573372560
68
+ version_requirements: *70281257814980
70
69
  description: Tyrion's goal is to provide a fast (as in _easy to setup_) and dirty
71
70
  unstructured document store.
72
71
  email:
@@ -75,14 +74,6 @@ executables: []
75
74
  extensions: []
76
75
  extra_rdoc_files: []
77
76
  files:
78
- - .gitignore
79
- - .rspec
80
- - .travis.yml
81
- - Gemfile
82
- - LICENSE
83
- - README.markdown
84
- - Rakefile
85
- - lib/tyrion.rb
86
77
  - lib/tyrion/attributes.rb
87
78
  - lib/tyrion/components.rb
88
79
  - lib/tyrion/connection.rb
@@ -90,15 +81,13 @@ files:
90
81
  - lib/tyrion/persistence.rb
91
82
  - lib/tyrion/querying.rb
92
83
  - lib/tyrion/storage.rb
84
+ - lib/tyrion/validations.rb
93
85
  - lib/tyrion/version.rb
94
- - spec/connection_spec.rb
95
- - spec/document_spec.rb
96
- - spec/examples/post.rb
97
- - spec/fixtures/posts.yml
98
- - spec/test_helper.rb
99
- - tyrion.gemspec
100
- has_rdoc: true
101
- homepage: http://github.com/
86
+ - lib/tyrion.rb
87
+ - LICENSE
88
+ - README.markdown
89
+ - Rakefile
90
+ homepage: http://github.com/razielgn/tyrion
102
91
  licenses: []
103
92
  post_install_message:
104
93
  rdoc_options: []
@@ -118,13 +107,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
107
  version: '0'
119
108
  requirements: []
120
109
  rubyforge_project:
121
- rubygems_version: 1.6.2
110
+ rubygems_version: 1.8.11
122
111
  signing_key:
123
112
  specification_version: 3
124
113
  summary: Tyrion is a small JSON ODM
125
- test_files:
126
- - spec/connection_spec.rb
127
- - spec/document_spec.rb
128
- - spec/examples/post.rb
129
- - spec/fixtures/posts.yml
130
- - spec/test_helper.rb
114
+ test_files: []
115
+ has_rdoc:
data/.gitignore DELETED
@@ -1,24 +0,0 @@
1
- .DS_Store?
2
- .DS_Store
3
- ehthumbs.db
4
- Icon?
5
- Thumbs.db
6
-
7
- # Rails
8
- coverage
9
- rdoc
10
- tmp
11
- pkg
12
- *.gem
13
- *.rbc
14
- lib/bundler/man
15
- spec/reports
16
- .config
17
- .bundle
18
-
19
- # YARD artifacts
20
- .yardoc
21
- _yardoc
22
- doc/
23
-
24
- Gemfile.lock
data/.rspec DELETED
@@ -1 +0,0 @@
1
- --color
data/.travis.yml DELETED
@@ -1,11 +0,0 @@
1
- rvm:
2
- - 1.8.7
3
- - 1.9.2
4
- - 1.9.3
5
- - ruby-head
6
- - ree
7
- - rbx
8
- - rbx-2.0
9
- - jruby
10
-
11
- script: 'bundle exec rspec spec'
data/Gemfile DELETED
@@ -1,4 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in tyrion.gemspec
4
- gemspec
@@ -1,22 +0,0 @@
1
- require 'test_helper'
2
-
3
- describe Tyrion::Connection do
4
- before{ @original_path = subject.path }
5
- after{ subject.path = @original_path }
6
-
7
- describe '.path' do
8
- it 'should raise an exception if no path is set' do
9
- expect do
10
- subject.path = nil
11
- subject.path
12
- end.to raise_exception
13
- end
14
- end
15
-
16
- describe '.path=' do
17
- it 'should set the path correctly' do
18
- subject.path = ENV['HOME']
19
- subject.path.should == ENV['HOME']
20
- end
21
- end
22
- end
@@ -1,133 +0,0 @@
1
- require 'test_helper'
2
- require 'examples/post'
3
-
4
- describe Tyrion::Document do
5
-
6
- let! :yml_posts do
7
- YAML.load_file File.join(File.dirname(__FILE__), 'fixtures', 'posts.yml')
8
- end
9
-
10
- before :each do
11
- Post.reload
12
-
13
- yml_posts.each do |p|
14
- Post.create! p
15
- end
16
- end
17
-
18
- it 'should survive a reload' do
19
- Post.reload
20
- Post.all.count.should == yml_posts.count
21
- end
22
-
23
- describe ".create" do
24
- it 'should create a new instance with given attributes' do
25
- post = Post.create :title => "Title", :body => "Body"
26
- post.title.should == "Title"
27
- post.body.should == "Body"
28
- end
29
- end
30
-
31
- describe ".all" do
32
- it 'should find three posts' do
33
- Post.all.count.should == yml_posts.count
34
- end
35
- end
36
-
37
- describe ".find_by_" do
38
- context "when performing the search without a regexp" do
39
- it "should return a single value" do
40
- search = Post.find_by_title("Hello")
41
- search.should_not be_nil
42
- search.should_not be_a(Array)
43
- end
44
-
45
- it 'should return the first document found' do
46
- search = Post.find_by_rank(2)
47
- search.title.should == "Testing"
48
- end
49
-
50
- it "should return nil if nothing is found" do
51
- Post.find_by_title(5).should be_nil
52
- end
53
- end
54
-
55
- context "when performing the search with a regexp" do
56
- it "should return a single value" do
57
- search = Post.find_by_title(/Hello/).should_not be_nil
58
- search.should_not be_nil
59
- search.should_not be_a(Array)
60
- end
61
-
62
- it "should return nil if nothing is found" do
63
- Post.find_by_title(/^u/).should be_nil
64
- end
65
- end
66
-
67
- it 'should raise an exception if the search is performed without arguments' do
68
- expect do
69
- Post.find_by_body
70
- end.to raise_exception
71
- end
72
-
73
- it 'should raise an exception if the search is performed on an unknown attribute' do
74
- expect do
75
- Post.find_by_id
76
- end.to raise_exception
77
- end
78
- end
79
-
80
- describe ".remove_all" do
81
- it 'should delete every document' do
82
- Post.delete_all
83
- Post.all.count.should == 0
84
- end
85
- end
86
-
87
- describe ".remove" do
88
- it "should remove all matching documents" do
89
- criteria = { :rank => 2, :body => /!$/ }
90
- Post.delete(criteria)
91
- Post.where(criteria).should be_empty
92
- end
93
- end
94
-
95
- describe ".where" do
96
- it 'should return an array on matching documents' do
97
- search = Post.where(:rank => 2, :body => /!$/)
98
- search.should_not be_nil
99
- search.should be_a(Array)
100
- search.count.should == 2
101
- end
102
-
103
- it 'shoudl return an empty array if no documents are matched' do
104
- Post.where(:title => /e/, :body => /^A/, :rank => 9000).should be_empty
105
- end
106
- end
107
-
108
- describe "#save" do
109
- it 'should save a new document' do
110
- post = Post.new
111
- post.title = "Title"
112
- post.body = "Body"
113
- post.save.should be_true
114
- end
115
- end
116
-
117
- describe "#method_missing" do
118
- it 'should allow to read and update new attributes' do
119
- post = Post.new
120
- post.send :write_attribute, :comments, 1
121
- post.comments.should == 1
122
- post.comments = 2
123
- post.comments.should == 2
124
- end
125
- end
126
-
127
- describe "#delete" do
128
- it 'should remove the document' do
129
- Post.find_by_title("Hello").delete
130
- Post.find_by_title("Hello").should be_nil
131
- end
132
- end
133
- end
@@ -1,7 +0,0 @@
1
- class Post
2
- include Tyrion::Document
3
-
4
- field :rank
5
- field :title
6
- field :body
7
- end
@@ -1,10 +0,0 @@
1
- ---
2
- - title: Hello
3
- body: "Hi there, this is my new blog!"
4
- rank: 1
5
- - title: Testing
6
- body: "Just testing some stuff around!"
7
- rank: 2
8
- - title: An idea
9
- body: "I've got an idea, lemme try something!"
10
- rank: 2
data/spec/test_helper.rb DELETED
@@ -1,24 +0,0 @@
1
- require 'simplecov'
2
- SimpleCov.start
3
-
4
- require 'tmpdir'
5
- require 'fileutils'
6
-
7
- require 'tyrion'
8
-
9
- tmpdir = Dir.mktmpdir
10
- Tyrion::Connection.path = tmpdir
11
-
12
- RSpec.configure do |config|
13
- config.before(:each) do
14
- Tyrion::Connection.path = Dir.mktmpdir
15
- end
16
-
17
- config.after(:each) do
18
- FileUtils.rm_rf Tyrion::Connection.path
19
- end
20
-
21
- config.after(:suite) do
22
- FileUtils.rm_rf tmpdir
23
- end
24
- end
data/tyrion.gemspec DELETED
@@ -1,25 +0,0 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "tyrion/version"
4
-
5
- Gem::Specification.new do |s|
6
- s.name = "tyrion"
7
- s.version = Tyrion::VERSION
8
- s.authors = ["Federico Ravasio"]
9
- s.email = ["ravasio.federico@gmail.com"]
10
- s.homepage = "http://github.com/"
11
- s.summary = %q{Tyrion is a small JSON ODM}
12
- s.description = %q{Tyrion's goal is to provide a fast (as in _easy to setup_) and dirty unstructured document store.}
13
-
14
- s.files = `git ls-files`.split("\n")
15
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
17
- s.require_paths = ["lib"]
18
-
19
- s.add_dependency 'multi_json'
20
- s.add_dependency 'json_pure'
21
- s.add_dependency 'active_support'
22
-
23
- s.add_development_dependency 'rspec'
24
- s.add_development_dependency 'simplecov'
25
- end