property_sets 0.0.12 → 0.1.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.
data/Gemfile CHANGED
@@ -1,7 +1,9 @@
1
1
  source "http://rubygems.org"
2
2
  # Add dependencies required to use your gem here.
3
3
  # Example:
4
- # gem "activesupport", ">= 2.3.5"
4
+
5
+ gem "activesupport", "~> 2.3.5"
6
+ gem "activerecord", "~> 2.3.5"
5
7
 
6
8
  # Add dependencies to develop your gem here.
7
9
  # Include everything needed to run rake, tests, features, etc.
@@ -9,5 +11,5 @@ group :development do
9
11
  gem "shoulda", ">= 0"
10
12
  gem "bundler", "~> 1.0.0"
11
13
  gem "jeweler", "~> 1.5.1"
12
- gem "rcov", ">= 0"
14
+ gem "ruby-debug"
13
15
  end
data/Gemfile.lock ADDED
@@ -0,0 +1,31 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ activerecord (2.3.10)
5
+ activesupport (= 2.3.10)
6
+ activesupport (2.3.10)
7
+ columnize (0.3.2)
8
+ git (1.2.5)
9
+ jeweler (1.5.2)
10
+ bundler (~> 1.0.0)
11
+ git (>= 1.2.5)
12
+ rake
13
+ linecache (0.43)
14
+ rake (0.8.7)
15
+ ruby-debug (0.10.4)
16
+ columnize (>= 0.1)
17
+ ruby-debug-base (~> 0.10.4.0)
18
+ ruby-debug-base (0.10.4)
19
+ linecache (>= 0.3)
20
+ shoulda (2.11.3)
21
+
22
+ PLATFORMS
23
+ ruby
24
+
25
+ DEPENDENCIES
26
+ activerecord (~> 2.3.5)
27
+ activesupport (~> 2.3.5)
28
+ bundler (~> 1.0.0)
29
+ jeweler (~> 1.5.1)
30
+ ruby-debug
31
+ shoulda
data/README.rdoc CHANGED
@@ -20,33 +20,17 @@ You configure the allowed stored properties by specifying these in the model:
20
20
 
21
21
  The declared properties can then be accessed runtime via the defined association:
22
22
 
23
- # Return the version record for this account - or a new record if none exists
23
+ # Return the value of the version record for this account, or the default value if not set
24
24
  account.settings.version
25
25
 
26
- # Create (or update) the version record with default value
27
- account.settings.version.create
26
+ # Update the version record with given value
27
+ account.settings.version = "v1.1"
28
28
 
29
- # Create (or update) the version record with the given value
30
- account.settings.version.create(:value => "v1.1")
31
-
32
- # Destroy the version record
33
- account.settings.version.destroy
34
-
35
- === Convenience methods
36
-
37
- On top of the basic access paths, there are some short cuts, mainly convenience methods for dealing with booleans:
38
-
39
- # immediately changes the value of the setting
40
- account.settings.version=("v3.0")
41
-
42
- # coerces the setting to boolean AR style
29
+ # Query the truth value of the property
43
30
  account.settings.featured?
44
31
 
45
- # sets the value of this setting to a true value
46
- account.settings.featured.enable
47
-
48
- # sets the value of this setting to a false value
49
- account.settings.featured.disable
32
+ # Short hand for setting one or more values
33
+ account.settings.set(:version => "v1.2", :activated => true)
50
34
 
51
35
  === Bulk operations
52
36
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.12
1
+ 0.1.0
@@ -3,75 +3,55 @@ require 'delegate'
3
3
  module PropertySets
4
4
  module ActiveRecordExtension
5
5
 
6
- class PropertySetProxy < Delegator
7
- attr_accessor :record
8
-
9
- def initialize(record)
10
- self.record = record
11
- end
12
-
13
- def __getobj__
14
- record
15
- end
16
-
17
- def id
18
- record.id
19
- end
20
-
21
- def create(args = {})
22
- record.attributes = args
23
- record.save
24
- record
25
- end
26
- end
27
-
28
6
  module ClassMethods
29
7
  def property_set(association, &block)
30
8
  raise "Invalid association name, letters only" unless association.to_s =~ /[a-z]+/
31
9
  property_class = PropertySets.ensure_property_set_class(association, self)
32
10
  property_class.instance_eval(&block)
33
11
 
34
- has_many association.to_s.pluralize.to_sym, :class_name => property_class.name, :dependent => :destroy do
12
+ has_many association, :class_name => property_class.name, :dependent => :destroy do
35
13
 
36
14
  # Accepts a name value pair hash { :name => 'value', :pairs => true } and builds a property for each key
37
- def bulk(property_pairs, with_protection = false)
15
+ def set(property_pairs, with_protection = false)
38
16
  property_pairs.keys.each do |name|
39
- record = lookup(name).record
17
+ record = lookup(name)
40
18
  if with_protection && record.protected?
41
19
  logger.warn("Someone tried to update the protected #{name} property to #{property_pairs[name]}")
42
20
  else
43
- record.value = property_pairs[name]
44
- self << record
21
+ send("#{name}=", property_pairs[name])
45
22
  end
46
23
  end
47
24
  end
48
25
 
49
- # Define the settings query methods, e.g. +account.settings.wiffle?+
50
26
  property_class.keys.each do |key|
51
- raise "Invalid key #{key}" if self.respond_to?(key)
27
+ raise "Invalid property key #{key}" if self.respond_to?(key)
52
28
 
53
- # Reports the coerced truth valye of the property
29
+ # Reports the coerced truth value of the property
54
30
  define_method "#{key}?" do
55
31
  lookup(key).true?
56
32
  end
57
33
 
34
+ # Returns the value of the property
35
+ define_method "#{key}" do
36
+ lookup(key).value
37
+ end
38
+
39
+ define_method "protected?" do |arg|
40
+ lookup(arg).protected?
41
+ end
42
+
58
43
  # Assigns a new value to the property
59
44
  define_method "#{key}=" do |value|
60
45
  instance = lookup(key)
61
46
  instance.value = value
62
- instance.save
63
- end
64
-
65
- # Returns the value of the property
66
- define_method "#{key}" do
67
- lookup(key)
47
+ @owner.send(association) << instance
48
+ value
68
49
  end
69
50
 
70
51
  # The finder method which returns the property if present, otherwise a new instance with defaults
71
52
  define_method "lookup" do |arg|
72
- instance = detect { |property| property.name.to_sym == arg }
73
- instance ||= property_class.new(@owner.class.name.underscore.to_sym => @owner, :name => arg.to_s, :value => property_class.default(arg))
74
- PropertySetProxy.new(instance)
53
+ instance = detect { |property| property.name.to_sym == arg }
54
+ instance ||= property_class.new(:name => arg.to_s, :value => property_class.default(arg))
75
55
  end
76
56
  end
77
57
  end
@@ -92,7 +72,7 @@ module PropertySets
92
72
  def update_property_set_attributes(attributes)
93
73
  if attributes && property_sets = attributes.delete(:property_sets)
94
74
  property_sets.each do |property_set, property_set_attributes|
95
- send(property_set).bulk(property_set_attributes, true)
75
+ send(property_set).set(property_set_attributes, true)
96
76
  end
97
77
  end
98
78
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{property_sets}
8
- s.version = "0.0.12"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Morten Primdahl"]
12
- s.date = %q{2011-01-17}
12
+ s.date = %q{2011-01-18}
13
13
  s.description = %q{This gem is an ActiveRecord extension which provides a convenient interface for managing per row properties}
14
14
  s.email = %q{morten@zendesk.com}
15
15
  s.extra_rdoc_files = [
@@ -19,6 +19,7 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".document",
21
21
  "Gemfile",
22
+ "Gemfile.lock",
22
23
  "LICENSE.txt",
23
24
  "README.rdoc",
24
25
  "Rakefile",
@@ -52,23 +53,29 @@ Gem::Specification.new do |s|
52
53
  s.specification_version = 3
53
54
 
54
55
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
56
+ s.add_runtime_dependency(%q<activesupport>, ["~> 2.3.5"])
57
+ s.add_runtime_dependency(%q<activerecord>, ["~> 2.3.5"])
55
58
  s.add_development_dependency(%q<shoulda>, [">= 0"])
56
59
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
57
60
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.1"])
58
- s.add_development_dependency(%q<rcov>, [">= 0"])
61
+ s.add_development_dependency(%q<ruby-debug>, [">= 0"])
59
62
  s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
60
63
  else
64
+ s.add_dependency(%q<activesupport>, ["~> 2.3.5"])
65
+ s.add_dependency(%q<activerecord>, ["~> 2.3.5"])
61
66
  s.add_dependency(%q<shoulda>, [">= 0"])
62
67
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
63
68
  s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
64
- s.add_dependency(%q<rcov>, [">= 0"])
69
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
65
70
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
66
71
  end
67
72
  else
73
+ s.add_dependency(%q<activesupport>, ["~> 2.3.5"])
74
+ s.add_dependency(%q<activerecord>, ["~> 2.3.5"])
68
75
  s.add_dependency(%q<shoulda>, [">= 0"])
69
76
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
70
77
  s.add_dependency(%q<jeweler>, ["~> 1.5.1"])
71
- s.add_dependency(%q<rcov>, [">= 0"])
78
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
72
79
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
73
80
  end
74
81
  end
data/test/helper.rb CHANGED
@@ -4,6 +4,7 @@ require 'active_support'
4
4
  require 'active_record'
5
5
  require 'active_record/fixtures'
6
6
  require 'shoulda'
7
+ require 'ruby-debug'
7
8
 
8
9
  ActiveRecord::Base.configurations = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
9
10
  ActiveRecord::Base.establish_connection('test')
@@ -1,4 +1,4 @@
1
- require 'helper'
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
2
 
3
3
  class Account < ActiveRecord::Base
4
4
  property_set :settings do
@@ -6,8 +6,7 @@ class Account < ActiveRecord::Base
6
6
  property :bar
7
7
  property :baz
8
8
  property :hep, :default => 'skep'
9
- property :bob
10
- property :bla, :protected => true
9
+ property :pro, :protected => true
11
10
  end
12
11
 
13
12
  property_set :texts do
@@ -33,20 +32,25 @@ class TestPropertySets < ActiveSupport::TestCase
33
32
  end
34
33
 
35
34
  should "support protecting attributes" do
36
- assert @account.settings.bla.protected?
35
+ assert @account.settings.protected?(:pro)
36
+ assert !@account.settings.protected?(:foo)
37
37
  end
38
38
 
39
39
  should "be empty on a new account" do
40
40
  assert @account.settings.empty?
41
41
  assert @account.texts.empty?
42
+
43
+ assert !@account.texts.foo?
44
+ assert !@account.texts.bar?
45
+ assert @account.texts.foo.nil?
46
+ assert @account.texts.bar.nil?
42
47
  end
43
48
 
44
- should "respond to defaults" do
49
+ should "respond with defaults" do
45
50
  assert_equal false, @account.settings.bar?
46
- assert_equal nil, @account.settings.bar.value
51
+ assert_equal nil, @account.settings.bar
47
52
  assert_equal true, @account.settings.hep?
48
- assert_equal 'skep', @account.settings.hep.value
49
- assert @account.settings.hep.id.nil?
53
+ assert_equal 'skep', @account.settings.hep
50
54
  end
51
55
 
52
56
  should "reject settings with an invalid name" do
@@ -64,113 +68,75 @@ class TestPropertySets < ActiveSupport::TestCase
64
68
  end
65
69
 
66
70
  should "validate uniqueness of settings" do
67
- AccountSetting.create!(:account => @account, :name => 'unique')
71
+ @account.settings.create!(:name => "unique")
68
72
  assert_raise ActiveRecord::RecordInvalid do
69
- AccountSetting.create!(:account => @account, :name => 'unique')
73
+ @account.settings.create!(:name => "unique")
70
74
  end
71
75
  end
72
76
 
73
77
  should "be creatable using the = operator" do
74
78
  assert !@account.settings.foo?
75
- assert @account.settings.foo = "1"
76
- assert @account.settings.size == 1
77
- assert @account.texts.size == 0
78
- assert @account.settings.foo?
79
- assert @account.settings.foo = "2"
80
- assert @account.settings.size == 1
81
- assert @account.settings.foo?
82
- end
79
+ [ "1", "2" ].each do |value|
80
+ assert @account.settings.foo = value
81
+ assert @account.settings.foo?
82
+ assert @account.settings.size == 1
83
+ end
83
84
 
84
- should "be creatable through association" do
85
- assert @account.settings.foo.create.id
86
- @account.settings.foo.destroy
87
- @account.reload
88
- assert @account.settings.foo.new_record?
89
- assert @account.settings.foo.create(:value => 8)
90
- assert @account.settings.foo.id
91
- assert @account.settings.foo.value == "8"
92
- assert @account.settings.hep.create
93
- assert_equal @account.settings.hep.value, "skep"
85
+ assert @account.texts.empty?
94
86
  end
95
87
 
96
- should "be destroyable through association" do
97
- assert !@account.settings.foo?
98
- assert @account.settings.foo = "1"
99
- assert @account.settings.foo?
100
- assert @account.settings.foo.destroy
101
- @account.settings.reload
102
- assert !@account.settings.foo?
88
+ should "coerce everything but nil to string" do
89
+ @account.settings.foo = 3
90
+ assert @account.settings.foo == "3"
91
+ @account.settings.foo = nil
92
+ assert @account.settings.foo.nil?
103
93
  end
104
94
 
105
- should "support enable/disable semantics" do
106
- assert !@account.settings.foo?
107
- assert @account.settings.foo.id.nil?
108
- @account.settings.foo.enable
109
- assert @account.settings.foo.id.present?
110
- assert @account.settings.foo?
111
- @account.settings.foo.disable
112
- assert !@account.settings.foo?
113
- end
95
+ context "#set" do
96
+ should "support writing multiple values to the association" do
97
+ assert !@account.settings.foo?
98
+ assert !@account.settings.bar?
114
99
 
115
- should "coerce everything but nil to string" do
116
- assert @account.settings.foo.create(:value => 3)
117
- assert @account.settings.foo.value == "3"
118
- assert @account.settings.foo.create(:value => nil)
119
- assert @account.settings.foo.value.nil?
120
- end
100
+ @account.settings.set(:foo => "123", :bar => "456")
121
101
 
122
- context "bulk updates" do
123
- should "support bulk create/update of multiple properties in one go" do
102
+ assert @account.settings.foo?
103
+ assert @account.settings.bar?
104
+ end
105
+
106
+ should "work identically for new and existing owner objects" do
124
107
  [ @account, Account.new(:name => "Mibble") ].each do |account|
125
- account.settings.bulk(:foo => "123", :bar => "456")
126
- account.save!
127
-
128
- assert_equal account.reload.settings.size, 2
129
- assert_equal account.settings.foo.value, "123"
130
- assert_equal account.settings.foo.name, "foo"
131
- assert_equal account.settings.bar.value, "456"
132
- assert_equal account.settings.bar.name, "bar"
133
-
134
- account.settings.bulk(:bar => "789", :baz => "012")
135
- account.save!
136
-
137
- assert_equal account.reload.settings.size, 3
138
- assert_equal account.settings.foo.value, "123"
139
- assert_equal account.settings.bar.value, "789"
140
- assert_equal account.settings.baz.value, "012"
108
+ account.settings.set(:foo => "123", :bar => "456")
109
+
110
+ assert_equal account.settings.size, 2
111
+ assert_equal account.settings.foo, "123"
112
+ assert_equal account.settings.bar, "456"
113
+
114
+ account.settings.set(:bar => "789", :baz => "012")
115
+
116
+ assert_equal account.settings.size, 3
117
+ assert_equal account.settings.foo, "123"
118
+ assert_equal account.settings.bar, "789"
119
+ assert_equal account.settings.baz, "012"
141
120
  end
142
121
  end
143
122
 
144
123
  should "be updateable as AR nested attributes" do
145
- assert !@account.texts.foo?
146
- assert !@account.texts.bar?
147
- assert !@account.texts.foo.id
148
- assert !@account.texts.bar.id
149
- assert @account.texts.empty?
150
-
151
124
  assert @account.texts_attributes = [{ :name => "foo", :value => "1" }, { :name => "bar", :value => "0" }]
152
125
  @account.save!
153
126
 
154
- assert @account.texts.foo?
155
- assert !@account.texts.bar?
156
- assert @account.texts.foo.id
157
- assert @account.texts.bar.id
127
+ assert @account.texts.foo == "1"
128
+ assert @account.texts.bar == "0"
158
129
 
159
130
  @account.update_attributes!(:texts_attributes => [
160
- { :id => @account.texts.foo.id, :name => "foo", :value => "0" },
161
- { :id => @account.texts.bar.id, :name => "bar", :value => "1" }
131
+ { :id => @account.texts.lookup(:foo).id, :name => "foo", :value => "0" },
132
+ { :id => @account.texts.lookup(:bar).id, :name => "bar", :value => "1" }
162
133
  ])
163
- assert !@account.texts.foo?
164
- assert @account.texts.bar?
134
+
135
+ assert @account.texts.foo == "0"
136
+ assert @account.texts.bar == "1"
165
137
  end
166
138
 
167
139
  should "be updateable as a nested structure" do
168
- assert !@account.settings.foo?
169
- assert !@account.settings.bar?
170
- assert !@account.settings.foo.id
171
- assert !@account.settings.bar.id
172
- assert @account.settings.empty?
173
-
174
140
  attribs = {
175
141
  :name => "Kim",
176
142
  :property_sets => {
@@ -183,15 +149,14 @@ class TestPropertySets < ActiveSupport::TestCase
183
149
 
184
150
  assert @account.settings.foo?
185
151
  assert !@account.settings.bar?
186
- assert @account.settings.foo.id
187
- assert @account.settings.bar.id
188
- assert @account.settings.foo.value == "1"
189
- assert @account.settings.bar.value == "0"
152
+ assert @account.settings.foo == "1"
153
+ assert @account.settings.bar == "0"
154
+ assert !@account.settings.pro?
190
155
 
191
156
  attribs = {
192
157
  :name => "Kim",
193
158
  :property_sets => {
194
- :settings => { :foo => "1", :bar => "1", :baz => "1", :bla => "1" }
159
+ :settings => { :foo => "1", :bar => "1", :baz => "1", :pro => "1" }
195
160
  }
196
161
  }
197
162
 
@@ -200,7 +165,7 @@ class TestPropertySets < ActiveSupport::TestCase
200
165
  assert @account.settings.foo?
201
166
  assert @account.settings.bar?
202
167
  assert @account.settings.baz?
203
- assert !@account.settings.bla?
168
+ assert !@account.settings.pro?
204
169
  end
205
170
  end
206
171
 
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: property_sets
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
+ - 1
8
9
  - 0
9
- - 12
10
- version: 0.0.12
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Morten Primdahl
@@ -15,14 +15,46 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-01-17 00:00:00 -08:00
18
+ date: 2011-01-18 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ prerelease: false
23
+ type: :runtime
24
+ name: activesupport
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ hash: 9
31
+ segments:
32
+ - 2
33
+ - 3
34
+ - 5
35
+ version: 2.3.5
36
+ requirement: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ prerelease: false
39
+ type: :runtime
40
+ name: activerecord
41
+ version_requirements: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ hash: 9
47
+ segments:
48
+ - 2
49
+ - 3
50
+ - 5
51
+ version: 2.3.5
52
+ requirement: *id002
21
53
  - !ruby/object:Gem::Dependency
22
54
  prerelease: false
23
55
  type: :development
24
56
  name: shoulda
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
57
+ version_requirements: &id003 !ruby/object:Gem::Requirement
26
58
  none: false
27
59
  requirements:
28
60
  - - ">="
@@ -31,12 +63,12 @@ dependencies:
31
63
  segments:
32
64
  - 0
33
65
  version: "0"
34
- requirement: *id001
66
+ requirement: *id003
35
67
  - !ruby/object:Gem::Dependency
36
68
  prerelease: false
37
69
  type: :development
38
70
  name: bundler
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
71
+ version_requirements: &id004 !ruby/object:Gem::Requirement
40
72
  none: false
41
73
  requirements:
42
74
  - - ~>
@@ -47,12 +79,12 @@ dependencies:
47
79
  - 0
48
80
  - 0
49
81
  version: 1.0.0
50
- requirement: *id002
82
+ requirement: *id004
51
83
  - !ruby/object:Gem::Dependency
52
84
  prerelease: false
53
85
  type: :development
54
86
  name: jeweler
55
- version_requirements: &id003 !ruby/object:Gem::Requirement
87
+ version_requirements: &id005 !ruby/object:Gem::Requirement
56
88
  none: false
57
89
  requirements:
58
90
  - - ~>
@@ -63,12 +95,12 @@ dependencies:
63
95
  - 5
64
96
  - 1
65
97
  version: 1.5.1
66
- requirement: *id003
98
+ requirement: *id005
67
99
  - !ruby/object:Gem::Dependency
68
100
  prerelease: false
69
101
  type: :development
70
- name: rcov
71
- version_requirements: &id004 !ruby/object:Gem::Requirement
102
+ name: ruby-debug
103
+ version_requirements: &id006 !ruby/object:Gem::Requirement
72
104
  none: false
73
105
  requirements:
74
106
  - - ">="
@@ -77,12 +109,12 @@ dependencies:
77
109
  segments:
78
110
  - 0
79
111
  version: "0"
80
- requirement: *id004
112
+ requirement: *id006
81
113
  - !ruby/object:Gem::Dependency
82
114
  prerelease: false
83
115
  type: :development
84
116
  name: thoughtbot-shoulda
85
- version_requirements: &id005 !ruby/object:Gem::Requirement
117
+ version_requirements: &id007 !ruby/object:Gem::Requirement
86
118
  none: false
87
119
  requirements:
88
120
  - - ">="
@@ -91,7 +123,7 @@ dependencies:
91
123
  segments:
92
124
  - 0
93
125
  version: "0"
94
- requirement: *id005
126
+ requirement: *id007
95
127
  description: This gem is an ActiveRecord extension which provides a convenient interface for managing per row properties
96
128
  email: morten@zendesk.com
97
129
  executables: []
@@ -104,6 +136,7 @@ extra_rdoc_files:
104
136
  files:
105
137
  - .document
106
138
  - Gemfile
139
+ - Gemfile.lock
107
140
  - LICENSE.txt
108
141
  - README.rdoc
109
142
  - Rakefile