simple-api-field-control 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e687ba0705ce4cf319e8e418d694bfc7facff7c
4
- data.tar.gz: 3fc6ca4df295129f21af751c21b5fdfad23cb89d
3
+ metadata.gz: 439ff260bc4fe9699898e09688a52959297e1033
4
+ data.tar.gz: 1f3313fdaa62fd02705c237cfd16bc7576ae47f1
5
5
  SHA512:
6
- metadata.gz: fc139af6699b179e4ac2840a5ea67a098fc9864585748f7c3d0cdc01d9659279c709f34fae1b97ed03c22a198966a32d7176ab7319a6aeb62f3fce4ac694730e
7
- data.tar.gz: 6101163b030952b2a326b4a7944259b8bb4e90d0e68d541d81adb3aea938620a97c21745f0416642cb22825f932623c8488625d87281a4c888306454efe7b95d
6
+ metadata.gz: f24980accd66b1465fd64e29d56d8b90ccf0fa7bbf55919c301ce87b1276b289dd4f1706dce4f50b8bc80767d0598edde3d03a1f7db55099c8889d546304a5a0
7
+ data.tar.gz: 846dc43ae0bc55af4b7d2d535bfa79ac913bed42ebea93df59560bfe285789a2f5e5969ef5cb7c64f8fd43fd4b811b14f508fc3ae57e2047565defca87bd29b4
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.3
4
+ - 2.0.0
data/Gemfile CHANGED
@@ -4,7 +4,7 @@ gem "activesupport", ">= 3.0"
4
4
 
5
5
  # Add dependencies to develop your gem here.
6
6
  # Include everything needed to run rake, tests, features, etc.
7
- group :development do
7
+ group :development, :test do
8
8
  gem "activerecord", ">= 3.0"
9
9
  gem "rspec", "~> 2.8.0"
10
10
  gem "shoulda", ">= 0"
@@ -17,3 +17,7 @@ group :development do
17
17
  gem "json_spec", "~> 1.1.1"
18
18
  gem "nokogiri", ">= 1.5"
19
19
  end
20
+
21
+ group :test do
22
+ gem "rake", "10.1.0"
23
+ end
@@ -100,6 +100,7 @@ DEPENDENCIES
100
100
  jeweler (= 1.8.7)
101
101
  json_spec (~> 1.1.1)
102
102
  nokogiri (>= 1.5)
103
+ rake (= 10.1.0)
103
104
  rdoc (~> 3.12)
104
105
  rspec (~> 2.8.0)
105
106
  shoulda
data/README.md CHANGED
@@ -1,12 +1,15 @@
1
1
  # simple-api-field-control
2
2
 
3
- Ever needed to simply include a few calculated fields/virtual attributes/custom methods in your serialization? This gem makes it simple and supports both JSON and XML rendering.
3
+ [![Gem Version](https://badge.fury.io/rb/simple-api-field-control.png)](http://badge.fury.io/rb/simple-api-field-control)
4
+ [![Build Status](https://travis-ci.org/tkrajcar/simple-api-field-control.png?branch=master)](https://travis-ci.org/tkrajcar/simple-api-field-control)
5
+
6
+ Ever needed to simply include or exclude a few calculated fields/virtual attributes/custom methods in your serialization? This gem makes it simple and supports both JSON and XML rendering.
4
7
 
5
8
  ## Usage
6
9
 
7
10
  1. Include `gem "simple-api-field-control"` in your Gemfile.
8
11
  2. In your model class where you want to use this module, add `include SimpleAPIFieldControl`.
9
- 3. Add one or more `api_include :name_of_method` lines to your model.
12
+ 3. Add one or more `api_include :name_of_method` or `api_exclude :name_of_method` lines to your model.
10
13
 
11
14
 
12
15
  Example model file:
@@ -15,6 +18,18 @@ Example model file:
15
18
  class Post < ActiveRecord::Base
16
19
  include SimpleAPIFieldControl
17
20
 
21
+ # schema:
22
+ # create_table :posts, :force => true do |t|
23
+ # t.string :subject
24
+ # t.string :api_key
25
+ # t.string :other_secret
26
+ # end
27
+
28
+ api_include :subject_length
29
+ api_include :subject_words
30
+ api_exclude :api_key
31
+ api_exclude :other_secret
32
+
18
33
  def subject_length
19
34
  self.subject.length
20
35
  end
@@ -22,23 +37,20 @@ class Post < ActiveRecord::Base
22
37
  def subject_words
23
38
  self.subject.split(' ').length
24
39
  end
25
-
26
- api_include :subject_length
27
- api_include :subject_words
28
40
  end
29
41
  ```
30
42
 
31
43
  Example output:
32
44
 
33
45
  ```
34
- p = Post.create!(subject: "Hello, people!")
35
- => #<Post id: 2, subject: "Hello, people!">
46
+ p = Post.create!(subject: "Hello, people!", api_key: "foo", other_secret: "bar")
47
+ => #<Post id: 1, subject: "Hello, people!", api_key: "foo", other_secret: "bar">
36
48
  puts p.to_json
37
- => {"id":2,"subject":"Hello, people!","subject_length":14,"subject_words":2}
49
+ {"id":1,"subject":"Hello, people!","subject_length":14,"subject_words":2}
38
50
  puts p.to_xml
39
51
  => <?xml version="1.0" encoding="UTF-8"?>
40
52
  <post>
41
- <id type="integer">2</id>
53
+ <id type="integer">1</id>
42
54
  <subject>Hello, people!</subject>
43
55
  <subject-length type="NilClass">14</subject-length>
44
56
  <subject-words type="NilClass">2</subject-words>
data/Rakefile CHANGED
@@ -17,8 +17,8 @@ Jeweler::Tasks.new do |gem|
17
17
  gem.name = "simple-api-field-control"
18
18
  gem.homepage = "http://github.com/tkrajcar/simple-api-field-control"
19
19
  gem.license = "MIT"
20
- gem.summary = "Simple DSL for ActiveRecord objects to include virtual attributes/custom methods in to_json/to_xml."
21
- gem.description = "Ever needed to simply include a few calculated fields/virtual attributes/custom methods in your serialization? This gem makes it simple and supports both JSON and XML rendering."
20
+ gem.summary = "A simple DSL for ActiveRecord objects to include/exclude virtual attributes/custom methods in to_json/to_xml."
21
+ gem.description = "A simple DSL for ActiveRecord objects to include/exclude virtual attributes/custom methods in to_json/to_xml."
22
22
  gem.email = "allegro@conmolto.org"
23
23
  gem.authors = ["Tim Krajcar"]
24
24
  # dependencies defined in Gemfile
@@ -31,7 +31,7 @@ RSpec::Core::RakeTask.new(:spec) do |spec|
31
31
  spec.pattern = FileList['spec/**/*_spec.rb']
32
32
  end
33
33
 
34
- task :default => :test
34
+ task :default => :spec
35
35
 
36
36
  require 'rdoc/task'
37
37
  Rake::RDocTask.new do |rdoc|
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.2.0
@@ -5,10 +5,11 @@ module SimpleAPIFieldControl
5
5
 
6
6
  included do
7
7
  class_attribute :api_include_fields
8
+ class_attribute :api_exclude_fields
8
9
  end
9
10
 
10
11
  def serializable_hash(options = nil)
11
- options = { methods: self.class.api_include_fields }.merge(options || {})
12
+ options = { methods: self.class.api_include_fields, except: api_exclude_fields }.merge(options || {})
12
13
  super(options)
13
14
  end
14
15
 
@@ -17,5 +18,10 @@ module SimpleAPIFieldControl
17
18
  self.api_include_fields ||= []
18
19
  self.api_include_fields << field
19
20
  end
21
+
22
+ def api_exclude(field)
23
+ self.api_exclude_fields ||= []
24
+ self.api_exclude_fields << field
25
+ end
20
26
  end
21
27
  end
@@ -0,0 +1,87 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = "simple-api-field-control"
8
+ s.version = "0.2.0"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Tim Krajcar"]
12
+ s.date = "2013-08-19"
13
+ s.description = "A simple DSL for ActiveRecord objects to include/exclude virtual attributes/custom methods in to_json/to_xml."
14
+ s.email = "allegro@conmolto.org"
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.md"
18
+ ]
19
+ s.files = [
20
+ ".document",
21
+ ".rspec",
22
+ ".travis.yml",
23
+ "Gemfile",
24
+ "Gemfile.lock",
25
+ "LICENSE.txt",
26
+ "README.md",
27
+ "Rakefile",
28
+ "VERSION",
29
+ "lib/simple-api-field-control.rb",
30
+ "simple-api-field-control.gemspec",
31
+ "spec/Post.rb",
32
+ "spec/active-record-setup.rb",
33
+ "spec/simple-api-field-control_spec.rb",
34
+ "spec/spec_helper.rb"
35
+ ]
36
+ s.homepage = "http://github.com/tkrajcar/simple-api-field-control"
37
+ s.licenses = ["MIT"]
38
+ s.require_paths = ["lib"]
39
+ s.rubygems_version = "2.0.3"
40
+ s.summary = "A simple DSL for ActiveRecord objects to include/exclude virtual attributes/custom methods in to_json/to_xml."
41
+
42
+ if s.respond_to? :specification_version then
43
+ s.specification_version = 4
44
+
45
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
46
+ s.add_runtime_dependency(%q<activesupport>, [">= 3.0"])
47
+ s.add_development_dependency(%q<activerecord>, [">= 3.0"])
48
+ s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
49
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
50
+ s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
51
+ s.add_development_dependency(%q<bundler>, ["~> 1.0"])
52
+ s.add_development_dependency(%q<jeweler>, ["= 1.8.7"])
53
+ s.add_development_dependency(%q<git>, ["= 1.2.5"])
54
+ s.add_development_dependency(%q<simplecov>, [">= 0"])
55
+ s.add_development_dependency(%q<sqlite3>, [">= 0"])
56
+ s.add_development_dependency(%q<json_spec>, ["~> 1.1.1"])
57
+ s.add_development_dependency(%q<nokogiri>, [">= 1.5"])
58
+ else
59
+ s.add_dependency(%q<activesupport>, [">= 3.0"])
60
+ s.add_dependency(%q<activerecord>, [">= 3.0"])
61
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
62
+ s.add_dependency(%q<shoulda>, [">= 0"])
63
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
64
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
65
+ s.add_dependency(%q<jeweler>, ["= 1.8.7"])
66
+ s.add_dependency(%q<git>, ["= 1.2.5"])
67
+ s.add_dependency(%q<simplecov>, [">= 0"])
68
+ s.add_dependency(%q<sqlite3>, [">= 0"])
69
+ s.add_dependency(%q<json_spec>, ["~> 1.1.1"])
70
+ s.add_dependency(%q<nokogiri>, [">= 1.5"])
71
+ end
72
+ else
73
+ s.add_dependency(%q<activesupport>, [">= 3.0"])
74
+ s.add_dependency(%q<activerecord>, [">= 3.0"])
75
+ s.add_dependency(%q<rspec>, ["~> 2.8.0"])
76
+ s.add_dependency(%q<shoulda>, [">= 0"])
77
+ s.add_dependency(%q<rdoc>, ["~> 3.12"])
78
+ s.add_dependency(%q<bundler>, ["~> 1.0"])
79
+ s.add_dependency(%q<jeweler>, ["= 1.8.7"])
80
+ s.add_dependency(%q<git>, ["= 1.2.5"])
81
+ s.add_dependency(%q<simplecov>, [">= 0"])
82
+ s.add_dependency(%q<sqlite3>, [">= 0"])
83
+ s.add_dependency(%q<json_spec>, ["~> 1.1.1"])
84
+ s.add_dependency(%q<nokogiri>, [">= 1.5"])
85
+ end
86
+ end
87
+
@@ -1,8 +1,17 @@
1
1
  class Post < ActiveRecord::Base
2
2
  include SimpleAPIFieldControl
3
3
 
4
+ # schema:
5
+ # create_table :posts, :force => true do |t|
6
+ # t.string :subject
7
+ # t.string :api_key
8
+ # t.string :other_secret
9
+ # end
10
+
4
11
  api_include :subject_length
5
12
  api_include :subject_words
13
+ api_exclude :api_key
14
+ api_exclude :other_secret
6
15
 
7
16
  def subject_length
8
17
  self.subject.length
@@ -9,5 +9,7 @@ ActiveRecord::Schema.define do
9
9
  self.verbose = false
10
10
  create_table :posts, :force => true do |t|
11
11
  t.string :subject
12
+ t.string :api_key
13
+ t.string :other_secret
12
14
  end
13
15
  end
@@ -2,7 +2,10 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
2
 
3
3
  describe "Simple API Field Control" do
4
4
  before(:all) do
5
- @post = Post.create!(subject: "Test Post")
5
+ @post = Post.create!(subject: "Test Post", api_key: "foo", other_secret: "bar")
6
+ @json = @post.to_json
7
+ @xml = Nokogiri::XML::Document.parse(@post.to_xml)
8
+
6
9
  end
7
10
 
8
11
  it "should know its subject length" do
@@ -13,16 +16,27 @@ describe "Simple API Field Control" do
13
16
  @post.subject_words.should eq 2
14
17
  end
15
18
 
16
- it "should serialize to JSON with subject_length and subject_words included" do
17
- json = @post.to_json
18
- json.should have_json_path("subject_length")
19
- json.should have_json_path("subject_words")
19
+ context "JSON serialization" do
20
+ it "should occur with subject_length and subject_words" do
21
+ @json.should have_json_path("subject_length")
22
+ @json.should have_json_path("subject_words")
23
+ end
24
+
25
+ it "should occur without api_key or other_secret" do
26
+ @json.should_not have_json_path("api_key")
27
+ @json.should_not have_json_path("other_secret")
28
+ end
20
29
  end
21
30
 
22
- it "should serialize to XML with subject_length and subject_words included" do
23
- #xml = @post.to_xml
24
- doc = Nokogiri::XML::Document.parse(@post.to_xml)
25
- doc.xpath('//subject-length').text.should eq('9')
26
- doc.xpath('//subject-words').text.should eq('2')
31
+ context "XML serialization" do
32
+ it "should occur with subject_length and subject_words" do
33
+ @xml.xpath('//subject-length').text.should eq('9')
34
+ @xml.xpath('//subject-words').text.should eq('2')
35
+ end
36
+
37
+ it "should occur without api_key or other_secret" do
38
+ @xml.xpath('//api-key').text.should eq("")
39
+ @xml.xpath('//other-secret').text.should eq("")
40
+ end
27
41
  end
28
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: simple-api-field-control
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tim Krajcar
@@ -178,9 +178,8 @@ dependencies:
178
178
  - - '>='
179
179
  - !ruby/object:Gem::Version
180
180
  version: '1.5'
181
- description: Ever needed to simply include a few calculated fields/virtual attributes/custom
182
- methods in your serialization? This gem makes it simple and supports both JSON and
183
- XML rendering.
181
+ description: A simple DSL for ActiveRecord objects to include/exclude virtual attributes/custom
182
+ methods in to_json/to_xml.
184
183
  email: allegro@conmolto.org
185
184
  executables: []
186
185
  extensions: []
@@ -190,6 +189,7 @@ extra_rdoc_files:
190
189
  files:
191
190
  - .document
192
191
  - .rspec
192
+ - .travis.yml
193
193
  - Gemfile
194
194
  - Gemfile.lock
195
195
  - LICENSE.txt
@@ -197,6 +197,7 @@ files:
197
197
  - Rakefile
198
198
  - VERSION
199
199
  - lib/simple-api-field-control.rb
200
+ - simple-api-field-control.gemspec
200
201
  - spec/Post.rb
201
202
  - spec/active-record-setup.rb
202
203
  - spec/simple-api-field-control_spec.rb
@@ -224,6 +225,6 @@ rubyforge_project:
224
225
  rubygems_version: 2.0.3
225
226
  signing_key:
226
227
  specification_version: 4
227
- summary: Simple DSL for ActiveRecord objects to include virtual attributes/custom
228
+ summary: A simple DSL for ActiveRecord objects to include/exclude virtual attributes/custom
228
229
  methods in to_json/to_xml.
229
230
  test_files: []