data_mapped 0.0.1 → 0.0.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01bded4d2da5ec16f311a87116a937582a0ee762
4
- data.tar.gz: 3dc344357c0884312785568d6cbe51df84cf08ec
3
+ metadata.gz: 335c405bdd0df4ca6217569d675c938553473d37
4
+ data.tar.gz: 3e78dace180017e3c8424f036b2243f8a3973a13
5
5
  SHA512:
6
- metadata.gz: 53d4d0f398569b675652f73ff26d60ca10e1ac55c3b75ad24c8f78367279cf32155fb07bf0e0385c875c9a06024b9982c9fc7a5f49695c33138f5c0aab32418c
7
- data.tar.gz: d1d4f8bbeff670e0ee03bab66e8d5ab27220ad63597c5eb23675934675e4c165c330b36e578e37f3505e6765098d85145381a816198cd868aa62fd90135bb31b
6
+ metadata.gz: 26d26bf585825d9b62a7442118f72d13c34309c4c7447b21e4d6a6a99025247cf2b68393873cc68c170405e6290c1d9a39ed6215f0d58cf5c9f5b78409bac211
7
+ data.tar.gz: 12e8c7fbcc73ca1a5eae2df3a322c02b60eadd4fbad34c62a9d06710ae2df22013e245bb72a20306200c6beb33381d3dfd10d8a318eda0cbf11f5076a1febcfa
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2013 Raj Shah
1
+ Copyright (c) 2013 Rajiv Bakulesh Shah
2
2
 
3
3
  MIT License
4
4
 
data/README.md CHANGED
@@ -1,6 +1,12 @@
1
1
  # DataMapped
2
2
 
3
- TODO: Write a gem description
3
+ Ruby mixins for [DataMapper](http://datamapper.org/).
4
+ [Don't repeat yourself](#normal-model),
5
+ [control your join tables](#join-model-for-a-join-table),
6
+ [prevent your resources from being deleted](#permanent-model-that-cant-be-destroyed),
7
+ and [full-text search](#searchable-model) across your resources.
8
+
9
+
4
10
 
5
11
  ## Installation
6
12
 
@@ -16,9 +22,137 @@ Or install it yourself as:
16
22
 
17
23
  $ gem install data_mapped
18
24
 
25
+
26
+
19
27
  ## Usage
20
28
 
21
- TODO: Write usage instructions here
29
+ ### Normal Model
30
+
31
+ This mixin sets up your class for DataMapper, and adds `@id`, `@created_at`,
32
+ and `@updated_at` properties that behave as expected.
33
+
34
+ **Rationale**: Don't repeat yourself. Don't manually add the same standard
35
+ properties to each of your models.
36
+
37
+ require 'data_mapped/model'
38
+
39
+ class Movie
40
+ include DataMapped::Model
41
+ property :title, String, required: true
42
+ property :description, Text
43
+ end
44
+
45
+ ### Join Model (for a Join Table)
46
+
47
+ This mixin sets up your class for DataMapper, and adds `@created_at` and
48
+ `@updated_at` properties that behave as expected. This join model differs
49
+ from the [normal model](#normal-model) in that the join model doesn't add an
50
+ `@id` property, as it expects for your class to define a composite primary key
51
+ using `#belongs_to` relationships.
52
+
53
+ **Rationale**: Tightly control your many-to-many associations. This is a
54
+ helpful pattern to do something to a movie resource any time an actor is
55
+ associated with it.
56
+
57
+ require 'data_mapped/join'
58
+ require 'data_mapped/model'
59
+
60
+ class Movie
61
+ include DataMapped::Model
62
+ property :title, String, required: true
63
+ property :description, Text
64
+ has n, :actors, through: Resource
65
+ end
66
+
67
+ class Actor
68
+ include DataMapped::Model
69
+ property :name, String, required: true
70
+ has n, :movies, through: Resource
71
+ end
72
+
73
+ class ActorMovie
74
+ include DataMapped::Join
75
+ belongs_to :actor, key: true
76
+ belongs_to :movie, key: true
77
+ end
78
+
79
+ **Integration note**: Your join model class name must be a
80
+ [Pascal case](http://c2.com/cgi/wiki?PascalCase), alphabetized concatenation
81
+ of the names of the two models that you're joining. Internally, DataMapper
82
+ introspects your join model class name and uses it to determine the name of
83
+ the join table in your database.
84
+
85
+ ### Permanent Model (that Can't be Destroyed)
86
+
87
+ This mixin prevents resources of your class from being destroyed (at least in
88
+ the typical fashion using
89
+ [`#destroy`](http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Resource#destroy-instance_method)).
90
+ It's meant to be used in conjunction with either the
91
+ [normal model](#normal-model) or the
92
+ [join model](#join-model-for-a-join-table) mixin.
93
+
94
+ **Rationale**: Prevent accidentally deleting resources that shouldn't be
95
+ deleted, if you have itchy fingers and play around too much in `irb` on
96
+ production like I do. Our use case is that movies should be created, read,
97
+ and updated, but never deleted.
98
+
99
+ require 'data_mapped/model'
100
+ require 'data_mapped/permanent'
101
+
102
+ class Movie
103
+ include DataMapped::Model
104
+ include DataMapped::Permanent
105
+ property :title, String, required: true
106
+ property :description, Text
107
+ end
108
+
109
+ **Integration note**: You can still delete permanent models with
110
+ [`#destroy!`](http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Resource#destroy%21-instance_method).
111
+ In general, make a practice out of staying away from DataMapper's unsafe bang
112
+ (!) methods. These
113
+ [bang methods don't run validators or callbacks](http://datamapper.org/docs/create_and_destroy.html).
114
+ :-(
115
+
116
+ ### Searchable Model
117
+
118
+ This mixin duct tapes your class together with
119
+ [Sunspot](http://sunspot.github.io/) and
120
+ [Solr](https://lucene.apache.org/solr/), and makes your class's resources
121
+ indexed and searchable. It's meant to be used in conjunction with the
122
+ [normal model](#normal-model) mixin.
123
+
124
+ **Rationale**: Everyone loves full-text search, and this makes it easy to get
125
+ DataMapper to talk to Sunspot. Include this mixin, define your model, then
126
+ use
127
+ [Sunspot's powerful DSL](http://sunspot.github.io/docs/index.html#Indexing_In_Depth)
128
+ to define what should be indexed and how it should be weighted.
129
+
130
+ require 'data_mapped/model'
131
+ require 'data_mapped/searchable'
132
+
133
+ class Movie
134
+ include DataMapped::Model
135
+ include DataMapped::Searchable
136
+ property :title, String, required: true
137
+ property :description, Text
138
+ has n, :actors, through: Resource
139
+
140
+ searchable auto_index: true, auto_remove: true do
141
+ text :title, boost: 2.0
142
+ text :description
143
+ text :actor_names, boost: 1.5 do
144
+ self.actors.map(&:name).join(', ')
145
+ end
146
+ end
147
+ end
148
+
149
+ class Actor
150
+ include DataMapped::Model
151
+ property :name, String, required: true
152
+ has n, :movies, through: Resource
153
+ end
154
+
155
+
22
156
 
23
157
  ## Contributing
24
158
 
data/data_mapped.gemspec CHANGED
@@ -6,11 +6,11 @@ require 'data_mapped/version'
6
6
  Gem::Specification.new do |spec|
7
7
  spec.name = "data_mapped"
8
8
  spec.version = DataMapped::VERSION
9
- spec.authors = ["Raj Shah"]
9
+ spec.authors = ["Rajiv Bakulesh Shah"]
10
10
  spec.email = ["brainix@gmail.com"]
11
- spec.description = %q{Helpful mixins for DataMapper}
12
- spec.summary = %q{Helpful mixins for DataMapper}
13
- spec.homepage = ""
11
+ spec.description = %q{Mixins for DataMapper}
12
+ spec.summary = %q{Mixins for DataMapper}
13
+ spec.homepage = "https://github.com/brainix/data_mapped"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
@@ -1,3 +1,11 @@
1
+ #-----------------------------------------------------------------------------#
2
+ # join.rb #
3
+ # #
4
+ # Copyright (c) 2013, Rajiv Bakulesh Shah. #
5
+ #-----------------------------------------------------------------------------#
6
+
7
+
8
+
1
9
  require 'data_mapper'
2
10
 
3
11
 
@@ -1,3 +1,11 @@
1
+ #-----------------------------------------------------------------------------#
2
+ # model.rb #
3
+ # #
4
+ # Copyright (c) 2013, Rajiv Bakulesh Shah. #
5
+ #-----------------------------------------------------------------------------#
6
+
7
+
8
+
1
9
  require 'data_mapper'
2
10
 
3
11
 
@@ -1,3 +1,11 @@
1
+ #-----------------------------------------------------------------------------#
2
+ # permanent.rb #
3
+ # #
4
+ # Copyright (c) 2013, Rajiv Bakulesh Shah. #
5
+ #-----------------------------------------------------------------------------#
6
+
7
+
8
+
1
9
  require 'data_mapper'
2
10
 
3
11
 
@@ -15,9 +23,7 @@ module DataMapped
15
23
  DataMapper::Model.append_inclusions(InstanceMethods)
16
24
 
17
25
  def self.included(other)
18
- other.class_eval do
19
- before :destroy, :vomit_before_destruction
20
- end
26
+ other.class_eval { before :destroy, :vomit_before_destruction }
21
27
  end
22
28
 
23
29
  end
@@ -1,3 +1,11 @@
1
+ #-----------------------------------------------------------------------------#
2
+ # searchable.rb #
3
+ # #
4
+ # Copyright (c) 2013, Rajiv Bakulesh Shah. #
5
+ #-----------------------------------------------------------------------------#
6
+
7
+
8
+
1
9
  require 'active_support/all'
2
10
  require 'data_mapper'
3
11
  require 'sunspot'
@@ -25,7 +33,11 @@ module DataMapped
25
33
  end
26
34
 
27
35
  def self.included(other)
28
- other.class_eval { alias_method(:new_record?, :new?) }
36
+ other.class_eval do
37
+ alias_method(:new_record?, :new?)
38
+ after :save, :reindex
39
+ after :destroy, :reindex
40
+ end
29
41
  other.extend Sunspot::Rails::Searchable::ActsAsMethods
30
42
  Sunspot::Adapters::DataAccessor.register(DataAccessor, other)
31
43
  Sunspot::Adapters::InstanceAdapter.register(InstanceAdapter, other)
@@ -1,3 +1,3 @@
1
1
  module DataMapped
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: data_mapped
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
- - Raj Shah
7
+ - Rajiv Bakulesh Shah
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-03 00:00:00.000000000 Z
11
+ date: 2013-09-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -108,7 +108,7 @@ dependencies:
108
108
  - - ~>
109
109
  - !ruby/object:Gem::Version
110
110
  version: 1.3.3
111
- description: Helpful mixins for DataMapper
111
+ description: Mixins for DataMapper
112
112
  email:
113
113
  - brainix@gmail.com
114
114
  executables: []
@@ -129,7 +129,7 @@ files:
129
129
  - lib/data_mapped/permanent.rb
130
130
  - lib/data_mapped/searchable.rb
131
131
  - lib/data_mapped/version.rb
132
- homepage: ''
132
+ homepage: https://github.com/brainix/data_mapped
133
133
  licenses:
134
134
  - MIT
135
135
  metadata: {}
@@ -152,5 +152,5 @@ rubyforge_project:
152
152
  rubygems_version: 2.0.3
153
153
  signing_key:
154
154
  specification_version: 4
155
- summary: Helpful mixins for DataMapper
155
+ summary: Mixins for DataMapper
156
156
  test_files: []