acts_as_dynamic_method 0.0.3 → 1.0.0

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.
@@ -4,30 +4,31 @@ module ActsAsDynamicMethod
4
4
 
5
5
  module ClassMethods
6
6
 
7
- attr_accessor :dynamic_method_text_field
7
+ attr_accessor :json_field
8
8
 
9
9
  def acts_as_dynamic_method(options = {})
10
- self.dynamic_method_text_field = (options[:dynamic_method_text_field] || :params).to_s
11
- include ActsAsDynamicMethod::InstanceMethods
10
+ self.json_field = (options[:json_field] || :params).to_s
11
+ include ActsAsDynamicMethod::InstanceMethods
12
12
  end
13
13
  end
14
14
 
15
15
  module InstanceMethods
16
16
  def fields
17
- field = self.class.dynamic_method_text_field
18
- @fields ||= ((field.is_a?(String) ? JSON.parse(self.send(field)) : self.send(field)) || {})
17
+ field_name = self.class.json_field
18
+ field = self.method(field_name)
19
+ @fields ||= ((field.call.is_a?(String) ? JSON.parse(field.call) : field.call) || {})
19
20
  end
20
21
 
21
22
  def use(field)
22
23
  fields[field]
23
24
  end
24
25
 
25
- def []=(field, value)
26
+ def set(field, value)
26
27
  fields unless @fields
27
28
  @fields[field] = value
28
29
  end
29
30
 
30
- def keys
31
+ def json_keys
31
32
  fields.keys
32
33
  end
33
34
 
@@ -37,12 +38,12 @@ module ActsAsDynamicMethod
37
38
 
38
39
  def method_missing(meth, *args, &block)
39
40
  method_name = meth.to_s
40
- if keys.include?(method_name)
41
+ if json_keys.include?(method_name)
41
42
  self.use(method_name)
42
- elsif keys.include?(method_name.gsub!('=', ''))
43
+ elsif json_keys.include?(method_name.gsub!('=', ''))
43
44
  self.set(method_name, args.first)
44
45
  elsif method_name.match(/\?$/)
45
- self.keys.include?(method_name.gsub('?', ''))
46
+ self.json_keys.include?(method_name.gsub('?', ''))
46
47
  else
47
48
  super
48
49
  end
@@ -50,11 +51,11 @@ module ActsAsDynamicMethod
50
51
 
51
52
  end
52
53
 
53
- if defined?(ActiveRecord::Base)
54
- ActiveRecord::Base.send :extend, ActsAsDynamicMethod::ClassMethods
55
- else
56
- Object.send :include, ActsAsDynamicMethod::ClassMethods
57
- end
54
+ if defined?(ActiveRecord::Base)
55
+ ActiveRecord::Base.send :extend, ActsAsDynamicMethod::ClassMethods
56
+ else
57
+ Object.send :include, ActsAsDynamicMethod::ClassMethods
58
+ end
58
59
 
59
60
  # def self.included(receiver)
60
61
  # receiver.extend ClassMethods
@@ -1,3 +1,3 @@
1
1
  module ActsAsDynamicMethod
2
- VERSION = "0.0.3"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -3,10 +3,10 @@ require 'spec_helper'
3
3
  describe ActsAsDynamicMethod do
4
4
 
5
5
  class TestClass
6
- acts_as_dynamic_method dynamic_method_text_field: :params
6
+ acts_as_dynamic_method
7
7
 
8
8
  def initialize
9
- @params = {location_of_role: "location_of_role_value", job_status: "job_status_value", degree_1: "degree_1_value", collaboration: 'true'}.to_json
9
+ @params = {field_name_1: "foo", field_name_2: "bar", field_name_3: 1234, field_name_4: true}.to_json
10
10
  end
11
11
 
12
12
  def params
@@ -14,14 +14,28 @@ describe ActsAsDynamicMethod do
14
14
  end
15
15
  end
16
16
 
17
+ class DummyClass
18
+ acts_as_dynamic_method json_field: :attributes
19
+
20
+ def initialize
21
+ @attributes = {field_name_1: "foo"}.to_json
22
+ end
23
+
24
+ def attributes
25
+ @attributes
26
+ end
27
+ end
28
+
17
29
  let(:base) { TestClass.new }
30
+ let(:dummy) { DummyClass.new }
18
31
 
19
32
  it 'should create method from json key' do
20
- base.location_of_role.should eq('location_of_role_value')
33
+ base.field_name_1.should eq('foo')
34
+ dummy.field_name_1.should eq('foo')
21
35
  end
22
36
 
23
37
  it 'should create method from json key' do
24
- base.collaboration.should be_true
38
+ base.field_name_4.should be_true
25
39
  end
26
40
 
27
41
  it "should handle method_mithing" do
@@ -30,6 +44,17 @@ describe ActsAsDynamicMethod do
30
44
 
31
45
  it "should handle to_json method" do
32
46
  base.to_json.should eq(base.params)
47
+ dummy.to_json.should eq(dummy.attributes)
48
+ end
49
+
50
+ it 'should be possible to update json values' do
51
+ base.field_name_1 = 'new_value'
52
+ base.field_name_1.should == 'new_value'
53
+ end
54
+
55
+ it 'should be possible to update json values' do
56
+ base.field_name_1 = 'new_value'
57
+ base.to_json.should =~ /new_value/
33
58
  end
34
59
 
35
60
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_dynamic_method
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 1.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-16 00:00:00.000000000 Z
12
+ date: 2013-07-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec