hashify 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.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.0.2
@@ -1,7 +1,8 @@
1
1
  module Hashify
2
2
 
3
- autoload :Json, File.join(File.dirname(__FILE__), 'hashify', 'json')
3
+ autoload :Json, File.join(File.dirname(__FILE__), 'hashify', 'json')
4
4
  autoload :Convert, File.join(File.dirname(__FILE__), 'hashify', 'convert')
5
+ autoload :Auto, File.join(File.dirname(__FILE__), 'hashify', 'auto')
5
6
 
6
7
  def self.included(cls)
7
8
 
@@ -0,0 +1,47 @@
1
+ module Hashify
2
+ module Auto
3
+
4
+ def self.included(cls)
5
+ cls.send(:const_set, :Auto__, false)
6
+
7
+ cls.instance_eval("include Hashify") unless cls.include?(Hashify)
8
+
9
+ cls.instance_eval(<<-HERE_DOC, __FILE__, __LINE__)
10
+ def self.autoload_hash_accessors
11
+ readers = instance_methods.find_all{|m| m.to_s[-1] == ?= && m.to_s[0] != ?=}.map{|m| str = m.to_s; str.slice!(-1); str.to_sym}
12
+ readers.delete(:taguri) # i don't like this method
13
+ readers.delete_if{|m| instance_method(m).nil? }
14
+ instance_eval "hash_accessor \#{readers.map{|r| r.inspect} * ', '}"
15
+ end
16
+
17
+ def self.auto_guard
18
+ if const_get(:Auto__).equal? false
19
+ send(:remove_const, :Auto__)
20
+ send(:const_set, :Auto__, true)
21
+ autoload_hash_accessors
22
+ end
23
+ yield
24
+ end
25
+
26
+ HERE_DOC
27
+
28
+ cls.class_eval(<<-HERE_DOC, __FILE__, __LINE__)
29
+ def to_hash
30
+ self.class.auto_guard do
31
+ super
32
+ end
33
+ end
34
+
35
+ class << self
36
+ def self.from_hash(map)
37
+ auto_guard do
38
+ super
39
+ end
40
+ end
41
+ end
42
+ HERE_DOC
43
+
44
+ end
45
+
46
+ end
47
+ end
@@ -3,6 +3,8 @@ require 'json' unless Object.respond_to?(:to_json)
3
3
  module Hashify
4
4
  module Json
5
5
  def self.included(cls)
6
+ cls.instance_eval("include Hashify") unless cls.include?(Hashify)
7
+
6
8
  cls.instance_eval "
7
9
  def self.from_json(json)
8
10
  from_hash(JSON.parse(json))
@@ -0,0 +1,30 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe "Basic object", "auto hashify" do
4
+ it "should convert into a hash" do
5
+
6
+ test = Class.new do
7
+ include Hashify::Auto
8
+
9
+ attr_accessor :prop1
10
+ end
11
+
12
+ t = test.new
13
+ t.prop1 = 'testing'
14
+ t.to_hash.should == {:prop1 => 'testing'}
15
+ end
16
+
17
+ it "should convert from a hash" do
18
+
19
+ test = Class.new do
20
+ include Hashify::Auto
21
+
22
+ attr_accessor :prop1
23
+ end
24
+
25
+ t = test.from_hash(:prop1 => 'testing')
26
+ t.prop1.should == 'testing'
27
+ end
28
+
29
+
30
+ end
@@ -0,0 +1,30 @@
1
+ require 'spec/spec_helper'
2
+
3
+ describe "Basic object", "json" do
4
+ it "should convert to json" do
5
+
6
+ test = Class.new do
7
+ include Hashify::Json
8
+ attr_accessor :prop1
9
+ hash_accessor :prop1
10
+ end
11
+
12
+ t = test.new
13
+ t.prop1 = 'property_value_1'
14
+ t.to_json.should == '{"prop1":"property_value_1"}'
15
+ end
16
+
17
+ it "should convert from json" do
18
+
19
+ test = Class.new do
20
+ include Hashify::Json
21
+ attr_accessor :prop1
22
+ hash_accessor :prop1
23
+ end
24
+
25
+ t = test.from_json '{"prop1":"property_value_1"}'
26
+ t.prop1.should == 'property_value_1'
27
+ end
28
+
29
+
30
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hashify
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
7
  - Joshua Hull
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-10-31 00:00:00 -04:00
12
+ date: 2009-11-01 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies: []
15
15
 
@@ -26,10 +26,13 @@ files:
26
26
  - Rakefile
27
27
  - VERSION
28
28
  - lib/hashify.rb
29
+ - lib/hashify/auto.rb
29
30
  - lib/hashify/convert.rb
30
31
  - lib/hashify/json.rb
32
+ - spec/auto_spec.rb
31
33
  - spec/convert_spec.rb
32
34
  - spec/from_hash_spec.rb
35
+ - spec/json_spec.rb
33
36
  - spec/spec.opts
34
37
  - spec/spec_helper.rb
35
38
  - spec/to_hash_spec.rb
@@ -62,7 +65,9 @@ signing_key:
62
65
  specification_version: 3
63
66
  summary: Simple to_hash, to_json <-> from_hash, from_json
64
67
  test_files:
68
+ - spec/auto_spec.rb
65
69
  - spec/convert_spec.rb
66
70
  - spec/from_hash_spec.rb
71
+ - spec/json_spec.rb
67
72
  - spec/spec_helper.rb
68
73
  - spec/to_hash_spec.rb