active_model-shaz 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,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d075ae77ef66ee24bca0bc1b2361db155772147c
4
+ data.tar.gz: 7e73898484615cc08554cf2bf281b67b65f5a716
5
+ SHA512:
6
+ metadata.gz: 15d9fa3c796309ebec24b48514106fba03f0f676a8225fa85033fa86e726252efbd3f0608159b7953fb488943f4210b21034be514a5a65b7900711fc5e72173d
7
+ data.tar.gz: b6a77edf52499f2f2ff4d8fbfa43fa7b59655d3de29a5923a51dc717961290db177035e53f9c91d186e9a502dc05879007fdac2da3aae7251faeb743c17da9ed
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in active_model-shaz.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Kristian Mandrup
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,56 @@
1
+ # ActiveModel::Shaz
2
+
3
+ ## Installation
4
+
5
+ Add this line to your application's Gemfile:
6
+
7
+ gem 'active_model-shaz'
8
+
9
+ And then execute:
10
+
11
+ $ bundle
12
+
13
+ Or install it yourself as:
14
+
15
+ $ gem install active_model-shaz
16
+
17
+ ## Support
18
+
19
+ Currently auto-configures for Mongoid and ActiveRecord. Easy to configure for your particular "ORM",
20
+
21
+ ## Usage
22
+
23
+ Mostly useful in REST API scenarios, where you want to transfer the model state to the client efficiently
24
+
25
+ ```ruby
26
+ model.created?
27
+ model.deleted?
28
+
29
+ model.saved # save and return saved model
30
+ model.updated_with(name: 'hello') # update and return updated model
31
+ model.destroyed # destroy and return destroyed model
32
+ ```
33
+
34
+ Controller usage example
35
+
36
+ ```ruby
37
+ MyController < APIController
38
+ def update
39
+ render json: user.updated_with name: 'hello'
40
+ end
41
+
42
+ def destroy
43
+ render json: user.destroyed
44
+ end
45
+ end
46
+ ```
47
+
48
+ When used with state tracking, this will add the `http_status` method so you can send the http status code, `201` or `204` auto-magically to your client in your JSON response via `ActiveModel::Serializer`. See f.ex [mongoid-serializer](https://github.com/kristianmandrup/mongoid-serializer) gem.
49
+
50
+ ## Contributing
51
+
52
+ 1. Fork it
53
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
54
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
55
+ 4. Push to the branch (`git push origin my-new-feature`)
56
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,23 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'active_model/shaz/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "active_model-shaz"
8
+ spec.version = ActiveModel::Shaz::VERSION
9
+ spec.authors = ["Kristian Mandrup"]
10
+ spec.email = ["kmandrup@gmail.com"]
11
+ spec.description = %q{Adds state tracking and a few extra snappy save and destroy methods to your model API}
12
+ spec.summary = %q{Shaz up your ActiveModel with state tracking and more}
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ end
@@ -0,0 +1,41 @@
1
+ require "active_model/shaz/version"
2
+ require "active_model/state_tracking"
3
+
4
+ module ActiveModel
5
+ module Shaz
6
+ def save_it
7
+ self.save
8
+ self
9
+ end
10
+ alias_method :saved, :save_it
11
+
12
+ def update_it *args
13
+ self.update *args
14
+ self
15
+ end
16
+ alias_method :updated_with, :update_it
17
+
18
+ def destroy_it
19
+ self.destroy
20
+ self
21
+ end
22
+ alias_method :destroyed, :destroy_it
23
+
24
+ def self.configure_for clazz
25
+ [:state_tracking, :shaz].each do |name|
26
+ clazz.send :include, "ActiveModel::#{name.to_s.camelize}".constantize
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+
33
+ if defined? Mongoid
34
+ ActiveMode::Shaz.configure_for Mongoid::Document
35
+ end
36
+
37
+ if defined?(ActiveRecord) && defined?(ActiveRecord::Base)
38
+ ActiveMode::Shaz.configure_for ActiveRecord::Base
39
+ end
40
+
41
+
@@ -0,0 +1,5 @@
1
+ module ActiveModel
2
+ module Shaz
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,25 @@
1
+ module ActiveModel::StateTracking
2
+ extend ActiveSupport::Concern
3
+
4
+ included do
5
+ after_create do
6
+ @created = true
7
+ end
8
+
9
+ after_update do
10
+ @created = false
11
+ end
12
+
13
+ after_destroy do
14
+ @destroyed = true
15
+ end
16
+ end
17
+
18
+ def created?
19
+ @created == true
20
+ end
21
+
22
+ def destroyed?
23
+ @destroyed == true
24
+ end
25
+ end
metadata ADDED
@@ -0,0 +1,83 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_model-shaz
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Kristian Mandrup
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-04-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ description: Adds state tracking and a few extra snappy save and destroy methods to
42
+ your model API
43
+ email:
44
+ - kmandrup@gmail.com
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - .gitignore
50
+ - Gemfile
51
+ - LICENSE.txt
52
+ - README.md
53
+ - Rakefile
54
+ - active_model-shaz.gemspec
55
+ - lib/active_model/shaz.rb
56
+ - lib/active_model/shaz/version.rb
57
+ - lib/active_model/state_tracking.rb
58
+ homepage: ''
59
+ licenses:
60
+ - MIT
61
+ metadata: {}
62
+ post_install_message:
63
+ rdoc_options: []
64
+ require_paths:
65
+ - lib
66
+ required_ruby_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - '>='
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ requirements: []
77
+ rubyforge_project:
78
+ rubygems_version: 2.0.0
79
+ signing_key:
80
+ specification_version: 4
81
+ summary: Shaz up your ActiveModel with state tracking and more
82
+ test_files: []
83
+ has_rdoc: